add build scripts
This commit is contained in:
parent
c3ee96429c
commit
1d2190d68e
26 changed files with 1327 additions and 6 deletions
|
@ -1 +0,0 @@
|
||||||
Subproject commit ececd00d5fcbc78b83947db8fbab4a4b628ffd13
|
|
|
@ -9,7 +9,7 @@
|
||||||
"nativeAllowList": ["app.*"],
|
"nativeAllowList": ["app.*"],
|
||||||
"modes": {
|
"modes": {
|
||||||
"window": {
|
"window": {
|
||||||
"title": "myapp",
|
"title": "Pucoti",
|
||||||
"width": 800,
|
"width": 800,
|
||||||
"height": 500,
|
"height": 500,
|
||||||
"minWidth": 400,
|
"minWidth": 400,
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"cli": {
|
"cli": {
|
||||||
"binaryName": "myapp",
|
"binaryName": "pucoti",
|
||||||
"resourcesPath": "/www/dist/",
|
"resourcesPath": "/www/dist/",
|
||||||
"extensionsPath": "/extensions/",
|
"extensionsPath": "/extensions/",
|
||||||
"clientLibrary": "/www/public/neutralino.js",
|
"clientLibrary": "/www/public/neutralino.js",
|
||||||
|
@ -29,9 +29,9 @@
|
||||||
"mac": {
|
"mac": {
|
||||||
"architecture": ["x64", "arm64", "universal"],
|
"architecture": ["x64", "arm64", "universal"],
|
||||||
"minimumOS": "10.13.0",
|
"minimumOS": "10.13.0",
|
||||||
"appName": "myapp",
|
"appName": "pucoti",
|
||||||
"appBundleName": "myapp",
|
"appBundleName": "pucoti",
|
||||||
"appIdentifier": "com.marketmix.ext.bun.demo",
|
"appIdentifier": "com.pucoti.app",
|
||||||
"appIcon": "/packaging/pucoti.icns"
|
"appIcon": "/packaging/pucoti.icns"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
2
scripts/.gitattributes
vendored
Normal file
2
scripts/.gitattributes
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
# Auto detect text files and perform LF normalization
|
||||||
|
* text=auto
|
21
scripts/LICENSE
Normal file
21
scripts/LICENSE
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2023 hschneider
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
178
scripts/README.md
Normal file
178
scripts/README.md
Normal file
|
@ -0,0 +1,178 @@
|
||||||
|

|
||||||
|
|
||||||
|
# neutralino-build-scripts
|
||||||
|
|
||||||
|
**Neutralino Build-Automation for macOS, Linux and Windows App-Bundles**.
|
||||||
|
|
||||||
|
This set of scripts replace the `neu build` command for macOS-, Linux and Windows-builds. Instead of plain binaries, it outputs ready-to-use app-bundles.
|
||||||
|
|
||||||
|
> The macOS build-script solves the problem, that Neutralino only produces plain macOS binaries and not macOS AppBundles. These files cannot be signed and notarized.
|
||||||
|
> **build-mac.sh** generates valid AppBundles which pass Apple's notarization process successfully :-
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
Copy all, **except neutralino.config.json** (which is just an example) to your project's root folder. The scripts are tested under macOS and should also run on Linux or Windows/WSL.
|
||||||
|
|
||||||
|
Install **jq**, which is required for parsing JSON files:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# On macOS:
|
||||||
|
brew install jq
|
||||||
|
# On Linux or Windows/WSL:
|
||||||
|
sudo apt-get install jq
|
||||||
|
```
|
||||||
|
|
||||||
|
If your are a Mac-user and never heard of Homebrew, visit https://brew.sh
|
||||||
|
|
||||||
|
Add this to your neutralino.config.json:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"buildScript": {
|
||||||
|
"mac": {
|
||||||
|
"architecture": ["x64", "arm64", "universal"],
|
||||||
|
"minimumOS": "10.13.0",
|
||||||
|
"appName": "ExtBunDemo",
|
||||||
|
"appBundleName": "ExtBunDemo",
|
||||||
|
"appIdentifier": "com.marketmix.ext.bun.demo",
|
||||||
|
"appIcon": "icon.icns"
|
||||||
|
},
|
||||||
|
"win": {
|
||||||
|
"architecture": ["x64"],
|
||||||
|
"appName": "ExtBunDemo",
|
||||||
|
"appIcon": "icon.ico"
|
||||||
|
},
|
||||||
|
"linux": {
|
||||||
|
"architecture": ["x64", "arm64", "armhf"],
|
||||||
|
"appName": "ExtBunDemo",
|
||||||
|
"appIcon": "icon.png",
|
||||||
|
"appPath": "/usr/share/ExtBunDemo",
|
||||||
|
"appIconLocation": "/usr/share/ExtBunDemo/icon.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
If you are unsure where to add, examine **the example neutralino.config.json**, included in this repo.
|
||||||
|
|
||||||
|
## Build for macOS
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./build-mac.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
This starts the following procedure:
|
||||||
|
|
||||||
|
- Erase the target folder ./dist/APPNAME
|
||||||
|
- Run `neu build`
|
||||||
|
- Execute `preproc-mac.sh`
|
||||||
|
- Clone the app-bundle scaffold from `_app_scaffolds/mac` and adapt it to your app.
|
||||||
|
- Copy all resources and extensions to the app-bundle.
|
||||||
|
- Execute `postproc-mac.sh`
|
||||||
|
|
||||||
|
All build targets are created in the ./dist folder.
|
||||||
|
|
||||||
|
Because the macOS-platform consists of 3 binary architectures, you might want to add different resources after the app has been built. That's what `postproc-mac.sh` is for. Just add your custom code there and you are good to go.
|
||||||
|
|
||||||
|
If you need to prepare platform-specific resource before bundling starts, you can add your custom code to `preproc-mac.sh`.
|
||||||
|
|
||||||
|
Keep in mind that alle additional resources have to be copied to `${APP_RESOURCES}/`, which resolves to `MyApp.app/Contents/Resources`. If you place them elsewhere, your signature or notarization might break.
|
||||||
|
|
||||||
|
The `buildScript/mac` JSON segment in the config-file contains the following fields:
|
||||||
|
|
||||||
|
| Key | Description |
|
||||||
|
| ------------- | ------------------------------------------------------------ |
|
||||||
|
| architecture | This is an array of the architectures, you want to build. In our example we build all 3 architectures. |
|
||||||
|
| minimumOS | The minimum macOS version. |
|
||||||
|
| appName | The app-name as displayed in the Finder. |
|
||||||
|
| appBundleName | The macOS app-bundle name. |
|
||||||
|
| appIdentifier | The macOS app-identifier. |
|
||||||
|
| appIcon | Path to the app-icon in **.icns-format**. If only the filename is submitted, the file is expected in the project's root. |
|
||||||
|
|
||||||
|
If you want to streamline your deployment process under macOS, you might also be interested in **[Sign and Notarize Automation](https://github.com/hschneider/macos-sign-notarize)** from commandline.
|
||||||
|
|
||||||
|
## Build for Windows
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./build-win.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
This starts the following procedure:
|
||||||
|
|
||||||
|
- Erase the target folder ./dist/APPNAME
|
||||||
|
- Run `neu build`
|
||||||
|
- Execute `preproc-win.sh`
|
||||||
|
- Copy all resources and extensions to the app-bundle.
|
||||||
|
- Execute `postproc-win.sh`
|
||||||
|
- Create the `install-icon.cmd` helper script from its template in `_app_scaffolds/win/`, if an app icon file exists.
|
||||||
|
|
||||||
|
The build is created in the ./dist folder.
|
||||||
|
|
||||||
|
In contrast to macOS, the whole process is straight-forward. The app-bundle is just a plain folder with the binary, resources.neu, the extensions-folder and WebView2Loader.dll. The DLL can be deleted, if you deploy on WIndows 11 or newer.
|
||||||
|
|
||||||
|
If you need to prepare platform-specific resource before bundling starts, you can add your custom code to `preproc-win.sh`.
|
||||||
|
|
||||||
|
You can also put custom code into `postproc-win.sh` to perform any action after the bundle has been built.
|
||||||
|
|
||||||
|
The `buildScript/win` JSON segment in the config-file contains the following fields:
|
||||||
|
|
||||||
|
| Key | Description |
|
||||||
|
| ------------ | ------------------------------------------------------------ |
|
||||||
|
| architecture | This is an array of the architectures, you want to build. Because Neutralino currently only support 'x64', you should leave this untouched. |
|
||||||
|
| appName | The app-name as displayed in the File Explorer, with or without .exe-suffix. |
|
||||||
|
| appIcon | Path to the app-icon in **.ico-format**. If only the filename is submitted, the file is expected in the project's root. The icon is copied from this path into the app-bundle. To apply the icon to the executable file, you'll have to run **[Resource Hacker](https://www.angusj.com/resourcehacker/)** from a Windows machine. To do so, just double-click **install-icon.cmd** in the app-bundle. |
|
||||||
|
|
||||||
|
The icon installer in action:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Build for Linux
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./build-linux.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
This starts the following procedure:
|
||||||
|
|
||||||
|
- Erase the target folder ./dist/APPNAME
|
||||||
|
- Run `neu build`
|
||||||
|
- Execute `preproc-linux.sh`
|
||||||
|
- Copy all resources and extensions to the app-bundle.
|
||||||
|
- Clones the .desktop-file from `_app_scaffolds/linux` to the app-bundle and adapts its content.
|
||||||
|
- Execute `postproc-linux.sh`
|
||||||
|
|
||||||
|
All build targets are created in the ./dist folder.
|
||||||
|
|
||||||
|
Because the Linux-platform consists of 3 binary architectures, you might want to add different resources after the app has been built. That's what `postproc-linux.sh` is for. Just add your custom code there and you are good to go.
|
||||||
|
|
||||||
|
If you need to prepare platform-specific resource before bundling starts, you can add your custom code to `preproc-linux.sh`.
|
||||||
|
|
||||||
|
> The **APP_NAME.desktop**-file and the **app icon** have to be copied to their proper places, when you deploy your app.
|
||||||
|
|
||||||
|
The following paths are proposed:
|
||||||
|
|
||||||
|
| Resource | Path |
|
||||||
|
| ------------------ | ---------------------------------------- |
|
||||||
|
| Application Folder | /usr/share/APP_NAME |
|
||||||
|
| Application Icon | /usr/share/APP_NAME/icon.png |
|
||||||
|
| Desktop File | /usr/share/applications/APP_NAME.desktop |
|
||||||
|
|
||||||
|
The `buildScript/win` JSON segment in the config-file contains the following fields:
|
||||||
|
|
||||||
|
| Key | Description |
|
||||||
|
| ------------ | ------------------------------------------------------------ |
|
||||||
|
| architecture | This is an array of the architectures, you want to build. In our example we build all 3 architectures. |
|
||||||
|
| appName | The app-name as displayed in the File Explorer. |
|
||||||
|
| appPath | The application path without the executable name and without ending slash. |
|
||||||
|
| appIcon | Path to the app-icon in .**png- or svg-format**. If only the filename is submitted, the file is expected in the project's root. The icon is copied from this path into the app-bundle. |
|
||||||
|
| appIconPath | This is the icon's path **after** the has been installed on a Linux system. That path is written to the .desktop-file. |
|
||||||
|
|
||||||
|
Calling `sudo ./install.sh` from your build folder automatically installs the app to the locations you defined.
|
||||||
|
|
||||||
|
## More about Neutralino
|
||||||
|
|
||||||
|
- [NeutralinoJS Home](https://neutralino.js.org)
|
||||||
|
|
||||||
|
- [Neutralino related blog posts at marketmix.com](https://marketmix.com/de/tag/neutralinojs/)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<img src="https://marketmix.com/git-assets/star-me-2.svg">
|
1
scripts/_VERSION
Normal file
1
scripts/_VERSION
Normal file
|
@ -0,0 +1 @@
|
||||||
|
1.1.4
|
20
scripts/_app_scaffolds/linux/install.sh
Normal file
20
scripts/_app_scaffolds/linux/install.sh
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "Installing ..."
|
||||||
|
cd ..
|
||||||
|
mkdir {APP_PATH}
|
||||||
|
cp -r {APP_NAME} {APP_BASEPATH}
|
||||||
|
|
||||||
|
cd {APP_NAME}
|
||||||
|
chmod +x {APP_EXEC}
|
||||||
|
cp {APP_ICON} {APP_ICON_PATH}
|
||||||
|
cp {APP_NAME}.desktop /usr/share/applications/{APP_NAME}.desktop
|
||||||
|
|
||||||
|
read -p "Delete original files? (y/n): " answer
|
||||||
|
if [[ $answer == "y" ]]; then
|
||||||
|
echo "Deleting ..."
|
||||||
|
cd ..
|
||||||
|
rm -rf {APP_NAME}
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "DONE."
|
9
scripts/_app_scaffolds/linux/myapp.desktop
Normal file
9
scripts/_app_scaffolds/linux/myapp.desktop
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Version=1.0
|
||||||
|
Encoding=UTF-8
|
||||||
|
Name={APP_NAME}
|
||||||
|
Icon={APP_ICON_PATH}
|
||||||
|
Exec={APP_EXEC}
|
||||||
|
Path={APP_PATH}
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
31
scripts/_app_scaffolds/mac/myapp.app/Contents/Info.plist
Normal file
31
scripts/_app_scaffolds/mac/myapp.app/Contents/Info.plist
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSHighResolutionCapable</key>
|
||||||
|
<true/>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>bootstrap</string>
|
||||||
|
<key>CFBundleGetInfoString</key>
|
||||||
|
<string>{APP_NAME}</string>
|
||||||
|
<key>CFBundleIconFile</key>
|
||||||
|
<string>icon.icns</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>{APP_ID}</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>{APP_BUNDLE}</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>{APP_VERSION}</string>
|
||||||
|
<key>CFBundleGetInfoString</key>
|
||||||
|
<string>{APP_NAME} {APP_VERSION}</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>APPL</string>
|
||||||
|
<key>LSMinimumSystemVersion</key>
|
||||||
|
<string>{APP_MIN_OS}</string>
|
||||||
|
<key>NSAppTransportSecurity</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSAllowsArbitraryLoads</key>
|
||||||
|
<true/>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
5
scripts/_app_scaffolds/mac/myapp.app/Contents/MacOS/bootstrap
Executable file
5
scripts/_app_scaffolds/mac/myapp.app/Contents/MacOS/bootstrap
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# Based on code by https://github.com/malipetek - hey you did a brilliant job!
|
||||||
|
MACOS="$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )"
|
||||||
|
CONTENTS="$(dirname "$MACOS")"
|
||||||
|
exec "${MACOS}/main" --path="${CONTENTS}/Resources" --enable-extensions=true
|
Binary file not shown.
BIN
scripts/_app_scaffolds/win/WebView2Loader.dll
Normal file
BIN
scripts/_app_scaffolds/win/WebView2Loader.dll
Normal file
Binary file not shown.
13
scripts/_app_scaffolds/win/install-icon.cmd
Normal file
13
scripts/_app_scaffolds/win/install-icon.cmd
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
@echo off
|
||||||
|
set TOOL="c:\Program Files (x86)\Resource Hacker\ResourceHacker.exe"
|
||||||
|
if exist %TOOL% (
|
||||||
|
%TOOL% -open {APP_NAME} -save {APP_NAME} -action addskip -res {APP_ICON} -mask ICONGROUP,MAINICON,
|
||||||
|
del {APP_ICON}
|
||||||
|
del install-icon.cmd
|
||||||
|
)
|
||||||
|
else (
|
||||||
|
echo "Please install 'Resource Hacker' first."
|
||||||
|
echo "Press any key ..."
|
||||||
|
pause
|
||||||
|
start "" "https://www.angusj.com/resourcehacker/"
|
||||||
|
)
|
195
scripts/build-linux.sh
Executable file
195
scripts/build-linux.sh
Executable file
|
@ -0,0 +1,195 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# build-linux.sh
|
||||||
|
#
|
||||||
|
# Linux build script for NeutralinoJS
|
||||||
|
#
|
||||||
|
# Call:
|
||||||
|
# ./build-linux.sh
|
||||||
|
#
|
||||||
|
# Requirements:
|
||||||
|
# brew install jq
|
||||||
|
#
|
||||||
|
# (c)2023-2024 Harald Schneider - marketmix.com
|
||||||
|
|
||||||
|
VERSION='1.0.8'
|
||||||
|
|
||||||
|
OS=$(uname -s)
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mNeutralino BuildScript for Linux platform, version ${VERSION}\033[0m"
|
||||||
|
|
||||||
|
CONF=./neutralino.config.json
|
||||||
|
|
||||||
|
if [ ! -e "./${CONF}" ]; then
|
||||||
|
echo
|
||||||
|
echo -e "\033[31m\033[1mERROR: ${CONF} not found.\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! jq -e '.buildScript | has("linux")' "${CONF}" > /dev/null; then
|
||||||
|
echo
|
||||||
|
echo -e "\033[31m\033[1mERROR: Missing buildScript JSON structure in ${CONF}\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
APP_ARCH_LIST=($(jq -r '.buildScript.linux.architecture[]' ${CONF}))
|
||||||
|
APP_VERSION=$(jq -r '.version' ${CONF})
|
||||||
|
APP_BINARY=$(jq -r '.cli.binaryName' ${CONF})
|
||||||
|
APP_NAME=$(jq -r '.buildScript.linux.appName' ${CONF})
|
||||||
|
APP_ICON=$(jq -r '.buildScript.linux.appIcon' ${CONF})
|
||||||
|
APP_ICON_PATH=$(jq -r '.buildScript.linux.appIconLocation' ${CONF})
|
||||||
|
|
||||||
|
if jq -e '.buildScript.linux.appPath' "${CONF}" &> /dev/null; then
|
||||||
|
APP_PATH=$(jq -r '.buildScript.linux.appPath' ${CONF})
|
||||||
|
else
|
||||||
|
echo
|
||||||
|
echo -e "\033[31m\033[1mWARNING: Please set appPath in neutralino.config.json!\033[0m"
|
||||||
|
APP_PATH="/usr/share/${APP_NAME}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
APP_BASEPATH=$(echo ${APP_PATH} | awk -v replacement="" -v search="/${APP_NAME}" '{gsub(search, replacement)}1')
|
||||||
|
|
||||||
|
if jq -e '.buildScript.linux.appIconPath' "${CONF}" &> /dev/null; then
|
||||||
|
APP_ICON_PATH=$(jq -r '.buildScript.linux.appIconPath' ${CONF})
|
||||||
|
else
|
||||||
|
echo
|
||||||
|
echo -e "\033[31m\033[1mWARNING: Please set appIconPath in neutralino.config.json!\033[0m"
|
||||||
|
APP_ICON_PATH="/usr/share/${APP_NAME}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
APP_SRC=./_app_scaffolds/linux/myapp.desktop
|
||||||
|
INSTALL_SCRIPT=./_app_scaffolds/linux/install.sh
|
||||||
|
|
||||||
|
if [ ! -e "./${APP_SRC}" ]; then
|
||||||
|
echo
|
||||||
|
echo -e "\033[31m\033[1mERROR: App scaffold not found: ${APP_SRC}\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -e "./${INSTALL_SCRIPT}" ]; then
|
||||||
|
echo
|
||||||
|
echo -e "\033[31m\033[1mERROR: App install script not found: ${INSTALL_SCRIPT}\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$1" != "--test" ]; then
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mBuilding Neutralino Apps ...\033[0m"
|
||||||
|
echo
|
||||||
|
rm -rf "./dist/${APP_BINARY}"
|
||||||
|
neu build
|
||||||
|
echo -e "\033[1mDone.\033[0m"
|
||||||
|
else
|
||||||
|
echo
|
||||||
|
echo "Skipped 'neu build' in test-mode ..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
for APP_ARCH in "${APP_ARCH_LIST[@]}"; do
|
||||||
|
|
||||||
|
APP_DST=./dist/linux_${APP_ARCH}/${APP_NAME}
|
||||||
|
|
||||||
|
if [ -e "./preproc-linux.sh" ]; then
|
||||||
|
echo " Running pre-processor ..."
|
||||||
|
. preproc-linux.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
EXE=./dist/${APP_BINARY}/${APP_BINARY}-linux_${APP_ARCH}
|
||||||
|
RES=./dist/${APP_BINARY}/resources.neu
|
||||||
|
EXT=./dist/${APP_BINARY}/extensions
|
||||||
|
|
||||||
|
APP_EXEC=${APP_PATH}/${APP_BINARY}-linux_${APP_ARCH}
|
||||||
|
chmod +x "${APP_DST}"
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mBuilding App Bundle (${APP_ARCH}):\033[0m"
|
||||||
|
echo
|
||||||
|
echo " App Name: ${APP_NAME}"
|
||||||
|
echo " App Executable: ${APP_EXEC}"
|
||||||
|
echo " Icon: ${APP_ICON}"
|
||||||
|
echo " Icon Install Path: ${APP_ICON_PATH}"
|
||||||
|
echo " App Path: ${APP_PATH}"
|
||||||
|
echo " Target Folder: ${APP_DST}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [ ! -e "./${EXE}" ]; then
|
||||||
|
echo -e "\033[31m\033[1m ERROR: File not found: ${EXE}\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -e "./${RES}" ]; then
|
||||||
|
echo -e "\033[31m\033[1m ERROR: Resource file not found: ${RES}\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " Cloning scaffold ..."
|
||||||
|
mkdir -p "${APP_DST}"
|
||||||
|
cp "${APP_SRC}" "${APP_DST}/${APP_NAME}.desktop"
|
||||||
|
cp "${INSTALL_SCRIPT}" "${APP_DST}"
|
||||||
|
|
||||||
|
echo " Copying content:"
|
||||||
|
echo " - Binary File"
|
||||||
|
cp "${EXE}" "${APP_DST}/"
|
||||||
|
echo " - Resources"
|
||||||
|
cp "${RES}" "${APP_DST}/"
|
||||||
|
|
||||||
|
if [ -e "./${EXT}" ]; then
|
||||||
|
echo " - Extensions"
|
||||||
|
cp -r "${EXT}" "${APP_DST}/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e "./${APP_ICON}" ]; then
|
||||||
|
echo " - Icon"
|
||||||
|
cp -r "${APP_ICON}" "${APP_DST}/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " Processing Desktop File ..."
|
||||||
|
|
||||||
|
if [ "$OS" == "Darwin" ]; then
|
||||||
|
sed -i '' "s/{APP_NAME}/${APP_NAME}/g" "${APP_DST}/${APP_NAME}.desktop"
|
||||||
|
sed -i '' "s|{APP_ICON_LOCATION}|${APP_ICON_PATH}|g" "${APP_DST}/${APP_NAME}.desktop"
|
||||||
|
sed -i '' "s|{APP_ICON_PATH}|${APP_ICON_PATH}|g" "${APP_DST}/${APP_NAME}.desktop"
|
||||||
|
sed -i '' "s|{APP_PATH}|${APP_PATH}|g" "${APP_DST}/${APP_NAME}.desktop"
|
||||||
|
sed -i '' "s|{APP_EXEC}|${APP_EXEC}|g" "${APP_DST}/${APP_NAME}.desktop"
|
||||||
|
|
||||||
|
sed -i '' "s|{APP_NAME}|${APP_NAME}|g" "${APP_DST}/install.sh"
|
||||||
|
sed -i '' "s|{APP_PATH}|${APP_PATH}|g" "${APP_DST}/install.sh"
|
||||||
|
sed -i '' "s|{APP_BASEPATH}|${APP_BASEPATH}|g" "${APP_DST}/install.sh"
|
||||||
|
sed -i '' "s|{APP_EXEC}|${APP_EXEC}|g" "${APP_DST}/install.sh"
|
||||||
|
sed -i '' "s|{APP_ICON}|${APP_ICON}|g" "${APP_DST}/install.sh"
|
||||||
|
sed -i '' "s|{APP_ICON_PATH}|${APP_ICON_PATH}|g" "${APP_DST}/install.sh"
|
||||||
|
else
|
||||||
|
sed -i "s/{APP_NAME}/${APP_NAME}/g" "${APP_DST}/${APP_NAME}.desktop"
|
||||||
|
sed -i "s|{APP_ICON_LOCATION}|${APP_ICON_PATH}|g" "${APP_DST}/${APP_NAME}.desktop"
|
||||||
|
sed -i "s|{APP_ICON_PATH}|${APP_ICON_PATH}|g" "${APP_DST}/${APP_NAME}.desktop"
|
||||||
|
sed -i "s|{APP_PATH}|${APP_PATH}|g" "${APP_DST}/${APP_NAME}.desktop"
|
||||||
|
sed -i "s|{APP_EXEC}|${APP_EXEC}|g" "${APP_DST}/${APP_NAME}.desktop"
|
||||||
|
|
||||||
|
sed -i "s|{APP_NAME}|${APP_NAME}|g" "${APP_DST}/install.sh"
|
||||||
|
sed -i "s|{APP_PATH}|${APP_PATH}|g" "${APP_DST}/install.sh"
|
||||||
|
sed -i "s|{APP_BASEPATH}|${APP_BASEPATH}|g" "${APP_DST}/install.sh"
|
||||||
|
sed -i "s|{APP_EXEC}|${APP_EXEC}|g" "${APP_DST}/install.sh"
|
||||||
|
sed -i "s|{APP_ICON}|${APP_ICON}|g" "${APP_DST}/install.sh"
|
||||||
|
sed -i "s|{APP_ICON_PATH}|${APP_ICON_PATH}|g" "${APP_DST}/install.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e "./postproc-linux.sh" ]; then
|
||||||
|
echo " Running post-processor ..."
|
||||||
|
. postproc-linux.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mBuild finished.\033[0m"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mI propose the following paths for your installer:\033[0m"
|
||||||
|
echo
|
||||||
|
echo " Application Folder: ${APP_PATH}"
|
||||||
|
echo " Application Icon: ${APP_ICON_PATH}"
|
||||||
|
echo " Desktop File: /usr/share/applications/${APP_NAME}.desktop"
|
||||||
|
echo
|
||||||
|
echo "You can call ./install.sh to start a quick installation on the target machine."
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mAll done.\033[0m"
|
154
scripts/build-mac.sh
Executable file
154
scripts/build-mac.sh
Executable file
|
@ -0,0 +1,154 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# build-mac.sh
|
||||||
|
#
|
||||||
|
# macOS build script for NeutralinoJS
|
||||||
|
#
|
||||||
|
# Call:
|
||||||
|
# ./build-mac.sh
|
||||||
|
#
|
||||||
|
# Requirements:
|
||||||
|
# brew install jq
|
||||||
|
#
|
||||||
|
# (c)2023-2024 Harald Schneider - marketmix.com
|
||||||
|
|
||||||
|
VERSION='1.0.7'
|
||||||
|
|
||||||
|
OS=$(uname -s)
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mNeutralino BuildScript for macOS platform, version ${VERSION}\033[0m"
|
||||||
|
|
||||||
|
CONF=./../neutralino.config.json
|
||||||
|
|
||||||
|
if [ ! -e "./${CONF}" ]; then
|
||||||
|
echo
|
||||||
|
echo -e "\033[31m\033[1mERROR: ${CONF} not found.\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! jq -e '.buildScript | has("mac")' "${CONF}" > /dev/null; then
|
||||||
|
echo
|
||||||
|
echo -e "\033[31m\033[1mERROR: Missing buildScript JSON structure in ${CONF}\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
APP_ARCH_LIST=($(jq -r '.buildScript.mac.architecture[]' ${CONF}))
|
||||||
|
APP_VERSION=$(jq -r '.version' ${CONF})
|
||||||
|
APP_MIN_OS=$(jq -r '.buildScript.mac.minimumOS' ${CONF})
|
||||||
|
APP_BINARY=$(jq -r '.cli.binaryName' ${CONF})
|
||||||
|
APP_NAME=$(jq -r '.buildScript.mac.appName' ${CONF})
|
||||||
|
APP_ID=$(jq -r '.buildScript.mac.appIdentifier' ${CONF})
|
||||||
|
APP_BUNDLE=$(jq -r '.buildScript.mac.appBundleName' ${CONF})
|
||||||
|
APP_ICON=$(jq -r '.buildScript.mac.appIcon' ${CONF})
|
||||||
|
|
||||||
|
APP_SRC=./_app_scaffolds/mac/myapp.app
|
||||||
|
|
||||||
|
if [ ! -e "./${APP_SRC}" ]; then
|
||||||
|
echo
|
||||||
|
echo -e "\033[31m\033[1mERROR: App scaffold not found: ${APP_SRC}\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$1" != "--test" ]; then
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mBuilding Neutralino Apps ...\033[0m"
|
||||||
|
echo
|
||||||
|
rm -rf "./dist/${APP_BINARY}"
|
||||||
|
neu build
|
||||||
|
echo -e "\033[1mDone.\033[0m"
|
||||||
|
else
|
||||||
|
echo
|
||||||
|
echo "Skipped 'neu build' in test-mode ..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
for APP_ARCH in "${APP_ARCH_LIST[@]}"; do
|
||||||
|
|
||||||
|
APP_DST=./dist/mac_${APP_ARCH}/${APP_NAME}.app
|
||||||
|
APP_MACOS=${APP_DST}/Contents/MacOS
|
||||||
|
APP_RESOURCES=${APP_DST}/Contents/Resources
|
||||||
|
|
||||||
|
if [ -e "./preproc-mac.sh" ]; then
|
||||||
|
echo " Running pre-processor ..."
|
||||||
|
. preproc-mac.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
EXE=./dist/${APP_BINARY}/${APP_BINARY}-mac_${APP_ARCH}
|
||||||
|
RES=./dist/${APP_BINARY}/resources.neu
|
||||||
|
EXT=./dist/${APP_BINARY}/extensions
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mBuilding App Bundle (${APP_ARCH}):\033[0m"
|
||||||
|
echo
|
||||||
|
echo " Minimum macOS: ${APP_MIN_OS}"
|
||||||
|
echo " App Name: ${APP_NAME}"
|
||||||
|
echo " Bundle Name: ${APP_BUNDLE}"
|
||||||
|
echo " Identifier: ${APP_ID}"
|
||||||
|
echo " Icon: ${APP_ICON}"
|
||||||
|
echo " Source Folder: ${APP_SRC}"
|
||||||
|
echo " Target Folder: ${APP_DST}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [ ! -e "./${EXE}" ]; then
|
||||||
|
echo -e "\033[31m\033[1m ERROR: File not found: ${EXE}\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -e "./${RES}" ]; then
|
||||||
|
echo -e "\033[31m\033[1m ERROR: Resource file not found: ${RES}\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " Cloning scaffold ..."
|
||||||
|
mkdir -p "${APP_DST}"
|
||||||
|
cp -r ${APP_SRC}/* ${APP_DST}/
|
||||||
|
|
||||||
|
echo " Copying content:"
|
||||||
|
echo " - Binary File"
|
||||||
|
cp "${EXE}" "${APP_MACOS}/main"
|
||||||
|
chmod 755 "${APP_MACOS}/main"
|
||||||
|
echo " - Resources"
|
||||||
|
cp "${RES}" "${APP_RESOURCES}/"
|
||||||
|
|
||||||
|
if [ -e "./${EXT}" ]; then
|
||||||
|
echo " - Extensions"
|
||||||
|
cp -r "${EXT}" "${APP_RESOURCES}/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e "./${APP_ICON}" ]; then
|
||||||
|
echo " - Icon"
|
||||||
|
cp -r "${APP_ICON}" "${APP_RESOURCES}/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " Processing Info.plist ..."
|
||||||
|
|
||||||
|
if [ "$OS" == "Darwin" ]; then
|
||||||
|
sed -i '' "s/{APP_NAME}/${APP_NAME}/g" "${APP_DST}/Contents/Info.plist"
|
||||||
|
sed -i '' "s/{APP_BUNDLE}/${APP_BUNDLE}/g" "${APP_DST}/Contents/Info.plist"
|
||||||
|
sed -i '' "s/{APP_ID}/${APP_ID}/g" "${APP_DST}/Contents/Info.plist"
|
||||||
|
sed -i '' "s/{APP_VERSION}/${APP_VERSION}/g" "${APP_DST}/Contents/Info.plist"
|
||||||
|
sed -i '' "s/{APP_MIN_OS}/${APP_MIN_OS}/g" "${APP_DST}/Contents/Info.plist"
|
||||||
|
else
|
||||||
|
sed -i "s/{APP_NAME}/${APP_NAME}/g" "${APP_DST}/Contents/Info.plist"
|
||||||
|
sed -i "s/{APP_BUNDLE}/${APP_BUNDLE}/g" "${APP_DST}/Contents/Info.plist"
|
||||||
|
sed -i "s/{APP_ID}/${APP_ID}/g" "${APP_DST}/Contents/Info.plist"
|
||||||
|
sed -i "s/{APP_VERSION}/${APP_VERSION}/g" "${APP_DST}/Contents/Info.plist"
|
||||||
|
sed -i "s/{APP_MIN_OS}/${APP_MIN_OS}/g" "${APP_DST}/Contents/Info.plist"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e "./postproc-mac.sh" ]; then
|
||||||
|
echo " Running post-processor ..."
|
||||||
|
. postproc-mac.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$OS" == "Darwin" ]; then
|
||||||
|
echo " Clearing Extended Attributes ..."
|
||||||
|
find "${APP_DST}" -type f -exec xattr -c {} \;
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mBuild finished, ready to sign and notarize.\033[0m"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mAll done.\033[0m"
|
140
scripts/build-win.sh
Executable file
140
scripts/build-win.sh
Executable file
|
@ -0,0 +1,140 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# build-win.sh
|
||||||
|
#
|
||||||
|
# Windows build script for NeutralinoJS
|
||||||
|
#
|
||||||
|
# Call:
|
||||||
|
# ./build-win.sh
|
||||||
|
#
|
||||||
|
# Requirements:
|
||||||
|
# brew install jq
|
||||||
|
#
|
||||||
|
# (c)2023-2024 Harald Schneider - marketmix.com
|
||||||
|
|
||||||
|
VERSION='1.1.0'
|
||||||
|
|
||||||
|
OS=$(uname -s)
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mNeutralino BuildScript for Windows platform, version ${VERSION}\033[0m"
|
||||||
|
|
||||||
|
CONF=./neutralino.config.json
|
||||||
|
|
||||||
|
if [ ! -e "./${CONF}" ]; then
|
||||||
|
echo
|
||||||
|
echo -e "\033[31m\033[1mERROR: ${CONF} not found.\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! jq -e '.buildScript | has("win")' "${CONF}" > /dev/null; then
|
||||||
|
echo
|
||||||
|
echo -e "\033[31m\033[1mERROR: Missing buildScript JSON structure in ${CONF}\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
APP_ARCH_LIST=($(jq -r '.buildScript.win.architecture[]' ${CONF}))
|
||||||
|
APP_BINARY=$(jq -r '.cli.binaryName' ${CONF})
|
||||||
|
APP_NAME=$(jq -r '.buildScript.win.appName' ${CONF})
|
||||||
|
APP_ICON=$(jq -r '.buildScript.win.appIcon' ${CONF})
|
||||||
|
|
||||||
|
if [[ $APP_NAME != *".exe"* ]]; then
|
||||||
|
APP_NAME=${APP_NAME}.exe
|
||||||
|
fi
|
||||||
|
|
||||||
|
APP_SRC=./_app_scaffolds/win
|
||||||
|
|
||||||
|
if [ "$1" != "--test" ]; then
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mBuilding Neutralino Apps ...\033[0m"
|
||||||
|
echo
|
||||||
|
rm -rf "./dist/${APP_BINARY}"
|
||||||
|
neu build
|
||||||
|
echo -e "\033[1mDone.\033[0m"
|
||||||
|
else
|
||||||
|
echo
|
||||||
|
echo "Skipped 'neu build' in test-mode ..."
|
||||||
|
fi
|
||||||
|
|
||||||
|
for APP_ARCH in "${APP_ARCH_LIST[@]}"; do
|
||||||
|
|
||||||
|
APP_DST=./dist/win_${APP_ARCH}
|
||||||
|
|
||||||
|
if [ -e "./preproc-win.sh" ]; then
|
||||||
|
echo " Running pre-processor ..."
|
||||||
|
. preproc-win.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
EXE=./dist/${APP_BINARY}/${APP_BINARY}-win_${APP_ARCH}.exe
|
||||||
|
RES=./dist/${APP_BINARY}/resources.neu
|
||||||
|
EXT=./dist/${APP_BINARY}/extensions
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mBuilding App Bundle (${APP_ARCH}):\033[0m"
|
||||||
|
echo
|
||||||
|
echo " App Name: ${APP_NAME}"
|
||||||
|
echo " Target Folder: ${APP_DST}"
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [ ! -e "./${EXE}" ]; then
|
||||||
|
echo -e "\033[31m\033[1m ERROR: Binary file not found: ${EXE}\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -e "./${RES}" ]; then
|
||||||
|
echo -e "\033[31m\033[1m ERROR: Resource file not found: ${RES}\033[0m"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " Creating target folder ..."
|
||||||
|
mkdir -p "${APP_DST}"
|
||||||
|
|
||||||
|
if [ -e "./${APP_ICON}" ]; then
|
||||||
|
|
||||||
|
echo " Cloning scaffold ..."
|
||||||
|
|
||||||
|
set +f
|
||||||
|
cp ${APP_SRC}/* "${APP_DST}/"
|
||||||
|
set -f
|
||||||
|
|
||||||
|
if [ "$OS" == "Darwin" ]; then
|
||||||
|
sed -i '' "s/{APP_NAME}/${APP_NAME}/g" "${APP_DST}/install-icon.cmd"
|
||||||
|
sed -i '' "s/{APP_ICON}/${APP_ICON}/g" "${APP_DST}/install-icon.cmd"
|
||||||
|
else
|
||||||
|
sed -i "s/{APP_NAME}/${APP_NAME}/g" "${APP_DST}/install-icon.cmd"
|
||||||
|
sed -i "s/{APP_ICON}/${APP_ICON}/g" "${APP_DST}/install-icon.cmd"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo " Copying content:"
|
||||||
|
echo " - Binary File"
|
||||||
|
cp "${EXE}" "${APP_DST}/${APP_NAME}"
|
||||||
|
echo " - Resources"
|
||||||
|
cp "${RES}" "${APP_DST}/"
|
||||||
|
|
||||||
|
if [ -e "./${EXT}" ]; then
|
||||||
|
echo " - Extensions"
|
||||||
|
cp -r "${EXT}" "${APP_DST}/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e "./${APP_ICON}" ]; then
|
||||||
|
echo " - Icon"
|
||||||
|
cp -r "${APP_ICON}" "${APP_DST}/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e "./postproc-win.sh" ]; then
|
||||||
|
echo " Running post-processor ..."
|
||||||
|
. postproc-win.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mBuild finished.\033[0m"
|
||||||
|
|
||||||
|
if [ -e "./${APP_ICON}" ]; then
|
||||||
|
echo
|
||||||
|
echo -e "\033[32m\033[1mDouble-click install-icon.cmd on a Windows machine to apply the app icon.\033[0m"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo
|
||||||
|
echo -e "\033[1mAll done.\033[0m"
|
BIN
scripts/icon.ico
Normal file
BIN
scripts/icon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 56 KiB |
BIN
scripts/icon.png
Normal file
BIN
scripts/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
70
scripts/neutralino.config.json
Normal file
70
scripts/neutralino.config.json
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
{
|
||||||
|
"$schema": "https://raw.githubusercontent.com/neutralinojs/neutralinojs/main/schemas/neutralino.config.schema.json",
|
||||||
|
"applicationId": "js.neutralino.zero",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"defaultMode": "window",
|
||||||
|
"port": 0,
|
||||||
|
"documentRoot": "/www/dist/",
|
||||||
|
"url": "/",
|
||||||
|
"enableServer": true,
|
||||||
|
"enableNativeAPI": true,
|
||||||
|
"enableExtensions": false,
|
||||||
|
"exportAuthInfo": true,
|
||||||
|
"tokenSecurity": "one-time",
|
||||||
|
"nativeAllowList": ["app.*"],
|
||||||
|
"logging": {
|
||||||
|
"enabled": false,
|
||||||
|
"writeToLogFile": false
|
||||||
|
},
|
||||||
|
"globalVariables": {},
|
||||||
|
"modes": {
|
||||||
|
"window": {
|
||||||
|
"title": "myapp",
|
||||||
|
"width": 800,
|
||||||
|
"height": 500,
|
||||||
|
"minWidth": 400,
|
||||||
|
"minHeight": 200,
|
||||||
|
"fullScreen": false,
|
||||||
|
"alwaysOnTop": false,
|
||||||
|
"icon": "/www/dist/favicon.ico",
|
||||||
|
"enableInspector": true,
|
||||||
|
"borderless": false,
|
||||||
|
"maximize": false,
|
||||||
|
"hidden": false,
|
||||||
|
"center": true,
|
||||||
|
"useSavedState": false,
|
||||||
|
"resizable": true,
|
||||||
|
"exitProcessOnClose": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cli": {
|
||||||
|
"binaryName": "myapp",
|
||||||
|
"resourcesPath": "/www/dist/",
|
||||||
|
"extensionsPath": "/extensions/",
|
||||||
|
"clientLibrary": "/www/public/neutralino.js",
|
||||||
|
"binaryVersion": "6.1.0",
|
||||||
|
"clientVersion": "6.1.0"
|
||||||
|
},
|
||||||
|
"buildScript": {
|
||||||
|
"mac": {
|
||||||
|
"architecture": ["x64", "arm64", "universal"],
|
||||||
|
"minimumOS": "10.13.0",
|
||||||
|
"appName": "myapp",
|
||||||
|
"appBundleName": "myapp",
|
||||||
|
"appIdentifier": "com.marketmix.ext.bun.demo",
|
||||||
|
"appIcon": "../packaging/pucoti.icns"
|
||||||
|
},
|
||||||
|
"win": {
|
||||||
|
"architecture": ["x64"],
|
||||||
|
"appName": "myapp",
|
||||||
|
"appIcon": "icon.ico"
|
||||||
|
},
|
||||||
|
"linux": {
|
||||||
|
"architecture": ["x64", "arm64", "armhf"],
|
||||||
|
"appName": "myapp",
|
||||||
|
"appIcon": "icon.png",
|
||||||
|
"appPath": "/usr/share/myapp",
|
||||||
|
"appIconPath": "/usr/share/myapp/icon.png"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
29
scripts/postproc-linux.sh
Executable file
29
scripts/postproc-linux.sh
Executable file
|
@ -0,0 +1,29 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# postproc-linux.sh 1.0.1
|
||||||
|
#
|
||||||
|
# Linux build script post-processor.
|
||||||
|
#
|
||||||
|
# This is called from build-win.sh after the app-bundle has been built.
|
||||||
|
# Use this e.g. to copy additional resources to the app-bundle.
|
||||||
|
# You can use all variables from the main script here.
|
||||||
|
#
|
||||||
|
# (c)2023 Harald Schneider - marketmix.com
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "x64" ]; then
|
||||||
|
:
|
||||||
|
# Handle Intel releases here
|
||||||
|
# cp SOME_FILE "${APP_DST}/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "arm64" ]; then
|
||||||
|
:
|
||||||
|
# Handle ARM releases here
|
||||||
|
# cp SOME_FILE "${APP_DST}/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "armhf" ]; then
|
||||||
|
:
|
||||||
|
# Handle ARM hard_float releases here.
|
||||||
|
# cp SOME_FILE "${APP_DST}/"
|
||||||
|
fi
|
29
scripts/postproc-mac.sh
Executable file
29
scripts/postproc-mac.sh
Executable file
|
@ -0,0 +1,29 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# postproc-mac.sh 1.0.0
|
||||||
|
#
|
||||||
|
# macOS build script post-processor.
|
||||||
|
#
|
||||||
|
# This is called from build-mac.sh after each app-bundle has been built.
|
||||||
|
# Use this e.g. to copy additional resources to the app-bundle.
|
||||||
|
# You can use all variables from the main script here.
|
||||||
|
#
|
||||||
|
# (c)2023 Harald Schneider - marketmix.com
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "x64" ]; then
|
||||||
|
:
|
||||||
|
# Handle Intel releases here
|
||||||
|
# cp SOME_FILE "${APP_RESOURCES}/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "arm64" ]; then
|
||||||
|
:
|
||||||
|
# Handle Apple Silicon releases here
|
||||||
|
# cp SOME_FILE "${APP_RESOURCES}/"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "universal" ]; then
|
||||||
|
:
|
||||||
|
# Handle Universal releases here.
|
||||||
|
# cp SOME_FILE "${APP_RESOURCES}/"
|
||||||
|
fi
|
17
scripts/postproc-win.sh
Executable file
17
scripts/postproc-win.sh
Executable file
|
@ -0,0 +1,17 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# postproc-win.sh 1.0.1
|
||||||
|
#
|
||||||
|
# Windows build script post-processor.
|
||||||
|
#
|
||||||
|
# This is called from build-win.sh after the app-bundle has been built.
|
||||||
|
# Use this e.g. to copy additional resources to the app-bundle.
|
||||||
|
# You can use all variables from the main script here.
|
||||||
|
#
|
||||||
|
# (c)2023 Harald Schneider - marketmix.com
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "x64" ]; then
|
||||||
|
:
|
||||||
|
# Handle Intel releases here
|
||||||
|
# cp SOME_FILE "${APP_DST}/"
|
||||||
|
fi
|
25
scripts/preproc-linux.sh
Executable file
25
scripts/preproc-linux.sh
Executable file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# preproc-linux.sh 1.0.1
|
||||||
|
#
|
||||||
|
# Linux build script pre-processor.
|
||||||
|
#
|
||||||
|
# This is called from build-win.sh before the app-bundle has been built.
|
||||||
|
# Use this e.g. to preoare platform specific resources.
|
||||||
|
#
|
||||||
|
# (c)2024 Harald Schneider - marketmix.com
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "x64" ]; then
|
||||||
|
:
|
||||||
|
# Handle Intel releases here
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "arm64" ]; then
|
||||||
|
:
|
||||||
|
# Handle ARM releases here
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "armhf" ]; then
|
||||||
|
:
|
||||||
|
# Handle ARM hard_float releases here.
|
||||||
|
fi
|
25
scripts/preproc-mac.sh
Executable file
25
scripts/preproc-mac.sh
Executable file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# preproc-mac.sh 1.0.0
|
||||||
|
#
|
||||||
|
# macOS build script pre-processor.
|
||||||
|
#
|
||||||
|
# This is called from build-win.sh before the app-bundle has been built.
|
||||||
|
# Use this e.g. to preoare platform specific resources.
|
||||||
|
#
|
||||||
|
# (c)2024 Harald Schneider - marketmix.com
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "x64" ]; then
|
||||||
|
:
|
||||||
|
# Handle Intel releases here
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "arm64" ]; then
|
||||||
|
:
|
||||||
|
# Handle Apple Silicon releases here
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "universal" ]; then
|
||||||
|
:
|
||||||
|
# Handle Universal releases here.
|
||||||
|
fi
|
15
scripts/preproc-win.sh
Executable file
15
scripts/preproc-win.sh
Executable file
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# preproc-win.sh 1.0.0
|
||||||
|
#
|
||||||
|
# Windows build script pre-processor.
|
||||||
|
#
|
||||||
|
# This is called from build-win.sh before the app-bundle has been built.
|
||||||
|
# Use this e.g. to preoare platform specific resources.
|
||||||
|
#
|
||||||
|
# (c)2024 Harald Schneider - marketmix.com
|
||||||
|
|
||||||
|
if [ $APP_ARCH = "x64" ]; then
|
||||||
|
:
|
||||||
|
# Handle Intel releases here
|
||||||
|
fi
|
343
scripts/resources/js/neutralino.d.ts
vendored
Normal file
343
scripts/resources/js/neutralino.d.ts
vendored
Normal file
|
@ -0,0 +1,343 @@
|
||||||
|
// Type definitions for Neutralino 5.0.1
|
||||||
|
// Project: https://github.com/neutralinojs
|
||||||
|
// Definitions project: https://github.com/neutralinojs/neutralino.js
|
||||||
|
|
||||||
|
declare namespace Neutralino {
|
||||||
|
|
||||||
|
namespace filesystem {
|
||||||
|
interface DirectoryEntry {
|
||||||
|
entry: string;
|
||||||
|
path: string;
|
||||||
|
type: string;
|
||||||
|
}
|
||||||
|
interface FileReaderOptions {
|
||||||
|
pos: number;
|
||||||
|
size: number;
|
||||||
|
}
|
||||||
|
interface DirectoryReaderOptions {
|
||||||
|
recursive: boolean;
|
||||||
|
}
|
||||||
|
interface OpenedFile {
|
||||||
|
id: number;
|
||||||
|
eof: boolean;
|
||||||
|
pos: number;
|
||||||
|
lastRead: number;
|
||||||
|
}
|
||||||
|
interface Stats {
|
||||||
|
size: number;
|
||||||
|
isFile: boolean;
|
||||||
|
isDirectory: boolean;
|
||||||
|
createdAt: number;
|
||||||
|
modifiedAt: number;
|
||||||
|
}
|
||||||
|
interface Watcher {
|
||||||
|
id: number;
|
||||||
|
path: string;
|
||||||
|
}
|
||||||
|
function createDirectory(path: string): Promise<void>;
|
||||||
|
function remove(path: string): Promise<void>;
|
||||||
|
function writeFile(path: string, data: string): Promise<void>;
|
||||||
|
function appendFile(path: string, data: string): Promise<void>;
|
||||||
|
function writeBinaryFile(path: string, data: ArrayBuffer): Promise<void>;
|
||||||
|
function appendBinaryFile(path: string, data: ArrayBuffer): Promise<void>;
|
||||||
|
function readFile(path: string, options?: FileReaderOptions): Promise<string>;
|
||||||
|
function readBinaryFile(path: string, options?: FileReaderOptions): Promise<ArrayBuffer>;
|
||||||
|
function openFile(path: string): Promise<number>;
|
||||||
|
function createWatcher(path: string): Promise<number>;
|
||||||
|
function removeWatcher(id: number): Promise<number>;
|
||||||
|
function getWatchers(): Promise<Watcher[]>;
|
||||||
|
function updateOpenedFile(id: number, event: string, data?: any): Promise<void>;
|
||||||
|
function getOpenedFileInfo(id: number): Promise<OpenedFile>;
|
||||||
|
function readDirectory(path: string, options?: DirectoryReaderOptions): Promise<DirectoryEntry[]>;
|
||||||
|
function copy(source: string, destination: string): Promise<void>;
|
||||||
|
function move(source: string, destination: string): Promise<void>;
|
||||||
|
function getStats(path: string): Promise<Stats>;
|
||||||
|
}
|
||||||
|
namespace os {
|
||||||
|
interface ExecCommandOptions {
|
||||||
|
stdIn?: string;
|
||||||
|
background?: boolean;
|
||||||
|
cwd?: string;
|
||||||
|
}
|
||||||
|
interface ExecCommandResult {
|
||||||
|
pid: number;
|
||||||
|
stdOut: string;
|
||||||
|
stdErr: string;
|
||||||
|
exitCode: number;
|
||||||
|
}
|
||||||
|
interface SpawnedProcess {
|
||||||
|
id: number;
|
||||||
|
pid: number;
|
||||||
|
}
|
||||||
|
interface Envs {
|
||||||
|
[key: string]: string;
|
||||||
|
}
|
||||||
|
interface OpenDialogOptions {
|
||||||
|
multiSelections?: boolean;
|
||||||
|
filters?: Filter[];
|
||||||
|
defaultPath?: string;
|
||||||
|
}
|
||||||
|
interface FolderDialogOptions {
|
||||||
|
defaultPath?: string;
|
||||||
|
}
|
||||||
|
interface SaveDialogOptions {
|
||||||
|
forceOverwrite?: boolean;
|
||||||
|
filters?: Filter[];
|
||||||
|
defaultPath?: string;
|
||||||
|
}
|
||||||
|
interface Filter {
|
||||||
|
name: string;
|
||||||
|
extensions: string[];
|
||||||
|
}
|
||||||
|
interface TrayOptions {
|
||||||
|
icon: string;
|
||||||
|
menuItems: TrayMenuItem[];
|
||||||
|
}
|
||||||
|
interface TrayMenuItem {
|
||||||
|
id?: string;
|
||||||
|
text: string;
|
||||||
|
isDisabled?: boolean;
|
||||||
|
isChecked?: boolean;
|
||||||
|
}
|
||||||
|
enum Icon {
|
||||||
|
WARNING = "WARNING",
|
||||||
|
ERROR = "ERROR",
|
||||||
|
INFO = "INFO",
|
||||||
|
QUESTION = "QUESTION"
|
||||||
|
}
|
||||||
|
enum MessageBoxChoice {
|
||||||
|
OK = "OK",
|
||||||
|
OK_CANCEL = "OK_CANCEL",
|
||||||
|
YES_NO = "YES_NO",
|
||||||
|
YES_NO_CANCEL = "YES_NO_CANCEL",
|
||||||
|
RETRY_CANCEL = "RETRY_CANCEL",
|
||||||
|
ABORT_RETRY_IGNORE = "ABORT_RETRY_IGNORE"
|
||||||
|
}
|
||||||
|
type KnownPath = "config" | "data" | "cache" | "documents" | "pictures" | "music" | "video" | "downloads" | "savedGames1" | "savedGames2";
|
||||||
|
function execCommand(command: string, options?: ExecCommandOptions): Promise<ExecCommandResult>;
|
||||||
|
function spawnProcess(command: string, cwd?: string): Promise<SpawnedProcess>;
|
||||||
|
function updateSpawnedProcess(id: number, event: string, data?: any): Promise<void>;
|
||||||
|
function getSpawnedProcesses(): Promise<SpawnedProcess[]>;
|
||||||
|
function getEnv(key: string): Promise<string>;
|
||||||
|
function getEnvs(): Promise<Envs>;
|
||||||
|
function showOpenDialog(title?: string, options?: OpenDialogOptions): Promise<string[]>;
|
||||||
|
function showFolderDialog(title?: string, options?: FolderDialogOptions): Promise<string>;
|
||||||
|
function showSaveDialog(title?: string, options?: SaveDialogOptions): Promise<string>;
|
||||||
|
function showNotification(title: string, content: string, icon?: Icon): Promise<void>;
|
||||||
|
function showMessageBox(title: string, content: string, choice?: MessageBoxChoice, icon?: Icon): Promise<string>;
|
||||||
|
function setTray(options: TrayOptions): Promise<void>;
|
||||||
|
function open(url: string): Promise<void>;
|
||||||
|
function getPath(name: KnownPath): Promise<string>;
|
||||||
|
}
|
||||||
|
namespace computer {
|
||||||
|
interface MemoryInfo {
|
||||||
|
total: number;
|
||||||
|
available: number;
|
||||||
|
}
|
||||||
|
interface KernelInfo {
|
||||||
|
variant: string;
|
||||||
|
version: string;
|
||||||
|
}
|
||||||
|
interface OSInfo {
|
||||||
|
name: string;
|
||||||
|
description: string;
|
||||||
|
version: string;
|
||||||
|
}
|
||||||
|
interface CPUInfo {
|
||||||
|
vendor: string;
|
||||||
|
model: string;
|
||||||
|
frequency: number;
|
||||||
|
architecture: string;
|
||||||
|
logicalThreads: number;
|
||||||
|
physicalCores: number;
|
||||||
|
physicalUnits: number;
|
||||||
|
}
|
||||||
|
interface Display {
|
||||||
|
id: number;
|
||||||
|
resolution: Resolution;
|
||||||
|
dpi: number;
|
||||||
|
bpp: number;
|
||||||
|
refreshRate: number;
|
||||||
|
}
|
||||||
|
interface Resolution {
|
||||||
|
width: number;
|
||||||
|
height: number;
|
||||||
|
}
|
||||||
|
interface MousePosition {
|
||||||
|
x: number;
|
||||||
|
y: number;
|
||||||
|
}
|
||||||
|
function getMemoryInfo(): Promise<MemoryInfo>;
|
||||||
|
function getArch(): Promise<string>;
|
||||||
|
function getKernelInfo(): Promise<KernelInfo>;
|
||||||
|
function getOSInfo(): Promise<OSInfo>;
|
||||||
|
function getCPUInfo(): Promise<CPUInfo>;
|
||||||
|
function getDisplays(): Promise<Display[]>;
|
||||||
|
function getMousePosition(): Promise<MousePosition>;
|
||||||
|
}
|
||||||
|
namespace storage {
|
||||||
|
function setData(key: string, data: string): Promise<void>;
|
||||||
|
function getData(key: string): Promise<string>;
|
||||||
|
function getKeys(): Promise<string[]>;
|
||||||
|
}
|
||||||
|
namespace debug {
|
||||||
|
enum LoggerType {
|
||||||
|
WARNING = "WARNING",
|
||||||
|
ERROR = "ERROR",
|
||||||
|
INFO = "INFO"
|
||||||
|
}
|
||||||
|
function log(message: string, type?: LoggerType): Promise<void>;
|
||||||
|
}
|
||||||
|
namespace app {
|
||||||
|
interface OpenActionOptions {
|
||||||
|
url: string;
|
||||||
|
}
|
||||||
|
interface RestartOptions {
|
||||||
|
args: string;
|
||||||
|
}
|
||||||
|
function exit(code?: number): Promise<void>;
|
||||||
|
function killProcess(): Promise<void>;
|
||||||
|
function restartProcess(options?: RestartOptions): Promise<void>;
|
||||||
|
function getConfig(): Promise<any>;
|
||||||
|
function broadcast(event: string, data?: any): Promise<void>;
|
||||||
|
function readProcessInput(readAll?: boolean): Promise<string>;
|
||||||
|
function writeProcessOutput(data: string): Promise<void>;
|
||||||
|
function writeProcessError(data: string): Promise<void>;
|
||||||
|
}
|
||||||
|
namespace window {
|
||||||
|
interface WindowOptions extends WindowSizeOptions, WindowPosOptions {
|
||||||
|
title?: string;
|
||||||
|
icon?: string;
|
||||||
|
fullScreen?: boolean;
|
||||||
|
alwaysOnTop?: boolean;
|
||||||
|
enableInspector?: boolean;
|
||||||
|
borderless?: boolean;
|
||||||
|
maximize?: boolean;
|
||||||
|
hidden?: boolean;
|
||||||
|
maximizable?: boolean;
|
||||||
|
useSavedState?: boolean;
|
||||||
|
exitProcessOnClose?: boolean;
|
||||||
|
extendUserAgentWith?: string;
|
||||||
|
processArgs?: string;
|
||||||
|
}
|
||||||
|
interface WindowSizeOptions {
|
||||||
|
width?: number;
|
||||||
|
height?: number;
|
||||||
|
minWidth?: number;
|
||||||
|
minHeight?: number;
|
||||||
|
maxWidth?: number;
|
||||||
|
maxHeight?: number;
|
||||||
|
resizable?: boolean;
|
||||||
|
}
|
||||||
|
interface WindowPosOptions {
|
||||||
|
x: number;
|
||||||
|
y: number;
|
||||||
|
}
|
||||||
|
function setTitle(title: string): Promise<void>;
|
||||||
|
function getTitle(): Promise<string>;
|
||||||
|
function maximize(): Promise<void>;
|
||||||
|
function unmaximize(): Promise<void>;
|
||||||
|
function isMaximized(): Promise<boolean>;
|
||||||
|
function minimize(): Promise<void>;
|
||||||
|
function setFullScreen(): Promise<void>;
|
||||||
|
function exitFullScreen(): Promise<void>;
|
||||||
|
function isFullScreen(): Promise<boolean>;
|
||||||
|
function show(): Promise<void>;
|
||||||
|
function hide(): Promise<void>;
|
||||||
|
function isVisible(): Promise<boolean>;
|
||||||
|
function focus(): Promise<void>;
|
||||||
|
function setIcon(icon: string): Promise<void>;
|
||||||
|
function move(x: number, y: number): Promise<void>;
|
||||||
|
function center(): Promise<void>;
|
||||||
|
function setDraggableRegion(domElementOrId: string | HTMLElement): Promise<void>;
|
||||||
|
function unsetDraggableRegion(domElementOrId: string | HTMLElement): Promise<void>;
|
||||||
|
function setSize(options: WindowSizeOptions): Promise<void>;
|
||||||
|
function getSize(): Promise<WindowSizeOptions>;
|
||||||
|
function getPosition(): Promise<WindowPosOptions>;
|
||||||
|
function setAlwaysOnTop(onTop: boolean): Promise<void>;
|
||||||
|
function create(url: string, options?: WindowOptions): Promise<void>;
|
||||||
|
}
|
||||||
|
namespace events {
|
||||||
|
interface Response {
|
||||||
|
success: boolean;
|
||||||
|
message: string;
|
||||||
|
}
|
||||||
|
type Builtin = "ready" | "trayMenuItemClicked" | "windowClose" | "serverOffline" | "clientConnect" | "clientDisconnect" | "appClientConnect" | "appClientDisconnect" | "extClientConnect" | "extClientDisconnect" | "extensionReady" | "neuDev_reloadApp";
|
||||||
|
function on(event: string, handler: (ev: CustomEvent) => void): Promise<Response>;
|
||||||
|
function off(event: string, handler: (ev: CustomEvent) => void): Promise<Response>;
|
||||||
|
function dispatch(event: string, data?: any): Promise<Response>;
|
||||||
|
function broadcast(event: string, data?: any): Promise<void>;
|
||||||
|
}
|
||||||
|
namespace extensions {
|
||||||
|
interface ExtensionStats {
|
||||||
|
loaded: string[];
|
||||||
|
connected: string[];
|
||||||
|
}
|
||||||
|
function dispatch(extensionId: string, event: string, data?: any): Promise<void>;
|
||||||
|
function broadcast(event: string, data?: any): Promise<void>;
|
||||||
|
function getStats(): Promise<ExtensionStats>;
|
||||||
|
}
|
||||||
|
namespace updater {
|
||||||
|
interface Manifest {
|
||||||
|
applicationId: string;
|
||||||
|
version: string;
|
||||||
|
resourcesURL: string;
|
||||||
|
}
|
||||||
|
function checkForUpdates(url: string): Promise<Manifest>;
|
||||||
|
function install(): Promise<void>;
|
||||||
|
}
|
||||||
|
namespace clipboard {
|
||||||
|
function readText(key: string, data: string): Promise<void>;
|
||||||
|
function writeText(data: string): Promise<string>;
|
||||||
|
}
|
||||||
|
namespace custom {
|
||||||
|
function getMethods(): Promise<string[]>;
|
||||||
|
}
|
||||||
|
interface InitOptions {
|
||||||
|
exportCustomMethods?: boolean;
|
||||||
|
}
|
||||||
|
function init(options?: InitOptions): void;
|
||||||
|
type ErrorCode = "NE_FS_DIRCRER" | "NE_FS_RMDIRER" | "NE_FS_FILRDER" | "NE_FS_FILWRER" | "NE_FS_FILRMER" | "NE_FS_NOPATHE" | "NE_FS_COPYFER" | "NE_FS_MOVEFER" | "NE_OS_INVMSGA" | "NE_OS_INVKNPT" | "NE_ST_INVSTKY" | "NE_ST_STKEYWE" | "NE_RT_INVTOKN" | "NE_RT_NATPRME" | "NE_RT_APIPRME" | "NE_RT_NATRTER" | "NE_RT_NATNTIM" | "NE_CL_NSEROFF" | "NE_EX_EXTNOTC" | "NE_UP_CUPDMER" | "NE_UP_CUPDERR" | "NE_UP_UPDNOUF" | "NE_UP_UPDINER";
|
||||||
|
interface Error {
|
||||||
|
code: ErrorCode;
|
||||||
|
message: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- globals ---
|
||||||
|
/** Mode of the application: window, browser, cloud, or chrome */
|
||||||
|
declare const NL_MODE: string;
|
||||||
|
/** Application port */
|
||||||
|
declare const NL_PORT: number;
|
||||||
|
/** Command-line arguments */
|
||||||
|
declare const NL_ARGS: string[];
|
||||||
|
/** Basic authentication token */
|
||||||
|
declare const NL_TOKEN: string;
|
||||||
|
/** Neutralinojs client version */
|
||||||
|
declare const NL_CVERSION: string;
|
||||||
|
/** Application identifier */
|
||||||
|
declare const NL_APPID: string;
|
||||||
|
/** Application version */
|
||||||
|
declare const NL_APPVERSION: string;
|
||||||
|
/** Application path */
|
||||||
|
declare const NL_PATH: string;
|
||||||
|
/** Returns true if extensions are enabled */
|
||||||
|
declare const NL_EXTENABLED: boolean;
|
||||||
|
/** Operating system name: Linux, Windows, Darwin, FreeBSD, or Uknown */
|
||||||
|
declare const NL_OS: string;
|
||||||
|
/** CPU architecture: x64, arm, itanium, ia32, or unknown */
|
||||||
|
declare const NL_ARCH: string;
|
||||||
|
/** Neutralinojs server version */
|
||||||
|
declare const NL_VERSION: string;
|
||||||
|
/** Current working directory */
|
||||||
|
declare const NL_CWD: string;
|
||||||
|
/** Identifier of the current process */
|
||||||
|
declare const NL_PID: string;
|
||||||
|
/** Source of application resources: bundle or directory */
|
||||||
|
declare const NL_RESMODE: string;
|
||||||
|
/** Release commit of the client library */
|
||||||
|
declare const NL_CCOMMIT: string;
|
||||||
|
/** An array of custom methods */
|
||||||
|
declare const NL_CMETHODS: string[];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue