diff --git a/src/kiri-mode/cam/export.js b/src/kiri-mode/cam/export.js index 7741c53a..0bcc2636 100644 --- a/src/kiri-mode/cam/export.js +++ b/src/kiri-mode/cam/export.js @@ -5,7 +5,7 @@ // dep: geo.base // dep: geo.polygons // dep: kiri-mode.cam.driver -gapp.register("kiri-mode.cam.export", [], (root, exports) => { +gapp.register("kiri-mode.cam.export", (root, exports) => { const { base, kiri } = root; const { polygons, util } = base; diff --git a/src/kiri-mode/cam/ops.js b/src/kiri-mode/cam/ops.js index 52150e30..4d19443b 100644 --- a/src/kiri-mode/cam/ops.js +++ b/src/kiri-mode/cam/ops.js @@ -10,7 +10,7 @@ // dep: kiri.slice // use: kiri-mode.cam.topo // use: kiri-mode.cam.topo4 -gapp.register("kiri-mode.cam.ops", [], (root, exports) => { +gapp.register("kiri-mode.cam.ops", (root, exports) => { const { base, kiri } = root; const { paths, polygons, newPoint, newPolygon, sliceConnect } = base; diff --git a/src/kiri-mode/cam/prepare.js b/src/kiri-mode/cam/prepare.js index 86389347..a9114798 100644 --- a/src/kiri-mode/cam/prepare.js +++ b/src/kiri-mode/cam/prepare.js @@ -8,7 +8,7 @@ // dep: kiri.render // dep: kiri-mode.cam.driver // use: kiri-mode.cam.ops -gapp.register("kiri-mode.cam.prepare", [], (root, exports) => { +gapp.register("kiri-mode.cam.prepare", (root, exports) => { const { base, kiri } = root; const { paths, polygons, newPoint } = base; diff --git a/src/kiri-mode/cam/slice.js b/src/kiri-mode/cam/slice.js index 73040ffa..8e9edcec 100644 --- a/src/kiri-mode/cam/slice.js +++ b/src/kiri-mode/cam/slice.js @@ -9,7 +9,7 @@ // use: kiri-mode.cam.slicer // use: kiri-mode.cam.slicer2 // use: kiri-mode.cam.ops -gapp.register("kiri-mode.cam.slice", [], (root, exports) => { +gapp.register("kiri-mode.cam.slice", (root, exports) => { const { base, kiri } = root; const { driver, newSlice, setSliceTracker } = kiri; diff --git a/src/kiri/conf.js b/src/kiri/conf.js index 7a03f5ca..e5d0efec 100644 --- a/src/kiri/conf.js +++ b/src/kiri/conf.js @@ -4,7 +4,7 @@ // dep: add.array // dep: data.local -gapp.register("kiri.conf", [], (root, exports) => { +gapp.register("kiri.conf", (root, exports) => { const { data } = root; const { local } = data; diff --git a/src/kiri/consts.js b/src/kiri/consts.js index 6e745ee9..b77c0f8b 100644 --- a/src/kiri/consts.js +++ b/src/kiri/consts.js @@ -2,7 +2,7 @@ "use strict"; -gapp.register("kiri.consts", [], (root, exports) => { +gapp.register("kiri.consts", (root, exports) => { const COLOR = { wireframe: 0x444444, diff --git a/src/kiri/init.js b/src/kiri/init.js index ae5ce701..031da7a8 100644 --- a/src/kiri/init.js +++ b/src/kiri/init.js @@ -12,7 +12,7 @@ // dep: kiri.selection // use: kiri.tools // use: kiri.pack -gapp.register("kiri.init", [], (root, exports) => { +gapp.register("kiri.init", (root, exports) => { let { base, kiri } = root, { api, catalog, conf, consts, space } = kiri, diff --git a/src/kiri/main.js b/src/kiri/main.js index dad6c5db..1605d133 100644 --- a/src/kiri/main.js +++ b/src/kiri/main.js @@ -23,7 +23,7 @@ // use: kiri.files // use: kiri.frame // use: moto.ajax -gapp.register("kiri.main", [], (root, exports) => { +gapp.register("kiri.main", (root, exports) => { let { data, kiri, moto, noop } = root, { api, consts, lang, Widget, newWidget, utils, stats } = kiri, @@ -995,9 +995,6 @@ gapp.register("kiri.main", [], (root, exports) => { // prevent safari from exiting full screen mode DOC.onkeydown = function (evt) { if (evt.keyCode == 27) evt.preventDefault() } - // complete module loading - // kiri.load_exec(); - // upon restore, seed presets api.event.emit('preset', api.conf.dbo()); diff --git a/src/kiri/settings.js b/src/kiri/settings.js index 88fa6fd8..bbd4daa7 100644 --- a/src/kiri/settings.js +++ b/src/kiri/settings.js @@ -9,7 +9,7 @@ // dep: data.local // use: kiri.widgets // use: ext.base64 -gapp.register("kiri.settings", [], (root, exports) => { +gapp.register("kiri.settings", (root, exports) => { const { data, kiri, moto, noop } = self; const { api, conf, consts, utils } = kiri; diff --git a/src/kiri/tools.js b/src/kiri/tools.js index 71784ce0..ef19635d 100644 --- a/src/kiri/tools.js +++ b/src/kiri/tools.js @@ -2,7 +2,7 @@ // dep: add.three // dep: kiri.api -gapp.register("kiri.tools", [], (root, exports) => { +gapp.register("kiri.tools", (root, exports) => { const { Vector3, Quaternion } = THREE; const { kiri, moto } = root; diff --git a/src/main/gapp.js b/src/main/gapp.js index 521cf3dc..e761be81 100644 --- a/src/main/gapp.js +++ b/src/main/gapp.js @@ -61,6 +61,7 @@ let mods = []; gapp.overlay = Object.assign; +// extract function arguments grouped by type function exargs(args) { return { funcs: args.filter(a => typeof a === 'function'), @@ -70,18 +71,7 @@ function exargs(args) { }; } -// register module without a load function -gapp.register = function() { -// console.log(1, { mods }); - const args = exargs([...arguments]); - const name = args.strings[0]; - const fn = args.funcs[0]; - const mod = { fn, name }; -// console.log(2, { mods }); -// console.log('reg', { mod, mods }); - mods.push(mod); -}; - +// prevent module load from terminating main/init chain function safeFN(fn, name) { return function() { try { @@ -92,12 +82,23 @@ function safeFN(fn, name) { }; } +// register module without a load function +gapp.register = function() { + const args = exargs([...arguments]); + const objs = args.objects || {}; + const name = objs.name || objs.module || args.strings[0]; + const fn = objs.exec || args.funcs[0]; + const mod = { fn, name }; + mods.push(mod); +}; + // perform dependency checks and run module load functions gapp.main = function() { const args = exargs([...arguments]); - const app = args.strings[0]; - const post = args.funcs[0]; - const pre = args.funcs[1]; + const objs = args.objects[0] || {}; + const app = objs.app || args.strings[0]; + const post = objs.post || args.funcs[0]; + const pre = objs.pre || args.funcs[1]; const root = self; // optional fn to run before loading if (pre) { @@ -129,6 +130,7 @@ gapp.main = function() { } let tmp = path[map] || {}; safeFN(fn, name)(root, exports => { + // map exports into module namespace when called if (exports) { return path[map] = Object.assign(tmp, exports); } diff --git a/src/main/kiri.js b/src/main/kiri.js index 91241eb2..c22a6341 100644 --- a/src/main/kiri.js +++ b/src/main/kiri.js @@ -2,37 +2,40 @@ "use strict"; -gapp.main("main.kiri", [], (root) => { +gapp.main({ + app: "kiri", - const { kiri } = root; - const { api } = kiri; + pre(root) { + let mods = root.kirimod = ( root.kirimod || [] ); - // complete module loading - kiri.load_exec(); - -}, (root) => { - - const modfns = root.kirimod = ( root.kirimod || [] ); - - const kiri = root.kiri = { - beta: 4100, - driver: {}, // driver modules - load(fn) { - modfns.push(fn); - }, - load_exec(api) { - const saferun = (fn) => { - try { - fn(api || kiri.api); - } catch (error) { - console.log({ module_error: error }); - } - }; - // complete module loading - modfns.forEach(modfn => saferun(modfn)); - // rewrite load() to be immediate post-finalize - kiri.load = (modfn) => saferun(modfn); - } - }; + let kiri = root.kiri = { + beta: 4100, + driver: { + // attached driver modules + }, + load(fn) { + // modules register exec() functions + mods.push(fn); + }, + load_exec(api) { + // process all module exec() functions + const saferun = (fn) => { + try { + fn(api || kiri.api); + } catch (error) { + console.log({ module_error: error }); + } + }; + // complete module loading + mods.forEach(fn => saferun(fn)); + // rewrite load() to run immediately post-finalize + kiri.load = (fn) => saferun(fn); + } + }; + }, + post(root) { + // complete module loading + root.kiri.load_exec(); + } });