@@ -26,6 +26,7 @@ const mods = {};
2626const load = [ ] ;
2727const api = { } ;
2828
29+ let lastTouchTime = { } ;
2930let forceUseCache = false ;
3031let serviceWorker = true ;
3132let crossOrigin = false ;
@@ -134,10 +135,12 @@ function init(mod) {
134135 "/boot" : redir ( ( pre ?? "" ) + "/boot/" , 301 ) ,
135136 "/kiri" : redir ( ( pre ?? "" ) + "/kiri/" , 301 ) ,
136137 "/mesh" : redir ( ( pre ?? "" ) + "/mesh/" , 301 ) ,
137- "/meta" : redir ( ( pre ?? "" ) + "/meta/" , 301 ) ,
138+ "/void" : redir ( ( pre ?? "" ) + "/void/" , 301 ) ,
139+ "/form" : redir ( ( pre ?? "" ) + "/form/" , 301 ) ,
138140 "/kiri/index.html" : redir ( ( pre ?? "" ) + "/kiri/" , 301 ) ,
139141 "/mesh/index.html" : redir ( ( pre ?? "" ) + "/mesh/" , 301 ) ,
140- "/meta/index.html" : redir ( ( pre ?? "" ) + "/meta/" , 301 )
142+ "/void/index.html" : redir ( ( pre ?? "" ) + "/void/" , 301 ) ,
143+ "/form/index.html" : redir ( ( pre ?? "" ) + "/form/" , 301 )
141144 } ) ) ;
142145 mod . add ( handleVersion ) ;
143146 mod . add ( fixedmap ( "/api/" , api ) ) ;
@@ -153,12 +156,15 @@ function init(mod) {
153156 mod . static ( "/lib/" , "alt" ) ;
154157 mod . static ( "/lib/" , "src" ) ;
155158 mod . static ( "/obj/" , "web/obj" ) ;
156- mod . static ( "/font /" , "web/font " ) ;
159+ mod . static ( "/boot /" , "web/boot " ) ;
157160 mod . static ( "/fon2/" , "web/fon2" ) ;
161+ mod . static ( "/font/" , "web/font" ) ;
162+ mod . static ( "/form/" , "web/void" ) ;
163+ mod . static ( "/icon/" , "web/icon" ) ;
164+ mod . static ( "/kiri/" , "web/kiri" ) ;
158165 mod . static ( "/mesh/" , "web/mesh" ) ;
159166 mod . static ( "/moto/" , "web/moto" ) ;
160- mod . static ( "/kiri/" , "web/kiri" ) ;
161- mod . static ( "/boot/" , "web/boot" ) ;
167+ mod . static ( "/void/" , "web/void" ) ;
162168
163169 // module loader
164170 function load_modules ( root , force ) {
@@ -186,10 +192,10 @@ function init(mod) {
186192 } ) ;
187193 }
188194
189- // load development and 3rd party modules
195+ // load development and app modules (onshape, thingiverse)
190196 load_modules ( 'mod' ) ;
191197
192- // load optional local modules
198+ // load optional local modules (bambu)
193199 load_modules ( 'mods' ) ;
194200
195201 // run load functions injected by modules
@@ -208,16 +214,34 @@ function init(mod) {
208214 }
209215 }
210216
211- // create alt artifacts with module extensions
217+ // synthesize new main when applicable
218+ createArtifacts ( ) ;
219+ }
220+
221+ // create alt artifacts with module extensions
222+ function createArtifacts ( ) {
212223 if ( dryrun || ! isElectron ) {
213- logger . log ( 'creating artifacts' , Object . keys ( append ) ) ;
224+ if ( debug ) {
225+ setTimeout ( createArtifacts , 1000 ) ;
226+ }
227+ if ( Object . keys ( lastTouchTime ) . length === 0 ) {
228+ logger . log ( 'creating artifacts' , Object . keys ( append ) ) ;
229+ }
214230 for ( let [ key , val ] of Object . entries ( append ) ) {
215231 // append mains
216232 let src = `${ dir } /src/main/${ key } .js` ;
217233 if ( ! fs . existsSync ( src ) ) {
218234 logger . log ( 'missing' , src ) ;
219235 continue ;
220236 }
237+ let ltt = fs . statSync ( src ) . mtimeMs ;
238+ if ( lastTouchTime [ src ] === ltt ) {
239+ continue ;
240+ } else if ( debug ) {
241+ logger . log ( 'changed' , src ) ;
242+ }
243+ lastTouchTime [ src ] = ltt ;
244+ // console.log({ src, ltt });
221245 fs . mkdirSync ( `${ dir } /alt/main` , { recursive : true } ) ;
222246 let body = fs . readFileSync ( src ) ;
223247 fs . writeFileSync ( `${ dir } /alt/main/${ key } .js` , body + val ) ;
@@ -234,7 +258,7 @@ function init(mod) {
234258 } else {
235259 logger . log ( 'skipping artifacts' ) ;
236260 }
237- } ;
261+ }
238262
239263// either add module assets to path or require(init.js)
240264function loadModule ( mod , dir ) {
@@ -257,7 +281,7 @@ function initModule(mod, file, dir) {
257281 logger . log ( { module : file , dir } ) ;
258282 require_fresh ( file ) ( {
259283 // express functions added here show up at "/api/" url root
260- api : api ,
284+ api,
261285 adm : {
262286 setver ( ver ) { oversion = ver } ,
263287 crossOrigin ( bool ) { crossOrigin = bool }
@@ -329,8 +353,10 @@ function initModule(mod, file, dir) {
329353 const path = mod . dir + '/' + dir + '/' + file ;
330354 try {
331355 const body = fs . readFileSync ( path ) ;
332- if ( debug && ! single ) logger . log ( { inject : code , file, opt } ) ;
333- if ( opt . first ) {
356+ if ( debug && ! single ) {
357+ logger . log ( { inject : code , file, opt } ) ;
358+ }
359+ if ( opt . first && append [ code ] ) {
334360 append [ code ] = body . toString ( ) + '\n' + append [ code ] ;
335361 } else {
336362 append [ code ] += body . toString ( ) + '\n' ;
@@ -369,8 +395,11 @@ function handleSetup(req, res, next) {
369395}
370396
371397const productionMap = {
372- '/lib/mesh/work.js' : '/lib/pack/mesh-work.js' ,
398+ '/lib/main/void.js' : '/lib/pack/void-main.js' ,
399+ '/lib/main/planegcs.wasm' : '/lib/void/solver/planegcs_dist/planegcs.wasm' ,
400+ '/lib/worker/solids_worker.js' : '/lib/pack/void-work-solid.js' ,
373401 '/lib/main/mesh.js' : '/lib/pack/mesh-main.js' ,
402+ '/lib/mesh/work.js' : '/lib/pack/mesh-work.js' ,
374403 '/lib/main/kiri.js' : '/lib/pack/kiri-main.js' ,
375404 '/lib/kiri/run/engine.js' : '/lib/pack/kiri-eng.js' ,
376405 '/lib/kiri/run/minion.js' : '/lib/pack/kiri-pool.js' ,
@@ -487,7 +516,7 @@ function ifModifiedDate(req) {
487516
488517function addCorsHeaders ( req , res ) {
489518 res . setHeader ( 'Access-Control-Allow-Credentials' , 'true' ) ;
490- res . setHeader ( 'Access-Control-Allow-Headers' , 'X-Moto-Ajax, Content-Type' ) ;
519+ res . setHeader ( 'Access-Control-Allow-Headers' , 'X-Api-Key, X-Host, X- Moto-Ajax, Content-Type' ) ;
491520 res . setHeader ( 'Access-Control-Allow-Origin' , req . headers [ 'origin' ] || '*' ) ;
492521 if ( req . headers [ 'access-control-request-private-network' ] === 'true' ) {
493522 res . setHeader ( 'Access-Control-Allow-Private-Network' , 'true' ) ;
0 commit comments