@voxgig/build 4.11.0 → 4.12.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/env/web/web_gen.js +60 -32
- package/dist/env/web/web_gen.js.map +1 -1
- package/env/web/web_gen.ts +67 -34
- package/package.json +1 -1
- package/tm/env/aws/lambda.entry.ts.frag +5 -6
- package/tm/env/azure/entry.ts.frag +4 -3
- package/tm/env/server.entry.ts.frag +4 -6
- package/tm/web/backend/env/web/web.ts.frag +11 -10
- package/tm/web/docs/how-to/add-a-custom-entity-view.md.frag +2 -2
- package/tm/web/docs/how-to/change-the-theme.md.frag +3 -3
- package/tm/web/docs/how-to/customise-the-web-app.md.frag +3 -3
- package/tm/web/docs/reference/web-app.md.frag +1 -1
- package/tm/web/web/src/cmp/view/custom-view.js.frag +1 -1
package/dist/env/web/web_gen.js
CHANGED
|
@@ -30,34 +30,34 @@ const WEB_FILES = [
|
|
|
30
30
|
// an app shell (nav / project selector / user menu / collapsible entity
|
|
31
31
|
// menu), and generic CRUD with relationship navigation. All runtime
|
|
32
32
|
// model-driven (model.js reads /model.json), so it fits any entity graph.
|
|
33
|
-
{ frag: 'web/package.json.frag', out: '
|
|
34
|
-
{ frag: 'web/index.html.frag', out: '
|
|
35
|
-
{ frag: 'web/playwright.config.js.frag', out: '
|
|
36
|
-
{ frag: 'web/src/main.js.frag', out: '
|
|
37
|
-
{ frag: 'web/src/bus.js.frag', out: '
|
|
38
|
-
{ frag: 'web/src/model.js.frag', out: '
|
|
39
|
-
{ frag: 'web/src/api.js.frag', out: '
|
|
40
|
-
{ frag: 'web/src/hooks.js.frag', out: '
|
|
41
|
-
{ frag: 'web/src/theme.js.frag', out: '
|
|
42
|
-
{ frag: 'web/src/customise.js.frag', out: '
|
|
43
|
-
{ frag: 'web/src/custom.css.frag', out: '
|
|
44
|
-
{ frag: 'web/src/style.css.frag', out: '
|
|
45
|
-
{ frag: 'web/src/cmp/app.js.frag', out: '
|
|
46
|
-
{ frag: 'web/src/cmp/public.js.frag', out: '
|
|
47
|
-
{ frag: 'web/src/cmp/auth.js.frag', out: '
|
|
48
|
-
{ frag: 'web/src/cmp/shell.js.frag', out: '
|
|
49
|
-
{ frag: 'web/src/cmp/admin.js.frag', out: '
|
|
50
|
-
{ frag: 'web/src/cmp/settings.js.frag', out: '
|
|
33
|
+
{ frag: 'web/package.json.frag', out: '$$fe$$/package.json' },
|
|
34
|
+
{ frag: 'web/index.html.frag', out: '$$fe$$/index.html' },
|
|
35
|
+
{ frag: 'web/playwright.config.js.frag', out: '$$fe$$/playwright.config.js' },
|
|
36
|
+
{ frag: 'web/src/main.js.frag', out: '$$fe$$/src/main.js' },
|
|
37
|
+
{ frag: 'web/src/bus.js.frag', out: '$$fe$$/src/bus.js' },
|
|
38
|
+
{ frag: 'web/src/model.js.frag', out: '$$fe$$/src/model.js' },
|
|
39
|
+
{ frag: 'web/src/api.js.frag', out: '$$fe$$/src/api.js' },
|
|
40
|
+
{ frag: 'web/src/hooks.js.frag', out: '$$fe$$/src/hooks.js' },
|
|
41
|
+
{ frag: 'web/src/theme.js.frag', out: '$$fe$$/src/theme.js' },
|
|
42
|
+
{ frag: 'web/src/customise.js.frag', out: '$$fe$$/src/customise.js' },
|
|
43
|
+
{ frag: 'web/src/custom.css.frag', out: '$$fe$$/src/custom.css' },
|
|
44
|
+
{ frag: 'web/src/style.css.frag', out: '$$fe$$/src/style.css' },
|
|
45
|
+
{ frag: 'web/src/cmp/app.js.frag', out: '$$fe$$/src/cmp/app.js' },
|
|
46
|
+
{ frag: 'web/src/cmp/public.js.frag', out: '$$fe$$/src/cmp/public.js' },
|
|
47
|
+
{ frag: 'web/src/cmp/auth.js.frag', out: '$$fe$$/src/cmp/auth.js' },
|
|
48
|
+
{ frag: 'web/src/cmp/shell.js.frag', out: '$$fe$$/src/cmp/shell.js' },
|
|
49
|
+
{ frag: 'web/src/cmp/admin.js.frag', out: '$$fe$$/src/cmp/admin.js' },
|
|
50
|
+
{ frag: 'web/src/cmp/settings.js.frag', out: '$$fe$$/src/cmp/settings.js' },
|
|
51
51
|
// Per-component doc sidecars (mermaid structure + message diagrams),
|
|
52
52
|
// create-once next to each component.
|
|
53
|
-
{ frag: 'web/src/cmp/app.md.frag', out: '
|
|
54
|
-
{ frag: 'web/src/cmp/public.md.frag', out: '
|
|
55
|
-
{ frag: 'web/src/cmp/auth.md.frag', out: '
|
|
56
|
-
{ frag: 'web/src/cmp/shell.md.frag', out: '
|
|
57
|
-
{ frag: 'web/src/cmp/admin.md.frag', out: '
|
|
58
|
-
{ frag: 'web/src/cmp/settings.md.frag', out: '
|
|
59
|
-
{ frag: 'web/e2e/smoke.spec.js.frag', out: '
|
|
60
|
-
{ frag: 'web/AGENTS.md.frag', out: '
|
|
53
|
+
{ frag: 'web/src/cmp/app.md.frag', out: '$$fe$$/src/cmp/app.md' },
|
|
54
|
+
{ frag: 'web/src/cmp/public.md.frag', out: '$$fe$$/src/cmp/public.md' },
|
|
55
|
+
{ frag: 'web/src/cmp/auth.md.frag', out: '$$fe$$/src/cmp/auth.md' },
|
|
56
|
+
{ frag: 'web/src/cmp/shell.md.frag', out: '$$fe$$/src/cmp/shell.md' },
|
|
57
|
+
{ frag: 'web/src/cmp/admin.md.frag', out: '$$fe$$/src/cmp/admin.md' },
|
|
58
|
+
{ frag: 'web/src/cmp/settings.md.frag', out: '$$fe$$/src/cmp/settings.md' },
|
|
59
|
+
{ frag: 'web/e2e/smoke.spec.js.frag', out: '$$fe$$/e2e/smoke.spec.js' },
|
|
60
|
+
{ frag: 'web/AGENTS.md.frag', out: '$$fe$$/AGENTS.md' },
|
|
61
61
|
// Project docs (Diátaxis) for the web app, alongside the scaffold's
|
|
62
62
|
// backend docs (@voxgig/create-system DocsPart). Create-once like all
|
|
63
63
|
// WEB_FILES: the project owns its docs after generation.
|
|
@@ -137,12 +137,39 @@ const DEFAULT_USERS = [
|
|
|
137
137
|
{ name: 'Bob Example', email: 'bob@example.com', password: 'bob-pass-01' },
|
|
138
138
|
];
|
|
139
139
|
exports.DEFAULT_USERS = DEFAULT_USERS;
|
|
140
|
+
// The frontend folder name, from the model env entry (`web: { dir: ... }`).
|
|
141
|
+
// Defaults to 'web', so a project that says nothing keeps the layout it
|
|
142
|
+
// already has. Everything that names the folder - the WEB_FILES output
|
|
143
|
+
// paths, views.js, theme.css, and the static path the backend runner
|
|
144
|
+
// serves - goes through this one value, via the $$fe$$ slot.
|
|
145
|
+
//
|
|
146
|
+
// Only the FOLDER moves. The `aim:web` message namespace is unrelated and
|
|
147
|
+
// must never follow it: the gateway allow-list is the literal
|
|
148
|
+
// { 'aim:web': true }, and backend/src/env/web/ is the backend runner, not
|
|
149
|
+
// the SPA.
|
|
150
|
+
const DEFAULT_FE = 'web';
|
|
151
|
+
// Absent means 'web'. ANYTHING ELSE provided is validated rather than
|
|
152
|
+
// silently defaulted - `dir: ''` is a mistake, not a request for 'web', and
|
|
153
|
+
// defaulting it would generate the whole SPA into the project root.
|
|
154
|
+
function feDir(envdef) {
|
|
155
|
+
const dir = null == envdef ? undefined : envdef.dir;
|
|
156
|
+
if (null == dir) {
|
|
157
|
+
return DEFAULT_FE;
|
|
158
|
+
}
|
|
159
|
+
if ('string' !== typeof dir || '' === dir || dir.split('/').includes('..') ||
|
|
160
|
+
path_1.default.isAbsolute(dir)) {
|
|
161
|
+
throw new Error('EnvWeb: env web `dir` must be a non-empty relative folder name, got: ' +
|
|
162
|
+
JSON.stringify(dir));
|
|
163
|
+
}
|
|
164
|
+
return dir;
|
|
165
|
+
}
|
|
140
166
|
// web_gen(model, spec): generate the frontend + backend web pieces into
|
|
141
167
|
// the project. spec.root is the project root (parent of backend/); files
|
|
142
168
|
// that already exist are left untouched (create-once).
|
|
143
169
|
const web_gen = async (model, spec) => {
|
|
144
170
|
const core = (0, conf_1.CoreConfShape)(model.main.conf.core);
|
|
145
171
|
const envdef = spec.env || {};
|
|
172
|
+
const fe = feDir(envdef);
|
|
146
173
|
const users = envdef.users || DEFAULT_USERS;
|
|
147
174
|
const seed = users[0] || DEFAULT_USERS[0];
|
|
148
175
|
const port = envdef.port ||
|
|
@@ -150,6 +177,7 @@ const web_gen = async (model, spec) => {
|
|
|
150
177
|
const slots = {
|
|
151
178
|
name: core.name,
|
|
152
179
|
Name: (0, util_1.camelify)(core.name),
|
|
180
|
+
fe,
|
|
153
181
|
users: JSON.stringify(users, null, 2),
|
|
154
182
|
e2eport: envdef.e2eport || (port + 10),
|
|
155
183
|
seedEmail: seed.email,
|
|
@@ -193,7 +221,7 @@ const web_gen = async (model, spec) => {
|
|
|
193
221
|
});
|
|
194
222
|
// The component starter plus its doc sidecar, both create-once.
|
|
195
223
|
for (const ext of ['js', 'md']) {
|
|
196
|
-
const outrel = '
|
|
224
|
+
const outrel = fe + '/src/cmp/view/' + c.zone + '_' + c.name + '.' + ext;
|
|
197
225
|
const dest = path_1.default.join(spec.root, outrel);
|
|
198
226
|
if (fs_1.default.existsSync(dest) && !spec.force) {
|
|
199
227
|
skipped.push(outrel);
|
|
@@ -207,7 +235,7 @@ const web_gen = async (model, spec) => {
|
|
|
207
235
|
}
|
|
208
236
|
// views.js — the generated index of custom views. Regenerated whenever the
|
|
209
237
|
// set of custom views changes; a no-op run leaves it (and `created`) alone.
|
|
210
|
-
const viewsRel = '
|
|
238
|
+
const viewsRel = fe + '/src/views.js';
|
|
211
239
|
const viewsPath = path_1.default.join(spec.root, viewsRel);
|
|
212
240
|
const viewsBody = '// AUTO-GENERATED: imports every custom entity view (model entities declaring\n' +
|
|
213
241
|
'// ux:{view:\'custom\'}). Regenerated from the model — do not edit. The view\n' +
|
|
@@ -215,7 +243,7 @@ const web_gen = async (model, spec) => {
|
|
|
215
243
|
customs.map((c) => `import './cmp/view/${c.zone}_${c.name}.js'`).join('\n') + '\n';
|
|
216
244
|
const existingViews = fs_1.default.existsSync(viewsPath) ? fs_1.default.readFileSync(viewsPath, 'utf8') : null;
|
|
217
245
|
if (existingViews !== viewsBody) {
|
|
218
|
-
fs_1.default.mkdirSync(path_1.default.join(spec.root, '
|
|
246
|
+
fs_1.default.mkdirSync(path_1.default.join(spec.root, fe, 'src'), { recursive: true });
|
|
219
247
|
fs_1.default.writeFileSync(viewsPath, viewsBody);
|
|
220
248
|
created.push(viewsRel);
|
|
221
249
|
}
|
|
@@ -237,12 +265,12 @@ const web_gen = async (model, spec) => {
|
|
|
237
265
|
const themeBody = '/* AUTO-GENERATED from the model theme (main.theme) — do not edit.\n' +
|
|
238
266
|
' Override tokens in custom.css; add modes via the theme:modes hook. */\n\n' +
|
|
239
267
|
blocks.join('\n\n') + '\n';
|
|
240
|
-
const themePath = path_1.default.join(spec.root, '
|
|
268
|
+
const themePath = path_1.default.join(spec.root, fe, 'src/theme.css');
|
|
241
269
|
const existingTheme = fs_1.default.existsSync(themePath) ? fs_1.default.readFileSync(themePath, 'utf8') : null;
|
|
242
270
|
if (existingTheme !== themeBody) {
|
|
243
|
-
fs_1.default.mkdirSync(path_1.default.join(spec.root, '
|
|
271
|
+
fs_1.default.mkdirSync(path_1.default.join(spec.root, fe, 'src'), { recursive: true });
|
|
244
272
|
fs_1.default.writeFileSync(themePath, themeBody);
|
|
245
|
-
created.push('
|
|
273
|
+
created.push(fe + '/src/theme.css');
|
|
246
274
|
}
|
|
247
275
|
}
|
|
248
276
|
return { created: created.sort(), skipped: skipped.sort() };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web_gen.js","sourceRoot":"","sources":["../../../env/web/web_gen.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web_gen.js","sourceRoot":"","sources":["../../../env/web/web_gen.ts"],"names":[],"mappings":"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"}
|
package/env/web/web_gen.ts
CHANGED
|
@@ -31,35 +31,35 @@ const WEB_FILES: { frag: string, out: string }[] = [
|
|
|
31
31
|
// an app shell (nav / project selector / user menu / collapsible entity
|
|
32
32
|
// menu), and generic CRUD with relationship navigation. All runtime
|
|
33
33
|
// model-driven (model.js reads /model.json), so it fits any entity graph.
|
|
34
|
-
{ frag: 'web/package.json.frag', out: '
|
|
35
|
-
{ frag: 'web/index.html.frag', out: '
|
|
36
|
-
{ frag: 'web/playwright.config.js.frag', out: '
|
|
37
|
-
{ frag: 'web/src/main.js.frag', out: '
|
|
38
|
-
{ frag: 'web/src/bus.js.frag', out: '
|
|
39
|
-
{ frag: 'web/src/model.js.frag', out: '
|
|
40
|
-
{ frag: 'web/src/api.js.frag', out: '
|
|
41
|
-
{ frag: 'web/src/hooks.js.frag', out: '
|
|
42
|
-
{ frag: 'web/src/theme.js.frag', out: '
|
|
43
|
-
{ frag: 'web/src/customise.js.frag', out: '
|
|
44
|
-
{ frag: 'web/src/custom.css.frag', out: '
|
|
45
|
-
{ frag: 'web/src/style.css.frag', out: '
|
|
46
|
-
{ frag: 'web/src/cmp/app.js.frag', out: '
|
|
47
|
-
{ frag: 'web/src/cmp/public.js.frag', out: '
|
|
48
|
-
{ frag: 'web/src/cmp/auth.js.frag', out: '
|
|
49
|
-
{ frag: 'web/src/cmp/shell.js.frag', out: '
|
|
50
|
-
{ frag: 'web/src/cmp/admin.js.frag', out: '
|
|
51
|
-
{ frag: 'web/src/cmp/settings.js.frag', out: '
|
|
34
|
+
{ frag: 'web/package.json.frag', out: '$$fe$$/package.json' },
|
|
35
|
+
{ frag: 'web/index.html.frag', out: '$$fe$$/index.html' },
|
|
36
|
+
{ frag: 'web/playwright.config.js.frag', out: '$$fe$$/playwright.config.js' },
|
|
37
|
+
{ frag: 'web/src/main.js.frag', out: '$$fe$$/src/main.js' },
|
|
38
|
+
{ frag: 'web/src/bus.js.frag', out: '$$fe$$/src/bus.js' },
|
|
39
|
+
{ frag: 'web/src/model.js.frag', out: '$$fe$$/src/model.js' },
|
|
40
|
+
{ frag: 'web/src/api.js.frag', out: '$$fe$$/src/api.js' },
|
|
41
|
+
{ frag: 'web/src/hooks.js.frag', out: '$$fe$$/src/hooks.js' },
|
|
42
|
+
{ frag: 'web/src/theme.js.frag', out: '$$fe$$/src/theme.js' },
|
|
43
|
+
{ frag: 'web/src/customise.js.frag', out: '$$fe$$/src/customise.js' },
|
|
44
|
+
{ frag: 'web/src/custom.css.frag', out: '$$fe$$/src/custom.css' },
|
|
45
|
+
{ frag: 'web/src/style.css.frag', out: '$$fe$$/src/style.css' },
|
|
46
|
+
{ frag: 'web/src/cmp/app.js.frag', out: '$$fe$$/src/cmp/app.js' },
|
|
47
|
+
{ frag: 'web/src/cmp/public.js.frag', out: '$$fe$$/src/cmp/public.js' },
|
|
48
|
+
{ frag: 'web/src/cmp/auth.js.frag', out: '$$fe$$/src/cmp/auth.js' },
|
|
49
|
+
{ frag: 'web/src/cmp/shell.js.frag', out: '$$fe$$/src/cmp/shell.js' },
|
|
50
|
+
{ frag: 'web/src/cmp/admin.js.frag', out: '$$fe$$/src/cmp/admin.js' },
|
|
51
|
+
{ frag: 'web/src/cmp/settings.js.frag', out: '$$fe$$/src/cmp/settings.js' },
|
|
52
52
|
|
|
53
53
|
// Per-component doc sidecars (mermaid structure + message diagrams),
|
|
54
54
|
// create-once next to each component.
|
|
55
|
-
{ frag: 'web/src/cmp/app.md.frag', out: '
|
|
56
|
-
{ frag: 'web/src/cmp/public.md.frag', out: '
|
|
57
|
-
{ frag: 'web/src/cmp/auth.md.frag', out: '
|
|
58
|
-
{ frag: 'web/src/cmp/shell.md.frag', out: '
|
|
59
|
-
{ frag: 'web/src/cmp/admin.md.frag', out: '
|
|
60
|
-
{ frag: 'web/src/cmp/settings.md.frag', out: '
|
|
61
|
-
{ frag: 'web/e2e/smoke.spec.js.frag', out: '
|
|
62
|
-
{ frag: 'web/AGENTS.md.frag', out: '
|
|
55
|
+
{ frag: 'web/src/cmp/app.md.frag', out: '$$fe$$/src/cmp/app.md' },
|
|
56
|
+
{ frag: 'web/src/cmp/public.md.frag', out: '$$fe$$/src/cmp/public.md' },
|
|
57
|
+
{ frag: 'web/src/cmp/auth.md.frag', out: '$$fe$$/src/cmp/auth.md' },
|
|
58
|
+
{ frag: 'web/src/cmp/shell.md.frag', out: '$$fe$$/src/cmp/shell.md' },
|
|
59
|
+
{ frag: 'web/src/cmp/admin.md.frag', out: '$$fe$$/src/cmp/admin.md' },
|
|
60
|
+
{ frag: 'web/src/cmp/settings.md.frag', out: '$$fe$$/src/cmp/settings.md' },
|
|
61
|
+
{ frag: 'web/e2e/smoke.spec.js.frag', out: '$$fe$$/e2e/smoke.spec.js' },
|
|
62
|
+
{ frag: 'web/AGENTS.md.frag', out: '$$fe$$/AGENTS.md' },
|
|
63
63
|
|
|
64
64
|
// Project docs (Diátaxis) for the web app, alongside the scaffold's
|
|
65
65
|
// backend docs (@voxgig/create-system DocsPart). Create-once like all
|
|
@@ -149,19 +149,51 @@ const DEFAULT_USERS = [
|
|
|
149
149
|
]
|
|
150
150
|
|
|
151
151
|
|
|
152
|
+
// The frontend folder name, from the model env entry (`web: { dir: ... }`).
|
|
153
|
+
// Defaults to 'web', so a project that says nothing keeps the layout it
|
|
154
|
+
// already has. Everything that names the folder - the WEB_FILES output
|
|
155
|
+
// paths, views.js, theme.css, and the static path the backend runner
|
|
156
|
+
// serves - goes through this one value, via the $$fe$$ slot.
|
|
157
|
+
//
|
|
158
|
+
// Only the FOLDER moves. The `aim:web` message namespace is unrelated and
|
|
159
|
+
// must never follow it: the gateway allow-list is the literal
|
|
160
|
+
// { 'aim:web': true }, and backend/src/env/web/ is the backend runner, not
|
|
161
|
+
// the SPA.
|
|
162
|
+
const DEFAULT_FE = 'web'
|
|
163
|
+
|
|
164
|
+
// Absent means 'web'. ANYTHING ELSE provided is validated rather than
|
|
165
|
+
// silently defaulted - `dir: ''` is a mistake, not a request for 'web', and
|
|
166
|
+
// defaulting it would generate the whole SPA into the project root.
|
|
167
|
+
function feDir(envdef: any): string {
|
|
168
|
+
const dir = null == envdef ? undefined : envdef.dir
|
|
169
|
+
if (null == dir) {
|
|
170
|
+
return DEFAULT_FE
|
|
171
|
+
}
|
|
172
|
+
if ('string' !== typeof dir || '' === dir || dir.split('/').includes('..') ||
|
|
173
|
+
Path.isAbsolute(dir)) {
|
|
174
|
+
throw new Error(
|
|
175
|
+
'EnvWeb: env web `dir` must be a non-empty relative folder name, got: ' +
|
|
176
|
+
JSON.stringify(dir))
|
|
177
|
+
}
|
|
178
|
+
return dir
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
|
|
152
182
|
// web_gen(model, spec): generate the frontend + backend web pieces into
|
|
153
183
|
// the project. spec.root is the project root (parent of backend/); files
|
|
154
184
|
// that already exist are left untouched (create-once).
|
|
155
185
|
const web_gen = async (model: any, spec: {
|
|
156
|
-
root: string // project root (holds backend/ and
|
|
186
|
+
root: string // project root (holds backend/ and the frontend folder)
|
|
157
187
|
tm?: string // project tm/web folder (fragment shadowing)
|
|
158
|
-
env?: any // the model env entry (config: port, users)
|
|
188
|
+
env?: any // the model env entry (config: port, users, dir)
|
|
159
189
|
force?: boolean // overwrite existing files (default: create-once)
|
|
160
190
|
}) => {
|
|
161
191
|
|
|
162
192
|
const core = CoreConfShape(model.main.conf.core)
|
|
163
193
|
const envdef = spec.env || {}
|
|
164
194
|
|
|
195
|
+
const fe = feDir(envdef)
|
|
196
|
+
|
|
165
197
|
const users = envdef.users || DEFAULT_USERS
|
|
166
198
|
const seed = users[0] || DEFAULT_USERS[0]
|
|
167
199
|
const port = envdef.port ||
|
|
@@ -170,6 +202,7 @@ const web_gen = async (model: any, spec: {
|
|
|
170
202
|
const slots: Record<string, any> = {
|
|
171
203
|
name: core.name,
|
|
172
204
|
Name: camelify(core.name),
|
|
205
|
+
fe,
|
|
173
206
|
users: JSON.stringify(users, null, 2),
|
|
174
207
|
e2eport: envdef.e2eport || (port + 10),
|
|
175
208
|
seedEmail: seed.email,
|
|
@@ -219,7 +252,7 @@ const web_gen = async (model: any, spec: {
|
|
|
219
252
|
})
|
|
220
253
|
// The component starter plus its doc sidecar, both create-once.
|
|
221
254
|
for (const ext of ['js', 'md']) {
|
|
222
|
-
const outrel = '
|
|
255
|
+
const outrel = fe + '/src/cmp/view/' + c.zone + '_' + c.name + '.' + ext
|
|
223
256
|
const dest = Path.join(spec.root, outrel)
|
|
224
257
|
if (Fs.existsSync(dest) && !spec.force) {
|
|
225
258
|
skipped.push(outrel)
|
|
@@ -235,7 +268,7 @@ const web_gen = async (model: any, spec: {
|
|
|
235
268
|
|
|
236
269
|
// views.js — the generated index of custom views. Regenerated whenever the
|
|
237
270
|
// set of custom views changes; a no-op run leaves it (and `created`) alone.
|
|
238
|
-
const viewsRel = '
|
|
271
|
+
const viewsRel = fe + '/src/views.js'
|
|
239
272
|
const viewsPath = Path.join(spec.root, viewsRel)
|
|
240
273
|
const viewsBody =
|
|
241
274
|
'// AUTO-GENERATED: imports every custom entity view (model entities declaring\n' +
|
|
@@ -244,7 +277,7 @@ const web_gen = async (model: any, spec: {
|
|
|
244
277
|
customs.map((c) => `import './cmp/view/${c.zone}_${c.name}.js'`).join('\n') + '\n'
|
|
245
278
|
const existingViews = Fs.existsSync(viewsPath) ? Fs.readFileSync(viewsPath, 'utf8') : null
|
|
246
279
|
if (existingViews !== viewsBody) {
|
|
247
|
-
Fs.mkdirSync(Path.join(spec.root, '
|
|
280
|
+
Fs.mkdirSync(Path.join(spec.root, fe, 'src'), { recursive: true })
|
|
248
281
|
Fs.writeFileSync(viewsPath, viewsBody)
|
|
249
282
|
created.push(viewsRel)
|
|
250
283
|
}
|
|
@@ -268,12 +301,12 @@ const web_gen = async (model: any, spec: {
|
|
|
268
301
|
'/* AUTO-GENERATED from the model theme (main.theme) — do not edit.\n' +
|
|
269
302
|
' Override tokens in custom.css; add modes via the theme:modes hook. */\n\n' +
|
|
270
303
|
blocks.join('\n\n') + '\n'
|
|
271
|
-
const themePath = Path.join(spec.root, '
|
|
304
|
+
const themePath = Path.join(spec.root, fe, 'src/theme.css')
|
|
272
305
|
const existingTheme = Fs.existsSync(themePath) ? Fs.readFileSync(themePath, 'utf8') : null
|
|
273
306
|
if (existingTheme !== themeBody) {
|
|
274
|
-
Fs.mkdirSync(Path.join(spec.root, '
|
|
307
|
+
Fs.mkdirSync(Path.join(spec.root, fe, 'src'), { recursive: true })
|
|
275
308
|
Fs.writeFileSync(themePath, themeBody)
|
|
276
|
-
created.push('
|
|
309
|
+
created.push(fe + '/src/theme.css')
|
|
277
310
|
}
|
|
278
311
|
}
|
|
279
312
|
|
package/package.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
// shared setup (src/env/shared/basic.ts).
|
|
7
7
|
|
|
8
8
|
import Seneca from 'seneca'
|
|
9
|
-
import { Live } from '@voxgig/system'
|
|
9
|
+
import { Live, context } from '@voxgig/system'
|
|
10
10
|
|
|
11
11
|
import { basic, base } from '../shared/basic'
|
|
12
12
|
|
|
@@ -32,11 +32,10 @@ async function getSeneca(srvname: string, complete: Function): Promise<any> {
|
|
|
32
32
|
timeout: srv.env.lambda.timeout * 60 * 1000,
|
|
33
33
|
})).test()
|
|
34
34
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
seneca
|
|
39
|
-
seneca.context.pkg = Pkg
|
|
35
|
+
// Runtime context: model/pkg/env/stage/srvname. Lambda is the one
|
|
36
|
+
// deployment with a service PER function, so srvname is explicit, and
|
|
37
|
+
// STAGE is resolved here (above) rather than left to context().
|
|
38
|
+
context(seneca, Model, Pkg, { env: 'lambda', srvname, stage: STAGE })
|
|
40
39
|
|
|
41
40
|
basic(seneca, { reload: { active: false } })
|
|
42
41
|
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// wire the Seneca gateway the way src/env/lambda/lambda.ts does for AWS.
|
|
5
5
|
|
|
6
6
|
import Seneca from 'seneca'
|
|
7
|
+
import { context } from '@voxgig/system'
|
|
7
8
|
|
|
8
9
|
import { basic, base } from '../shared/basic'
|
|
9
10
|
|
|
@@ -19,9 +20,9 @@ async function getSeneca(): Promise<any> {
|
|
|
19
20
|
tag: '$$name$$-azure@' + Pkg.version,
|
|
20
21
|
})).test()
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
seneca
|
|
23
|
+
// Runtime context: model/pkg/env/stage/srvname. This entry used to set
|
|
24
|
+
// only model/env/pkg - `stage` and `srvname` were simply missing.
|
|
25
|
+
context(seneca, Model, Pkg, { env: 'azure' })
|
|
25
26
|
|
|
26
27
|
basic(seneca, { reload: { active: false } })
|
|
27
28
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// (main.env.$$env$$).
|
|
6
6
|
|
|
7
7
|
import Seneca from 'seneca'
|
|
8
|
-
import { Local } from '@voxgig/system'
|
|
8
|
+
import { Local, context } from '@voxgig/system'
|
|
9
9
|
|
|
10
10
|
import { basic, base } from '../shared/basic'
|
|
11
11
|
|
|
@@ -26,11 +26,9 @@ async function run() {
|
|
|
26
26
|
log: { level: envdef.log || 'warn' },
|
|
27
27
|
}, envdef.seneca || {}))
|
|
28
28
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
seneca
|
|
32
|
-
seneca.context.srvname = 'all'
|
|
33
|
-
seneca.context.pkg = Pkg
|
|
29
|
+
// Runtime context: model/pkg/env/stage/srvname. `stage` resolves from
|
|
30
|
+
// STAGE, then the model's main.env.$$env$$.stage, then the env name.
|
|
31
|
+
context(seneca, Model, Pkg, { env: '$$env$$' })
|
|
34
32
|
|
|
35
33
|
basic(seneca)
|
|
36
34
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
|
|
2
2
|
// Local web runner: the local in-memory backend plus an HTTP layer for
|
|
3
|
-
// the SPA - express serving
|
|
3
|
+
// the SPA - express serving the frontend dist, the model, and a single seneca
|
|
4
4
|
// gateway endpoint (/seneca) that the browser-side Seneca bus posts
|
|
5
5
|
// messages to (seneca-browser fetch transport). Cookie auth via
|
|
6
6
|
// @seneca/gateway-auth (express_cookie): signin sets the todo-auth
|
|
@@ -15,7 +15,7 @@ import Express from 'express'
|
|
|
15
15
|
import CookieParser from 'cookie-parser'
|
|
16
16
|
|
|
17
17
|
import Seneca from 'seneca'
|
|
18
|
-
import { Local } from '@voxgig/system'
|
|
18
|
+
import { Local, context } from '@voxgig/system'
|
|
19
19
|
|
|
20
20
|
import { basic, base } from '../shared/basic'
|
|
21
21
|
import { seedDemo } from '../shared/seed'
|
|
@@ -40,11 +40,10 @@ async function run() {
|
|
|
40
40
|
|
|
41
41
|
const seneca = Seneca(deep(base.seneca, { tag: '$$name$$-web' }))
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
seneca
|
|
47
|
-
seneca.context.pkg = Pkg
|
|
43
|
+
// Runtime context: model/pkg/env/stage/srvname. env is 'web' - this IS
|
|
44
|
+
// the web environment entry. It reported 'local' before context()
|
|
45
|
+
// existed, which no longer matched the entry it was generated for.
|
|
46
|
+
context(seneca, Model, Pkg, { env: 'web' })
|
|
48
47
|
|
|
49
48
|
seneca.test()
|
|
50
49
|
|
|
@@ -120,10 +119,12 @@ async function run() {
|
|
|
120
119
|
await seedDemo(seneca, usersByEmail)
|
|
121
120
|
|
|
122
121
|
const app = Express()
|
|
123
|
-
//
|
|
124
|
-
// project root, then
|
|
122
|
+
// The frontend folder is a sibling of backend/; from dist/env/local go
|
|
123
|
+
// up to the project root, then into its dist. The folder name comes from
|
|
124
|
+
// the model (env web `dir`, default 'web'), so it stays in step if the
|
|
125
|
+
// project renames it.
|
|
125
126
|
const webdist = Path.join(
|
|
126
|
-
__dirname, '..', '..', '..', '..', '
|
|
127
|
+
__dirname, '..', '..', '..', '..', '$$fe$$', 'dist')
|
|
127
128
|
|
|
128
129
|
app
|
|
129
130
|
.use(Express.json())
|
|
@@ -17,9 +17,9 @@ shop: product: ux: { view: 'custom' }
|
|
|
17
17
|
cd backend && npm run model-build
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
This creates
|
|
20
|
+
This creates `$$fe$$/src/cmp/view/shop_product.js` (a working starter
|
|
21
21
|
component — create-once, so your edits survive every future build) and
|
|
22
|
-
regenerates
|
|
22
|
+
regenerates `$$fe$$/src/views.js`, the index that imports all custom views.
|
|
23
23
|
The shell now mounts `<vg-view-shop-product>` instead of the generic
|
|
24
24
|
`<vg-entity-admin>` for that entity.
|
|
25
25
|
|
|
@@ -23,7 +23,7 @@ Then regenerate:
|
|
|
23
23
|
cd backend && npm run model-build
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
`$$fe$$/src/theme.css` is rewritten: every token becomes a CSS variable
|
|
27
27
|
(`--vg-primary`, ...) scoped to its mode
|
|
28
28
|
(`:root[data-theme-mode="light"]`; the default mode also on `:root`).
|
|
29
29
|
Do not edit `theme.css` by hand — it regenerates from the model.
|
|
@@ -38,7 +38,7 @@ choice persists (localStorage `vg-theme-mode`).
|
|
|
38
38
|
|
|
39
39
|
## Override per project without touching the model
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
`$$fe$$/src/custom.css` loads after the theme:
|
|
42
42
|
|
|
43
43
|
```css
|
|
44
44
|
:root { --vg-radius: 10px; } /* all modes */
|
|
@@ -48,7 +48,7 @@ choice persists (localStorage `vg-theme-mode`).
|
|
|
48
48
|
## Add modes or intercept the mode list at runtime
|
|
49
49
|
|
|
50
50
|
```js
|
|
51
|
-
//
|
|
51
|
+
// $$fe$$/src/customise.js
|
|
52
52
|
import * as Hooks from './hooks.js'
|
|
53
53
|
Hooks.addFilter('theme:modes', (modes) => [...modes, 'sepia'])
|
|
54
54
|
```
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
without editing generated components.*
|
|
5
5
|
|
|
6
6
|
Customisations live in two create-once files that survive regeneration:
|
|
7
|
-
|
|
7
|
+
`$$fe$$/src/customise.js` (hook registrations) and `$$fe$$/src/custom.css`
|
|
8
8
|
(style overrides).
|
|
9
9
|
|
|
10
10
|
## Inject or change HTML
|
|
11
11
|
|
|
12
12
|
```js
|
|
13
|
-
//
|
|
13
|
+
// $$fe$$/src/customise.js
|
|
14
14
|
import * as Hooks from './hooks.js'
|
|
15
15
|
|
|
16
16
|
Hooks.addHtml('shell:topbar:right', () => '<span class="vg-badge">Beta</span>')
|
|
@@ -46,7 +46,7 @@ and skipped). The full list of points is in the
|
|
|
46
46
|
## Override styles
|
|
47
47
|
|
|
48
48
|
Generated styles use CSS variables from the theme. Override tokens or add
|
|
49
|
-
rules in
|
|
49
|
+
rules in `$$fe$$/src/custom.css`:
|
|
50
50
|
|
|
51
51
|
```css
|
|
52
52
|
:root { --vg-primary: #7c3aed; }
|
|
@@ -39,7 +39,7 @@ class $$className$$ extends HTMLElement {
|
|
|
39
39
|
`<li>${String(null == it[labelField] ? it.id : it[labelField])}</li>`).join('')
|
|
40
40
|
|| '<li class="vg-muted">Nothing yet.</li>'}</ul>
|
|
41
41
|
<p class="vg-hint">Hand-coded custom view — edit
|
|
42
|
-
|
|
42
|
+
$$fe$$/src/cmp/view/$$zone$$_$$name$$.js to build it out.</p>
|
|
43
43
|
</div>`
|
|
44
44
|
}
|
|
45
45
|
}
|