@orkestrel/scaffold 0.0.18 → 0.0.19
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/host/AGENTS.md +4 -2
- package/dist/host/CLAUDE.md +22 -10
- package/dist/host/agents/skills/enterprise-bootstrap/SKILL.md +267 -0
- package/dist/host/agents/skills/enterprise-bootstrap/agents/openai.yaml +4 -0
- package/dist/host/agents/skills/enterprise-bootstrap/references/bootstrap-reference.md +609 -0
- package/dist/host/agents/skills/enterprise-bootstrap/references/components.md +994 -0
- package/dist/host/agents/skills/enterprise-bootstrap/references/frontend-design.md +59 -0
- package/dist/host/agents/skills/enterprise-bootstrap/references/utilities.md +312 -0
- package/dist/host/agents/skills/orkestrel-align-packages/references/integration.md +4 -13
- package/dist/host/agents/skills/orkestrel-build-application/SKILL.md +78 -50
- package/dist/host/agents/skills/orkestrel-debrief/SKILL.md +81 -0
- package/dist/host/agents/skills/orkestrel-debrief/agents/openai.yaml +4 -0
- package/dist/host/agents/skills/orkestrel-debrief/references/field-testing.md +75 -0
- package/dist/host/agents/skills/orkestrel-harden-package/SKILL.md +11 -9
- package/dist/host/agents/skills/orkestrel-harden-package/references/centralization.md +44 -59
- package/dist/host/agents/skills/orkestrel-harden-package/references/hardening.md +14 -6
- package/dist/host/agents/skills/orkestrel-polish-surface/SKILL.md +113 -0
- package/dist/host/agents/skills/orkestrel-polish-surface/agents/openai.yaml +4 -0
- package/dist/host/agents/skills/orkestrel-polish-surface/references/capture-harness.md +82 -0
- package/dist/host/claude/agents/builder.md +2 -0
- package/dist/host/claude/agents/codex.md +33 -26
- package/dist/host/claude/agents/grok.md +7 -0
- package/dist/host/claude/agents/implementer.md +2 -1
- package/dist/host/claude/agents/orkestrel.md +20 -15
- package/dist/host/claude/agents/planner.md +2 -1
- package/dist/host/claude/agents/reviewer.md +6 -0
- package/dist/host/claude/rules/documentation.md +1 -0
- package/dist/host/claude/rules/names.md +5 -7
- package/dist/host/claude/rules/quality.md +7 -5
- package/dist/host/claude/rules/styles.md +1 -0
- package/dist/host/claude/rules/tests.md +1 -0
- package/dist/host/claude/rules/typescript.md +3 -10
- package/dist/host/claude/rules/workspace.md +2 -5
- package/dist/host/claude/skills/enterprise-bootstrap/SKILL.md +12 -0
- package/dist/host/claude/skills/orkestrel-debrief/SKILL.md +12 -0
- package/dist/host/claude/skills/orkestrel-polish-surface/SKILL.md +12 -0
- package/dist/host/codex/agents/analyst.toml +6 -3
- package/dist/host/codex/agents/builder.toml +3 -2
- package/dist/host/codex/agents/checker.toml +4 -2
- package/dist/host/codex/agents/grok.toml +3 -1
- package/dist/host/codex/agents/implementer.toml +4 -2
- package/dist/host/codex/agents/opus.toml +5 -3
- package/dist/host/codex/agents/orkestrel.toml +6 -5
- package/dist/host/codex/agents/planner.toml +6 -2
- package/dist/host/codex/agents/reviewer.toml +7 -2
- package/dist/host/codex/config.toml +11 -2
- package/dist/host/dotfiles/prettierignore +3 -0
- package/dist/host/guides/src/scaffold.md +42 -12
- package/dist/host/manifest.json +80 -9
- package/dist/src/core/index.cjs +162 -14
- package/dist/src/core/index.cjs.map +1 -1
- package/dist/src/core/index.d.cts +17 -6
- package/dist/src/core/index.d.ts +17 -6
- package/dist/src/core/index.js +162 -15
- package/dist/src/core/index.js.map +1 -1
- package/dist/src/server/index.cjs +9 -3
- package/dist/src/server/index.cjs.map +1 -1
- package/dist/src/server/index.d.cts +2 -1
- package/dist/src/server/index.d.ts +2 -1
- package/dist/src/server/index.js +10 -4
- package/dist/src/server/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/host/agents/skills/orkestrel-build-application/references/application.md +0 -129
- package/dist/host/claude/agents/application.md +0 -30
- package/dist/host/codex/agents/application.toml +0 -25
package/dist/host/manifest.json
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"entries": [
|
|
3
|
+
{
|
|
4
|
+
"storage": "agents/skills/enterprise-bootstrap/SKILL.md",
|
|
5
|
+
"destination": ".agents/skills/enterprise-bootstrap/SKILL.md",
|
|
6
|
+
"executable": false
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"storage": "agents/skills/enterprise-bootstrap/agents/openai.yaml",
|
|
10
|
+
"destination": ".agents/skills/enterprise-bootstrap/agents/openai.yaml",
|
|
11
|
+
"executable": false
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"storage": "agents/skills/enterprise-bootstrap/references/bootstrap-reference.md",
|
|
15
|
+
"destination": ".agents/skills/enterprise-bootstrap/references/bootstrap-reference.md",
|
|
16
|
+
"executable": false
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"storage": "agents/skills/enterprise-bootstrap/references/components.md",
|
|
20
|
+
"destination": ".agents/skills/enterprise-bootstrap/references/components.md",
|
|
21
|
+
"executable": false
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"storage": "agents/skills/enterprise-bootstrap/references/frontend-design.md",
|
|
25
|
+
"destination": ".agents/skills/enterprise-bootstrap/references/frontend-design.md",
|
|
26
|
+
"executable": false
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"storage": "agents/skills/enterprise-bootstrap/references/utilities.md",
|
|
30
|
+
"destination": ".agents/skills/enterprise-bootstrap/references/utilities.md",
|
|
31
|
+
"executable": false
|
|
32
|
+
},
|
|
3
33
|
{
|
|
4
34
|
"storage": "agents/skills/orkestrel-align-packages/SKILL.md",
|
|
5
35
|
"destination": ".agents/skills/orkestrel-align-packages/SKILL.md",
|
|
@@ -31,8 +61,18 @@
|
|
|
31
61
|
"executable": false
|
|
32
62
|
},
|
|
33
63
|
{
|
|
34
|
-
"storage": "agents/skills/orkestrel-
|
|
35
|
-
"destination": ".agents/skills/orkestrel-
|
|
64
|
+
"storage": "agents/skills/orkestrel-debrief/SKILL.md",
|
|
65
|
+
"destination": ".agents/skills/orkestrel-debrief/SKILL.md",
|
|
66
|
+
"executable": false
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"storage": "agents/skills/orkestrel-debrief/agents/openai.yaml",
|
|
70
|
+
"destination": ".agents/skills/orkestrel-debrief/agents/openai.yaml",
|
|
71
|
+
"executable": false
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"storage": "agents/skills/orkestrel-debrief/references/field-testing.md",
|
|
75
|
+
"destination": ".agents/skills/orkestrel-debrief/references/field-testing.md",
|
|
36
76
|
"executable": false
|
|
37
77
|
},
|
|
38
78
|
{
|
|
@@ -66,8 +106,18 @@
|
|
|
66
106
|
"executable": false
|
|
67
107
|
},
|
|
68
108
|
{
|
|
69
|
-
"storage": "
|
|
70
|
-
"destination": ".
|
|
109
|
+
"storage": "agents/skills/orkestrel-polish-surface/SKILL.md",
|
|
110
|
+
"destination": ".agents/skills/orkestrel-polish-surface/SKILL.md",
|
|
111
|
+
"executable": false
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"storage": "agents/skills/orkestrel-polish-surface/agents/openai.yaml",
|
|
115
|
+
"destination": ".agents/skills/orkestrel-polish-surface/agents/openai.yaml",
|
|
116
|
+
"executable": false
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"storage": "agents/skills/orkestrel-polish-surface/references/capture-harness.md",
|
|
120
|
+
"destination": ".agents/skills/orkestrel-polish-surface/references/capture-harness.md",
|
|
71
121
|
"executable": false
|
|
72
122
|
},
|
|
73
123
|
{
|
|
@@ -175,6 +225,11 @@
|
|
|
175
225
|
"destination": ".claude/settings.json",
|
|
176
226
|
"executable": false
|
|
177
227
|
},
|
|
228
|
+
{
|
|
229
|
+
"storage": "claude/skills/enterprise-bootstrap/SKILL.md",
|
|
230
|
+
"destination": ".claude/skills/enterprise-bootstrap/SKILL.md",
|
|
231
|
+
"executable": false
|
|
232
|
+
},
|
|
178
233
|
{
|
|
179
234
|
"storage": "claude/skills/orkestrel-align-packages/SKILL.md",
|
|
180
235
|
"destination": ".claude/skills/orkestrel-align-packages/SKILL.md",
|
|
@@ -185,19 +240,24 @@
|
|
|
185
240
|
"destination": ".claude/skills/orkestrel-build-application/SKILL.md",
|
|
186
241
|
"executable": false
|
|
187
242
|
},
|
|
243
|
+
{
|
|
244
|
+
"storage": "claude/skills/orkestrel-debrief/SKILL.md",
|
|
245
|
+
"destination": ".claude/skills/orkestrel-debrief/SKILL.md",
|
|
246
|
+
"executable": false
|
|
247
|
+
},
|
|
188
248
|
{
|
|
189
249
|
"storage": "claude/skills/orkestrel-harden-package/SKILL.md",
|
|
190
250
|
"destination": ".claude/skills/orkestrel-harden-package/SKILL.md",
|
|
191
251
|
"executable": false
|
|
192
252
|
},
|
|
193
253
|
{
|
|
194
|
-
"storage": "
|
|
195
|
-
"destination": ".
|
|
254
|
+
"storage": "claude/skills/orkestrel-polish-surface/SKILL.md",
|
|
255
|
+
"destination": ".claude/skills/orkestrel-polish-surface/SKILL.md",
|
|
196
256
|
"executable": false
|
|
197
257
|
},
|
|
198
258
|
{
|
|
199
|
-
"storage": "codex/agents/
|
|
200
|
-
"destination": ".codex/agents/
|
|
259
|
+
"storage": "codex/agents/analyst.toml",
|
|
260
|
+
"destination": ".codex/agents/analyst.toml",
|
|
201
261
|
"executable": false
|
|
202
262
|
},
|
|
203
263
|
{
|
|
@@ -349,22 +409,33 @@
|
|
|
349
409
|
"roots": [
|
|
350
410
|
".agents",
|
|
351
411
|
".agents/skills",
|
|
412
|
+
".agents/skills/enterprise-bootstrap",
|
|
413
|
+
".agents/skills/enterprise-bootstrap/agents",
|
|
414
|
+
".agents/skills/enterprise-bootstrap/references",
|
|
352
415
|
".agents/skills/orkestrel-align-packages",
|
|
353
416
|
".agents/skills/orkestrel-align-packages/agents",
|
|
354
417
|
".agents/skills/orkestrel-align-packages/references",
|
|
355
418
|
".agents/skills/orkestrel-build-application",
|
|
356
419
|
".agents/skills/orkestrel-build-application/agents",
|
|
357
|
-
".agents/skills/orkestrel-
|
|
420
|
+
".agents/skills/orkestrel-debrief",
|
|
421
|
+
".agents/skills/orkestrel-debrief/agents",
|
|
422
|
+
".agents/skills/orkestrel-debrief/references",
|
|
358
423
|
".agents/skills/orkestrel-harden-package",
|
|
359
424
|
".agents/skills/orkestrel-harden-package/agents",
|
|
360
425
|
".agents/skills/orkestrel-harden-package/references",
|
|
426
|
+
".agents/skills/orkestrel-polish-surface",
|
|
427
|
+
".agents/skills/orkestrel-polish-surface/agents",
|
|
428
|
+
".agents/skills/orkestrel-polish-surface/references",
|
|
361
429
|
".claude",
|
|
362
430
|
".claude/agents",
|
|
363
431
|
".claude/rules",
|
|
364
432
|
".claude/skills",
|
|
433
|
+
".claude/skills/enterprise-bootstrap",
|
|
365
434
|
".claude/skills/orkestrel-align-packages",
|
|
366
435
|
".claude/skills/orkestrel-build-application",
|
|
436
|
+
".claude/skills/orkestrel-debrief",
|
|
367
437
|
".claude/skills/orkestrel-harden-package",
|
|
438
|
+
".claude/skills/orkestrel-polish-surface",
|
|
368
439
|
".codex",
|
|
369
440
|
".codex/agents",
|
|
370
441
|
".cursor",
|
package/dist/src/core/index.cjs
CHANGED
|
@@ -145,6 +145,8 @@ var HOST_PATHS = Object.freeze([
|
|
|
145
145
|
var SERVICE_SCRIPT_PATH = "scripts/service.sh";
|
|
146
146
|
/** The consumer-owned Vitest global-setup module shared by its independently selected projects. */
|
|
147
147
|
var GLOBAL_SETUP_PATH = "tests/setupGlobal.ts";
|
|
148
|
+
/** The consumer-owned Vite wrapper whose physical presence enables the optional app showcase. */
|
|
149
|
+
var SHOWCASE_CONFIG_PATH = "configs/app/vite.showcase.config.ts";
|
|
148
150
|
/** The package-name RegExp — lowercase alphanumeric-with-hyphens, letter-first. */
|
|
149
151
|
var NAME_PATTERN = /^[a-z][a-z0-9-]*$/;
|
|
150
152
|
/** Maximum bare workspace name length beneath the generated `@orkestrel/` scope. */
|
|
@@ -227,7 +229,7 @@ var DEFAULT_VERSION = "0.0.1";
|
|
|
227
229
|
/** The `engines.node` range the `blueprint` builder fills. */
|
|
228
230
|
var DEFAULT_ENGINES = `>=${MINIMUM_NODE_VERSION}`;
|
|
229
231
|
/** The devDependency range generated packages pin `@orkestrel/scaffold` at. */
|
|
230
|
-
var SCAFFOLD_RANGE = "^0.0.
|
|
232
|
+
var SCAFFOLD_RANGE = "^0.0.19";
|
|
231
233
|
/** Tooling versions shared by scaffold and every generated workspace. */
|
|
232
234
|
var BASE_DEV_DEPENDENCIES = Object.freeze({
|
|
233
235
|
"@microsoft/api-extractor": "^7.58.12",
|
|
@@ -427,7 +429,7 @@ function member(name, category, summary, environment = "core") {
|
|
|
427
429
|
* `version` / `engines` default `DEFAULT_VERSION` / `DEFAULT_ENGINES`,
|
|
428
430
|
* `src` defaults `['core']`, and `app` / `keywords` / `dependencies` /
|
|
429
431
|
* `peers` / `extras` / `overrides` default `[]`, and `bin` / `integration` /
|
|
430
|
-
* `service` / `global` default `false`. `description` is OMITTED entirely
|
|
432
|
+
* `service` / `global` / `showcase` default `false`. `description` is OMITTED entirely
|
|
431
433
|
* when absent, so the result round-trips the exact-record `Blueprint` guard.
|
|
432
434
|
* @returns A complete `Blueprint`.
|
|
433
435
|
*
|
|
@@ -453,7 +455,8 @@ function blueprint(name, options) {
|
|
|
453
455
|
bin: options?.bin ?? false,
|
|
454
456
|
integration: options?.integration ?? false,
|
|
455
457
|
service: options?.service ?? false,
|
|
456
|
-
global: options?.global ?? false
|
|
458
|
+
global: options?.global ?? false,
|
|
459
|
+
showcase: options?.showcase ?? false
|
|
457
460
|
};
|
|
458
461
|
return options?.description === void 0 ? base : {
|
|
459
462
|
...base,
|
|
@@ -1361,6 +1364,11 @@ function validateBlueprint(spec) {
|
|
|
1361
1364
|
text: "At least one src or app environment is required",
|
|
1362
1365
|
blocking: true
|
|
1363
1366
|
});
|
|
1367
|
+
if (spec.showcase && !spec.app.includes("browser")) questions.push({
|
|
1368
|
+
field: "showcase",
|
|
1369
|
+
text: "Showcase requires the app browser environment",
|
|
1370
|
+
blocking: true
|
|
1371
|
+
});
|
|
1364
1372
|
if (spec.src.length > 0) {
|
|
1365
1373
|
for (const environment of spec.src) if (!ENVIRONMENTS.includes(environment)) questions.push({
|
|
1366
1374
|
field: "src",
|
|
@@ -1824,7 +1832,8 @@ function blueprintShape() {
|
|
|
1824
1832
|
bin: (0, _orkestrel_contract.booleanShape)(),
|
|
1825
1833
|
integration: (0, _orkestrel_contract.booleanShape)(),
|
|
1826
1834
|
service: (0, _orkestrel_contract.booleanShape)(),
|
|
1827
|
-
global: (0, _orkestrel_contract.booleanShape)()
|
|
1835
|
+
global: (0, _orkestrel_contract.booleanShape)(),
|
|
1836
|
+
showcase: (0, _orkestrel_contract.booleanShape)()
|
|
1828
1837
|
});
|
|
1829
1838
|
}
|
|
1830
1839
|
/**
|
|
@@ -5561,6 +5570,7 @@ function devDependenciesFor(spec) {
|
|
|
5561
5570
|
...dependencies,
|
|
5562
5571
|
...spec.src.includes("browser") ? SOURCE_BROWSER_DEV_DEPENDENCIES : {},
|
|
5563
5572
|
...spec.app.includes("browser") ? APP_BROWSER_DEV_DEPENDENCIES : {},
|
|
5573
|
+
...spec.showcase ? { "vite-plugin-singlefile": "^2.3.3" } : {},
|
|
5564
5574
|
...spec.bin ? { "@vitest/browser-playwright": SOURCE_BROWSER_DEV_DEPENDENCIES["@vitest/browser-playwright"] } : {}
|
|
5565
5575
|
};
|
|
5566
5576
|
}
|
|
@@ -5644,7 +5654,14 @@ function packageManifest(spec) {
|
|
|
5644
5654
|
const runtime = spec.app.filter((environment) => environment !== "core");
|
|
5645
5655
|
scripts["build:app"] = runtime.length > 0 ? runtime.map((environment) => `npm run build:app:${environment}`).join(" && ") : "npm run check:app:core";
|
|
5646
5656
|
for (const environment of runtime) scripts[`build:app:${environment}`] = `vite build --config configs/app/vite.${environment}.config.ts`;
|
|
5647
|
-
if (spec.app.includes("browser"))
|
|
5657
|
+
if (spec.app.includes("browser")) {
|
|
5658
|
+
scripts.dev = "vite --config configs/app/vite.browser.config.ts";
|
|
5659
|
+
if (spec.showcase) {
|
|
5660
|
+
scripts.showcase = `vite --config ${SHOWCASE_CONFIG_PATH}`;
|
|
5661
|
+
scripts["build:showcase"] = `vite build --config ${SHOWCASE_CONFIG_PATH}`;
|
|
5662
|
+
scripts.show = "npm run build:showcase && npm run copy dist/showcase/index.html demo/showcase.html";
|
|
5663
|
+
}
|
|
5664
|
+
}
|
|
5648
5665
|
if (spec.app.includes("server")) {
|
|
5649
5666
|
scripts.serve = "node dist/app/server/main.cjs";
|
|
5650
5667
|
scripts["serve:build"] = "npm run build:app:server && npm run serve";
|
|
@@ -5762,20 +5779,22 @@ function rootTsconfig(src, app = []) {
|
|
|
5762
5779
|
* @param src - The declared published `Environment[]`.
|
|
5763
5780
|
* @param app - The declared application `Environment[]`, defaulting to none.
|
|
5764
5781
|
* @param bin - Whether the workspace also builds its own executable.
|
|
5782
|
+
* @param showcase - Whether the workspace carries its optional app showcase.
|
|
5765
5783
|
* @returns The machinery set the generated header renders.
|
|
5766
5784
|
*
|
|
5767
5785
|
* @example
|
|
5768
5786
|
* ```ts
|
|
5769
|
-
* viteMachinery(['core']) // { browser: false, vue: false, output: true }
|
|
5770
|
-
* viteMachinery([], ['core']) // { browser: false, vue: false, output: false }
|
|
5787
|
+
* viteMachinery(['core']) // { browser: false, vue: false, output: true, showcase: false }
|
|
5788
|
+
* viteMachinery([], ['core']) // { browser: false, vue: false, output: false, showcase: false }
|
|
5771
5789
|
* ```
|
|
5772
5790
|
*/
|
|
5773
|
-
function viteMachinery(src, app = [], bin = false) {
|
|
5791
|
+
function viteMachinery(src, app = [], bin = false, showcase = false) {
|
|
5774
5792
|
const unbuilt = src.length === 0 && app.length > 0 && !bin && app.every((environment) => environment === "core");
|
|
5775
5793
|
return {
|
|
5776
5794
|
browser: src.includes("browser") || app.includes("browser"),
|
|
5777
5795
|
vue: app.includes("browser"),
|
|
5778
|
-
output: !unbuilt
|
|
5796
|
+
output: !unbuilt,
|
|
5797
|
+
showcase: showcase && app.includes("browser")
|
|
5779
5798
|
};
|
|
5780
5799
|
}
|
|
5781
5800
|
/**
|
|
@@ -5889,7 +5908,7 @@ ${renderedRegistrations.map((registration) => ` ${registration},`).join("\n")}
|
|
|
5889
5908
|
* ```
|
|
5890
5909
|
*/
|
|
5891
5910
|
function viteHeader(machinery) {
|
|
5892
|
-
const { browser: needsBrowser, vue: needsVue, output: needsOutput } = machinery;
|
|
5911
|
+
const { browser: needsBrowser, vue: needsVue, output: needsOutput, showcase: needsShowcase } = machinery;
|
|
5893
5912
|
const playwrightTypeImports = needsBrowser ? `import type { PlaywrightProviderOptions } from '@vitest/browser-playwright'
|
|
5894
5913
|
` : "";
|
|
5895
5914
|
const playwrightImports = needsBrowser ? `import { playwright } from '@vitest/browser-playwright'
|
|
@@ -5897,6 +5916,8 @@ import { chromium } from 'playwright'
|
|
|
5897
5916
|
` : "";
|
|
5898
5917
|
const vueImports = needsVue ? `import vue from '@vitejs/plugin-vue'
|
|
5899
5918
|
import { parse as parseVue } from 'vue/compiler-sfc'
|
|
5919
|
+
` : "";
|
|
5920
|
+
const showcaseImports = needsShowcase ? `import { viteSingleFile } from 'vite-plugin-singlefile'
|
|
5900
5921
|
` : "";
|
|
5901
5922
|
const viteTypeImports = needsVue ? `import type {
|
|
5902
5923
|
CSSOptions,
|
|
@@ -6956,6 +6977,31 @@ ${EXPORT_KEYWORD} function finalizeHtml(): Plugin {
|
|
|
6956
6977
|
}
|
|
6957
6978
|
}
|
|
6958
6979
|
|
|
6980
|
+
` : ""}${needsShowcase ? `${EXPORT_KEYWORD} ${CONST_KEYWORD} SHOWCASE_SECURITY_POLICY =
|
|
6981
|
+
"base-uri 'none'; object-src 'none'; script-src 'self' 'unsafe-inline'; script-src-attr 'none'; style-src 'self' 'unsafe-inline'"
|
|
6982
|
+
|
|
6983
|
+
${EXPORT_KEYWORD} function showcaseHtml(): Plugin {
|
|
6984
|
+
return {
|
|
6985
|
+
name: 'orkestrel-showcase-html',
|
|
6986
|
+
enforce: 'post',
|
|
6987
|
+
transformIndexHtml: {
|
|
6988
|
+
order: 'post',
|
|
6989
|
+
handler(html, context) {
|
|
6990
|
+
if (!isBrowserHtmlEntry(context.filename)) return undefined
|
|
6991
|
+
if (!html.includes(HTML_SECURITY_META)) {
|
|
6992
|
+
throw new Error('[orkestrel-showcase] Browser HTML must retain its security policy')
|
|
6993
|
+
}
|
|
6994
|
+
const stamp = new Date().toISOString()
|
|
6995
|
+
return html.replace(
|
|
6996
|
+
HTML_SECURITY_META,
|
|
6997
|
+
HTML_SECURITY_META.replace(HTML_SECURITY_POLICY, SHOWCASE_SECURITY_POLICY) +
|
|
6998
|
+
\`\\n\\t\\t<meta name="build-id" content="\${stamp}" />\`,
|
|
6999
|
+
)
|
|
7000
|
+
},
|
|
7001
|
+
},
|
|
7002
|
+
}
|
|
7003
|
+
}
|
|
7004
|
+
|
|
6959
7005
|
` : ""}${EXPORT_KEYWORD} async function environmentAssetSources(
|
|
6960
7006
|
code: string,
|
|
6961
7007
|
id: string,
|
|
@@ -7267,7 +7313,7 @@ ${needsBrowser ? `import {
|
|
|
7267
7313
|
resolve as resolvePath,
|
|
7268
7314
|
sep,
|
|
7269
7315
|
} from 'node:path'` : `import { dirname, isAbsolute, relative, resolve as resolvePath, sep } from 'node:path'`}
|
|
7270
|
-
${playwrightImports}${vueImports}${needsBrowser ? `\n/** Chromium executable layouts inside a \`chromium-<revision>\` browsers-directory entry, per platform. */
|
|
7316
|
+
${playwrightImports}${vueImports}${showcaseImports}${needsBrowser ? `\n/** Chromium executable layouts inside a \`chromium-<revision>\` browsers-directory entry, per platform. */
|
|
7271
7317
|
${EXPORT_KEYWORD} ${CONST_KEYWORD} CHROMIUM_LAYOUTS = Object.freeze([
|
|
7272
7318
|
'chrome-linux/chrome',
|
|
7273
7319
|
'chrome-linux64/chrome',
|
|
@@ -8016,7 +8062,7 @@ ${renderedTest}
|
|
|
8016
8062
|
*/
|
|
8017
8063
|
function applicationViteConfig(src, app, facts = {}) {
|
|
8018
8064
|
const hasSourceCore = src.includes("core");
|
|
8019
|
-
const machinery = viteMachinery(src, app, facts.bin === true);
|
|
8065
|
+
const machinery = viteMachinery(src, app, facts.bin === true, facts.showcase === true);
|
|
8020
8066
|
const header = viteHeader(machinery);
|
|
8021
8067
|
const blocks = [];
|
|
8022
8068
|
if (src.includes("core")) blocks.push(`
|
|
@@ -8161,8 +8207,98 @@ ${EXPORT_KEYWORD} const appCore = (config?: UserConfig): UserConfig =>
|
|
|
8161
8207
|
config ?? {},
|
|
8162
8208
|
)
|
|
8163
8209
|
`);
|
|
8164
|
-
if (app.includes("browser")) blocks.push(`
|
|
8165
|
-
${
|
|
8210
|
+
if (app.includes("browser")) blocks.push(facts.showcase === true ? `
|
|
8211
|
+
${FUNCTION_KEYWORD} applicationBrowser(showcase: boolean): UserConfig {
|
|
8212
|
+
const output = showcase ? 'dist/showcase' : 'dist/app/browser'
|
|
8213
|
+
return {
|
|
8214
|
+
resolve,
|
|
8215
|
+
css: ENVIRONMENT_CSS,
|
|
8216
|
+
html: environmentHtml(),
|
|
8217
|
+
plugins: [
|
|
8218
|
+
restoreHtml(),
|
|
8219
|
+
outputBoundary(output),
|
|
8220
|
+
environmentBoundary('app/browser'),
|
|
8221
|
+
vue(),
|
|
8222
|
+
prepareHtml(),
|
|
8223
|
+
finalizeHtml(),
|
|
8224
|
+
...(showcase
|
|
8225
|
+
? [
|
|
8226
|
+
viteSingleFile({
|
|
8227
|
+
removeViteModuleLoader: true,
|
|
8228
|
+
useRecommendedBuildConfig: true,
|
|
8229
|
+
}),
|
|
8230
|
+
showcaseHtml(),
|
|
8231
|
+
]
|
|
8232
|
+
: []),
|
|
8233
|
+
],
|
|
8234
|
+
root: resolveWorkspacePath('app/browser'),
|
|
8235
|
+
publicDir: false,
|
|
8236
|
+
server: {
|
|
8237
|
+
fs: {
|
|
8238
|
+
strict: true,
|
|
8239
|
+
allow: [...browserServerRoots()],
|
|
8240
|
+
},
|
|
8241
|
+
},
|
|
8242
|
+
build: {
|
|
8243
|
+
...(showcase
|
|
8244
|
+
? {
|
|
8245
|
+
cssMinify: 'lightningcss',
|
|
8246
|
+
minify: 'oxc',
|
|
8247
|
+
modulePreload: false,
|
|
8248
|
+
reportCompressedSize: false,
|
|
8249
|
+
sourcemap: false,
|
|
8250
|
+
target: 'esnext',
|
|
8251
|
+
}
|
|
8252
|
+
: { assetsInlineLimit: 0 }),
|
|
8253
|
+
emptyOutDir: true,
|
|
8254
|
+
outDir: resolveWorkspacePath(output),
|
|
8255
|
+
rolldownOptions: {
|
|
8256
|
+
input: resolveWorkspacePath('${APP_MATRIX.browser.entry}'),
|
|
8257
|
+
},
|
|
8258
|
+
},
|
|
8259
|
+
test: {
|
|
8260
|
+
name: { label: '${APP_MATRIX.browser.project}', color: 'blue' },
|
|
8261
|
+
root: resolveWorkspacePath('.'),
|
|
8262
|
+
dir: resolveWorkspacePath('.'),
|
|
8263
|
+
include: ['tests/app/browser/**/*.test.ts'],
|
|
8264
|
+
setupFiles: ['./tests/setup.ts', './tests/setupBrowser.ts'],
|
|
8265
|
+
deps: {
|
|
8266
|
+
optimizer: {
|
|
8267
|
+
client: {
|
|
8268
|
+
enabled: true,
|
|
8269
|
+
include: ['vue', ...BROWSER_TEST_DEPENDENCIES],
|
|
8270
|
+
},
|
|
8271
|
+
},
|
|
8272
|
+
},
|
|
8273
|
+
browser: {
|
|
8274
|
+
enabled: true,
|
|
8275
|
+
provider: playwright(browserOptions),
|
|
8276
|
+
instances: [{ browser: 'chromium', headless: true }],
|
|
8277
|
+
},
|
|
8278
|
+
fileParallelism: false,
|
|
8279
|
+
},
|
|
8280
|
+
}
|
|
8281
|
+
}
|
|
8282
|
+
|
|
8283
|
+
${EXPORT_KEYWORD} function appBrowser(...config: never[]): UserConfig {
|
|
8284
|
+
if (config.length > 0) {
|
|
8285
|
+
throw new Error(
|
|
8286
|
+
'[orkestrel-environment-boundary] Browser configuration overrides are not permitted by the generated boundary',
|
|
8287
|
+
)
|
|
8288
|
+
}
|
|
8289
|
+
return applicationBrowser(false)
|
|
8290
|
+
}
|
|
8291
|
+
|
|
8292
|
+
${EXPORT_KEYWORD} function appShowcase(...config: never[]): UserConfig {
|
|
8293
|
+
if (config.length > 0) {
|
|
8294
|
+
throw new Error(
|
|
8295
|
+
'[orkestrel-environment-boundary] Showcase configuration overrides are not permitted by the generated boundary',
|
|
8296
|
+
)
|
|
8297
|
+
}
|
|
8298
|
+
return applicationBrowser(true)
|
|
8299
|
+
}
|
|
8300
|
+
` : `
|
|
8301
|
+
${EXPORT_KEYWORD} function appBrowser(...config: never[]): UserConfig {
|
|
8166
8302
|
if (config.length > 0) {
|
|
8167
8303
|
throw new Error(
|
|
8168
8304
|
'[orkestrel-environment-boundary] Browser configuration overrides are not permitted by the generated boundary',
|
|
@@ -8642,6 +8778,17 @@ function configArtifacts(spec) {
|
|
|
8642
8778
|
});
|
|
8643
8779
|
}
|
|
8644
8780
|
}
|
|
8781
|
+
if (spec.showcase) artifacts.push({
|
|
8782
|
+
path: SHOWCASE_CONFIG_PATH,
|
|
8783
|
+
group: "configs",
|
|
8784
|
+
origin: "computed",
|
|
8785
|
+
environment: "browser",
|
|
8786
|
+
content: `import { defineConfig } from 'vite'
|
|
8787
|
+
import { appShowcase } from '../../vite.config.ts'
|
|
8788
|
+
|
|
8789
|
+
export default defineConfig(appShowcase())
|
|
8790
|
+
`
|
|
8791
|
+
});
|
|
8645
8792
|
return artifacts;
|
|
8646
8793
|
}
|
|
8647
8794
|
/**
|
|
@@ -9825,6 +9972,7 @@ exports.PlanManager = PlanManager;
|
|
|
9825
9972
|
exports.SCAFFOLD_RANGE = SCAFFOLD_RANGE;
|
|
9826
9973
|
exports.SERVICE_SCRIPT_PATH = SERVICE_SCRIPT_PATH;
|
|
9827
9974
|
exports.SETUP_NODE_ACTION_SHA = SETUP_NODE_ACTION_SHA;
|
|
9975
|
+
exports.SHOWCASE_CONFIG_PATH = SHOWCASE_CONFIG_PATH;
|
|
9828
9976
|
exports.SOURCE_BROWSER_DEV_DEPENDENCIES = SOURCE_BROWSER_DEV_DEPENDENCIES;
|
|
9829
9977
|
exports.SRC_MATRIX = SRC_MATRIX;
|
|
9830
9978
|
exports.SYNC_BASELINE_PATTERN = SYNC_BASELINE_PATTERN;
|