restructure code, internalize devices

This commit is contained in:
Stewart Allen 2020-06-03 22:39:30 -04:00
commit 02feb524e6
110 changed files with 592 additions and 681 deletions

284
app.js
View file

@ -8,7 +8,7 @@ const fs = require('fs');
const uglify = require('uglify-es');
const moment = require('moment');
const agent = require('express-useragent');
const license = require_fresh('./js/license.js');
const license = require_fresh('./src/license.js');
const version = license.VERSION || "rogue";
const fileCache = {};
@ -16,12 +16,7 @@ const code_src = {};
const code = {};
const mods = {};
const load = [];
const device = {
fdm: [],
sla: [],
cam: [],
laser: []
};
const synth = {};
let level;
let cacheDir;
@ -68,9 +63,8 @@ function init(mod) {
[ "/data/", handleData ],
[ "/wasm/", handleWasm ]
]));
mod.add(fixedmap("/api/", api));
if (debug) {
mod.static("/js/", "js");
mod.static("/src/", "src");
mod.static("/mod/", "mod");
mod.sync("/reload", () => {
mod.reload();
@ -122,7 +116,7 @@ function loadModule(mod, dir) {
function initModule(mod, file, dir) {
logger.log({module: file});
require_fresh(file)({
api: api,
api: {},
adm: {
reload: prepareScripts
},
@ -208,139 +202,122 @@ function initModule(mod, file, dir) {
});
}
const api = {
"filters-fdm": (req, res, next) => {
res.setHeader("Content-Type", "application/javascript");
res.end(JSON.stringify(device.fdm));
},
"filters-sla": (req, res, next) => {
res.setHeader("Content-Type", "application/javascript");
res.end(JSON.stringify(device.sla));
},
"filters-cam": (req, res, next) => {
res.setHeader("Content-Type", "application/javascript");
res.end(JSON.stringify(device.cam));
},
"filters-laser": (req, res, next) => {
res.setHeader("Content-Type", "application/javascript");
res.end(JSON.stringify(device.laser));
}
};
const script = {
kiri : [
"ext-three",
"license",
"ext-clip2",
"ext-tween",
"ext-fsave",
"ext-earcut",
"add-array",
"add-three",
"geo",
"geo-debug",
"geo-render",
"geo-point",
"geo-slope",
"geo-line",
"geo-bounds",
"geo-polygon",
"geo-polygons",
"geo-gyroid",
"moto-kv",
"moto-ajax",
"moto-ctrl",
"moto-space",
"moto-load-stl",
"moto-db",
"moto-ui",
"kiri-icons",
"kiri-lang",
"kiri-lang-en",
"kiri-fill",
"kiri-db",
"kiri-slice",
"kiri-slicer",
"kiri-driver-fdm",
"kiri-driver-sla",
"kiri-driver-cam",
"kiri-driver-laser",
"kiri-pack",
"kiri-layer",
"kiri-widget",
"kiri-print",
"kiri-codec",
"kiri-work",
"kiri-conf",
"kiri",
"kiri-init",
"kiri-export"
].map(p => `js/${p}.js`),
"ext/three",
"license",
"ext/clip2",
"ext/tween",
"ext/fsave",
"ext/earcut",
"add/array",
"add/three",
"geo/base",
"geo/debug",
"geo/render",
"geo/point",
"geo/slope",
"geo/line",
"geo/bounds",
"geo/polygon",
"geo/polygons",
"geo/gyroid",
"moto/kv",
"moto/ajax",
"moto/ctrl",
"moto/pack",
"moto/space",
"moto/load-stl",
"moto/db",
"moto/ui",
"kiri/icons",
"kiri/lang",
"kiri/lang-en",
"kiri/fill",
"kiri/db",
"kiri/slice",
"kiri/slicer",
"mode/fdm/driver",
"mode/sla/driver",
"mode/cam/driver",
"mode/laser/driver",
"kiri/layer",
"kiri/widget",
"kiri/print",
"kiri/codec",
"kiri/work",
"kiri/conf",
"kiri/main",
"kiri/init",
"kiri/export",
"@devices"
].map(p => p.charAt(0) !== '@' ? `src/${p}.js` : p),
work : [
"ext-three",
"ext-pngjs",
"kiri",
"ext/three",
"ext/pngjs",
"license",
"ext-clip2",
"add-array",
"add-three",
"add-class",
"geo",
// "geo-wasm",
"geo-debug",
"geo-point",
"geo-slope",
"geo-line",
"geo-bounds",
"geo-polygon",
"geo-polygons",
"geo-gyroid",
"kiri-fill",
"kiri-slice",
"kiri-slicer",
"kiri-driver-fdm",
"kiri-driver-sla",
"kiri-driver-cam",
"kiri-driver-laser",
"kiri-pack",
"kiri-widget",
"kiri-print",
"kiri-codec"
].map(p => `js/${p}.js`),
"ext/clip2",
"add/array",
"add/three",
"add/class",
"geo/base",
// "geo/wasm",
"geo/debug",
"geo/point",
"geo/slope",
"geo/line",
"geo/bounds",
"geo/polygon",
"geo/polygons",
"geo/gyroid",
"moto/pack",
"kiri/fill",
"kiri/slice",
"kiri/slicer",
"mode/fdm/driver",
"mode/sla/driver",
"mode/cam/driver",
"mode/laser/driver",
"kiri/widget",
"kiri/print",
"kiri/codec"
].map(p => `src/${p}.js`),
worker : [
"kiri-worker"
].map(p => `js/${p}.js`),
meta : [
"ext-three",
"kiri",
"license",
"ext-tween",
"ext-fsave",
"ext-earcut",
"add-array",
"add-three",
"geo",
"geo-debug",
"geo-render",
"geo-point",
"geo-slope",
"geo-line",
"geo-bounds",
"geo-polygon",
"geo-polygons",
"geo-gyroid",
"kiri-layer",
"moto-kv",
"moto-ajax",
"moto-ctrl",
"moto-space",
"moto-load-stl",
"moto-db",
"moto-ui",
"kiri-db",
"kiri/worker"
].map(p => `src/${p}.js`),
meta : [
"ext/three",
"license",
"ext/tween",
"ext/fsave",
"ext/earcut",
"add/array",
"add/three",
"geo/base",
"geo/debug",
"geo/render",
"geo/point",
"geo/slope",
"geo/line",
"geo/bounds",
"geo/polygon",
"geo/polygons",
"geo/gyroid",
"kiri/layer",
"moto/kv",
"moto/ajax",
"moto/ctrl",
"moto/space",
"moto/load-stl",
"moto/db",
"moto/ui",
"kiri/db",
"meta"
].map(p => `js/${p}.js`)
].map(p => `src/${p}.js`)
};
const db = {
@ -619,22 +596,19 @@ function serveCode(req, res, code) {
}
function prepareScripts() {
let root = `${dir}/src/dev`;
let devs = {};
fs.readdirSync(root).forEach(type => {
let map = devs[type] = devs[type] || {};
fs.readdirSync(`${root}/${type}`).forEach(device => {
map[device] = JSON.parse(fs.readFileSync(`${root}/${type}/${device}`));
});
});
synth.devices = `devices = ${JSON.stringify(devs)};`;
code.meta = concatCode(script.meta);
code.kiri = concatCode(script.kiri);
code.work = concatCode(script.work);
code.worker = concatCode(script.worker);
fs.readdir(dir + "/web/kiri/filter/FDM", function(err, files) {
device.fdm = files || device.fdm;
});
fs.readdir(dir + "/web/kiri/filter/SLA", function(err, files) {
device.sla = files || device.sla;
});
fs.readdir(dir + "/web/kiri/filter/CAM", function(err, files) {
device.cam = files || device.cam;
});
fs.readdir(dir + "/web/kiri/filter/LASER", function(err, files) {
device.laser = files || device.laser;
});
}
function concatCode(array) {
@ -643,11 +617,10 @@ function concatCode(array) {
// in debug mode, the script should load dependent
// scripts instead of serving a complete bundle
if (debug) {
let direct = array.filter(f => f.charAt(0) !== '@');
let inject = array.filter(f => f.charAt(0) === '@').map(f => f.substring(1));
let code = [ `(function() { let load = [ `];
array.forEach(file => {
// if (file.indexOf(":\\") > 0) {
// file = `/${file}`;
// }
direct.forEach(file => {
code.push(`"/${file.replace(/\\/g,'/')}?${version}",`);
});
code.push([
@ -663,16 +636,23 @@ function concatCode(array) {
'}; load_next(); })();',
'self.debug=true;'
].join('\n'));
inject.forEach(key => {
code.push(synth[key]);
});
return code.join('\n');
}
array.forEach(file => {
direct.forEach(file => {
let cached = getCachedFile(file, function(path) {
return minify(`${dir}/${file}`);
});
code.push(cached);
});
inject.forEach(key => {
code.push(synth[key]);
});
return code.join('');
}