change electron build context detection, move mods package deps to main package

This commit is contained in:
Stewart Allen 2025-11-15 17:33:32 -05:00
commit 99503f5072
7 changed files with 55 additions and 51 deletions

View file

@ -32,7 +32,7 @@ function createWindow() {
height: 900, height: 900,
webPreferences: { webPreferences: {
// contextIsolation: true, // contextIsolation: true,
// nodeIntegration: false, // nodeIntegration: true,
// sandbox: true, // sandbox: true,
// preload: undefined // preload: undefined
// nodeIntegration: true, // nodeIntegration: true,

60
app.js
View file

@ -15,6 +15,10 @@ const license = require_fresh('./src/moto/license.js');
const version = license.version || "rogue"; const version = license.version || "rogue";
const netdb = require('@gridspace/net-level-client'); const netdb = require('@gridspace/net-level-client');
const PATH = require('path'); const PATH = require('path');
const isElectron = !!process.versions.electron ||
process.env.ELECTRON_RUN_AS_NODE === '1' ||
process.env.ELECTRON_NO_ATTACH === '1' ||
process.env.ELECTRON_BUILD === '1';
const append = { mesh:'', kiri:'' }; const append = { mesh:'', kiri:'' };
const code = {}; const code = {};
@ -32,6 +36,7 @@ let dversion;
let lastmod; let lastmod;
let logger; let logger;
let single; let single;
let dryrun;
let debug; let debug;
let http; let http;
let util; let util;
@ -61,12 +66,14 @@ netdb.create = async function(map = {}) {
function init(mod) { function init(mod) {
const ENV = mod.env; const ENV = mod.env;
const inElectron = isElectron || ENV.electron;
startTime = time(); startTime = time();
lastmod = mod.util.lastmod; lastmod = mod.util.lastmod;
logger = mod.log; logger = mod.log;
pre = ENV.pre || mod.meta.pre; pre = ENV.pre || mod.meta.pre;
debug = ENV.debug || mod.meta.debug; debug = ENV.debug || mod.meta.debug;
dryrun = ENV.dryrun;
single = ENV.single; single = ENV.single;
oversion = ENV.over || mod.meta.over; oversion = ENV.over || mod.meta.over;
crossOrigin = ENV.xorigin || mod.meta.xorigin || false; crossOrigin = ENV.xorigin || mod.meta.xorigin || false;
@ -163,8 +170,14 @@ function init(mod) {
if (util.isfile(PATH.join(mod.dir,modpath,".disable"))) return; if (util.isfile(PATH.join(mod.dir,modpath,".disable"))) return;
const isDebugMod = util.isfile(PATH.join(mod.dir,modpath,".debug")); const isDebugMod = util.isfile(PATH.join(mod.dir,modpath,".debug"));
const isElectronMod = util.isfile(PATH.join(mod.dir,modpath,".electron")); const isElectronMod = util.isfile(PATH.join(mod.dir,modpath,".electron"));
if (force || (ENV.electron && !isElectronMod)) return; if (inElectron && !isElectronMod) {
if (force || (!ENV.electron && isElectronMod && !isDebugMod)) return; logger.log({ skip_non_electron_mod: modpath });
return;
}
if (!inElectron && isElectronMod && !isDebugMod) {
logger.log({ skip_electron_mod: modpath });
return;
}
try { try {
loadModule(mod, modpath); loadModule(mod, modpath);
} catch (error) { } catch (error) {
@ -196,25 +209,30 @@ function init(mod) {
} }
// create alt artifacts with module extensions // create alt artifacts with module extensions
logger.log('creating artifacts', Object.keys(append)); if (dryrun || !isElectron) {
for (let [ key, val ] of Object.entries(append)) { logger.log('creating artifacts', Object.keys(append));
let src = `${dir}/src/main/${key}.js`; for (let [ key, val ] of Object.entries(append)) {
if (!fs.existsSync(src)) { // append mains
logger.log('missing', src); let src = `${dir}/src/main/${key}.js`;
continue; if (!fs.existsSync(src)) {
logger.log('missing', src);
continue;
}
fs.mkdirSync(`${dir}/alt/main`, { recursive: true });
let body = fs.readFileSync(src);
fs.writeFileSync(`${dir}/alt/main/${key}.js`, body + val);
// append packed mains
src= `${dir}/src/pack/${key}-main.js`;
if (!fs.existsSync(src)) {
logger.log('missing', src);
continue;
}
fs.mkdirSync(`${dir}/alt/pack`, { recursive: true });
body = fs.readFileSync(src);
fs.writeFileSync(`${dir}/alt/pack/${key}-main.js`, body + val);
} }
fs.mkdirSync(`${dir}/alt/main`, { recursive: true }); } else {
let body = fs.readFileSync(src); logger.log('skipping artifacts');
fs.writeFileSync(`${dir}/alt/main/${key}.js`, body + val);
src= `${dir}/src/pack/${key}-main.js`;
if (!fs.existsSync(src)) {
logger.log('missing', src);
continue;
}
fs.mkdirSync(`${dir}/alt/pack`, { recursive: true });
body = fs.readFileSync(src);
fs.writeFileSync(`${dir}/alt/pack/${key}-main.js`, body + val);
} }
}; };
@ -280,11 +298,9 @@ function initModule(mod, file, dir) {
const [ path, file ] = [ ...arguments ]; const [ path, file ] = [ ...arguments ];
if (lastmod(file)) { if (lastmod(file)) {
code[path] = fs.readFileSync(file); code[path] = fs.readFileSync(file);
// console.log({ CODE: path, file });
} else if (lastmod(mod.dir + '/' + file)) { } else if (lastmod(mod.dir + '/' + file)) {
const alt = mod.dir + '/' + file; const alt = mod.dir + '/' + file;
code[path] = fs.readFileSync(alt); code[path] = fs.readFileSync(alt);
// console.log({ CODE: path, alt });
} else { } else {
console.log({ MISSING_CODE: path, file }); console.log({ MISSING_CODE: path, file });
} }

View file

@ -2,10 +2,13 @@ const fs = require('fs-extra');
const path = require('path'); const path = require('path');
const server = require('@gridspace/app-server'); const server = require('@gridspace/app-server');
const altTmp = path.join('tmp','alt');
fs.copySync("alt", altTmp, { dereference: true });
// deref src, web, mod for windows // deref src, web, mod for windows
const srcTmp = path.join('tmp','src'); const srcTmp = path.join('tmp','src');
fs.copySync("src", srcTmp, { dereference: true, filter:(src) => { fs.copySync("src", srcTmp, { dereference: true, filter:(src) => {
return src.indexOf('web/pack') < 0; return true || src.indexOf('src/main') < 0;
} }); } });
const webTmp = path.join('tmp','web'); const webTmp = path.join('tmp','web');

View file

@ -1,16 +0,0 @@
{
"name": "grid-apps-mods",
"version": "4.1.0",
"description": "grid.space app modules",
"author": "Stewart Allen <sa@grid.space>",
"repository": {
"type": "git",
"url": "https://github.com/gridspace/apps.git"
},
"dependencies": {
"@gridspace/basic-ftp": "^5.0.5",
"aedes": "^0.51.3",
"hexer": "^1.5.0",
"mqtt": "^5.10.3"
}
}

View file

@ -42,6 +42,7 @@
"@gridspace/raster-path": "^1.0.6", "@gridspace/raster-path": "^1.0.6",
"@tracespace/parser": "^5.0.0-next.0", "@tracespace/parser": "^5.0.0-next.0",
"@tweenjs/tween.js": "^16.6.0", "@tweenjs/tween.js": "^16.6.0",
"aedes": "^0.51.3",
"base64-js": "^1.5.1", "base64-js": "^1.5.1",
"bootstrap-icons": "^1.11.3", "bootstrap-icons": "^1.11.3",
"buffer-crc32": "^0.2.13", "buffer-crc32": "^0.2.13",
@ -50,10 +51,12 @@
"earcut": "^3.0.1", "earcut": "^3.0.1",
"express-useragent": "^1.0.13", "express-useragent": "^1.0.13",
"fast-glob": "^3.3.3", "fast-glob": "^3.3.3",
"hexer": "^1.5.0",
"i": "^0.3.7", "i": "^0.3.7",
"jszip": "^3.7.1", "jszip": "^3.7.1",
"manifold-3d": "^3.2.1", "manifold-3d": "^3.2.1",
"moment": "^2.29.4", "moment": "^2.29.4",
"mqtt": "^5.10.3",
"npm": "^11.4.2", "npm": "^11.4.2",
"prettier": "^3.5.3", "prettier": "^3.5.3",
"react-responsive-carousel": "^3.2.23", "react-responsive-carousel": "^3.2.23",
@ -104,18 +107,18 @@
"dryrun-prod": "gs-app-server --single --dryrun", "dryrun-prod": "gs-app-server --single --dryrun",
"mac-verify": "spctl --assess -vv --type install dist/*/*.app", "mac-verify": "spctl --assess -vv --type install dist/*/*.app",
"mk-links": "find src web -type l | xargs -I{} sh -c 'echo \"{},$(readlink {})\"' > conf/links.csv", "mk-links": "find src web -type l | xargs -I{} sh -c 'echo \"{},$(readlink {})\"' > conf/links.csv",
"pack-dev": "npm run dryrun && npm run webpack-src && npm run bundle:dev", "pack-dev": "npm run webpack-src && npm run dryrun && npm run bundle:dev",
"pack-prod": "npm run dryrun && npm run webpack-src prod && npm run bundle", "pack-prod": "npm run webpack-src prod && npm run dryrun && npm run bundle",
"postbuild": "node bin/electron-post.js", "postbuild": "node bin/electron-post.js",
"prebuild": "npm run setup && npm run pack-dev && node bin/electron-pre.js", "prebuild": "export ELECTRON_BUILD=1 && npm run setup && npm run pack-dev && node bin/electron-pre.js",
"preinstall": "node bin/install-pre.js", "preinstall": "node bin/install-pre.js",
"prod": "npm run pack-prod && gs-app-server", "prod": "npm run pack-prod && gs-app-server",
"setup-mods": "cd mods && npm i", "setup-mods": "cd mods && npm i",
"setup": "npm run setup-mods && npm i && npm run clean && npm run webpack-ext", "setup": "npm run clean && npm run setup-mods && npm i && npm run webpack-ext",
"start-dbg": "npm run prebuild && electron . --debugg", "start-dbg": "npm run prebuild && electron . --debugg",
"start-ddb": "npm run prebuild && electron . --devel --debugg", "start-ddb": "npm run prebuild && electron . --devel --debugg",
"start-dev": "npm run prebuild prod && electron . --devel", "start-dev": "npm run prebuild prod && electron . --devel",
"start": "npm run prebuild prod && electron .", "start": "npm run prebuild && electron .",
"webpack-ext": "npm run webpack-three && npm run webpack-zip", "webpack-ext": "npm run webpack-three && npm run webpack-zip",
"webpack-src": "node bin/esbuild.config.mjs", "webpack-src": "node bin/esbuild.config.mjs",
"webpack-three": "npx webpack --config bin/webpack-three-esm.js", "webpack-three": "npx webpack --config bin/webpack-three-esm.js",

View file

@ -7,7 +7,6 @@ import { newSlice } from '../../core/slice.js';
import { Slicer as topo_slicer } from './slicer_topo.js'; import { Slicer as topo_slicer } from './slicer_topo.js';
import { polygons as POLY } from '../../../geo/polygons.js'; import { polygons as POLY } from '../../../geo/polygons.js';
import { Tool } from './tool.js'; import { Tool } from './tool.js';
import { poly2polyEmit } from '../../../geo/paths.js';
const RAD2DEG = 180 / Math.PI; const RAD2DEG = 180 / Math.PI;
const DEG2RAD = Math.PI / 180; const DEG2RAD = Math.PI / 180;
@ -122,7 +121,7 @@ export class Topo {
} }
if (contourY) { if (contourY) {
console.time('swap XY vertices'); // console.time('swap XY vertices');
// swap XY vertices // swap XY vertices
for (let i=0; i<vertices.length; i+= 3) { for (let i=0; i<vertices.length; i+= 3) {
let tmp = vertices[i+1]; let tmp = vertices[i+1];
@ -135,8 +134,7 @@ export class Topo {
ext.x = ext.y; ext.x = ext.y;
ext.y = tmp; ext.y = tmp;
}); });
console.log({ wbounds }); // console.timeEnd('swap XY vertices');
console.timeEnd('swap XY vertices');
} }
let gpu = await self.get_raster_gpu({ let gpu = await self.get_raster_gpu({

View file

@ -74,8 +74,8 @@ self.get_raster_gpu = async function({ mode, resolution, rotationStep }) {
resolution, resolution,
rotationStep, rotationStep,
workerName: "/lib/gpu/raster-worker.js", workerName: "/lib/gpu/raster-worker.js",
quiet: false, quiet: true,
debug: true, debug: false,
}); });
await gpu.init(); await gpu.init();
return gpu; return gpu;