feat: initial tauri commit
162
.github/workflows/ci.yaml
vendored
Normal file
|
|
@ -0,0 +1,162 @@
|
||||||
|
name: Produce Desktop Binary Builds
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
tags:
|
||||||
|
- "v*"
|
||||||
|
branches:
|
||||||
|
- dev
|
||||||
|
- master
|
||||||
|
- main
|
||||||
|
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
ENABLE_CODE_SIGNING: ${{ secrets.APPLE_CERTIFICATE }}
|
||||||
|
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
||||||
|
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
||||||
|
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
|
||||||
|
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||||
|
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
#defaults:
|
||||||
|
# run:
|
||||||
|
# working-directory: GUI/ETVR
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
node-version: [18.x]
|
||||||
|
platform: [windows-latest, ubuntu-latest, macos-latest]
|
||||||
|
include:
|
||||||
|
- os: ubuntu-latest
|
||||||
|
rust_target: x86_64-unknown-linux-gnu
|
||||||
|
- os: windows-latest
|
||||||
|
rust_target: x86_64-pc-windows-msvc
|
||||||
|
- os: macos-latest
|
||||||
|
rust_target: x86_64-apple-darwin
|
||||||
|
- os: macos-latest
|
||||||
|
rust_target: aarch64-apple-darwin
|
||||||
|
runs-on: ${{ matrix.platform }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
token: ${{ env.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Node.js setup ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
cache: "pnpm"
|
||||||
|
# node-version-file: '.nvmrc'
|
||||||
|
|
||||||
|
- name: "Setup Rust"
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
default: true
|
||||||
|
override: true
|
||||||
|
profile: minimal
|
||||||
|
toolchain: stable
|
||||||
|
target: ${{ matrix.platform.rust_target }}
|
||||||
|
- uses: Swatinem/rust-cache@v2
|
||||||
|
with:
|
||||||
|
workspaces: "./src-tauri -> target"
|
||||||
|
|
||||||
|
- name: Install dependencies (ubuntu only)
|
||||||
|
if: matrix.platform == 'ubuntu-latest'
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y libgtk-3-dev webkit2gtk-4.0 libappindicator3-dev librsvg2-dev patchelf
|
||||||
|
|
||||||
|
- name: Install dependencies (PNPM)
|
||||||
|
run: |
|
||||||
|
npm install -g pnpm
|
||||||
|
npm install -g typescript
|
||||||
|
cd GUI/ETVR
|
||||||
|
pnpm install
|
||||||
|
|
||||||
|
- uses: JonasKruckenberg/tauri-build@v1.2.3
|
||||||
|
id: tauri_build
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
|
||||||
|
ENABLE_CODE_SIGNING: ${{ env.APPLE_CERTIFICATE }}
|
||||||
|
APPLE_CERTIFICATE: ${{ env.APPLE_CERTIFICATE }}
|
||||||
|
APPLE_CERTIFICATE_PASSWORD: ${{ env.APPLE_CERTIFICATE_PASSWORD }}
|
||||||
|
APPLE_SIGNING_IDENTITY: ${{ env.APPLE_SIGNING_IDENTITY }}
|
||||||
|
APPLE_ID: ${{ env.APPLE_ID }}
|
||||||
|
APPLE_PASSWORD: ${{ env.APPLE_PASSWORD }}
|
||||||
|
with:
|
||||||
|
target: ${{ matrix.platform.rust_target }}
|
||||||
|
|
||||||
|
- uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: production-files
|
||||||
|
path: "${{ join(fromJSON(steps.tauri_build.outputs.artifacts), '\n') }}"
|
||||||
|
|
||||||
|
#- name: Build the app
|
||||||
|
# uses: tauri-apps/tauri-action@v0
|
||||||
|
# env:
|
||||||
|
# GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
|
||||||
|
# TAURI_PRIVATE_KEY: ${{ env.TAURI_PRIVATE_KEY }}
|
||||||
|
# TAURI_KEY_PASSWORD: ${{ env.TAURI_KEY_PASSWORD }}
|
||||||
|
# with:
|
||||||
|
# # tauri-action replaces \_\_VERSION\_\_ with the app version
|
||||||
|
# tagName: eyetrackvr-v__VERSION__
|
||||||
|
# releaseName: "EyeTrackApp v__VERSION__" # name of the release
|
||||||
|
# releaseBody: "See the assets to download this version and install." # message to include in the release
|
||||||
|
# releaseDraft: true # set to false to publish the release as a finished product
|
||||||
|
# prerelease: false # set to true to mark the release as a pre-release
|
||||||
|
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Deploy
|
||||||
|
needs: [build]
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
- name: Create Directory
|
||||||
|
run: mkdir -p dist
|
||||||
|
- name: Download artifact
|
||||||
|
uses: actions/download-artifact@v2
|
||||||
|
with:
|
||||||
|
name: production-files
|
||||||
|
path: ./dist
|
||||||
|
- name: Setup node
|
||||||
|
uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 18
|
||||||
|
- run: npm install -g conventional-changelog-conventionalcommits
|
||||||
|
- run: npm install -g semantic-release@v19.0.5
|
||||||
|
- run: npm install -g @semantic-release/exec
|
||||||
|
- run: npm install -g @semantic-release/git
|
||||||
|
- run: npm install -g @semantic-release/release-notes-generator
|
||||||
|
- run: npm install -g @semantic-release/changelog
|
||||||
|
- run: npm install -g @semantic-release/github
|
||||||
|
- name: Release
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ env.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
sudo apt-get install -y jq
|
||||||
|
chmod +x ./scripts/prepareCMD.sh
|
||||||
|
semantic-release
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
name: Cleanup actions
|
||||||
|
needs:
|
||||||
|
- deploy
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 10
|
||||||
|
steps:
|
||||||
|
- name: "♻️ remove build artifacts"
|
||||||
|
uses: geekyeggo/delete-artifact@v1
|
||||||
|
with:
|
||||||
|
name: production-files
|
||||||
3
.gitignore
vendored
|
|
@ -13,5 +13,4 @@
|
||||||
/node_modules
|
/node_modules
|
||||||
/dist
|
/dist
|
||||||
/.vs
|
/.vs
|
||||||
/web/docs/
|
/web/docs/
|
||||||
pnpm-lock.yaml
|
|
||||||
190
.releaserc
Normal file
|
|
@ -0,0 +1,190 @@
|
||||||
|
{
|
||||||
|
"branches": [
|
||||||
|
"main",
|
||||||
|
"master",
|
||||||
|
"release",
|
||||||
|
{
|
||||||
|
"name": "SolidJSGUI",
|
||||||
|
"prerelease": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"plugins": [
|
||||||
|
[
|
||||||
|
"@semantic-release/commit-analyzer",
|
||||||
|
{
|
||||||
|
"preset": "conventionalcommits",
|
||||||
|
"parserOpts": {
|
||||||
|
"noteKeywords": [
|
||||||
|
"BREAKING CHANGE",
|
||||||
|
"BREAKING CHANGES",
|
||||||
|
"BREAKING"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"releaseRules": [
|
||||||
|
{
|
||||||
|
"breaking": true,
|
||||||
|
"release": "major"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "feat",
|
||||||
|
"release": "minor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "fix",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "perf",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "revert",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "docs",
|
||||||
|
"scope": "docs-*",
|
||||||
|
"release": "minor"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "docs",
|
||||||
|
"release": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "style",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "refactor",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "test",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "build",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ci",
|
||||||
|
"scope": "ci-*",
|
||||||
|
"release": "patch"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "chore",
|
||||||
|
"release": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "no-release",
|
||||||
|
"release": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"@semantic-release/release-notes-generator",
|
||||||
|
{
|
||||||
|
"preset": "conventionalcommits",
|
||||||
|
"parserOpts": {
|
||||||
|
"noteKeywords": [
|
||||||
|
"BREAKING CHANGE",
|
||||||
|
"BREAKING CHANGES",
|
||||||
|
"BREAKING"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"writerOpts": {
|
||||||
|
"commitsSort": [
|
||||||
|
"subject",
|
||||||
|
"scope"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"presetConfig": {
|
||||||
|
"types": [
|
||||||
|
{
|
||||||
|
"type": "feat",
|
||||||
|
"section": "🍕 Features"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "feature",
|
||||||
|
"section": "🍕 Features"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "fix",
|
||||||
|
"section": "🐛 Bug Fixes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "perf",
|
||||||
|
"section": "🔥 Performance Improvements"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "revert",
|
||||||
|
"section": "⏩ Reverts"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "docs",
|
||||||
|
"section": "📝 Documentation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "style",
|
||||||
|
"section": "🎨 Styles"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "refactor",
|
||||||
|
"section": "🧑💻 Code Refactoring"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "test",
|
||||||
|
"section": "✅ Tests"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "build",
|
||||||
|
"section": "🤖 Build System"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "ci",
|
||||||
|
"section": "🔁 Continuous Integration"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"@semantic-release/changelog",
|
||||||
|
{
|
||||||
|
"changelogTitle": "# 📦 Changelog \n[](https://conventionalcommits.org)\n[](https://semver.org)\n> All notable changes to this project will be documented in this file"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"@semantic-release/exec",
|
||||||
|
{
|
||||||
|
"prepareCmd": "./repo-tools/scripts/prepareCMD.sh ${nextRelease.version}",
|
||||||
|
"publishCmd": "echo Publishing ${nextRelease.version}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"@semantic-release/github",
|
||||||
|
{
|
||||||
|
"addReleases": "bottom",
|
||||||
|
"assets": [
|
||||||
|
{
|
||||||
|
"path": "./dist/**/*.msi"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"@semantic-release/git",
|
||||||
|
{
|
||||||
|
"assets": [
|
||||||
|
"GUI/ETVR/package.json",
|
||||||
|
"GUI/ETVR/src-tauri/tauri.conf.json",
|
||||||
|
"GUI/ETVR/src-tauri/Cargo.toml",
|
||||||
|
"LICENSE*",
|
||||||
|
"CHANGELOG.md"
|
||||||
|
],
|
||||||
|
"message": "chore(${nextRelease.type}): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
3
.vscode/extensions.json
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
{
|
||||||
|
"recommendations": ["tauri-apps.tauri-vscode", "rust-lang.rust-analyzer", "esbenp.prettier-vscode"]
|
||||||
|
}
|
||||||
6
.vscode/settings.json
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll": true
|
||||||
|
},
|
||||||
|
"cSpell.words": ["clippy", "shakram", "tamasfe"]
|
||||||
|
}
|
||||||
102
electron.js
|
|
@ -1,102 +0,0 @@
|
||||||
|
|
||||||
// Modules to control application life and create native browser window
|
|
||||||
// Module to control the application lifecycle and the native browser window.
|
|
||||||
const { app, BrowserWindow, protocol } = require("electron");
|
|
||||||
const path = require("path");
|
|
||||||
const url = require("url");
|
|
||||||
|
|
||||||
// Create the native browser window.
|
|
||||||
function createWindow() {
|
|
||||||
const mainWindow = new BrowserWindow({
|
|
||||||
width: 1300 ,
|
|
||||||
height: 850,
|
|
||||||
minWidth: 500,
|
|
||||||
minHeight: 500,
|
|
||||||
autoHideMenuBar:false,
|
|
||||||
webPreferences: {
|
|
||||||
nodeIntegration: true,
|
|
||||||
contextIsolation: true,
|
|
||||||
devTools: true,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
|
|
||||||
// In production, set the initial browser path to the local bundle generated
|
|
||||||
// by the Create React App build process.
|
|
||||||
// In development, set it to localhost to allow live/hot-reloading.
|
|
||||||
const appURL = app.isPackaged
|
|
||||||
? url.format({
|
|
||||||
pathname: path.join(__dirname, "/dist/index.html"),
|
|
||||||
protocol: "file:",
|
|
||||||
slashes: true,
|
|
||||||
})
|
|
||||||
: "http://localhost:3000";
|
|
||||||
mainWindow.loadURL(appURL);
|
|
||||||
mainWindow.maximize()
|
|
||||||
|
|
||||||
// Automatically open Chrome's DevTools in development mode.
|
|
||||||
if (!app.isPackaged) {
|
|
||||||
mainWindow.webContents.openDevTools();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup a local proxy to adjust the paths of requested files when loading
|
|
||||||
// them from the local production bundle (e.g.: local fonts, etc...).
|
|
||||||
function setupLocalFilesNormalizerProxy() {
|
|
||||||
protocol.registerHttpProtocol(
|
|
||||||
"file",
|
|
||||||
(request, callback) => {
|
|
||||||
const url = request.url.substr(8);
|
|
||||||
callback({ path: path.normalize(`${__dirname}/${url}`) });
|
|
||||||
},
|
|
||||||
(error) => {
|
|
||||||
if (error) console.error("Failed to register protocol");
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// This method will be called when Electron has finished its initialization and
|
|
||||||
// is ready to create the browser windows.
|
|
||||||
// Some APIs can only be used after this event occurs.
|
|
||||||
app.whenReady().then(() => {
|
|
||||||
createWindow();
|
|
||||||
setupLocalFilesNormalizerProxy();
|
|
||||||
|
|
||||||
app.on("activate", function () {
|
|
||||||
// On macOS it's common to re-create a window in the app when the
|
|
||||||
// dock icon is clicked and there are no other windows open.
|
|
||||||
if (BrowserWindow.getAllWindows().length === 0) {
|
|
||||||
createWindow();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// Quit when all windows are closed, except on macOS.
|
|
||||||
// There, it's common for applications and their menu bar to stay active until
|
|
||||||
// the user quits explicitly with Cmd + Q.
|
|
||||||
app.on("window-all-closed", function () {
|
|
||||||
if (process.platform !== "darwin") {
|
|
||||||
app.quit();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// If your app has no need to navigate or only needs to navigate to known pages,
|
|
||||||
// it is a good idea to limit navigation outright to that known scope,
|
|
||||||
// disallowing any other kinds of navigation.
|
|
||||||
const allowedNavigationDestinations = "https://my-electron-app.com";
|
|
||||||
app.on("web-contents-created", (event, contents) => {
|
|
||||||
contents.on("will-navigate", (event, navigationUrl) => {
|
|
||||||
const parsedUrl = new URL(navigationUrl);
|
|
||||||
|
|
||||||
if (!allowedNavigationDestinations.includes(parsedUrl.origin)) {
|
|
||||||
event.preventDefault();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// In this file you can include the rest of your app's specific main process
|
|
||||||
// code. You can also put them in separate files and require them here.
|
|
||||||
|
|
||||||
/*
|
|
||||||
const mainWindow = new BrowserWindow({
|
|
||||||
|
|
||||||
})*/
|
|
||||||
93
jsketcher.code-workspace
Normal file
|
|
@ -0,0 +1,93 @@
|
||||||
|
{
|
||||||
|
"folders": [
|
||||||
|
{
|
||||||
|
"name": "modules",
|
||||||
|
"path": "./modules"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "web",
|
||||||
|
"path": "./web"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "repo",
|
||||||
|
"path": "."
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"settings": {
|
||||||
|
"files.autoSave": "afterDelay",
|
||||||
|
"rust-analyzer.checkOnSave.enable": true,
|
||||||
|
"rust-analyzer.checkOnSave.command": "clippy",
|
||||||
|
"rust-analyzer.checkOnSave.allTargets": true,
|
||||||
|
"rust-analyzer.files.watcher": "client",
|
||||||
|
"rust-analyzer.files.excludeDirs": [
|
||||||
|
"**/target",
|
||||||
|
"**/node_modules",
|
||||||
|
"**/dist",
|
||||||
|
"**/build",
|
||||||
|
"**/public",
|
||||||
|
"**/assets",
|
||||||
|
"**/src-tauri/target",
|
||||||
|
"**/scripts",
|
||||||
|
"**/src/components",
|
||||||
|
"**/src/interfaces",
|
||||||
|
"**/src/pages",
|
||||||
|
"**/src/static",
|
||||||
|
"**/src/styles",
|
||||||
|
"**/src/utils"
|
||||||
|
],
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"[toml]": {
|
||||||
|
"editor.defaultFormatter": "tamasfe.even-better-toml"
|
||||||
|
},
|
||||||
|
"[jsonc]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[javascript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[typescript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"liveServer.settings.multiRootWorkspaceName": "ETVR",
|
||||||
|
"[typescriptreact]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[css]": {
|
||||||
|
"editor.defaultFormatter": "vscode.css-language-features"
|
||||||
|
},
|
||||||
|
"[shellscript]": {
|
||||||
|
"editor.defaultFormatter": "shakram02.bash-beautify"
|
||||||
|
},
|
||||||
|
"cSpell.words": [
|
||||||
|
"APPCONFIG",
|
||||||
|
"APPDATA",
|
||||||
|
"clippy",
|
||||||
|
"clsx",
|
||||||
|
"Coeff",
|
||||||
|
"dnsquery",
|
||||||
|
"esbenp",
|
||||||
|
"eyetrack",
|
||||||
|
"fullname",
|
||||||
|
"hashset",
|
||||||
|
"hookable",
|
||||||
|
"Iinternal",
|
||||||
|
"iocp",
|
||||||
|
"kobalte",
|
||||||
|
"nanos",
|
||||||
|
"notif",
|
||||||
|
"notififcation",
|
||||||
|
"notifs",
|
||||||
|
"partytown",
|
||||||
|
"ratelimit",
|
||||||
|
"reqwest",
|
||||||
|
"shakram",
|
||||||
|
"solidjs",
|
||||||
|
"soundfile",
|
||||||
|
"tamasfe",
|
||||||
|
"undici",
|
||||||
|
"vorbis",
|
||||||
|
"webserial",
|
||||||
|
"Xmark"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
25945
package-lock.json
generated
69
package.json
|
|
@ -1,68 +1,10 @@
|
||||||
{
|
{
|
||||||
"name": "jsketcher",
|
"name": "jsketcher",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"main": "electron.js",
|
|
||||||
"private": true,
|
"private": true,
|
||||||
"description": "JS.Sketcher is a parametric 2D and 3D CAD modeler written in pure javascript",
|
"description": "JS.Sketcher is a parametric 2D and 3D CAD modeler written in pure javascript",
|
||||||
"build": {
|
|
||||||
"appId": "jsketcher",
|
|
||||||
"linux": {
|
|
||||||
"category": "Utility",
|
|
||||||
"icon": "icon.png",
|
|
||||||
"target": [
|
|
||||||
"deb",
|
|
||||||
"appImage"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"deb": {
|
|
||||||
"depends": [
|
|
||||||
"gconf2",
|
|
||||||
"gconf-service",
|
|
||||||
"libnotify4",
|
|
||||||
"libappindicator1",
|
|
||||||
"libxtst6",
|
|
||||||
"libnss3"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"win": {
|
|
||||||
"icon": "icon.png"
|
|
||||||
},
|
|
||||||
"mac": {
|
|
||||||
"icon": "icon.icns",
|
|
||||||
"category": "public.app-category.utilities"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"build/*",
|
|
||||||
"dev-guide",
|
|
||||||
"misc/*",
|
|
||||||
"modules/**/**/*",
|
|
||||||
"node_modules/**/**/*",
|
|
||||||
"public/*",
|
|
||||||
"test/**/**/*",
|
|
||||||
"web/**/**/*",
|
|
||||||
".babelrc",
|
|
||||||
".eslintrc.json",
|
|
||||||
".gitignore",
|
|
||||||
"externals.d.ts",
|
|
||||||
"Gruntfile.js",
|
|
||||||
"cypress.json",
|
|
||||||
"package.json",
|
|
||||||
"package-lock.json",
|
|
||||||
"tsconfig.json",
|
|
||||||
"electron.js",
|
|
||||||
"dist/**/*",
|
|
||||||
"webpack.config.js"
|
|
||||||
],
|
|
||||||
"extraMetadata": {
|
|
||||||
"main": "public/electron.js"
|
|
||||||
},
|
|
||||||
"directories": {
|
|
||||||
"buildResources": "build"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node ./node_modules/webpack-dev-server/bin/webpack-dev-server.js --config webpack.config.js --port 3000 --host 0.0.0.0",
|
"start": "node ./node_modules/webpack-dev-server/bin/webpack-dev-server.js --config webpack.config.js --port 3000 --host 0.0.0.0",
|
||||||
"electron": "concurrently \"cross-env BROWSER=none yarn start\" \"wait-on http://localhost:3000 && electron .\"",
|
|
||||||
"pack": "node ./node_modules/webpack/bin/webpack.js --config webpack.config.js --progress --profile --colors",
|
"pack": "node ./node_modules/webpack/bin/webpack.js --config webpack.config.js --progress --profile --colors",
|
||||||
"start-with-docs": "concurrently --kill-others 'npm start' './node_modules/grunt/bin/grunt docs-start'",
|
"start-with-docs": "concurrently --kill-others 'npm start' './node_modules/grunt/bin/grunt docs-start'",
|
||||||
"build": "grunt",
|
"build": "grunt",
|
||||||
|
|
@ -72,9 +14,8 @@
|
||||||
"checks-passed-banner": "echo 'All conditions passed. Ready to go to the main branch. Good job!'",
|
"checks-passed-banner": "echo 'All conditions passed. Ready to go to the main branch. Good job!'",
|
||||||
"before-main-branch-merge": "npm run lint && npm run check-code && npm run checks-passed-banner",
|
"before-main-branch-merge": "npm run lint && npm run check-code && npm run checks-passed-banner",
|
||||||
"cypress": "npx cypress open",
|
"cypress": "npx cypress open",
|
||||||
"electron:package:mac": "npm run build && electron-builder -m -c.extraMetadata.main=electron.js",
|
"tauri:dev": "tauri dev",
|
||||||
"electron:package:win": "npm run build && electron-builder -w -c.extraMetadata.main=electron.js",
|
"tauri:build": "tauri build"
|
||||||
"electron:package:linux": "npm run build && electron-builder -l -c.extraMetadata.main=electron.js"
|
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|
@ -103,6 +44,7 @@
|
||||||
"@babel/preset-react": "^7.18.6",
|
"@babel/preset-react": "^7.18.6",
|
||||||
"@babel/preset-stage-2": "^7.8.3",
|
"@babel/preset-stage-2": "^7.8.3",
|
||||||
"@babel/preset-typescript": "^7.18.6",
|
"@babel/preset-typescript": "^7.18.6",
|
||||||
|
"@tauri-apps/cli": "^1.2.3",
|
||||||
"@types/react": "^18.0.26",
|
"@types/react": "^18.0.26",
|
||||||
"@types/react-dom": "^18.0.9",
|
"@types/react-dom": "^18.0.9",
|
||||||
"@typescript-eslint/eslint-plugin": "^5.45.1",
|
"@typescript-eslint/eslint-plugin": "^5.45.1",
|
||||||
|
|
@ -117,8 +59,6 @@
|
||||||
"cypress": "^12.0.1",
|
"cypress": "^12.0.1",
|
||||||
"cypress-wait-until": "^1.7.1",
|
"cypress-wait-until": "^1.7.1",
|
||||||
"del": "^6.0.0",
|
"del": "^6.0.0",
|
||||||
"electron": "^22.0.0",
|
|
||||||
"electron-builder": "^22.10.3",
|
|
||||||
"eslint": "^8.29.0",
|
"eslint": "^8.29.0",
|
||||||
"eslint-plugin-import": "^2.26.0",
|
"eslint-plugin-import": "^2.26.0",
|
||||||
"file-loader": "^6.2.0",
|
"file-loader": "^6.2.0",
|
||||||
|
|
@ -141,6 +81,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@dxfjs/parser": "^0.2.0",
|
"@dxfjs/parser": "^0.2.0",
|
||||||
"@tarikjabiri/dxf": "^2.6.2",
|
"@tarikjabiri/dxf": "^2.6.2",
|
||||||
|
"@tauri-apps/api": "^1.2.0",
|
||||||
"@types/three": "^0.146.0",
|
"@types/three": "^0.146.0",
|
||||||
"browser-xml2js": "^0.4.19",
|
"browser-xml2js": "^0.4.19",
|
||||||
"classnames": "^2.3.2",
|
"classnames": "^2.3.2",
|
||||||
|
|
@ -168,4 +109,4 @@
|
||||||
"url": "^0.11.0"
|
"url": "^0.11.0"
|
||||||
},
|
},
|
||||||
"proxy": "http://localhost:3000"
|
"proxy": "http://localhost:3000"
|
||||||
}
|
}
|
||||||
7473
pnpm-lock.yaml
Normal file
10
preload.js
|
|
@ -1,10 +0,0 @@
|
||||||
// All of the Node.js APIs are available in the preload process.
|
|
||||||
// It has the same sandbox as a Chrome extension.
|
|
||||||
const { contextBridge } = require("electron");
|
|
||||||
|
|
||||||
// As an example, here we use the exposeInMainWorld API to expose the browsers
|
|
||||||
// and node versions to the main window.
|
|
||||||
// They'll be accessible at "window.versions".
|
|
||||||
process.once("loaded", () => {
|
|
||||||
contextBridge.exposeInMainWorld("versions", process.versions);
|
|
||||||
});
|
|
||||||
3
src-tauri/.gitignore
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
# Generated by Cargo
|
||||||
|
# will have compiled files and executables
|
||||||
|
/target/
|
||||||
3319
src-tauri/Cargo.lock
generated
Normal file
28
src-tauri/Cargo.toml
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
[package]
|
||||||
|
name = "app"
|
||||||
|
version = "0.1.0"
|
||||||
|
description = "A Tauri App"
|
||||||
|
authors = ["you"]
|
||||||
|
license = ""
|
||||||
|
repository = ""
|
||||||
|
default-run = "app"
|
||||||
|
edition = "2021"
|
||||||
|
rust-version = "1.59"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
tauri-build = { version = "1.2.1", features = [] }
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
serde_json = "1.0"
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
tauri = { version = "1.2.4", features = [] }
|
||||||
|
|
||||||
|
[features]
|
||||||
|
# by default Tauri runs in production mode
|
||||||
|
# when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL
|
||||||
|
default = [ "custom-protocol" ]
|
||||||
|
# this feature is used for production builds where `devPath` points to the filesystem
|
||||||
|
# DO NOT remove this
|
||||||
|
custom-protocol = [ "tauri/custom-protocol" ]
|
||||||
3
src-tauri/build.rs
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
tauri_build::build()
|
||||||
|
}
|
||||||
BIN
src-tauri/icons/128x128.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
src-tauri/icons/128x128@2x.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
src-tauri/icons/32x32.png
Normal file
|
After Width: | Height: | Size: 2.2 KiB |
BIN
src-tauri/icons/Square107x107Logo.png
Normal file
|
After Width: | Height: | Size: 9 KiB |
BIN
src-tauri/icons/Square142x142Logo.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
src-tauri/icons/Square150x150Logo.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
src-tauri/icons/Square284x284Logo.png
Normal file
|
After Width: | Height: | Size: 25 KiB |
BIN
src-tauri/icons/Square30x30Logo.png
Normal file
|
After Width: | Height: | Size: 2 KiB |
BIN
src-tauri/icons/Square310x310Logo.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
src-tauri/icons/Square44x44Logo.png
Normal file
|
After Width: | Height: | Size: 3.3 KiB |
BIN
src-tauri/icons/Square71x71Logo.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
src-tauri/icons/Square89x89Logo.png
Normal file
|
After Width: | Height: | Size: 7.4 KiB |
BIN
src-tauri/icons/StoreLogo.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
src-tauri/icons/icon.icns
Normal file
BIN
src-tauri/icons/icon.ico
Normal file
|
After Width: | Height: | Size: 37 KiB |
BIN
src-tauri/icons/icon.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
14
src-tauri/rustfmt.toml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
max_width = 100
|
||||||
|
hard_tabs = false
|
||||||
|
tab_spaces = 2
|
||||||
|
newline_style = "Auto"
|
||||||
|
use_small_heuristics = "Default"
|
||||||
|
reorder_imports = true
|
||||||
|
reorder_modules = true
|
||||||
|
remove_nested_parens = true
|
||||||
|
edition = "2018"
|
||||||
|
merge_derives = true
|
||||||
|
use_try_shorthand = false
|
||||||
|
use_field_init_shorthand = false
|
||||||
|
force_explicit_abi = true
|
||||||
|
imports_granularity = "Crate"
|
||||||
11
src-tauri/src/main.rs
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
#![cfg_attr(
|
||||||
|
all(not(debug_assertions), target_os = "windows"),
|
||||||
|
windows_subsystem = "windows"
|
||||||
|
)]
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
tauri::Builder::default()
|
||||||
|
// Don't worry about this error, it's just the rust analyzer.
|
||||||
|
.run(tauri::generate_context!())
|
||||||
|
.expect("error while running tauri application");
|
||||||
|
}
|
||||||
67
src-tauri/tauri.conf.json
Normal file
|
|
@ -0,0 +1,67 @@
|
||||||
|
{
|
||||||
|
"$schema": "../node_modules/@tauri-apps/cli/schema.json",
|
||||||
|
"build": {
|
||||||
|
"beforeBuildCommand": "pnpm build",
|
||||||
|
"beforeDevCommand": "pnpm start",
|
||||||
|
"devPath": "http://localhost:3000",
|
||||||
|
"distDir": "../build"
|
||||||
|
},
|
||||||
|
"package": {
|
||||||
|
"productName": "jsketcher",
|
||||||
|
"version": "0.1.0"
|
||||||
|
},
|
||||||
|
"tauri": {
|
||||||
|
"allowlist": {
|
||||||
|
"all": false
|
||||||
|
},
|
||||||
|
"bundle": {
|
||||||
|
"active": true,
|
||||||
|
"category": "DeveloperTool",
|
||||||
|
"copyright": "",
|
||||||
|
"deb": {
|
||||||
|
"depends": []
|
||||||
|
},
|
||||||
|
"externalBin": [],
|
||||||
|
"icon": [
|
||||||
|
"icons/32x32.png",
|
||||||
|
"icons/128x128.png",
|
||||||
|
"icons/128x128@2x.png",
|
||||||
|
"icons/icon.icns",
|
||||||
|
"icons/icon.ico"
|
||||||
|
],
|
||||||
|
"identifier": "com.jsketcher.dev",
|
||||||
|
"longDescription": "",
|
||||||
|
"macOS": {
|
||||||
|
|
||||||
|
"entitlements": null,
|
||||||
|
"exceptionDomain": "",
|
||||||
|
"frameworks": [],
|
||||||
|
"providerShortName": null,
|
||||||
|
"signingIdentity": null
|
||||||
|
},
|
||||||
|
"resources": [],
|
||||||
|
"shortDescription": "",
|
||||||
|
"targets": "all",
|
||||||
|
"windows": {
|
||||||
|
"certificateThumbprint": null,
|
||||||
|
"digestAlgorithm": "sha256",
|
||||||
|
"timestampUrl": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"security": {
|
||||||
|
"csp": null
|
||||||
|
},
|
||||||
|
"updater": {
|
||||||
|
"active": false
|
||||||
|
},
|
||||||
|
"windows": [
|
||||||
|
{
|
||||||
|
"fullscreen": false,
|
||||||
|
"height": 600,
|
||||||
|
"resizable": true,
|
||||||
|
"title": "jsketcher",
|
||||||
|
"width": 800
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||