reflow build/serve of alt, update app-server dep for proper fallthrough handling
This commit is contained in:
parent
b046ae2fa8
commit
fc63f395a4
3 changed files with 54 additions and 86 deletions
104
app.js
104
app.js
|
|
@ -37,7 +37,6 @@ let util;
|
||||||
let dir;
|
let dir;
|
||||||
let log;
|
let log;
|
||||||
let pre;
|
let pre;
|
||||||
let alt;
|
|
||||||
|
|
||||||
const EventEmitter = require('events');
|
const EventEmitter = require('events');
|
||||||
class AppEmitter extends EventEmitter {}
|
class AppEmitter extends EventEmitter {}
|
||||||
|
|
@ -65,7 +64,6 @@ function init(mod) {
|
||||||
startTime = time();
|
startTime = time();
|
||||||
lastmod = mod.util.lastmod;
|
lastmod = mod.util.lastmod;
|
||||||
logger = mod.log;
|
logger = mod.log;
|
||||||
alt = ENV.alt;
|
|
||||||
pre = ENV.pre || mod.meta.pre;
|
pre = ENV.pre || mod.meta.pre;
|
||||||
debug = ENV.debug || mod.meta.debug;
|
debug = ENV.debug || mod.meta.debug;
|
||||||
oversion = ENV.over || mod.meta.over;
|
oversion = ENV.over || mod.meta.over;
|
||||||
|
|
@ -80,10 +78,6 @@ function init(mod) {
|
||||||
dversion = debug ? `_${version}` : version;
|
dversion = debug ? `_${version}` : version;
|
||||||
forceUseCache = ENV.cache ? true : false;
|
forceUseCache = ENV.cache ? true : false;
|
||||||
|
|
||||||
if (!ENV.electron) {
|
|
||||||
generateDevices();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pre) {
|
if (pre) {
|
||||||
for (let [k,v] of Object.entries(productionMap)) {
|
for (let [k,v] of Object.entries(productionMap)) {
|
||||||
productionMap[`${pre}${k}`] = `${pre}${v}`;
|
productionMap[`${pre}${k}`] = `${pre}${v}`;
|
||||||
|
|
@ -142,7 +136,8 @@ function init(mod) {
|
||||||
return "reload";
|
return "reload";
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
mod.add(rewriteHtmlVersion);
|
mod.add(addAppHeaders);
|
||||||
|
mod.static("/lib/", "alt");
|
||||||
mod.static("/lib/", "src");
|
mod.static("/lib/", "src");
|
||||||
mod.static("/obj/", "web/obj");
|
mod.static("/obj/", "web/obj");
|
||||||
mod.static("/font/", "web/font");
|
mod.static("/font/", "web/font");
|
||||||
|
|
@ -194,28 +189,26 @@ function init(mod) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (alt) {
|
// create alt artifacts with module extensions
|
||||||
for (let [ key, val ] of Object.entries(append)) {
|
logger.log('create alt artifacts');
|
||||||
let src = `src/main/${key}.js`;
|
for (let [ key, val ] of Object.entries(append)) {
|
||||||
if (!fs.existsSync(src)) {
|
let src = `src/main/${key}.js`;
|
||||||
logger.log('missing:', src);
|
if (!fs.existsSync(src)) {
|
||||||
continue;
|
logger.log('missing:', src);
|
||||||
}
|
continue;
|
||||||
fs.mkdirSync(`alt/main`, { recursive: true });
|
|
||||||
let body = fs.readFileSync(src);
|
|
||||||
fs.writeFileSync(`alt/main/${key}.js`, body + val);
|
|
||||||
if (true) {
|
|
||||||
// packed
|
|
||||||
src= `src/pack/${key}-main.js`;
|
|
||||||
if (!fs.existsSync(src)) {
|
|
||||||
logger.log('missing:', src);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
fs.mkdirSync(`alt/pack`, { recursive: true });
|
|
||||||
body = fs.readFileSync(src);
|
|
||||||
fs.writeFileSync(`alt/pack/${key}-main.js`, body + val);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
fs.mkdirSync(`alt/main`, { recursive: true });
|
||||||
|
let body = fs.readFileSync(src);
|
||||||
|
fs.writeFileSync(`alt/main/${key}.js`, body + val);
|
||||||
|
|
||||||
|
src= `src/pack/${key}-main.js`;
|
||||||
|
if (!fs.existsSync(src)) {
|
||||||
|
logger.log('missing:', src);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
fs.mkdirSync(`alt/pack`, { recursive: true });
|
||||||
|
body = fs.readFileSync(src);
|
||||||
|
fs.writeFileSync(`alt/pack/${key}-main.js`, body + val);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -440,28 +433,6 @@ function serveWasm(req, res, next) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// pack/concat device script strings to inject into /code/ scripts
|
|
||||||
function generateDevices() {
|
|
||||||
let root = PATH.join(dir,"src","kiri","dev");
|
|
||||||
let devs = {};
|
|
||||||
fs.readdirSync(root).forEach(type => {
|
|
||||||
let map = devs[type] = devs[type] || {};
|
|
||||||
fs.readdirSync(PATH.join(root,type)).forEach(device => {
|
|
||||||
let deviceName = device.endsWith('.json')
|
|
||||||
? device.substring(0,device.length-5)
|
|
||||||
: device;
|
|
||||||
map[deviceName] = JSON.parse(fs.readFileSync(PATH.join(root,type,device)));
|
|
||||||
});
|
|
||||||
});
|
|
||||||
let dstr = JSON.stringify(devs);
|
|
||||||
util.mkdir(PATH.join(dir,"src","pack"));
|
|
||||||
fs.writeFileSync(PATH.join(dir,"src","pack","kiri-devs.js"), `export const devices = ${dstr};`);
|
|
||||||
if (alt) {
|
|
||||||
fs.mkdirSync('alt/pack', { recursive: true });
|
|
||||||
fs.writeFileSync(PATH.join(dir,"alt","pack","kiri-devs.js"), `export const devices = ${dstr};`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function minify(code) {
|
function minify(code) {
|
||||||
let mini = uglify.minify(code.toString(), {
|
let mini = uglify.minify(code.toString(), {
|
||||||
compress: {
|
compress: {
|
||||||
|
|
@ -585,7 +556,7 @@ function cookieValue(cookie,key) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function rewriteHtmlVersion(req, res, next) {
|
function addAppHeaders(req, res, next) {
|
||||||
if ([
|
if ([
|
||||||
"/kiri/",
|
"/kiri/",
|
||||||
"/mesh/",
|
"/mesh/",
|
||||||
|
|
@ -599,37 +570,6 @@ function rewriteHtmlVersion(req, res, next) {
|
||||||
].indexOf(req.app.path) >= 0) {
|
].indexOf(req.app.path) >= 0) {
|
||||||
addCorsHeaders(req, res);
|
addCorsHeaders(req, res);
|
||||||
}
|
}
|
||||||
if ([
|
|
||||||
"/lib/main/kiri.js",
|
|
||||||
"/lib/main/mesh.js"
|
|
||||||
].indexOf(req.app.path) >= 0) {
|
|
||||||
addCorsHeaders(req, res);
|
|
||||||
// const data = append[req.app.path.split('/')[3].split('.')[0]];
|
|
||||||
const data = append[req.app.path.split('.')[0].split('/').pop()];
|
|
||||||
|
|
||||||
if (!data) return next();
|
|
||||||
if (debug) logger.log({ append: req.app.path, data: data.length });
|
|
||||||
|
|
||||||
const real_write = res.write;
|
|
||||||
const real_end = res.end;
|
|
||||||
let body = '';
|
|
||||||
|
|
||||||
res.write = function (chunk, encoding) {
|
|
||||||
body += chunk.toString(encoding);
|
|
||||||
};
|
|
||||||
|
|
||||||
res.end = function (chunk, encoding) {
|
|
||||||
if (chunk) {
|
|
||||||
body += chunk.toString(encoding);
|
|
||||||
}
|
|
||||||
body += data;
|
|
||||||
res.setHeader('Content-Length', Buffer.byteLength(body));
|
|
||||||
res.setHeader('Content-Type', "application/javascript; charset=utf-8");
|
|
||||||
real_write.call(res, body);
|
|
||||||
real_end.call(res);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,6 @@
|
||||||
import { build, transform } from 'esbuild';
|
import { build, transform } from 'esbuild';
|
||||||
import fs from 'fs/promises';
|
import fs from 'fs/promises';
|
||||||
|
import path from 'path';
|
||||||
import glob from 'fast-glob';
|
import glob from 'fast-glob';
|
||||||
|
|
||||||
// Get build mode from command line argument
|
// Get build mode from command line argument
|
||||||
|
|
@ -38,6 +39,30 @@ async function appendExtraModules(extras, outfile, minify = false) {
|
||||||
console.log(`Appended ${files.length} module(s) to ${outfile}`);
|
console.log(`Appended ${files.length} module(s) to ${outfile}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function generateDevices(dir = '') {
|
||||||
|
let root = path.join(dir, "src", "kiri", "dev");
|
||||||
|
let devs = {};
|
||||||
|
let files = await fs.readdir(root);
|
||||||
|
for (let type of files) {
|
||||||
|
let map = devs[type] = devs[type] || {};
|
||||||
|
let devices = await fs.readdir(path.join(root, type));
|
||||||
|
for (let device of devices) {
|
||||||
|
let deviceName = device.endsWith('.json')
|
||||||
|
? device.substring(0, device.length - 5)
|
||||||
|
: device;
|
||||||
|
map[deviceName] = JSON.parse(await fs.readFile(path.join(root, type, device)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let dstr = JSON.stringify(devs);
|
||||||
|
fs.mkdir(path.join(dir, "src", "pack"), { recursive: true });
|
||||||
|
await fs.writeFile(path.join(dir, "src", "pack", "kiri-devs.js"), `export const devices = ${dstr};`);
|
||||||
|
if (true) {
|
||||||
|
// create alt artifacts
|
||||||
|
await fs.mkdir('alt/pack', { recursive: true });
|
||||||
|
await fs.writeFile(path.join(dir, "alt", "pack", "kiri-devs.js"), `export const devices = ${dstr};`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const logOverride = {
|
const logOverride = {
|
||||||
'duplicate-class-member': 'silent',
|
'duplicate-class-member': 'silent',
|
||||||
'duplicate-object-key': 'silent',
|
'duplicate-object-key': 'silent',
|
||||||
|
|
@ -72,6 +97,9 @@ const rec = {
|
||||||
|
|
||||||
async function buildApp() {
|
async function buildApp() {
|
||||||
try {
|
try {
|
||||||
|
// Concatenate kiri devices
|
||||||
|
generateDevices();
|
||||||
|
|
||||||
// Bundle mesh main app
|
// Bundle mesh main app
|
||||||
await build(Object.assign({}, rec, {
|
await build(Object.assign({}, rec, {
|
||||||
entryPoints: [ 'src/main/mesh.js' ],
|
entryPoints: [ 'src/main/mesh.js' ],
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@fortawesome/fontawesome-free": "^6.1.1",
|
"@fortawesome/fontawesome-free": "^6.1.1",
|
||||||
"@gridspace/app-server": "github:gridspace/app-server#v0.0.19",
|
"@gridspace/app-server": "github:gridspace/app-server#v0.0.20",
|
||||||
"@gridspace/basic-ftp": "github:gridspace/basic-ftp#v5.0.5-gridspace",
|
"@gridspace/basic-ftp": "github:gridspace/basic-ftp#v5.0.5-gridspace",
|
||||||
"@gridspace/net-level-client": "^0.2.3",
|
"@gridspace/net-level-client": "^0.2.3",
|
||||||
"@gridspace/raster-path": "^1.0.6",
|
"@gridspace/raster-path": "^1.0.6",
|
||||||
|
|
@ -57,7 +57,7 @@
|
||||||
"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",
|
||||||
"serve-static": "^1.14.1",
|
"serve-static": "^2.2.0",
|
||||||
"three": "^0.178.0",
|
"three": "^0.178.0",
|
||||||
"three-mesh-bvh": "^0.7.6",
|
"three-mesh-bvh": "^0.7.6",
|
||||||
"uglify-js": "3.14.5",
|
"uglify-js": "3.14.5",
|
||||||
|
|
@ -103,8 +103,8 @@
|
||||||
"dryrun": "gs-app-server --debug --single --alt --dryrun",
|
"dryrun": "gs-app-server --debug --single --alt --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 dryrun && 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 dryrun && 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 prod && node bin/electron-pre.js",
|
"prebuild": "npm run setup && npm run pack-dev prod && node bin/electron-pre.js",
|
||||||
"preinstall": "node bin/install-pre.js",
|
"preinstall": "node bin/install-pre.js",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue