@bleedingdev/modern-js-ultramodern-create 3.9.0-ultramodern.11 → 3.9.0-ultramodern.13
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/README.md +32 -36
- package/dist/cjs/ultramodern-release-cohort.cjs +6 -21
- package/dist/cjs/ultramodern-tooling/commands/cloudflare-output-verify.cjs +29 -53
- package/dist/cjs/ultramodern-tooling/commands/context.cjs +1 -27
- package/dist/cjs/ultramodern-tooling/commands/routes-generate-app.cjs +60 -0
- package/dist/cjs/ultramodern-tooling/commands/routes-generate.cjs +12 -48
- package/dist/cjs/ultramodern-tooling/commands/validate.cjs +5 -58
- package/dist/cjs/ultramodern-tooling/commands.cjs +13 -3
- package/dist/cjs/ultramodern-tooling/config/index.cjs +11 -4
- package/dist/cjs/ultramodern-tooling/config/load.cjs +4 -17
- package/dist/cjs/ultramodern-tooling/config/metadata.cjs +41 -2
- package/dist/cjs/ultramodern-tooling/config/normalize.cjs +121 -198
- package/dist/cjs/ultramodern-workspace/add-shell.cjs +103 -147
- package/dist/cjs/ultramodern-workspace/add-vertical/execute.cjs +61 -94
- package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +14 -160
- package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +8 -13
- package/dist/cjs/ultramodern-workspace/add-vertical/preview.cjs +78 -0
- package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +0 -32
- package/dist/cjs/ultramodern-workspace/add-vertical/transaction.cjs +2 -2
- package/dist/cjs/ultramodern-workspace/add-vertical/workspace-state.cjs +19 -42
- package/dist/cjs/ultramodern-workspace/add-vertical.cjs +0 -9
- package/dist/cjs/ultramodern-workspace/api/contracts.cjs +2 -2
- package/dist/cjs/ultramodern-workspace/api/rpc.cjs +16 -14
- package/dist/cjs/ultramodern-workspace/api/service.cjs +4 -8
- package/dist/cjs/ultramodern-workspace/api/shared.cjs +1 -1
- package/dist/cjs/ultramodern-workspace/backend-federation.cjs +3 -3
- package/dist/cjs/ultramodern-workspace/contracts.cjs +14 -183
- package/dist/cjs/ultramodern-workspace/delivery-unit-stamp.cjs +10 -5
- package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +27 -17
- package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +11 -6
- package/dist/cjs/ultramodern-workspace/demo-components.cjs +62 -115
- package/dist/cjs/ultramodern-workspace/descriptors.cjs +0 -4
- package/dist/cjs/ultramodern-workspace/generation-result.cjs +1 -1
- package/dist/cjs/ultramodern-workspace/index.cjs +2 -5
- package/dist/cjs/ultramodern-workspace/mf-validation/constants.cjs +0 -6
- package/dist/cjs/ultramodern-workspace/mf-validation/discovery.cjs +6 -6
- package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +37 -38
- package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +9 -16
- package/dist/cjs/ultramodern-workspace/module-federation/remote-refs.cjs +1 -43
- package/dist/cjs/ultramodern-workspace/package-json.cjs +47 -54
- package/dist/cjs/ultramodern-workspace/patch-inventory.cjs +122 -0
- package/dist/cjs/ultramodern-workspace/policy.cjs +6 -380
- package/dist/cjs/ultramodern-workspace/public-surface.cjs +2 -2
- package/dist/cjs/ultramodern-workspace/routes.cjs +11 -7
- package/dist/cjs/ultramodern-workspace/shared-patches.cjs +12 -2
- package/dist/cjs/ultramodern-workspace/shells.cjs +0 -70
- package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +6 -43
- package/dist/cjs/ultramodern-workspace/tsconfigs.cjs +3 -1
- package/dist/cjs/ultramodern-workspace/validation/architecture.cjs +397 -0
- package/dist/cjs/ultramodern-workspace/validation/assertions.cjs +140 -0
- package/dist/cjs/ultramodern-workspace/validation/types.cjs +18 -0
- package/dist/cjs/ultramodern-workspace/validation/workspace.cjs +343 -0
- package/dist/cjs/ultramodern-workspace/versions.cjs +25 -41
- package/dist/cjs/ultramodern-workspace/workspace-artifact-ownership.cjs +71 -31
- package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +7 -7
- package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +17 -143
- package/dist/cjs/ultramodern-workspace/workspace-validation-contract.cjs +62 -371
- package/dist/cjs/ultramodern-workspace/write-app.cjs +5 -4
- package/dist/cjs/ultramodern-workspace/write-workspace.cjs +10 -50
- package/dist/esm/ultramodern-release-cohort.js +5 -14
- package/dist/esm/ultramodern-tooling/commands/cloudflare-output-verify.js +29 -53
- package/dist/esm/ultramodern-tooling/commands/context.js +3 -24
- package/dist/esm/ultramodern-tooling/commands/routes-generate-app.js +28 -0
- package/dist/esm/ultramodern-tooling/commands/routes-generate.js +13 -49
- package/dist/esm/ultramodern-tooling/commands/validate.js +6 -49
- package/dist/esm/ultramodern-tooling/commands.js +12 -3
- package/dist/esm/ultramodern-tooling/config/index.js +1 -0
- package/dist/esm/ultramodern-tooling/config/load.js +5 -17
- package/dist/esm/ultramodern-tooling/config/metadata.js +36 -1
- package/dist/esm/ultramodern-tooling/config/normalize.js +125 -191
- package/dist/esm/ultramodern-workspace/add-shell.js +110 -153
- package/dist/esm/ultramodern-workspace/add-vertical/execute.js +61 -98
- package/dist/esm/ultramodern-workspace/add-vertical/plan.js +16 -150
- package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +6 -11
- package/dist/esm/ultramodern-workspace/add-vertical/preview.js +40 -0
- package/dist/esm/ultramodern-workspace/add-vertical/topology.js +1 -30
- package/dist/esm/ultramodern-workspace/add-vertical/transaction.js +2 -2
- package/dist/esm/ultramodern-workspace/add-vertical/workspace-state.js +15 -32
- package/dist/esm/ultramodern-workspace/add-vertical.js +1 -1
- package/dist/esm/ultramodern-workspace/api/contracts.js +2 -2
- package/dist/esm/ultramodern-workspace/api/rpc.js +16 -14
- package/dist/esm/ultramodern-workspace/api/service.js +4 -8
- package/dist/esm/ultramodern-workspace/api/shared.js +1 -1
- package/dist/esm/ultramodern-workspace/backend-federation.js +3 -3
- package/dist/esm/ultramodern-workspace/contracts.js +14 -180
- package/dist/esm/ultramodern-workspace/delivery-unit-stamp.js +10 -5
- package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +28 -18
- package/dist/esm/ultramodern-workspace/delivery-unit.js +11 -6
- package/dist/esm/ultramodern-workspace/demo-components.js +62 -115
- package/dist/esm/ultramodern-workspace/descriptors.js +1 -2
- package/dist/esm/ultramodern-workspace/generation-result.js +2 -2
- package/dist/esm/ultramodern-workspace/index.js +1 -1
- package/dist/esm/ultramodern-workspace/mf-validation/constants.js +1 -4
- package/dist/esm/ultramodern-workspace/mf-validation/discovery.js +7 -7
- package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +36 -34
- package/dist/esm/ultramodern-workspace/module-federation/config.js +10 -17
- package/dist/esm/ultramodern-workspace/module-federation/remote-refs.js +1 -43
- package/dist/esm/ultramodern-workspace/package-json.js +48 -55
- package/dist/esm/ultramodern-workspace/patch-inventory.js +84 -0
- package/dist/esm/ultramodern-workspace/policy.js +6 -371
- package/dist/esm/ultramodern-workspace/public-surface.js +2 -2
- package/dist/esm/ultramodern-workspace/routes.js +11 -7
- package/dist/esm/ultramodern-workspace/shared-patches.js +2 -2
- package/dist/esm/ultramodern-workspace/shells.js +3 -67
- package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +7 -41
- package/dist/esm/ultramodern-workspace/tsconfigs.js +4 -2
- package/dist/esm/ultramodern-workspace/validation/architecture.js +348 -0
- package/dist/esm/ultramodern-workspace/validation/assertions.js +65 -0
- package/dist/esm/ultramodern-workspace/validation/types.js +0 -0
- package/dist/esm/ultramodern-workspace/validation/workspace.js +285 -0
- package/dist/esm/ultramodern-workspace/versions.js +24 -28
- package/dist/esm/ultramodern-workspace/workspace-artifact-ownership.js +64 -30
- package/dist/esm/ultramodern-workspace/workspace-script-plan.js +7 -7
- package/dist/esm/ultramodern-workspace/workspace-scripts.js +19 -136
- package/dist/esm/ultramodern-workspace/workspace-validation-contract.js +64 -373
- package/dist/esm/ultramodern-workspace/write-app.js +4 -3
- package/dist/esm/ultramodern-workspace/write-workspace.js +16 -53
- package/dist/esm-node/ultramodern-release-cohort.js +5 -14
- package/dist/esm-node/ultramodern-tooling/commands/cloudflare-output-verify.js +29 -53
- package/dist/esm-node/ultramodern-tooling/commands/context.js +3 -24
- package/dist/esm-node/ultramodern-tooling/commands/routes-generate-app.js +29 -0
- package/dist/esm-node/ultramodern-tooling/commands/routes-generate.js +13 -49
- package/dist/esm-node/ultramodern-tooling/commands/validate.js +6 -49
- package/dist/esm-node/ultramodern-tooling/commands.js +12 -3
- package/dist/esm-node/ultramodern-tooling/config/index.js +1 -0
- package/dist/esm-node/ultramodern-tooling/config/load.js +5 -17
- package/dist/esm-node/ultramodern-tooling/config/metadata.js +36 -1
- package/dist/esm-node/ultramodern-tooling/config/normalize.js +125 -191
- package/dist/esm-node/ultramodern-workspace/add-shell.js +110 -153
- package/dist/esm-node/ultramodern-workspace/add-vertical/execute.js +61 -98
- package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +16 -150
- package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +6 -11
- package/dist/esm-node/ultramodern-workspace/add-vertical/preview.js +41 -0
- package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +1 -30
- package/dist/esm-node/ultramodern-workspace/add-vertical/transaction.js +2 -2
- package/dist/esm-node/ultramodern-workspace/add-vertical/workspace-state.js +15 -32
- package/dist/esm-node/ultramodern-workspace/add-vertical.js +1 -1
- package/dist/esm-node/ultramodern-workspace/api/contracts.js +2 -2
- package/dist/esm-node/ultramodern-workspace/api/rpc.js +16 -14
- package/dist/esm-node/ultramodern-workspace/api/service.js +4 -8
- package/dist/esm-node/ultramodern-workspace/api/shared.js +1 -1
- package/dist/esm-node/ultramodern-workspace/backend-federation.js +3 -3
- package/dist/esm-node/ultramodern-workspace/contracts.js +14 -180
- package/dist/esm-node/ultramodern-workspace/delivery-unit-stamp.js +10 -5
- package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +28 -18
- package/dist/esm-node/ultramodern-workspace/delivery-unit.js +11 -6
- package/dist/esm-node/ultramodern-workspace/demo-components.js +62 -115
- package/dist/esm-node/ultramodern-workspace/descriptors.js +1 -2
- package/dist/esm-node/ultramodern-workspace/generation-result.js +2 -2
- package/dist/esm-node/ultramodern-workspace/index.js +1 -1
- package/dist/esm-node/ultramodern-workspace/mf-validation/constants.js +1 -4
- package/dist/esm-node/ultramodern-workspace/mf-validation/discovery.js +7 -7
- package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +36 -34
- package/dist/esm-node/ultramodern-workspace/module-federation/config.js +10 -17
- package/dist/esm-node/ultramodern-workspace/module-federation/remote-refs.js +1 -43
- package/dist/esm-node/ultramodern-workspace/package-json.js +48 -55
- package/dist/esm-node/ultramodern-workspace/patch-inventory.js +85 -0
- package/dist/esm-node/ultramodern-workspace/policy.js +6 -371
- package/dist/esm-node/ultramodern-workspace/public-surface.js +2 -2
- package/dist/esm-node/ultramodern-workspace/routes.js +11 -7
- package/dist/esm-node/ultramodern-workspace/shared-patches.js +2 -2
- package/dist/esm-node/ultramodern-workspace/shells.js +3 -67
- package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +7 -41
- package/dist/esm-node/ultramodern-workspace/tsconfigs.js +4 -2
- package/dist/esm-node/ultramodern-workspace/validation/architecture.js +349 -0
- package/dist/esm-node/ultramodern-workspace/validation/assertions.js +66 -0
- package/dist/esm-node/ultramodern-workspace/validation/types.js +1 -0
- package/dist/esm-node/ultramodern-workspace/validation/workspace.js +286 -0
- package/dist/esm-node/ultramodern-workspace/versions.js +24 -28
- package/dist/esm-node/ultramodern-workspace/workspace-artifact-ownership.js +64 -30
- package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +7 -7
- package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +19 -136
- package/dist/esm-node/ultramodern-workspace/workspace-validation-contract.js +64 -373
- package/dist/esm-node/ultramodern-workspace/write-app.js +4 -3
- package/dist/esm-node/ultramodern-workspace/write-workspace.js +16 -53
- package/dist/types/ultramodern-release-cohort.d.ts +1 -3
- package/dist/types/ultramodern-tooling/commands/cloudflare-output-verify.d.ts +2 -2
- package/dist/types/ultramodern-tooling/commands/context.d.ts +0 -1
- package/dist/types/ultramodern-tooling/commands/routes-generate-app.d.ts +1 -0
- package/dist/types/ultramodern-tooling/commands/routes-generate.d.ts +1 -1
- package/dist/types/ultramodern-tooling/commands/validate.d.ts +1 -1
- package/dist/types/ultramodern-tooling/config/index.d.ts +1 -0
- package/dist/types/ultramodern-tooling/config/load.d.ts +6 -58
- package/dist/types/ultramodern-tooling/config/metadata.d.ts +3 -0
- package/dist/types/ultramodern-tooling/config/normalize.d.ts +9 -88
- package/dist/types/ultramodern-tooling/config/types.d.ts +1 -9
- package/dist/types/ultramodern-workspace/add-shell.d.ts +1 -1
- package/dist/types/ultramodern-workspace/add-vertical/execute.d.ts +1 -0
- package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +4 -3
- package/dist/types/ultramodern-workspace/add-vertical/preview.d.ts +4 -0
- package/dist/types/ultramodern-workspace/add-vertical/topology.d.ts +0 -1
- package/dist/types/ultramodern-workspace/add-vertical/transaction.d.ts +4 -1
- package/dist/types/ultramodern-workspace/add-vertical/workspace-state.d.ts +8 -5
- package/dist/types/ultramodern-workspace/add-vertical.d.ts +1 -1
- package/dist/types/ultramodern-workspace/api/rpc.d.ts +1 -1
- package/dist/types/ultramodern-workspace/contracts.d.ts +1 -3
- package/dist/types/ultramodern-workspace/delivery-unit-stamp.d.ts +2 -2
- package/dist/types/ultramodern-workspace/delivery-unit.d.ts +2 -2
- package/dist/types/ultramodern-workspace/descriptors.d.ts +0 -1
- package/dist/types/ultramodern-workspace/index.d.ts +1 -1
- package/dist/types/ultramodern-workspace/mf-validation/constants.d.ts +0 -1
- package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +2 -3
- package/dist/types/ultramodern-workspace/module-federation/config.d.ts +1 -1
- package/dist/types/ultramodern-workspace/patch-inventory.d.ts +10 -0
- package/dist/types/ultramodern-workspace/policy.d.ts +60 -182
- package/dist/types/ultramodern-workspace/shells.d.ts +1 -14
- package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +1 -6
- package/dist/types/ultramodern-workspace/validation/architecture.d.ts +2 -0
- package/dist/types/ultramodern-workspace/validation/assertions.d.ts +14 -0
- package/dist/types/ultramodern-workspace/validation/types.d.ts +9 -0
- package/dist/types/ultramodern-workspace/validation/workspace.d.ts +6 -0
- package/dist/types/ultramodern-workspace/versions.d.ts +23 -27
- package/dist/types/ultramodern-workspace/workspace-artifact-ownership.d.ts +5 -0
- package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +1 -1
- package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +7 -19
- package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +22 -188
- package/dist/types/ultramodern-workspace/write-workspace.d.ts +1 -3
- package/package.json +17 -16
- package/{template-workspace/.modernjs/release-cohort.json → release-cohort.json} +48 -48
- package/template-workspace/README.md.handlebars +9 -16
- package/template-workspace/pnpm-workspace.yaml.handlebars +0 -24
- package/templates/workspace/apps/modern.config.ts.handlebars +6 -6
- package/templates/workspace/apps/shared/src/routes/ultramodern-route-metadata.ts.handlebars +8 -21
- package/templates/workspace/apps/shell-super-app/src/routes/[lang]/page.tsx.handlebars +20 -20
- package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx.handlebars +1 -1
- package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.tsx.handlebars +11 -11
- package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.worker.helpers.tsx.handlebars +1 -1
- package/templates/workspace-scripts/generate-node-backend-federation.mjs +39 -49
- package/templates/workspace-scripts/generate-public-surface-assets.mjs +142 -206
- package/templates/workspace-scripts/materialize-zerops-runtime.mjs +3 -11
- package/templates/workspace-scripts/proof-cloudflare-version.mjs +53 -444
- package/templates/workspace-scripts/proof-node-backend-federation.mjs +193 -39
- package/templates/workspace-scripts/proof-workerd-ssr.mjs +126 -66
- package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +45 -147
- package/dist/cjs/ultramodern-workspace/cohort-parity.cjs +0 -129
- package/dist/cjs/ultramodern-workspace/patch-parity.cjs +0 -163
- package/dist/esm/ultramodern-workspace/cohort-parity.js +0 -74
- package/dist/esm/ultramodern-workspace/patch-parity.js +0 -99
- package/dist/esm-node/ultramodern-workspace/cohort-parity.js +0 -75
- package/dist/esm-node/ultramodern-workspace/patch-parity.js +0 -100
- package/dist/types/ultramodern-workspace/cohort-parity.d.ts +0 -31
- package/dist/types/ultramodern-workspace/patch-parity.d.ts +0 -39
- package/template-workspace/patches/@module-federation__bridge-react@2.9.0.patch +0 -47
- package/template-workspace/patches/@module-federation__dts-plugin@2.9.0.patch +0 -100
- package/template-workspace/patches/@module-federation__modern-js-v3@2.9.0.patch +0 -268
- package/template-workspace/patches/@module-federation__runtime-core@2.9.0.patch +0 -13
- package/template-workspace/patches/drizzle-orm-ts7-strict-declarations.patch +0 -471
- package/template-workspace/patches/msgpackr@2.1.0.patch +0 -30
- package/template-workspace/patches/zod@4.5.4.patch +0 -56
- package/templates/packages/effect-bff-runtime.ts +0 -2
- package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +0 -4046
package/README.md
CHANGED
|
@@ -36,8 +36,8 @@ domains to delete. It generates:
|
|
|
36
36
|
- `verticals/*` empty until a real domain is added with `--vertical`.
|
|
37
37
|
- `packages/shared-*` placeholders for shared contracts, tokens, and Effect
|
|
38
38
|
API support.
|
|
39
|
-
-
|
|
40
|
-
|
|
39
|
+
- `catalogs.ultramodern` in `pnpm-workspace.yaml` for published framework
|
|
40
|
+
dependency versions, referenced by application manifests.
|
|
41
41
|
- `topology/*` as app-owned topology, ownership, and local development overlay
|
|
42
42
|
JSON.
|
|
43
43
|
|
|
@@ -51,15 +51,15 @@ pnpm check
|
|
|
51
51
|
pnpm build
|
|
52
52
|
```
|
|
53
53
|
|
|
54
|
-
The generated toolchain pins Node `26.7.0`, pnpm `11.
|
|
55
|
-
`@types/node@^26.
|
|
54
|
+
The generated toolchain pins Node `26.7.0`, pnpm `11.27.1`, and
|
|
55
|
+
`@types/node@^26.6.2`; its engine baseline remains Node `>=26` with pnpm `11+`.
|
|
56
56
|
`packageManager`, `.mise.toml`, generated validation, and CI should all agree
|
|
57
57
|
on those values; do not reintroduce Corepack or older pnpm aliases.
|
|
58
58
|
|
|
59
|
-
The current generated dependency cohort also pins `@effect/tsgo@0.
|
|
60
|
-
`@tanstack/react-router@1.170.
|
|
61
|
-
`@tanstack/history@1.162.
|
|
62
|
-
cohort, `@module-federation/node@2.7.
|
|
59
|
+
The current generated dependency cohort also pins `@effect/tsgo@0.45.0`,
|
|
60
|
+
`@tanstack/react-router@1.170.39`, `@tanstack/router-core@1.171.32`,
|
|
61
|
+
`@tanstack/history@1.162.4`, and the Module Federation integration `2.9.1`
|
|
62
|
+
cohort, `@module-federation/node@2.7.51`. Move these only through the
|
|
63
63
|
generator-owned version policy so templates, validation, and the published
|
|
64
64
|
workspace contract stay aligned.
|
|
65
65
|
|
|
@@ -169,38 +169,35 @@ contract so automation can stop safely:
|
|
|
169
169
|
| --- | --- | --- |
|
|
170
170
|
| Fresh input | Invalid or missing vertical name | Use `<name> --vertical`, `--vertical=<name>`, or `--vertical-name <name>` |
|
|
171
171
|
| Existing topology | Duplicate app ID, package suffix, path, Module Federation name, port, API prefix, or manifest key | Choose a new vertical name or repair the existing topology/local overlay first |
|
|
172
|
-
| Workspace files | Missing or
|
|
172
|
+
| Workspace files | Missing or invalid topology, ownership, local overlay or app manifest | Repair the named authoritative file |
|
|
173
173
|
| Tailwind prefix | Existing app already owns the generated CSS prefix | Rename the vertical before generation |
|
|
174
174
|
| Output path | A generated path already exists | Treat it as an existing vertical and do not overwrite it |
|
|
175
175
|
|
|
176
|
-
Package source is
|
|
176
|
+
Package source is selected by the installed generator dependency and native pnpm catalog.
|
|
177
|
+
Application manifests own package identity; the development overlay owns local ports.
|
|
177
178
|
|
|
178
179
|
| Strategy | Use when | CLI |
|
|
179
180
|
| --- | --- | --- |
|
|
180
181
|
| `install` | Published BleedingDev package cohort or release proof | Default for the BleedingDev create package; optional `--ultramodern-package-version`, `--ultramodern-package-registry` (serves the cohort scope only; release-age metadata for every other dependency is validated against npmjs), `--ultramodern-package-scope`, and `--ultramodern-package-name-prefix` |
|
|
181
182
|
| `workspace` | Local monorepo testing against unreleased packages | `--workspace` or `--ultramodern-package-source=workspace` |
|
|
182
183
|
|
|
183
|
-
## Framework
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
`pnpm-workspace.yaml
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
`
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
against unpublished packages. After install, run the generated
|
|
201
|
-
`scripts/validate-ultramodern-workspace.mts` contract check and fix ownership
|
|
202
|
-
conflicts in the owning JSON/config files instead of editing generated metadata
|
|
203
|
-
by hand.
|
|
184
|
+
## Framework dependencies
|
|
185
|
+
|
|
186
|
+
Published framework versions live in `catalogs.ultramodern` in
|
|
187
|
+
`pnpm-workspace.yaml`. Application manifests reference `catalog:ultramodern`;
|
|
188
|
+
the lockfile records resolved packages. Corrected third-party dependencies ship
|
|
189
|
+
as published packages. Applications do not install framework patches or carry
|
|
190
|
+
a copied release manifest.
|
|
191
|
+
|
|
192
|
+
Use `--ultramodern-package-source=install` for published package acceptance and
|
|
193
|
+
`--ultramodern-package-version` to select an exact release. Use `--workspace`
|
|
194
|
+
for local monorepo development. After installation, run `pnpm contract:check`,
|
|
195
|
+
which invokes the installed CLI directly. The installed generator owns its
|
|
196
|
+
release-integrity metadata.
|
|
197
|
+
|
|
198
|
+
Normal installs retain the generated release-age and trust policy. Release
|
|
199
|
+
acceptance uses exact, temporary exceptions for the artifacts being tested;
|
|
200
|
+
it does not add permanent exception lists to the application.
|
|
204
201
|
|
|
205
202
|
## CodeSmith Adapter And Overlays
|
|
206
203
|
|
|
@@ -379,13 +376,12 @@ Each generated workspace app has:
|
|
|
379
376
|
|
|
380
377
|
- `cloudflare:build`, `cloudflare:deploy`, `cloudflare:preview`, and
|
|
381
378
|
`cloudflare:proof` scripts.
|
|
382
|
-
- Cloudflare Worker deploy config from Modern config
|
|
383
|
-
`.modernjs/ultramodern.json`.
|
|
379
|
+
- Cloudflare Worker deploy config emitted from native Modern config.
|
|
384
380
|
- `zephyr:dependencies` for any consumed verticals.
|
|
385
381
|
- `zephyr-rspack-plugin` wired through the generated Modern.js Rspack bridge.
|
|
386
382
|
|
|
387
383
|
Deploy first, then pass each deployed app's generated public URL env key into
|
|
388
|
-
the proof step. The proof
|
|
384
|
+
the proof step. The installed proof command reads topology and deployment contracts and checks the
|
|
389
385
|
Cloudflare Worker surface, including public-route sitemap/robots consistency,
|
|
390
386
|
preview noindex behavior, unknown-route status, asset headers, byte budgets,
|
|
391
387
|
and public sourcemap exposure. Shell-only workspaces only need the shell URL;
|
|
@@ -407,10 +403,10 @@ proven.
|
|
|
407
403
|
|
|
408
404
|
| Symptom | Current check | Owner |
|
|
409
405
|
| --- | --- | --- |
|
|
410
|
-
| Package
|
|
406
|
+
| Package version mismatch | Align the native framework catalog and regenerate the lockfile with `pnpm install`. | Workspace dependency manifests |
|
|
411
407
|
| Install failure | Check the active Node/pnpm from `mise install`; rerun `pnpm install` after the shell sees the pinned versions. | Toolchain setup |
|
|
412
408
|
| Build failure | Run the matching primitive gate (`pnpm lint`, `pnpm typecheck`, `pnpm i18n:boundaries`, `pnpm contract:check`) before `pnpm build`; fix the owning failure first. | Owning package or generated contract |
|
|
413
|
-
| Missing public URL | Set the app public URL env key
|
|
409
|
+
| Missing public URL | Set the app public URL env key declared in topology, for example `ULTRAMODERN_PUBLIC_URL_SHELL_SUPER_APP`. | Deployment operator |
|
|
414
410
|
| Cloudflare credentials | Confirm Wrangler credentials before `pnpm cloudflare:deploy`; local checks do not prove live Worker access. | Deployment operator |
|
|
415
411
|
| Asset or CSS 404 | Rebuild with `pnpm build` or `pnpm cloudflare:deploy` and inspect emitted Modern/Rspack asset paths instead of hardcoding CSS URLs. | Framework/runtime asset pipeline |
|
|
416
412
|
| Federation manifest failure | Run the shell and vertical build scripts, then check each deployed `/mf-manifest.json` URL used by the shell. | Module Federation owner |
|
|
@@ -37,14 +37,12 @@ var __webpack_require__ = {};
|
|
|
37
37
|
var __webpack_exports__ = {};
|
|
38
38
|
__webpack_require__.r(__webpack_exports__);
|
|
39
39
|
__webpack_require__.d(__webpack_exports__, {
|
|
40
|
-
|
|
40
|
+
RELEASE_COHORT_PATH: ()=>RELEASE_COHORT_PATH,
|
|
41
41
|
assertReleaseCohortPackageSource: ()=>assertReleaseCohortPackageSource,
|
|
42
|
-
copyCreateReleaseCohort: ()=>copyCreateReleaseCohort,
|
|
43
42
|
hasCreateReleaseCohort: ()=>hasCreateReleaseCohort,
|
|
44
43
|
isCreatePackageSourceCheckout: ()=>isCreatePackageSourceCheckout,
|
|
45
44
|
parseUltramodernReleaseCohort: ()=>parseUltramodernReleaseCohort,
|
|
46
45
|
readCreateReleaseCohort: ()=>readCreateReleaseCohort,
|
|
47
|
-
readWorkspaceReleaseCohort: ()=>readWorkspaceReleaseCohort,
|
|
48
46
|
releaseCohortSelectors: ()=>releaseCohortSelectors
|
|
49
47
|
});
|
|
50
48
|
const external_node_fs_namespaceObject = require("node:fs");
|
|
@@ -52,7 +50,7 @@ var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node
|
|
|
52
50
|
const external_node_path_namespaceObject = require("node:path");
|
|
53
51
|
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
54
52
|
const fs_io_cjs_namespaceObject = require("./ultramodern-workspace/fs-io.cjs");
|
|
55
|
-
const
|
|
53
|
+
const RELEASE_COHORT_PATH = 'release-cohort.json';
|
|
56
54
|
const RELEASE_COHORT_PROJECTION_SCHEMA = 'bleedingdev.ultramodern.release-cohort';
|
|
57
55
|
const RELEASE_COHORT_PROJECTION_SCHEMA_VERSION = 1;
|
|
58
56
|
function assert(condition, message) {
|
|
@@ -149,23 +147,14 @@ function readCohortFile(filePath) {
|
|
|
149
147
|
return parseUltramodernReleaseCohort(value);
|
|
150
148
|
}
|
|
151
149
|
function readCreateReleaseCohort() {
|
|
152
|
-
return readCohortFile(external_node_path_default().join(fs_io_cjs_namespaceObject.createPackageRoot,
|
|
150
|
+
return readCohortFile(external_node_path_default().join(fs_io_cjs_namespaceObject.createPackageRoot, RELEASE_COHORT_PATH));
|
|
153
151
|
}
|
|
154
152
|
function hasCreateReleaseCohort() {
|
|
155
|
-
return external_node_fs_default().existsSync(external_node_path_default().join(fs_io_cjs_namespaceObject.createPackageRoot,
|
|
153
|
+
return external_node_fs_default().existsSync(external_node_path_default().join(fs_io_cjs_namespaceObject.createPackageRoot, RELEASE_COHORT_PATH));
|
|
156
154
|
}
|
|
157
155
|
function isCreatePackageSourceCheckout() {
|
|
158
156
|
return external_node_fs_default().existsSync(external_node_path_default().join(fs_io_cjs_namespaceObject.createPackageRoot, 'src'));
|
|
159
157
|
}
|
|
160
|
-
function readWorkspaceReleaseCohort(workspaceRoot) {
|
|
161
|
-
return readCohortFile(external_node_path_default().join(workspaceRoot, RELEASE_COHORT_PROJECTION_PATH));
|
|
162
|
-
}
|
|
163
|
-
function copyCreateReleaseCohort(workspaceRoot) {
|
|
164
|
-
const sourcePath = external_node_path_default().join(fs_io_cjs_namespaceObject.createPackageRoot, 'template-workspace', RELEASE_COHORT_PROJECTION_PATH);
|
|
165
|
-
const cohort = readCohortFile(sourcePath);
|
|
166
|
-
(0, fs_io_cjs_namespaceObject.writeFile)(workspaceRoot, RELEASE_COHORT_PROJECTION_PATH, external_node_fs_default().readFileSync(sourcePath, 'utf8'));
|
|
167
|
-
return cohort;
|
|
168
|
-
}
|
|
169
158
|
function assertReleaseCohortPackageSource(cohort, packageSource) {
|
|
170
159
|
if ('install' !== packageSource.strategy) return;
|
|
171
160
|
assert(packageSource.modernPackageVersion === cohort.release.version, `Package source release ${packageSource.modernPackageVersion} does not match authenticated release cohort ${cohort.release.version}.`);
|
|
@@ -181,24 +170,20 @@ function assertReleaseCohortPackageSource(cohort, packageSource) {
|
|
|
181
170
|
function releaseCohortSelectors(cohort) {
|
|
182
171
|
return cohort.packages.map((item)=>`${item.targetName}@${item.version}`).sort();
|
|
183
172
|
}
|
|
184
|
-
exports.
|
|
173
|
+
exports.RELEASE_COHORT_PATH = __webpack_exports__.RELEASE_COHORT_PATH;
|
|
185
174
|
exports.assertReleaseCohortPackageSource = __webpack_exports__.assertReleaseCohortPackageSource;
|
|
186
|
-
exports.copyCreateReleaseCohort = __webpack_exports__.copyCreateReleaseCohort;
|
|
187
175
|
exports.hasCreateReleaseCohort = __webpack_exports__.hasCreateReleaseCohort;
|
|
188
176
|
exports.isCreatePackageSourceCheckout = __webpack_exports__.isCreatePackageSourceCheckout;
|
|
189
177
|
exports.parseUltramodernReleaseCohort = __webpack_exports__.parseUltramodernReleaseCohort;
|
|
190
178
|
exports.readCreateReleaseCohort = __webpack_exports__.readCreateReleaseCohort;
|
|
191
|
-
exports.readWorkspaceReleaseCohort = __webpack_exports__.readWorkspaceReleaseCohort;
|
|
192
179
|
exports.releaseCohortSelectors = __webpack_exports__.releaseCohortSelectors;
|
|
193
180
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
194
|
-
"
|
|
181
|
+
"RELEASE_COHORT_PATH",
|
|
195
182
|
"assertReleaseCohortPackageSource",
|
|
196
|
-
"copyCreateReleaseCohort",
|
|
197
183
|
"hasCreateReleaseCohort",
|
|
198
184
|
"isCreatePackageSourceCheckout",
|
|
199
185
|
"parseUltramodernReleaseCohort",
|
|
200
186
|
"readCreateReleaseCohort",
|
|
201
|
-
"readWorkspaceReleaseCohort",
|
|
202
187
|
"releaseCohortSelectors"
|
|
203
188
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
204
189
|
Object.defineProperty(exports, '__esModule', {
|
|
@@ -39,10 +39,10 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
39
39
|
__webpack_require__.d(__webpack_exports__, {
|
|
40
40
|
runCloudflareOutputVerify: ()=>runCloudflareOutputVerify
|
|
41
41
|
});
|
|
42
|
+
const external_node_module_namespaceObject = require("node:module");
|
|
42
43
|
const external_node_path_namespaceObject = require("node:path");
|
|
43
44
|
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
44
45
|
const external_config_cjs_namespaceObject = require("../config.cjs");
|
|
45
|
-
const external_context_cjs_namespaceObject = require("./context.cjs");
|
|
46
46
|
const external_options_cjs_namespaceObject = require("./options.cjs");
|
|
47
47
|
const resolveCloudflareOutputVerifyTargets = (args, context)=>{
|
|
48
48
|
const outputDirectory = (0, external_options_cjs_namespaceObject.readOption)(args, '--output');
|
|
@@ -60,51 +60,7 @@ const resolveCloudflareOutputVerifyTargets = (args, context)=>{
|
|
|
60
60
|
if (0 === targets.length) throw new Error(`No generated UltraModern app matched ${appId}.`);
|
|
61
61
|
return targets;
|
|
62
62
|
};
|
|
63
|
-
|
|
64
|
-
import { createRequire } from 'node:module';
|
|
65
|
-
import path from 'node:path';
|
|
66
|
-
|
|
67
|
-
const workspaceRoot = ${JSON.stringify(workspaceRoot)};
|
|
68
|
-
const targets = ${JSON.stringify(targets, null, 2)};
|
|
69
|
-
const scanRoots = [workspaceRoot];
|
|
70
|
-
const excludePaths = ${JSON.stringify(excludePaths)};
|
|
71
|
-
const verifierRequire = createRequire(path.join(workspaceRoot, 'package.json'));
|
|
72
|
-
const {
|
|
73
|
-
verifyCloudflareOutput,
|
|
74
|
-
verifyCloudflareOutputMutationPolicy,
|
|
75
|
-
} = verifierRequire('@modern-js/app-tools-extensions/cloudflare-output-verifier');
|
|
76
|
-
|
|
77
|
-
let failed = false;
|
|
78
|
-
for (const target of targets) {
|
|
79
|
-
const result = await verifyCloudflareOutput({
|
|
80
|
-
outputDirectory: target.outputDirectory,
|
|
81
|
-
importWorker: true,
|
|
82
|
-
});
|
|
83
|
-
if (result.ok) {
|
|
84
|
-
console.log(\`[ultramodern] Cloudflare output verified: \${target.label}\`);
|
|
85
|
-
} else {
|
|
86
|
-
failed = true;
|
|
87
|
-
console.error(\`[ultramodern] Cloudflare output failed: \${target.label}\`);
|
|
88
|
-
for (const issue of result.issues) {
|
|
89
|
-
console.error(\`- \${issue.code}: \${issue.message}\${issue.path ? \` (\${issue.path})\` : ''}\`);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
if (scanRoots.length > 0) {
|
|
95
|
-
const policyResult = await verifyCloudflareOutputMutationPolicy({ scanRoots, excludePaths });
|
|
96
|
-
if (!policyResult.ok) {
|
|
97
|
-
failed = true;
|
|
98
|
-
console.error('[ultramodern] generated-output mutation policy failed');
|
|
99
|
-
for (const issue of policyResult.issues) {
|
|
100
|
-
console.error(\`- \${issue.code}: \${issue.message}\${issue.path ? \` (\${issue.path})\` : ''}\`);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
process.exit(failed ? 1 : 0);
|
|
106
|
-
`;
|
|
107
|
-
function runCloudflareOutputVerify(args, context) {
|
|
63
|
+
async function runCloudflareOutputVerify(args, context) {
|
|
108
64
|
if (args.includes('--help') || args.includes('-h')) {
|
|
109
65
|
process.stdout.write(`Usage:
|
|
110
66
|
ultramodern-create ultramodern cloudflare-output-verify [--app <id> | --output <dir>]
|
|
@@ -114,14 +70,34 @@ Without --app or --output, every generated workspace app is verified.
|
|
|
114
70
|
`);
|
|
115
71
|
return 0;
|
|
116
72
|
}
|
|
117
|
-
const
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
73
|
+
const targets = resolveCloudflareOutputVerifyTargets(args, context);
|
|
74
|
+
const verifierRequire = (0, external_node_module_namespaceObject.createRequire)(external_node_path_default().join(context.workspaceRoot, 'package.json'));
|
|
75
|
+
const { verifyCloudflareOutput, verifyCloudflareOutputMutationPolicy } = verifierRequire('@modern-js/app-tools-extensions/cloudflare-output-verifier');
|
|
76
|
+
let failed = false;
|
|
77
|
+
for (const target of targets){
|
|
78
|
+
const result = await verifyCloudflareOutput({
|
|
79
|
+
outputDirectory: target.outputDirectory,
|
|
80
|
+
importWorker: true
|
|
81
|
+
});
|
|
82
|
+
if (result.ok) console.log(`[ultramodern] Cloudflare output verified: ${target.label}`);
|
|
83
|
+
else {
|
|
84
|
+
failed = true;
|
|
85
|
+
console.error(`[ultramodern] Cloudflare output failed: ${target.label}`);
|
|
86
|
+
for (const issue of result.issues)console.error(`- ${issue.code}: ${issue.message}${issue.path ? ` (${issue.path})` : ''}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const policyResult = await verifyCloudflareOutputMutationPolicy({
|
|
90
|
+
scanRoots: [
|
|
91
|
+
context.workspaceRoot
|
|
92
|
+
],
|
|
93
|
+
excludePaths: []
|
|
123
94
|
});
|
|
124
|
-
|
|
95
|
+
if (!policyResult.ok) {
|
|
96
|
+
failed = true;
|
|
97
|
+
console.error('[ultramodern] generated-output mutation policy failed');
|
|
98
|
+
for (const issue of policyResult.issues)console.error(`- ${issue.code}: ${issue.message}${issue.path ? ` (${issue.path})` : ''}`);
|
|
99
|
+
}
|
|
100
|
+
return failed ? 1 : 0;
|
|
125
101
|
}
|
|
126
102
|
exports.runCloudflareOutputVerify = __webpack_exports__.runCloudflareOutputVerify;
|
|
127
103
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
@@ -43,15 +43,11 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
43
43
|
AD_HOC_TOOLING_COMMANDS: ()=>AD_HOC_TOOLING_COMMANDS,
|
|
44
44
|
createPackageRoot: ()=>createPackageRoot,
|
|
45
45
|
printHelp: ()=>printHelp,
|
|
46
|
-
runRenderedModule: ()=>runRenderedModule,
|
|
47
46
|
runTemplateBackedToolingCommand: ()=>runTemplateBackedToolingCommand,
|
|
48
47
|
spawnNodeScript: ()=>spawnNodeScript
|
|
49
48
|
});
|
|
50
49
|
const external_node_child_process_namespaceObject = require("node:child_process");
|
|
51
|
-
const external_node_fs_namespaceObject = require("node:fs");
|
|
52
|
-
var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
|
|
53
50
|
const external_node_os_namespaceObject = require("node:os");
|
|
54
|
-
var external_node_os_default = /*#__PURE__*/ __webpack_require__.n(external_node_os_namespaceObject);
|
|
55
51
|
const external_node_path_namespaceObject = require("node:path");
|
|
56
52
|
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
57
53
|
const external_node_url_namespaceObject = require("node:url");
|
|
@@ -91,7 +87,7 @@ function spawnNodeScript(relativeScriptPath, args, context, options = {}) {
|
|
|
91
87
|
stdio: 'inherit'
|
|
92
88
|
});
|
|
93
89
|
if (result.error) throw result.error;
|
|
94
|
-
return result.status ?? 1;
|
|
90
|
+
return result.status ?? (result.signal ? 128 + external_node_os_namespaceObject.constants.signals[result.signal] : 1);
|
|
95
91
|
}
|
|
96
92
|
function runTemplateBackedToolingCommand(command, args, context) {
|
|
97
93
|
const toolingCommand = tooling_command_catalog_cjs_namespaceObject.generatedToolingCommands.find((candidate)=>candidate.command === command);
|
|
@@ -100,37 +96,15 @@ function runTemplateBackedToolingCommand(command, args, context) {
|
|
|
100
96
|
cwd: 'invocation' === toolingCommand.cwd ? context.invocationCwd : context.workspaceRoot
|
|
101
97
|
});
|
|
102
98
|
}
|
|
103
|
-
function runRenderedModule(source, context) {
|
|
104
|
-
const tempDir = external_node_fs_default().mkdtempSync(external_node_path_default().join(external_node_os_default().tmpdir(), 'ultramodern-tool-'));
|
|
105
|
-
const tempFile = external_node_path_default().join(tempDir, 'command.mjs');
|
|
106
|
-
try {
|
|
107
|
-
external_node_fs_default().writeFileSync(tempFile, source, 'utf-8');
|
|
108
|
-
const result = (0, external_node_child_process_namespaceObject.spawnSync)(process.execPath, [
|
|
109
|
-
tempFile
|
|
110
|
-
], {
|
|
111
|
-
cwd: context.workspaceRoot,
|
|
112
|
-
stdio: 'inherit'
|
|
113
|
-
});
|
|
114
|
-
if (result.error) throw result.error;
|
|
115
|
-
return result.status ?? 1;
|
|
116
|
-
} finally{
|
|
117
|
-
external_node_fs_default().rmSync(tempDir, {
|
|
118
|
-
force: true,
|
|
119
|
-
recursive: true
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
99
|
exports.AD_HOC_TOOLING_COMMANDS = __webpack_exports__.AD_HOC_TOOLING_COMMANDS;
|
|
124
100
|
exports.createPackageRoot = __webpack_exports__.createPackageRoot;
|
|
125
101
|
exports.printHelp = __webpack_exports__.printHelp;
|
|
126
|
-
exports.runRenderedModule = __webpack_exports__.runRenderedModule;
|
|
127
102
|
exports.runTemplateBackedToolingCommand = __webpack_exports__.runTemplateBackedToolingCommand;
|
|
128
103
|
exports.spawnNodeScript = __webpack_exports__.spawnNodeScript;
|
|
129
104
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
130
105
|
"AD_HOC_TOOLING_COMMANDS",
|
|
131
106
|
"createPackageRoot",
|
|
132
107
|
"printHelp",
|
|
133
|
-
"runRenderedModule",
|
|
134
108
|
"runTemplateBackedToolingCommand",
|
|
135
109
|
"spawnNodeScript"
|
|
136
110
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
(()=>{
|
|
13
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
14
|
+
var define = (defs, kind)=>{
|
|
15
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
[kind]: defs[key]
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
define(getters, "get");
|
|
21
|
+
define(values, "value");
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
(()=>{
|
|
25
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
26
|
+
})();
|
|
27
|
+
var __webpack_exports__ = {};
|
|
28
|
+
const external_node_module_namespaceObject = require("node:module");
|
|
29
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
30
|
+
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
31
|
+
const external_node_url_namespaceObject = require("node:url");
|
|
32
|
+
async function main() {
|
|
33
|
+
const [appDirectory, label] = process.argv.slice(2);
|
|
34
|
+
try {
|
|
35
|
+
if (!appDirectory || !label) throw new Error('Route generation requires an app directory and label.');
|
|
36
|
+
const appRequire = (0, external_node_module_namespaceObject.createRequire)(external_node_path_default().join(appDirectory, 'package.json'));
|
|
37
|
+
const pluginUrl = (0, external_node_url_namespaceObject.pathToFileURL)(appRequire.resolve('@modern-js/plugin-tanstack')).href;
|
|
38
|
+
const { generateTanstackRouteArtifacts } = await import(pluginUrl);
|
|
39
|
+
await generateTanstackRouteArtifacts({
|
|
40
|
+
appDirectory
|
|
41
|
+
});
|
|
42
|
+
console.log(`[ultramodern] TanStack route artifacts generated: ${label}`);
|
|
43
|
+
} catch (error) {
|
|
44
|
+
process.exitCode = 1;
|
|
45
|
+
console.error(`[ultramodern] TanStack route generation failed: ${label}`);
|
|
46
|
+
let current = error;
|
|
47
|
+
let depth = 0;
|
|
48
|
+
while(current){
|
|
49
|
+
const detail = current instanceof Error ? current.stack ?? `${current.name}: ${current.message}` : String(current);
|
|
50
|
+
console.error(`${0 === depth ? '-' : ' caused by:'} ${detail}`);
|
|
51
|
+
current = current instanceof Error ? current.cause : void 0;
|
|
52
|
+
depth += 1;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
main();
|
|
57
|
+
for(var __rspack_i in __webpack_exports__)exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
58
|
+
Object.defineProperty(exports, '__esModule', {
|
|
59
|
+
value: true
|
|
60
|
+
});
|
|
@@ -53,49 +53,6 @@ const resolveRoutesGenerateTargets = (args, context)=>{
|
|
|
53
53
|
if (0 === targets.length) throw new Error(`No generated UltraModern app matched ${appId ?? '<any>'}.`);
|
|
54
54
|
return targets;
|
|
55
55
|
};
|
|
56
|
-
const renderRoutesGenerateModule = ({ workspaceRoot, targets })=>`
|
|
57
|
-
import { createRequire } from 'node:module';
|
|
58
|
-
import path from 'node:path';
|
|
59
|
-
import { pathToFileURL } from 'node:url';
|
|
60
|
-
|
|
61
|
-
const workspaceRoot = ${JSON.stringify(workspaceRoot)};
|
|
62
|
-
const targets = ${JSON.stringify(targets, null, 2)};
|
|
63
|
-
const appRequire = createRequire(path.join(workspaceRoot, 'package.json'));
|
|
64
|
-
const pluginUrl = pathToFileURL(
|
|
65
|
-
appRequire.resolve('@modern-js/plugin-tanstack'),
|
|
66
|
-
).href;
|
|
67
|
-
const { generateTanstackRouteArtifacts } = await import(pluginUrl);
|
|
68
|
-
|
|
69
|
-
let failed = false;
|
|
70
|
-
// Sequential — the app-tools cli singleton is not re-entrant.
|
|
71
|
-
for (const target of targets) {
|
|
72
|
-
try {
|
|
73
|
-
await generateTanstackRouteArtifacts({ appDirectory: target.appDirectory });
|
|
74
|
-
console.log(\`[ultramodern] TanStack route artifacts generated: \${target.label}\`);
|
|
75
|
-
} catch (error) {
|
|
76
|
-
failed = true;
|
|
77
|
-
console.error(\`[ultramodern] TanStack route generation failed: \${target.label}\`);
|
|
78
|
-
// Print the full underlying failure, including the cause chain. The
|
|
79
|
-
// route-generate crash is often an opaque node error thrown deep inside
|
|
80
|
-
// app-tools/plugin (e.g. a path TypeError), so surfacing only
|
|
81
|
-
// \`error.message\` swallows the stack that points at the real culprit.
|
|
82
|
-
let current = error;
|
|
83
|
-
let depth = 0;
|
|
84
|
-
while (current) {
|
|
85
|
-
const label = depth === 0 ? '-' : ' caused by:';
|
|
86
|
-
const detail =
|
|
87
|
-
current instanceof Error
|
|
88
|
-
? current.stack ?? \`\${current.name}: \${current.message}\`
|
|
89
|
-
: String(current);
|
|
90
|
-
console.error(\`\${label} \${detail}\`);
|
|
91
|
-
current = current instanceof Error ? current.cause : undefined;
|
|
92
|
-
depth += 1;
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
process.exit(failed ? 1 : 0);
|
|
98
|
-
`;
|
|
99
56
|
function runRoutesGenerate(args, context) {
|
|
100
57
|
if (args.includes('--help') || args.includes('-h')) {
|
|
101
58
|
process.stdout.write(`Usage:
|
|
@@ -107,11 +64,18 @@ generated workspace app is regenerated.
|
|
|
107
64
|
`);
|
|
108
65
|
return 0;
|
|
109
66
|
}
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
67
|
+
const targets = resolveRoutesGenerateTargets(args, context);
|
|
68
|
+
let failed = false;
|
|
69
|
+
for (const target of targets){
|
|
70
|
+
const status = (0, external_context_cjs_namespaceObject.spawnNodeScript)('dist/esm-node/ultramodern-tooling/commands/routes-generate-app.js', [
|
|
71
|
+
target.appDirectory,
|
|
72
|
+
target.label
|
|
73
|
+
], context, {
|
|
74
|
+
cwd: target.appDirectory
|
|
75
|
+
});
|
|
76
|
+
failed ||= 0 !== status;
|
|
77
|
+
}
|
|
78
|
+
return failed ? 1 : 0;
|
|
115
79
|
}
|
|
116
80
|
exports.runRoutesGenerate = __webpack_exports__.runRoutesGenerate;
|
|
117
81
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
@@ -1,14 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __webpack_require__ = {};
|
|
3
|
-
(()=>{
|
|
4
|
-
__webpack_require__.n = (module)=>{
|
|
5
|
-
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
-
__webpack_require__.d(getter, {
|
|
7
|
-
a: getter
|
|
8
|
-
});
|
|
9
|
-
return getter;
|
|
10
|
-
};
|
|
11
|
-
})();
|
|
12
3
|
(()=>{
|
|
13
4
|
__webpack_require__.d = (exports1, getters, values)=>{
|
|
14
5
|
var define = (defs, kind)=>{
|
|
@@ -39,57 +30,13 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
39
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
40
31
|
runValidate: ()=>runValidate
|
|
41
32
|
});
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
const external_ultramodern_release_cohort_cjs_namespaceObject = require("../../ultramodern-release-cohort.cjs");
|
|
45
|
-
const cohort_parity_cjs_namespaceObject = require("../../ultramodern-workspace/cohort-parity.cjs");
|
|
46
|
-
const contracts_cjs_namespaceObject = require("../../ultramodern-workspace/contracts.cjs");
|
|
47
|
-
const descriptors_cjs_namespaceObject = require("../../ultramodern-workspace/descriptors.cjs");
|
|
48
|
-
const patch_parity_cjs_namespaceObject = require("../../ultramodern-workspace/patch-parity.cjs");
|
|
49
|
-
const workspace_scripts_cjs_namespaceObject = require("../../ultramodern-workspace/workspace-scripts.cjs");
|
|
33
|
+
const workspace_cjs_namespaceObject = require("../../ultramodern-workspace/validation/workspace.cjs");
|
|
34
|
+
const workspace_validation_contract_cjs_namespaceObject = require("../../ultramodern-workspace/workspace-validation-contract.cjs");
|
|
50
35
|
const external_config_cjs_namespaceObject = require("../config.cjs");
|
|
51
|
-
const external_context_cjs_namespaceObject = require("./context.cjs");
|
|
52
36
|
function runValidate(context) {
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
});
|
|
57
|
-
if (patchProblems.length > 0) {
|
|
58
|
-
process.stderr.write(`${(0, patch_parity_cjs_namespaceObject.formatPatchParityReport)(patchProblems)}\n`);
|
|
59
|
-
return 1;
|
|
60
|
-
}
|
|
61
|
-
const workspace = (0, external_config_cjs_namespaceObject.readUltramodernWorkspaceInputs)(context.workspaceRoot, {
|
|
62
|
-
overlay: (0, external_config_cjs_namespaceObject.readJsonObject)(external_node_path_default().join(context.workspaceRoot, 'topology/local-overlays/development.json'))
|
|
63
|
-
});
|
|
64
|
-
const { config, verticals: remotes, primaryShell, additionalShells } = workspace;
|
|
65
|
-
const compactApps = (0, external_config_cjs_namespaceObject.workspaceAppsFromToolingConfig)(config, context.workspaceRoot);
|
|
66
|
-
const compactPrimaryShell = compactApps.find((app)=>'shell' === app.kind) ?? (0, descriptors_cjs_namespaceObject.createShellHost)(remotes);
|
|
67
|
-
const compactConfig = (0, contracts_cjs_namespaceObject.createUltramodernConfig)(config.workspace.packageScope, 'workspace-validation-contract', {
|
|
68
|
-
strategy: 'workspace',
|
|
69
|
-
modernPackageVersion: 'workspace:*'
|
|
70
|
-
}, compactApps, config.features.tailwind, void 0, additionalShells, compactPrimaryShell, remotes);
|
|
71
|
-
const declaredCompact = (0, external_config_cjs_namespaceObject.readJsonObject)(config.sourcePath);
|
|
72
|
-
const compactTopology = compactConfig.topology;
|
|
73
|
-
for (const app of compactTopology.apps){
|
|
74
|
-
const declared = declaredCompact.topology?.apps?.find((entry)=>entry.id === app.id)?.deploy?.cloudflare;
|
|
75
|
-
for (const key of [
|
|
76
|
-
'routes',
|
|
77
|
-
'distributedSsrProofRoutes',
|
|
78
|
-
'jsonSmokeChecks'
|
|
79
|
-
])if (declared && Object.hasOwn(declared, key)) app.deploy.cloudflare[key] = declared[key];
|
|
80
|
-
}
|
|
81
|
-
const cohortProblem = (0, cohort_parity_cjs_namespaceObject.checkReleaseCohortParity)({
|
|
82
|
-
workspaceRoot: context.workspaceRoot,
|
|
83
|
-
createPackageRoot: external_context_cjs_namespaceObject.createPackageRoot,
|
|
84
|
-
requireTemplate: config.packageSource?.strategy === 'install'
|
|
85
|
-
});
|
|
86
|
-
if (cohortProblem) {
|
|
87
|
-
process.stderr.write(`${(0, cohort_parity_cjs_namespaceObject.formatReleaseCohortParityReport)(cohortProblem)}\n`);
|
|
88
|
-
return 1;
|
|
89
|
-
}
|
|
90
|
-
const releaseCohort = config.packageSource?.strategy === 'install' ? (0, external_ultramodern_release_cohort_cjs_namespaceObject.readWorkspaceReleaseCohort)(context.workspaceRoot) : void 0;
|
|
91
|
-
const source = (0, workspace_scripts_cjs_namespaceObject.createPackagedWorkspaceValidationScript)(config.workspace.packageScope, config.features.tailwind, remotes, releaseCohort, additionalShells, primaryShell, compactConfig, (0, external_config_cjs_namespaceObject.readJsonObject)(external_node_path_default().join(context.workspaceRoot, 'topology/ownership.json')), void 0, context.workspaceRoot);
|
|
92
|
-
return (0, external_context_cjs_namespaceObject.runRenderedModule)(source, context);
|
|
37
|
+
const { config, raw, verticals, primaryShell, additionalShells } = (0, external_config_cjs_namespaceObject.readUltramodernWorkspaceInputs)(context.workspaceRoot);
|
|
38
|
+
(0, workspace_cjs_namespaceObject.validateWorkspace)(context.workspaceRoot, (0, workspace_validation_contract_cjs_namespaceObject.createWorkspaceValidationContract)(config.workspace.packageScope, config.features.tailwind, raw.topology.sharedPackages, verticals, additionalShells, primaryShell));
|
|
39
|
+
return 0;
|
|
93
40
|
}
|
|
94
41
|
exports.runValidate = __webpack_exports__.runValidate;
|
|
95
42
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
@@ -39,6 +39,8 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
39
39
|
__webpack_require__.d(__webpack_exports__, {
|
|
40
40
|
runUltramodernToolingCli: ()=>runUltramodernToolingCli
|
|
41
41
|
});
|
|
42
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
43
|
+
var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
|
|
42
44
|
const external_node_path_namespaceObject = require("node:path");
|
|
43
45
|
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
44
46
|
const tooling_command_catalog_cjs_namespaceObject = require("../ultramodern-workspace/tooling-command-catalog.cjs");
|
|
@@ -52,8 +54,16 @@ const validate_cjs_namespaceObject = require("./commands/validate.cjs");
|
|
|
52
54
|
async function runUltramodernToolingCli(args, workspaceRoot = process.env.ULTRAMODERN_WORKSPACE_ROOT ?? process.cwd()) {
|
|
53
55
|
try {
|
|
54
56
|
const [command, ...rest] = args;
|
|
57
|
+
let discoveredRoot = external_node_path_default().resolve(workspaceRoot);
|
|
58
|
+
for(let candidate = discoveredRoot;; candidate = external_node_path_default().dirname(candidate)){
|
|
59
|
+
if (external_node_fs_default().existsSync(external_node_path_default().join(candidate, 'topology/reference-topology.json'))) {
|
|
60
|
+
discoveredRoot = candidate;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
if (external_node_path_default().dirname(candidate) === candidate) break;
|
|
64
|
+
}
|
|
55
65
|
const context = {
|
|
56
|
-
workspaceRoot:
|
|
66
|
+
workspaceRoot: discoveredRoot,
|
|
57
67
|
invocationCwd: process.cwd()
|
|
58
68
|
};
|
|
59
69
|
switch(command){
|
|
@@ -67,9 +77,9 @@ async function runUltramodernToolingCli(args, workspaceRoot = process.env.ULTRAM
|
|
|
67
77
|
case tooling_command_catalog_cjs_namespaceObject.GENERATED_TOOLING_COMMANDS.mfTypes.command:
|
|
68
78
|
return (0, mf_types_cjs_namespaceObject.runMfTypes)(rest, context);
|
|
69
79
|
case tooling_command_catalog_cjs_namespaceObject.GENERATED_TOOLING_COMMANDS.cloudflareOutputVerify.command:
|
|
70
|
-
return (0, cloudflare_output_verify_cjs_namespaceObject.runCloudflareOutputVerify)(rest, context);
|
|
80
|
+
return await (0, cloudflare_output_verify_cjs_namespaceObject.runCloudflareOutputVerify)(rest, context);
|
|
71
81
|
case tooling_command_catalog_cjs_namespaceObject.GENERATED_TOOLING_COMMANDS.routesGenerate.command:
|
|
72
|
-
return (0, routes_generate_cjs_namespaceObject.runRoutesGenerate)(rest, context);
|
|
82
|
+
return await (0, routes_generate_cjs_namespaceObject.runRoutesGenerate)(rest, context);
|
|
73
83
|
case context_cjs_namespaceObject.AD_HOC_TOOLING_COMMANDS.syncDeliveryUnit:
|
|
74
84
|
return (0, sync_delivery_unit_cjs_namespaceObject.runSyncDeliveryUnit)(rest, context);
|
|
75
85
|
case context_cjs_namespaceObject.AD_HOC_TOOLING_COMMANDS.skills:
|