@bleedingdev/modern-js-create 3.5.0-ultramodern.30 → 3.5.0-ultramodern.31
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/cjs/cli/flags.cjs +326 -0
- package/dist/cjs/cli/help.cjs +106 -0
- package/dist/cjs/cli/package-source.cjs +186 -0
- package/dist/cjs/cli/project-setup.cjs +138 -0
- package/dist/cjs/cli/prompts.cjs +118 -0
- package/dist/cjs/index.cjs +24 -581
- package/dist/cjs/ultramodern-tooling/commands/cloudflare-output-verify.cjs +132 -0
- package/dist/cjs/ultramodern-tooling/commands/context.cjs +131 -0
- package/dist/cjs/ultramodern-tooling/commands/mf-types.cjs +55 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.cjs +158 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.cjs +49 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.cjs +87 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.cjs +58 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.cjs +62 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.cjs +60 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.cjs +132 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.cjs +67 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.cjs +93 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.cjs +60 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.cjs +67 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.cjs +67 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/help.cjs +54 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/install.cjs +52 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/io.cjs +133 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.cjs +219 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-source.cjs +76 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.cjs +131 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.cjs +161 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.cjs +88 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect.cjs +149 -0
- package/dist/cjs/ultramodern-tooling/commands/options.cjs +59 -0
- package/dist/cjs/ultramodern-tooling/commands/routes-generate.cjs +122 -0
- package/dist/cjs/ultramodern-tooling/commands/skills.cjs +49 -0
- package/dist/cjs/ultramodern-tooling/commands/sync-delivery-unit.cjs +40 -0
- package/dist/cjs/ultramodern-tooling/commands/validate.cjs +49 -0
- package/dist/cjs/ultramodern-tooling/commands.cjs +17 -1165
- package/dist/cjs/ultramodern-tooling/config/constants.cjs +48 -0
- package/dist/cjs/ultramodern-tooling/config/index.cjs +104 -0
- package/dist/cjs/ultramodern-tooling/config/json.cjs +61 -0
- package/dist/cjs/ultramodern-tooling/config/load.cjs +62 -0
- package/dist/cjs/ultramodern-tooling/config/metadata.cjs +92 -0
- package/dist/cjs/ultramodern-tooling/config/normalize.cjs +160 -0
- package/dist/cjs/ultramodern-tooling/config/synthesize.cjs +157 -0
- package/dist/cjs/ultramodern-tooling/config/types.cjs +18 -0
- package/dist/cjs/ultramodern-tooling/config.cjs +23 -274
- package/dist/cjs/ultramodern-workspace/add-vertical/constants.cjs +52 -0
- package/dist/cjs/ultramodern-workspace/add-vertical/execute.cjs +156 -0
- package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +246 -0
- package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +198 -0
- package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +116 -0
- package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +133 -0
- package/dist/cjs/ultramodern-workspace/add-vertical/workspace-state.cjs +107 -0
- package/dist/cjs/ultramodern-workspace/add-vertical.cjs +22 -596
- package/dist/cjs/ultramodern-workspace/api/checkout-cart.cjs +145 -0
- package/dist/cjs/ultramodern-workspace/api/client.cjs +218 -0
- package/dist/cjs/ultramodern-workspace/api/contracts.cjs +222 -0
- package/dist/cjs/ultramodern-workspace/api/names.cjs +98 -0
- package/dist/cjs/ultramodern-workspace/api/service.cjs +220 -0
- package/dist/cjs/ultramodern-workspace/api/shared.cjs +252 -0
- package/dist/cjs/ultramodern-workspace/api.cjs +27 -1046
- package/dist/cjs/ultramodern-workspace/app-files.cjs +3 -18
- package/dist/cjs/ultramodern-workspace/backend-federation.cjs +38 -24
- package/dist/cjs/ultramodern-workspace/bridge-config/cli.cjs +71 -0
- package/dist/cjs/ultramodern-workspace/bridge-config/defaults.cjs +43 -0
- package/dist/cjs/ultramodern-workspace/bridge-config/gates.cjs +93 -0
- package/dist/cjs/ultramodern-workspace/bridge-config/index.cjs +60 -0
- package/dist/cjs/ultramodern-workspace/bridge-config/normalize.cjs +68 -0
- package/dist/cjs/ultramodern-workspace/bridge-config/schema.cjs +78 -0
- package/dist/cjs/ultramodern-workspace/bridge-config/shared.cjs +110 -0
- package/dist/cjs/ultramodern-workspace/bridge-config/validation.cjs +68 -0
- package/dist/cjs/ultramodern-workspace/bridge-config/workspace-packages.cjs +108 -0
- package/dist/cjs/ultramodern-workspace/bridge-config.cjs +32 -297
- package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +22 -20
- package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +7 -20
- package/dist/cjs/ultramodern-workspace/demo-components.cjs +47 -189
- package/dist/cjs/ultramodern-workspace/descriptors.cjs +12 -1
- package/dist/cjs/ultramodern-workspace/effect-diagnostics.cjs +114 -0
- package/dist/cjs/ultramodern-workspace/fs-io.cjs +24 -2
- package/dist/cjs/ultramodern-workspace/index.cjs +4 -0
- package/dist/cjs/ultramodern-workspace/mf-validation/constants.cjs +69 -0
- package/dist/cjs/ultramodern-workspace/mf-validation/discovery.cjs +77 -0
- package/dist/cjs/ultramodern-workspace/mf-validation/inspect.cjs +92 -0
- package/dist/cjs/ultramodern-workspace/mf-validation/object-literal.cjs +203 -0
- package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +171 -0
- package/dist/cjs/ultramodern-workspace/mf-validation/syntax.cjs +228 -0
- package/dist/cjs/ultramodern-workspace/mf-validation/types.cjs +18 -0
- package/dist/cjs/ultramodern-workspace/mf-validation/validate.cjs +112 -0
- package/dist/cjs/ultramodern-workspace/mf-validation.cjs +6 -529
- package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +251 -0
- package/dist/cjs/ultramodern-workspace/module-federation/index.cjs +73 -0
- package/dist/cjs/ultramodern-workspace/module-federation/reexport-module.cjs +73 -0
- package/dist/cjs/ultramodern-workspace/module-federation/remote-refs.cjs +105 -0
- package/dist/cjs/ultramodern-workspace/module-federation/shared-config.cjs +53 -0
- package/dist/cjs/ultramodern-workspace/module-federation.cjs +14 -584
- package/dist/cjs/ultramodern-workspace/package-json.cjs +13 -229
- package/dist/cjs/ultramodern-workspace/routes.cjs +8 -142
- package/dist/cjs/ultramodern-workspace/shared-patches.cjs +44 -0
- package/dist/cjs/ultramodern-workspace/tsconfigs.cjs +199 -0
- package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +2 -2
- package/dist/cjs/ultramodern-workspace/write-app.cjs +128 -0
- package/dist/cjs/ultramodern-workspace/write-workspace.cjs +4 -61
- package/dist/cjs/ultramodern-workspace/zerops.cjs +13 -10
- package/dist/esm/cli/flags.js +228 -0
- package/dist/esm/cli/help.js +65 -0
- package/dist/esm/cli/package-source.js +119 -0
- package/dist/esm/cli/project-setup.js +81 -0
- package/dist/esm/cli/prompts.js +63 -0
- package/dist/esm/index.js +6 -559
- package/dist/esm/ultramodern-tooling/commands/cloudflare-output-verify.js +84 -0
- package/dist/esm/ultramodern-tooling/commands/context.js +66 -0
- package/dist/esm/ultramodern-tooling/commands/mf-types.js +17 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +106 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +11 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +38 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +10 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +14 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +12 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +83 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +16 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +44 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +12 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +7 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +15 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/help.js +16 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/install.js +14 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/io.js +69 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +175 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +38 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +76 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +105 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +16 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect.js +100 -0
- package/dist/esm/ultramodern-tooling/commands/options.js +18 -0
- package/dist/esm/ultramodern-tooling/commands/routes-generate.js +74 -0
- package/dist/esm/ultramodern-tooling/commands/skills.js +11 -0
- package/dist/esm/ultramodern-tooling/commands/sync-delivery-unit.js +1 -0
- package/dist/esm/ultramodern-tooling/commands/validate.js +11 -0
- package/dist/esm/ultramodern-tooling/commands.js +9 -1152
- package/dist/esm/ultramodern-tooling/config/constants.js +4 -0
- package/dist/esm/ultramodern-tooling/config/index.js +7 -0
- package/dist/esm/ultramodern-tooling/config/json.js +10 -0
- package/dist/esm/ultramodern-tooling/config/load.js +13 -0
- package/dist/esm/ultramodern-tooling/config/metadata.js +37 -0
- package/dist/esm/ultramodern-tooling/config/normalize.js +106 -0
- package/dist/esm/ultramodern-tooling/config/synthesize.js +108 -0
- package/dist/esm/ultramodern-tooling/config/types.js +0 -0
- package/dist/esm/ultramodern-tooling/config.js +1 -255
- package/dist/esm/ultramodern-workspace/add-vertical/constants.js +5 -0
- package/dist/esm/ultramodern-workspace/add-vertical/execute.js +108 -0
- package/dist/esm/ultramodern-workspace/add-vertical/plan.js +184 -0
- package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +122 -0
- package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +59 -0
- package/dist/esm/ultramodern-workspace/add-vertical/topology.js +89 -0
- package/dist/esm/ultramodern-workspace/add-vertical/workspace-state.js +43 -0
- package/dist/esm/ultramodern-workspace/add-vertical.js +6 -569
- package/dist/esm/ultramodern-workspace/api/checkout-cart.js +86 -0
- package/dist/esm/ultramodern-workspace/api/client.js +177 -0
- package/dist/esm/ultramodern-workspace/api/contracts.js +172 -0
- package/dist/esm/ultramodern-workspace/api/names.js +33 -0
- package/dist/esm/ultramodern-workspace/api/service.js +179 -0
- package/dist/esm/ultramodern-workspace/api/shared.js +208 -0
- package/dist/esm/ultramodern-workspace/api.js +5 -1025
- package/dist/esm/ultramodern-workspace/app-files.js +3 -18
- package/dist/esm/ultramodern-workspace/backend-federation.js +27 -13
- package/dist/esm/ultramodern-workspace/bridge-config/cli.js +30 -0
- package/dist/esm/ultramodern-workspace/bridge-config/defaults.js +5 -0
- package/dist/esm/ultramodern-workspace/bridge-config/gates.js +52 -0
- package/dist/esm/ultramodern-workspace/bridge-config/index.js +3 -0
- package/dist/esm/ultramodern-workspace/bridge-config/normalize.js +30 -0
- package/dist/esm/ultramodern-workspace/bridge-config/schema.js +31 -0
- package/dist/esm/ultramodern-workspace/bridge-config/shared.js +51 -0
- package/dist/esm/ultramodern-workspace/bridge-config/validation.js +27 -0
- package/dist/esm/ultramodern-workspace/bridge-config/workspace-packages.js +67 -0
- package/dist/esm/ultramodern-workspace/bridge-config.js +1 -270
- package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +23 -21
- package/dist/esm/ultramodern-workspace/delivery-unit.js +6 -16
- package/dist/esm/ultramodern-workspace/demo-components.js +47 -189
- package/dist/esm/ultramodern-workspace/descriptors.js +12 -1
- package/dist/esm/ultramodern-workspace/effect-diagnostics.js +76 -0
- package/dist/esm/ultramodern-workspace/fs-io.js +24 -2
- package/dist/esm/ultramodern-workspace/index.js +1 -0
- package/dist/esm/ultramodern-workspace/mf-validation/constants.js +19 -0
- package/dist/esm/ultramodern-workspace/mf-validation/discovery.js +28 -0
- package/dist/esm/ultramodern-workspace/mf-validation/inspect.js +45 -0
- package/dist/esm/ultramodern-workspace/mf-validation/object-literal.js +144 -0
- package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +89 -0
- package/dist/esm/ultramodern-workspace/mf-validation/syntax.js +154 -0
- package/dist/esm/ultramodern-workspace/mf-validation/types.js +0 -0
- package/dist/esm/ultramodern-workspace/mf-validation/validate.js +57 -0
- package/dist/esm/ultramodern-workspace/mf-validation.js +3 -516
- package/dist/esm/ultramodern-workspace/module-federation/config.js +204 -0
- package/dist/esm/ultramodern-workspace/module-federation/index.js +4 -0
- package/dist/esm/ultramodern-workspace/module-federation/reexport-module.js +29 -0
- package/dist/esm/ultramodern-workspace/module-federation/remote-refs.js +64 -0
- package/dist/esm/ultramodern-workspace/module-federation/shared-config.js +12 -0
- package/dist/esm/ultramodern-workspace/module-federation.js +2 -576
- package/dist/esm/ultramodern-workspace/package-json.js +7 -210
- package/dist/esm/ultramodern-workspace/routes.js +8 -142
- package/dist/esm/ultramodern-workspace/shared-patches.js +6 -0
- package/dist/esm/ultramodern-workspace/tsconfigs.js +136 -0
- package/dist/esm/ultramodern-workspace/workspace-script-plan.js +2 -2
- package/dist/esm/ultramodern-workspace/write-app.js +90 -0
- package/dist/esm/ultramodern-workspace/write-workspace.js +4 -61
- package/dist/esm/ultramodern-workspace/zerops.js +13 -10
- package/dist/esm-node/cli/flags.js +229 -0
- package/dist/esm-node/cli/help.js +66 -0
- package/dist/esm-node/cli/package-source.js +120 -0
- package/dist/esm-node/cli/project-setup.js +82 -0
- package/dist/esm-node/cli/prompts.js +64 -0
- package/dist/esm-node/index.js +6 -559
- package/dist/esm-node/ultramodern-tooling/commands/cloudflare-output-verify.js +85 -0
- package/dist/esm-node/ultramodern-tooling/commands/context.js +67 -0
- package/dist/esm-node/ultramodern-tooling/commands/mf-types.js +18 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +107 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +12 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.js +39 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.js +11 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +15 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +13 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.js +84 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.js +17 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +45 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.js +13 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.js +8 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.js +16 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/help.js +17 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/install.js +15 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/io.js +70 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +176 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-source.js +39 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +77 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +106 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +17 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect.js +101 -0
- package/dist/esm-node/ultramodern-tooling/commands/options.js +19 -0
- package/dist/esm-node/ultramodern-tooling/commands/routes-generate.js +75 -0
- package/dist/esm-node/ultramodern-tooling/commands/skills.js +12 -0
- package/dist/esm-node/ultramodern-tooling/commands/sync-delivery-unit.js +2 -0
- package/dist/esm-node/ultramodern-tooling/commands/validate.js +12 -0
- package/dist/esm-node/ultramodern-tooling/commands.js +9 -1152
- package/dist/esm-node/ultramodern-tooling/config/constants.js +5 -0
- package/dist/esm-node/ultramodern-tooling/config/index.js +8 -0
- package/dist/esm-node/ultramodern-tooling/config/json.js +11 -0
- package/dist/esm-node/ultramodern-tooling/config/load.js +14 -0
- package/dist/esm-node/ultramodern-tooling/config/metadata.js +38 -0
- package/dist/esm-node/ultramodern-tooling/config/normalize.js +107 -0
- package/dist/esm-node/ultramodern-tooling/config/synthesize.js +109 -0
- package/dist/esm-node/ultramodern-tooling/config/types.js +1 -0
- package/dist/esm-node/ultramodern-tooling/config.js +1 -255
- package/dist/esm-node/ultramodern-workspace/add-vertical/constants.js +6 -0
- package/dist/esm-node/ultramodern-workspace/add-vertical/execute.js +109 -0
- package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +185 -0
- package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +123 -0
- package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +60 -0
- package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +90 -0
- package/dist/esm-node/ultramodern-workspace/add-vertical/workspace-state.js +44 -0
- package/dist/esm-node/ultramodern-workspace/add-vertical.js +6 -569
- package/dist/esm-node/ultramodern-workspace/api/checkout-cart.js +87 -0
- package/dist/esm-node/ultramodern-workspace/api/client.js +178 -0
- package/dist/esm-node/ultramodern-workspace/api/contracts.js +173 -0
- package/dist/esm-node/ultramodern-workspace/api/names.js +34 -0
- package/dist/esm-node/ultramodern-workspace/api/service.js +180 -0
- package/dist/esm-node/ultramodern-workspace/api/shared.js +209 -0
- package/dist/esm-node/ultramodern-workspace/api.js +5 -1025
- package/dist/esm-node/ultramodern-workspace/app-files.js +3 -18
- package/dist/esm-node/ultramodern-workspace/backend-federation.js +27 -13
- package/dist/esm-node/ultramodern-workspace/bridge-config/cli.js +31 -0
- package/dist/esm-node/ultramodern-workspace/bridge-config/defaults.js +6 -0
- package/dist/esm-node/ultramodern-workspace/bridge-config/gates.js +53 -0
- package/dist/esm-node/ultramodern-workspace/bridge-config/index.js +4 -0
- package/dist/esm-node/ultramodern-workspace/bridge-config/normalize.js +31 -0
- package/dist/esm-node/ultramodern-workspace/bridge-config/schema.js +32 -0
- package/dist/esm-node/ultramodern-workspace/bridge-config/shared.js +52 -0
- package/dist/esm-node/ultramodern-workspace/bridge-config/validation.js +28 -0
- package/dist/esm-node/ultramodern-workspace/bridge-config/workspace-packages.js +68 -0
- package/dist/esm-node/ultramodern-workspace/bridge-config.js +1 -270
- package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +23 -21
- package/dist/esm-node/ultramodern-workspace/delivery-unit.js +6 -16
- package/dist/esm-node/ultramodern-workspace/demo-components.js +47 -189
- package/dist/esm-node/ultramodern-workspace/descriptors.js +12 -1
- package/dist/esm-node/ultramodern-workspace/effect-diagnostics.js +77 -0
- package/dist/esm-node/ultramodern-workspace/fs-io.js +24 -2
- package/dist/esm-node/ultramodern-workspace/index.js +1 -0
- package/dist/esm-node/ultramodern-workspace/mf-validation/constants.js +20 -0
- package/dist/esm-node/ultramodern-workspace/mf-validation/discovery.js +29 -0
- package/dist/esm-node/ultramodern-workspace/mf-validation/inspect.js +46 -0
- package/dist/esm-node/ultramodern-workspace/mf-validation/object-literal.js +145 -0
- package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +90 -0
- package/dist/esm-node/ultramodern-workspace/mf-validation/syntax.js +155 -0
- package/dist/esm-node/ultramodern-workspace/mf-validation/types.js +1 -0
- package/dist/esm-node/ultramodern-workspace/mf-validation/validate.js +58 -0
- package/dist/esm-node/ultramodern-workspace/mf-validation.js +3 -516
- package/dist/esm-node/ultramodern-workspace/module-federation/config.js +205 -0
- package/dist/esm-node/ultramodern-workspace/module-federation/index.js +5 -0
- package/dist/esm-node/ultramodern-workspace/module-federation/reexport-module.js +30 -0
- package/dist/esm-node/ultramodern-workspace/module-federation/remote-refs.js +65 -0
- package/dist/esm-node/ultramodern-workspace/module-federation/shared-config.js +13 -0
- package/dist/esm-node/ultramodern-workspace/module-federation.js +2 -576
- package/dist/esm-node/ultramodern-workspace/package-json.js +7 -210
- package/dist/esm-node/ultramodern-workspace/routes.js +8 -142
- package/dist/esm-node/ultramodern-workspace/shared-patches.js +7 -0
- package/dist/esm-node/ultramodern-workspace/tsconfigs.js +137 -0
- package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +2 -2
- package/dist/esm-node/ultramodern-workspace/write-app.js +91 -0
- package/dist/esm-node/ultramodern-workspace/write-workspace.js +4 -61
- package/dist/esm-node/ultramodern-workspace/zerops.js +13 -10
- package/dist/types/cli/flags.d.ts +30 -0
- package/dist/types/cli/help.d.ts +2 -0
- package/dist/types/cli/package-source.d.ts +15 -0
- package/dist/types/cli/project-setup.d.ts +8 -0
- package/dist/types/cli/prompts.d.ts +6 -0
- package/dist/types/ultramodern-tooling/commands/cloudflare-output-verify.d.ts +2 -0
- package/dist/types/ultramodern-tooling/commands/context.d.ts +11 -0
- package/dist/types/ultramodern-tooling/commands/mf-types.d.ts +2 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.d.ts +4 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.d.ts +4 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/dependency-usage.d.ts +1 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-backend-federation.d.ts +3 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.d.ts +3 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.d.ts +3 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-oxfmt.d.ts +2 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-removal.d.ts +4 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.d.ts +3 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-zerops.d.ts +3 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts.d.ts +7 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-patches.d.ts +3 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/help.d.ts +1 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/install.d.ts +2 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/io.d.ts +14 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.d.ts +9 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/package-source.d.ts +3 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.d.ts +4 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.d.ts +25 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.d.ts +9 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect.d.ts +2 -0
- package/dist/types/ultramodern-tooling/commands/options.d.ts +2 -0
- package/dist/types/ultramodern-tooling/commands/routes-generate.d.ts +2 -0
- package/dist/types/ultramodern-tooling/commands/skills.d.ts +2 -0
- package/dist/types/ultramodern-tooling/commands/sync-delivery-unit.d.ts +1 -0
- package/dist/types/ultramodern-tooling/commands/validate.d.ts +2 -0
- package/dist/types/ultramodern-tooling/config/constants.d.ts +3 -0
- package/dist/types/ultramodern-tooling/config/index.d.ts +7 -0
- package/dist/types/ultramodern-tooling/config/json.d.ts +2 -0
- package/dist/types/ultramodern-tooling/config/load.d.ts +2 -0
- package/dist/types/ultramodern-tooling/config/metadata.d.ts +4 -0
- package/dist/types/ultramodern-tooling/config/normalize.d.ts +5 -0
- package/dist/types/ultramodern-tooling/config/synthesize.d.ts +5 -0
- package/dist/types/ultramodern-tooling/config/types.d.ts +41 -0
- package/dist/types/ultramodern-tooling/config.d.ts +1 -49
- package/dist/types/ultramodern-workspace/add-vertical/constants.d.ts +4 -0
- package/dist/types/ultramodern-workspace/add-vertical/execute.d.ts +2 -0
- package/dist/types/ultramodern-workspace/add-vertical/plan.d.ts +7 -0
- package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +28 -0
- package/dist/types/ultramodern-workspace/add-vertical/shell-files.d.ts +6 -0
- package/dist/types/ultramodern-workspace/add-vertical/topology.d.ts +9 -0
- package/dist/types/ultramodern-workspace/add-vertical/workspace-state.d.ts +8 -0
- package/dist/types/ultramodern-workspace/add-vertical.d.ts +7 -39
- package/dist/types/ultramodern-workspace/api/checkout-cart.d.ts +33 -0
- package/dist/types/ultramodern-workspace/api/client.d.ts +6 -0
- package/dist/types/ultramodern-workspace/api/contracts.d.ts +15 -0
- package/dist/types/ultramodern-workspace/api/names.d.ts +41 -0
- package/dist/types/ultramodern-workspace/api/service.d.ts +6 -0
- package/dist/types/ultramodern-workspace/api/shared.d.ts +10 -0
- package/dist/types/ultramodern-workspace/api.d.ts +5 -74
- package/dist/types/ultramodern-workspace/backend-federation.d.ts +2 -2
- package/dist/types/ultramodern-workspace/bridge-config/cli.d.ts +3 -0
- package/dist/types/ultramodern-workspace/bridge-config/defaults.d.ts +1 -0
- package/dist/types/ultramodern-workspace/bridge-config/gates.d.ts +3 -0
- package/dist/types/ultramodern-workspace/bridge-config/index.d.ts +4 -0
- package/dist/types/ultramodern-workspace/bridge-config/normalize.d.ts +2 -0
- package/dist/types/ultramodern-workspace/bridge-config/schema.d.ts +61 -0
- package/dist/types/ultramodern-workspace/bridge-config/shared.d.ts +12 -0
- package/dist/types/ultramodern-workspace/bridge-config/validation.d.ts +3 -0
- package/dist/types/ultramodern-workspace/bridge-config/workspace-packages.d.ts +3 -0
- package/dist/types/ultramodern-workspace/bridge-config.d.ts +1 -64
- package/dist/types/ultramodern-workspace/delivery-unit.d.ts +2 -21
- package/dist/types/ultramodern-workspace/effect-diagnostics.d.ts +1 -0
- package/dist/types/ultramodern-workspace/index.d.ts +1 -0
- package/dist/types/ultramodern-workspace/mf-validation/constants.d.ts +5 -0
- package/dist/types/ultramodern-workspace/mf-validation/discovery.d.ts +2 -0
- package/dist/types/ultramodern-workspace/mf-validation/inspect.d.ts +5 -0
- package/dist/types/ultramodern-workspace/mf-validation/object-literal.d.ts +9 -0
- package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +13 -0
- package/dist/types/ultramodern-workspace/mf-validation/syntax.d.ts +14 -0
- package/dist/types/ultramodern-workspace/mf-validation/types.d.ts +33 -0
- package/dist/types/ultramodern-workspace/mf-validation/validate.d.ts +4 -0
- package/dist/types/ultramodern-workspace/mf-validation.d.ts +4 -27
- package/dist/types/ultramodern-workspace/module-federation/config.d.ts +5 -0
- package/dist/types/ultramodern-workspace/module-federation/index.d.ts +4 -0
- package/dist/types/ultramodern-workspace/module-federation/reexport-module.d.ts +4 -0
- package/dist/types/ultramodern-workspace/module-federation/remote-refs.d.ts +3 -0
- package/dist/types/ultramodern-workspace/module-federation/shared-config.d.ts +2 -0
- package/dist/types/ultramodern-workspace/module-federation.d.ts +1 -11
- package/dist/types/ultramodern-workspace/package-json.d.ts +1 -13
- package/dist/types/ultramodern-workspace/shared-patches.d.ts +2 -0
- package/dist/types/ultramodern-workspace/tsconfigs.d.ts +13 -0
- package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +1 -1
- package/dist/types/ultramodern-workspace/write-app.d.ts +3 -0
- package/dist/types/ultramodern-workspace/write-workspace.d.ts +2 -1
- package/package.json +4 -3
- package/templates/workspace/apps/modern.config.shared-module-federation.ts.handlebars +37 -0
- package/templates/workspace/apps/modern.config.ts.handlebars +252 -0
- package/templates/workspace/apps/shared/src/routes/ultramodern-jsonld.ts.handlebars +119 -0
- package/templates/workspace/apps/shared/src/routes/ultramodern-route-metadata.ts.handlebars +21 -0
- package/templates/workspace/apps/shell-super-app/src/routes/[lang]/page.tsx.handlebars +49 -0
- package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx.handlebars +79 -0
- package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx.handlebars +11 -0
- package/templates/workspace/apps/shell-super-app/src/routes/vertical-components.tsx.handlebars +46 -0
- package/templates/workspace/packages/shared-design-tokens/tokens.css.handlebars +7 -0
- package/templates/workspace/postcss.config.mjs.handlebars +5 -0
- package/templates/workspace/tailwind.config.ts.handlebars +3 -0
- package/templates/workspace/verticals/server/checkout-cart-handlers.ts.handlebars +49 -0
- package/templates/workspace/verticals/server/checkout-cart-state.ts.handlebars +23 -0
- package/templates/workspace/verticals/shared/api.checkout-cart-contract-fields.ts.handlebars +1 -0
- package/templates/workspace/verticals/shared/api.checkout-cart-endpoints.ts.handlebars +23 -0
- package/templates/workspace/verticals/shared/api.checkout-cart-operation-contexts.ts.handlebars +25 -0
- package/templates/workspace/verticals/shared/api.checkout-cart-schemas.ts.handlebars +48 -0
- package/templates/workspace/verticals/src/api/checkout-cart-client-exports.ts.handlebars +70 -0
- package/templates/workspace-scripts/generate-node-backend-federation.mjs +29 -0
- package/templates/workspace-scripts/proof-node-backend-federation.mjs +31 -0
- package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +74 -40
|
@@ -1,270 +1 @@
|
|
|
1
|
-
|
|
2
|
-
enabled: '--bridge',
|
|
3
|
-
parentRoot: '--bridge-parent-root',
|
|
4
|
-
workspacePackage: '--bridge-workspace-package',
|
|
5
|
-
workspacePackageName: '--bridge-workspace-package-name',
|
|
6
|
-
testAlias: '--bridge-test-alias',
|
|
7
|
-
dependency: '--bridge-dependency',
|
|
8
|
-
lockfilePolicy: '--bridge-lockfile-policy',
|
|
9
|
-
gate: '--bridge-gate',
|
|
10
|
-
gateCwd: '--bridge-gate-cwd',
|
|
11
|
-
reactSingleton: '--bridge-react-singleton'
|
|
12
|
-
};
|
|
13
|
-
const ultramodernBridgeCliValueFlags = [
|
|
14
|
-
ultramodernBridgeCliFlags.parentRoot,
|
|
15
|
-
ultramodernBridgeCliFlags.workspacePackage,
|
|
16
|
-
ultramodernBridgeCliFlags.workspacePackageName,
|
|
17
|
-
ultramodernBridgeCliFlags.testAlias,
|
|
18
|
-
ultramodernBridgeCliFlags.dependency,
|
|
19
|
-
ultramodernBridgeCliFlags.lockfilePolicy,
|
|
20
|
-
ultramodernBridgeCliFlags.gate,
|
|
21
|
-
ultramodernBridgeCliFlags.gateCwd,
|
|
22
|
-
ultramodernBridgeCliFlags.reactSingleton
|
|
23
|
-
];
|
|
24
|
-
const ultramodernBridgeCliBooleanFlags = [
|
|
25
|
-
ultramodernBridgeCliFlags.enabled
|
|
26
|
-
];
|
|
27
|
-
const ultramodernBridgeLockfilePolicies = [
|
|
28
|
-
'nested',
|
|
29
|
-
'parent'
|
|
30
|
-
];
|
|
31
|
-
const defaultReactSingletons = [
|
|
32
|
-
'react',
|
|
33
|
-
'react-dom'
|
|
34
|
-
];
|
|
35
|
-
function hasUltramodernBridgeCliOptions(args) {
|
|
36
|
-
return args.some((arg)=>[
|
|
37
|
-
...ultramodernBridgeCliBooleanFlags,
|
|
38
|
-
...ultramodernBridgeCliValueFlags
|
|
39
|
-
].some((flag)=>arg === flag || arg.startsWith(`${flag}=`)));
|
|
40
|
-
}
|
|
41
|
-
function parseUltramodernBridgeCliOptions(args) {
|
|
42
|
-
rejectBooleanFlagValues(args);
|
|
43
|
-
if (!hasUltramodernBridgeCliOptions(args)) return;
|
|
44
|
-
const parentRoot = readSingleValue(args, ultramodernBridgeCliFlags.parentRoot);
|
|
45
|
-
const lockfilePolicy = readSingleValue(args, ultramodernBridgeCliFlags.lockfilePolicy) ?? 'nested';
|
|
46
|
-
const workspacePackages = readWorkspacePackages(args);
|
|
47
|
-
const gates = readBridgeGates(args);
|
|
48
|
-
const reactSingletons = readCsvOptionValues(args, ultramodernBridgeCliFlags.reactSingleton);
|
|
49
|
-
return normalizeUltramodernBridgeConfig({
|
|
50
|
-
enabled: true,
|
|
51
|
-
parentRoot: requireNonEmptyValue(parentRoot, ultramodernBridgeCliFlags.parentRoot),
|
|
52
|
-
workspacePackages,
|
|
53
|
-
dependencies: readCsvOptionValues(args, ultramodernBridgeCliFlags.dependency),
|
|
54
|
-
lockfilePolicy: parseLockfilePolicy(lockfilePolicy),
|
|
55
|
-
gates,
|
|
56
|
-
reactSingletons: reactSingletons.length > 0 ? reactSingletons : void 0
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
function normalizeUltramodernBridgeConfig(bridge) {
|
|
60
|
-
if (!bridge || false === bridge.enabled) return;
|
|
61
|
-
const parentRoot = requireNonEmptyValue(bridge.parentRoot, 'bridge.parentRoot');
|
|
62
|
-
const workspacePackages = normalizeWorkspacePackages(bridge.workspacePackages);
|
|
63
|
-
const dependencies = uniqueNonEmptyValues(bridge.dependencies, 'bridge.dependencies');
|
|
64
|
-
const gates = normalizeBridgeGates(bridge.gates);
|
|
65
|
-
const reactSingletons = bridge.reactSingletons && bridge.reactSingletons.length > 0 ? uniqueNonEmptyValues(bridge.reactSingletons, 'bridge.reactSingletons') : [
|
|
66
|
-
...defaultReactSingletons
|
|
67
|
-
];
|
|
68
|
-
if (0 === workspacePackages.length) throw new Error('Bridge mode requires at least one bridge.workspacePackages entry.');
|
|
69
|
-
if (0 === dependencies.length) throw new Error('Bridge mode requires at least one explicit bridge.dependencies package name.');
|
|
70
|
-
if (0 === gates.length) throw new Error('Bridge mode requires at least one bridge.gates delegated parent command.');
|
|
71
|
-
validateParentPackageCoverage(workspacePackages, dependencies);
|
|
72
|
-
validateReactSingletons(reactSingletons);
|
|
73
|
-
return {
|
|
74
|
-
enabled: true,
|
|
75
|
-
parentRoot,
|
|
76
|
-
workspacePackages,
|
|
77
|
-
dependencies,
|
|
78
|
-
lockfilePolicy: parseLockfilePolicy(bridge.lockfilePolicy ?? 'nested'),
|
|
79
|
-
gates,
|
|
80
|
-
reactSingletons
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
function rejectBooleanFlagValues(args) {
|
|
84
|
-
for (const flag of ultramodernBridgeCliBooleanFlags)if (args.some((arg)=>arg.startsWith(`${flag}=`))) throw new Error(`${flag} does not accept a value.`);
|
|
85
|
-
}
|
|
86
|
-
function readRepeatedOptionValues(args, flag) {
|
|
87
|
-
const values = [];
|
|
88
|
-
for(let index = 0; index < args.length; index++){
|
|
89
|
-
const arg = args[index];
|
|
90
|
-
if (arg === flag) {
|
|
91
|
-
const value = args[index + 1];
|
|
92
|
-
if (!value || value.startsWith('-')) throw new Error(`${flag} requires a value.`);
|
|
93
|
-
values.push(value);
|
|
94
|
-
index += 1;
|
|
95
|
-
continue;
|
|
96
|
-
}
|
|
97
|
-
if (arg.startsWith(`${flag}=`)) values.push(arg.slice(flag.length + 1));
|
|
98
|
-
}
|
|
99
|
-
return values;
|
|
100
|
-
}
|
|
101
|
-
function readSingleValue(args, flag) {
|
|
102
|
-
const values = readRepeatedOptionValues(args, flag);
|
|
103
|
-
if (values.length > 1) throw new Error(`${flag} can be provided only once.`);
|
|
104
|
-
return values[0];
|
|
105
|
-
}
|
|
106
|
-
function readCsvOptionValues(args, flag) {
|
|
107
|
-
return readRepeatedOptionValues(args, flag).flatMap((value)=>value.split(',').map((entry)=>entry.trim()).filter(Boolean));
|
|
108
|
-
}
|
|
109
|
-
function requireNonEmptyValue(value, label) {
|
|
110
|
-
if ('string' != typeof value || 0 === value.trim().length) throw new Error(`${label} must be a non-empty string.`);
|
|
111
|
-
return value.trim();
|
|
112
|
-
}
|
|
113
|
-
function parseLockfilePolicy(value) {
|
|
114
|
-
if (!ultramodernBridgeLockfilePolicies.includes(value)) throw new Error(`${ultramodernBridgeCliFlags.lockfilePolicy} must be "nested" or "parent".`);
|
|
115
|
-
return value;
|
|
116
|
-
}
|
|
117
|
-
function readWorkspacePackages(args) {
|
|
118
|
-
const drafts = new Map();
|
|
119
|
-
const getDraft = (pattern)=>{
|
|
120
|
-
const normalizedPattern = requireNonEmptyValue(pattern, ultramodernBridgeCliFlags.workspacePackage);
|
|
121
|
-
const existing = drafts.get(normalizedPattern);
|
|
122
|
-
if (existing) return existing;
|
|
123
|
-
const draft = {
|
|
124
|
-
pattern: normalizedPattern,
|
|
125
|
-
packageNames: [],
|
|
126
|
-
testAliases: []
|
|
127
|
-
};
|
|
128
|
-
drafts.set(normalizedPattern, draft);
|
|
129
|
-
return draft;
|
|
130
|
-
};
|
|
131
|
-
for (const pattern of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.workspacePackage))getDraft(pattern);
|
|
132
|
-
for (const value of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.workspacePackageName)){
|
|
133
|
-
const { left: pattern, right: packageNames } = splitAssignment(value, ultramodernBridgeCliFlags.workspacePackageName, '<pattern>=<package-name>[,<package-name>]');
|
|
134
|
-
getDraft(pattern).packageNames.push(...packageNames.split(',').map((packageName)=>packageName.trim()).filter(Boolean));
|
|
135
|
-
}
|
|
136
|
-
for (const value of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.testAlias)){
|
|
137
|
-
const separator = value.indexOf(':');
|
|
138
|
-
if (-1 === separator) throw new Error(`${ultramodernBridgeCliFlags.testAlias} must use <pattern>:<alias>=<target>.`);
|
|
139
|
-
const pattern = value.slice(0, separator);
|
|
140
|
-
const aliasDefinition = value.slice(separator + 1);
|
|
141
|
-
const { left: alias, right: target } = splitAssignment(aliasDefinition, ultramodernBridgeCliFlags.testAlias, '<pattern>:<alias>=<target>');
|
|
142
|
-
getDraft(pattern).testAliases.push({
|
|
143
|
-
alias: requireNonEmptyValue(alias, `${ultramodernBridgeCliFlags.testAlias} alias`),
|
|
144
|
-
target: requireNonEmptyValue(target, `${ultramodernBridgeCliFlags.testAlias} target`)
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
return normalizeWorkspacePackages([
|
|
148
|
-
...drafts.values()
|
|
149
|
-
]);
|
|
150
|
-
}
|
|
151
|
-
function readBridgeGates(args) {
|
|
152
|
-
const gates = new Map();
|
|
153
|
-
const getGate = (name)=>{
|
|
154
|
-
const normalizedName = requireNonEmptyValue(name, `${ultramodernBridgeCliFlags.gate} name`);
|
|
155
|
-
const existing = gates.get(normalizedName);
|
|
156
|
-
if (existing) return existing;
|
|
157
|
-
const draft = {
|
|
158
|
-
name: normalizedName
|
|
159
|
-
};
|
|
160
|
-
gates.set(normalizedName, draft);
|
|
161
|
-
return draft;
|
|
162
|
-
};
|
|
163
|
-
for (const value of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.gate)){
|
|
164
|
-
const { left: name, right: command } = splitAssignment(value, ultramodernBridgeCliFlags.gate, '<name>=<command>');
|
|
165
|
-
getGate(name).command = requireNonEmptyValue(command, `${ultramodernBridgeCliFlags.gate} command`);
|
|
166
|
-
}
|
|
167
|
-
for (const value of readRepeatedOptionValues(args, ultramodernBridgeCliFlags.gateCwd)){
|
|
168
|
-
const { left: name, right: cwd } = splitAssignment(value, ultramodernBridgeCliFlags.gateCwd, '<name>=<cwd>');
|
|
169
|
-
getGate(name).cwd = requireNonEmptyValue(cwd, `${ultramodernBridgeCliFlags.gateCwd} cwd`);
|
|
170
|
-
}
|
|
171
|
-
const missingCommand = [
|
|
172
|
-
...gates.values()
|
|
173
|
-
].find((gate)=>!gate.command);
|
|
174
|
-
if (missingCommand) throw new Error(`${ultramodernBridgeCliFlags.gateCwd} references "${missingCommand.name}" without a matching ${ultramodernBridgeCliFlags.gate}.`);
|
|
175
|
-
return normalizeBridgeGates([
|
|
176
|
-
...gates.values()
|
|
177
|
-
].map((gate)=>({
|
|
178
|
-
name: gate.name,
|
|
179
|
-
command: gate.command,
|
|
180
|
-
cwd: gate.cwd
|
|
181
|
-
})));
|
|
182
|
-
}
|
|
183
|
-
function splitAssignment(value, flag, usage) {
|
|
184
|
-
const separator = value.indexOf('=');
|
|
185
|
-
if (-1 === separator) throw new Error(`${flag} must use ${usage}.`);
|
|
186
|
-
return {
|
|
187
|
-
left: value.slice(0, separator),
|
|
188
|
-
right: value.slice(separator + 1)
|
|
189
|
-
};
|
|
190
|
-
}
|
|
191
|
-
function normalizeWorkspacePackages(workspacePackages) {
|
|
192
|
-
return workspacePackages.map((entry, index)=>{
|
|
193
|
-
const label = `bridge.workspacePackages[${index}]`;
|
|
194
|
-
const packageNames = entry.packageNames && entry.packageNames.length > 0 ? uniqueNonEmptyValues(entry.packageNames, `${label}.packageNames`) : void 0;
|
|
195
|
-
const testAliases = entry.testAliases && entry.testAliases.length > 0 ? normalizeTestAliases(entry.testAliases, label) : void 0;
|
|
196
|
-
return {
|
|
197
|
-
pattern: requireNonEmptyValue(entry.pattern, `${label}.pattern`),
|
|
198
|
-
...packageNames ? {
|
|
199
|
-
packageNames
|
|
200
|
-
} : {},
|
|
201
|
-
...testAliases ? {
|
|
202
|
-
testAliases
|
|
203
|
-
} : {}
|
|
204
|
-
};
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
function validateParentPackageCoverage(workspacePackages, dependencies) {
|
|
208
|
-
const declaredPackages = new Set();
|
|
209
|
-
for (const [index, entry] of workspacePackages.entries()){
|
|
210
|
-
const label = `bridge.workspacePackages[${index}]`;
|
|
211
|
-
const packageNames = entry.packageNames ?? [];
|
|
212
|
-
if (0 === packageNames.length && (entry.testAliases ?? []).length > 0) throw new Error(`${label}.packageNames must declare the parent package names covered by "${entry.pattern}" before testAliases can be checked.`);
|
|
213
|
-
for (const packageName of packageNames)declaredPackages.add(packageName);
|
|
214
|
-
for (const alias of entry.testAliases ?? []){
|
|
215
|
-
if (!packageNames.some((packageName)=>aliasMatchesPackage(alias.alias, packageName))) throw new Error(`${label}.testAliases entry "${alias.alias}" must match one of ${label}.packageNames.`);
|
|
216
|
-
if (pointsAtBuildOutput(alias.target)) throw new Error(`${label}.testAliases target "${alias.target}" must point at source files, not dist output.`);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
const missingDependencies = dependencies.filter((dependency)=>!declaredPackages.has(dependency));
|
|
220
|
-
if (declaredPackages.size > 0 && missingDependencies.length > 0) throw new Error(`Bridge mode dependencies must be declared by bridge.workspacePackages[].packageNames: ${missingDependencies.join(', ')}.`);
|
|
221
|
-
}
|
|
222
|
-
function aliasMatchesPackage(alias, packageName) {
|
|
223
|
-
return alias === packageName || alias.startsWith(`${packageName}/`);
|
|
224
|
-
}
|
|
225
|
-
function pointsAtBuildOutput(target) {
|
|
226
|
-
return target.split(/[\\/]/u).includes('dist');
|
|
227
|
-
}
|
|
228
|
-
function validateReactSingletons(reactSingletons) {
|
|
229
|
-
const missing = defaultReactSingletons.filter((packageName)=>!reactSingletons.includes(packageName));
|
|
230
|
-
if (missing.length > 0) throw new Error(`Bridge mode React singleton/dedupe declarations must include ${defaultReactSingletons.join(' and ')}. Missing: ${missing.join(', ')}.`);
|
|
231
|
-
}
|
|
232
|
-
function normalizeTestAliases(testAliases, parentLabel) {
|
|
233
|
-
const aliases = new Map();
|
|
234
|
-
for (const [index, alias] of testAliases.entries()){
|
|
235
|
-
const label = `${parentLabel}.testAliases[${index}]`;
|
|
236
|
-
const normalizedAlias = requireNonEmptyValue(alias.alias, `${label}.alias`);
|
|
237
|
-
aliases.set(normalizedAlias, {
|
|
238
|
-
alias: normalizedAlias,
|
|
239
|
-
target: requireNonEmptyValue(alias.target, `${label}.target`)
|
|
240
|
-
});
|
|
241
|
-
}
|
|
242
|
-
return [
|
|
243
|
-
...aliases.values()
|
|
244
|
-
];
|
|
245
|
-
}
|
|
246
|
-
function normalizeBridgeGates(gates) {
|
|
247
|
-
const normalized = new Map();
|
|
248
|
-
for (const [index, gate] of gates.entries()){
|
|
249
|
-
const label = `bridge.gates[${index}]`;
|
|
250
|
-
const name = requireNonEmptyValue(gate.name, `${label}.name`);
|
|
251
|
-
normalized.set(name, {
|
|
252
|
-
name,
|
|
253
|
-
command: requireNonEmptyValue(gate.command, `${label}.command`),
|
|
254
|
-
...gate.cwd ? {
|
|
255
|
-
cwd: requireNonEmptyValue(gate.cwd, `${label}.cwd`)
|
|
256
|
-
} : {}
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
return [
|
|
260
|
-
...normalized.values()
|
|
261
|
-
];
|
|
262
|
-
}
|
|
263
|
-
function uniqueNonEmptyValues(values, label) {
|
|
264
|
-
const unique = new Set();
|
|
265
|
-
for (const [index, value] of values.entries())unique.add(requireNonEmptyValue(value, `${label}[${index}]`));
|
|
266
|
-
return [
|
|
267
|
-
...unique
|
|
268
|
-
];
|
|
269
|
-
}
|
|
270
|
-
export { hasUltramodernBridgeCliOptions, normalizeUltramodernBridgeConfig, parseUltramodernBridgeCliOptions, ultramodernBridgeCliBooleanFlags, ultramodernBridgeCliFlags, ultramodernBridgeCliValueFlags, ultramodernBridgeLockfilePolicies };
|
|
1
|
+
export * from "./bridge-config/index.js";
|
|
@@ -1,25 +1,12 @@
|
|
|
1
1
|
import node_fs from "node:fs";
|
|
2
2
|
import node_path from "node:path";
|
|
3
|
+
import { parseArgs } from "node:util";
|
|
3
4
|
import { readUltramodernConfig, workspaceAppsFromToolingConfig } from "../ultramodern-tooling/config.js";
|
|
4
5
|
import { createBackendFederationContract } from "./backend-federation.js";
|
|
5
6
|
import { createDeliveryUnitRecord, deliveryUnitContractBlock } from "./delivery-unit.js";
|
|
6
7
|
import { ULTRAMODERN_CONFIG_PATH } from "./descriptors.js";
|
|
7
|
-
import { createUltramodernBuildModule } from "./module-federation.js";
|
|
8
|
+
import { createUltramodernBuildArtifactJson, createUltramodernBuildModule } from "./module-federation.js";
|
|
8
9
|
const REFERENCE_TOPOLOGY_PATH = 'topology/reference-topology.json';
|
|
9
|
-
function readOption(args, name) {
|
|
10
|
-
const prefix = `${name}=`;
|
|
11
|
-
const inline = args.find((arg)=>arg.startsWith(prefix));
|
|
12
|
-
if (inline) {
|
|
13
|
-
const value = inline.slice(prefix.length);
|
|
14
|
-
if (!value) throw new Error(`${name} needs a value.`);
|
|
15
|
-
return value;
|
|
16
|
-
}
|
|
17
|
-
const index = args.indexOf(name);
|
|
18
|
-
if (-1 === index) return;
|
|
19
|
-
const value = args[index + 1];
|
|
20
|
-
if (!value || value.startsWith('--')) throw new Error(`${name} needs a value.`);
|
|
21
|
-
return value;
|
|
22
|
-
}
|
|
23
10
|
function isPlainObject(value) {
|
|
24
11
|
return 'object' == typeof value && null !== value && !Array.isArray(value);
|
|
25
12
|
}
|
|
@@ -44,7 +31,21 @@ function stampDeliveryUnitIdentity(entry, scope, app) {
|
|
|
44
31
|
} else entry.backendFederation = createBackendFederationContract(scope, app);
|
|
45
32
|
}
|
|
46
33
|
function runSyncDeliveryUnit(args, context) {
|
|
47
|
-
|
|
34
|
+
const parsed = parseArgs({
|
|
35
|
+
args,
|
|
36
|
+
options: {
|
|
37
|
+
help: {
|
|
38
|
+
type: 'boolean',
|
|
39
|
+
short: 'h'
|
|
40
|
+
},
|
|
41
|
+
workspace: {
|
|
42
|
+
type: 'string'
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
strict: true,
|
|
46
|
+
allowPositionals: false
|
|
47
|
+
});
|
|
48
|
+
if (parsed.values.help) {
|
|
48
49
|
process.stdout.write(`Usage:
|
|
49
50
|
modern-js-create ultramodern sync-delivery-unit [--workspace <dir>]
|
|
50
51
|
|
|
@@ -54,12 +55,12 @@ through framework tooling only. For each full-stack vertical it writes the
|
|
|
54
55
|
delivery-unit block into .modernjs/ultramodern.json topology.apps[] and
|
|
55
56
|
topology/reference-topology.json verticals[] (plus backendFederation.deliveryUnit
|
|
56
57
|
and backendFederation.versionBoundary.identityRoot) and regenerates
|
|
57
|
-
verticals/<id>/shared/ultramodern-build.ts. Idempotent: a second run writes
|
|
58
|
+
verticals/<id>/shared/ultramodern-build.{json,ts}. Idempotent: a second run writes
|
|
58
59
|
nothing.
|
|
59
60
|
`);
|
|
60
61
|
return 0;
|
|
61
62
|
}
|
|
62
|
-
const workspaceOverride =
|
|
63
|
+
const workspaceOverride = parsed.values.workspace;
|
|
63
64
|
const workspaceRoot = workspaceOverride ? node_path.resolve(context.invocationCwd, workspaceOverride) : context.workspaceRoot;
|
|
64
65
|
const compactPath = node_path.join(workspaceRoot, ULTRAMODERN_CONFIG_PATH);
|
|
65
66
|
if (!node_fs.existsSync(compactPath)) throw new Error(`Missing ${ULTRAMODERN_CONFIG_PATH}. sync-delivery-unit needs the compact UltraModern config; run \`modern-js-create ultramodern migrate-strict-effect\` first.`);
|
|
@@ -93,9 +94,10 @@ nothing.
|
|
|
93
94
|
track(REFERENCE_TOPOLOGY_PATH, writeJsonIfChanged(topologyPath, topology));
|
|
94
95
|
}
|
|
95
96
|
for (const app of apiApps){
|
|
96
|
-
const
|
|
97
|
-
const
|
|
98
|
-
track(
|
|
97
|
+
const buildModulePath = node_path.join(app.directory, 'shared/ultramodern-build.ts');
|
|
98
|
+
const buildArtifactPath = node_path.join(app.directory, 'shared/ultramodern-build.json');
|
|
99
|
+
track(buildModulePath, writeTextIfChanged(node_path.join(workspaceRoot, buildModulePath), createUltramodernBuildModule()));
|
|
100
|
+
track(buildArtifactPath, writeTextIfChanged(node_path.join(workspaceRoot, buildArtifactPath), createUltramodernBuildArtifactJson(scope, app)));
|
|
99
101
|
}
|
|
100
102
|
if (0 === written.length) process.stdout.write('[ultramodern] sync-delivery-unit: already in sync; no files written.\n');
|
|
101
103
|
else {
|
|
@@ -1,31 +1,21 @@
|
|
|
1
1
|
import node_crypto from "node:crypto";
|
|
2
|
+
import { DELIVERY_UNIT_DEPLOY_PROFILE, DELIVERY_UNIT_KIND, DELIVERY_UNIT_SCHEMA_VERSION, deliveryUnitContractBlock } from "@modern-js/utils/universal";
|
|
2
3
|
import { packageName } from "./naming.js";
|
|
3
|
-
const
|
|
4
|
+
const deliveryUnitGenerationSeed = `${Date.now()}:${node_crypto.randomUUID()}`;
|
|
4
5
|
function createBuildMarker(scope, app) {
|
|
5
|
-
return node_crypto.createHash('sha256').update(`${scope}:${app.packageSuffix}:${app.id}:0.1.0`).digest('hex').slice(0, 16);
|
|
6
|
-
}
|
|
7
|
-
function deliveryUnitContractBlock(record) {
|
|
8
|
-
return {
|
|
9
|
-
schemaVersion: record.schemaVersion,
|
|
10
|
-
kind: record.kind,
|
|
11
|
-
unitId: record.unitId,
|
|
12
|
-
packageName: record.packageName,
|
|
13
|
-
version: record.version,
|
|
14
|
-
buildMarker: record.buildMarker,
|
|
15
|
-
sourceRevision: record.sourceRevision
|
|
16
|
-
};
|
|
6
|
+
return node_crypto.createHash('sha256').update(`${deliveryUnitGenerationSeed}:${scope}:${app.packageSuffix}:${app.id}:0.1.0`).digest('hex').slice(0, 16);
|
|
17
7
|
}
|
|
18
8
|
function createDeliveryUnitRecord(scope, app) {
|
|
19
9
|
return {
|
|
20
10
|
schemaVersion: DELIVERY_UNIT_SCHEMA_VERSION,
|
|
21
|
-
kind:
|
|
11
|
+
kind: DELIVERY_UNIT_KIND,
|
|
22
12
|
unitId: `${scope}/${app.domain ?? app.id}`,
|
|
23
13
|
appId: app.id,
|
|
24
14
|
packageName: packageName(scope, app.packageSuffix),
|
|
25
15
|
version: '0.1.0',
|
|
26
16
|
sourceRevision: 'workspace',
|
|
27
17
|
buildMarker: createBuildMarker(scope, app),
|
|
28
|
-
deployProfile:
|
|
18
|
+
deployProfile: DELIVERY_UNIT_DEPLOY_PROFILE
|
|
29
19
|
};
|
|
30
20
|
}
|
|
31
|
-
export {
|
|
21
|
+
export { createBuildMarker, createDeliveryUnitRecord, deliveryUnitContractBlock };
|
|
@@ -1,58 +1,32 @@
|
|
|
1
1
|
import { appHasApi, remoteDependencyAlias, resolveApiStem, shellApp } from "./descriptors.js";
|
|
2
|
+
import { renderFileTemplate } from "./fs-io.js";
|
|
2
3
|
import { createTw, packageName, tailwindPrefixForApp, toPascalCase } from "./naming.js";
|
|
3
4
|
function createShellPage(remotes = []) {
|
|
4
5
|
const tw = createTw(tailwindPrefixForApp(shellApp));
|
|
5
6
|
const remoteCount = String(remotes.length);
|
|
6
|
-
return
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
</span>
|
|
30
|
-
</div>
|
|
31
|
-
</div>
|
|
32
|
-
<div className="${tw('rounded-3xl bg-white/90 p-6 shadow-2xl shadow-stone-900/15')}">
|
|
33
|
-
<div className="${tw('grid gap-4 sm:grid-cols-2')}">
|
|
34
|
-
<article className="${tw('rounded-2xl bg-emerald-50 p-5')}">
|
|
35
|
-
<span className="${tw('text-sm font-black uppercase tracking-[0.16em] text-emerald-800')}">{t('shell.hero.cardOneKicker')}</span>
|
|
36
|
-
<strong className="${tw('mt-3 block text-3xl font-black text-stone-950')}">${remoteCount}</strong>
|
|
37
|
-
<p className="${tw('mt-2 text-sm font-semibold text-stone-600')}">{t('shell.hero.cardOne')}</p>
|
|
38
|
-
</article>
|
|
39
|
-
<article className="${tw('rounded-2xl bg-amber-50 p-5')}">
|
|
40
|
-
<span className="${tw('text-sm font-black uppercase tracking-[0.16em] text-amber-800')}">{t('shell.hero.cardTwoKicker')}</span>
|
|
41
|
-
<strong className="${tw('mt-3 block text-3xl font-black text-stone-950')}">SSR</strong>
|
|
42
|
-
<p className="${tw('mt-2 text-sm font-semibold text-stone-600')}">{t('shell.hero.cardTwo')}</p>
|
|
43
|
-
</article>
|
|
44
|
-
</div>
|
|
45
|
-
</div>
|
|
46
|
-
</section>
|
|
47
|
-
<VerticalShowcase />
|
|
48
|
-
<p className="${tw('sr-only')}" data-testid="ultramodern-preset">presetUltramodern workspace</p>
|
|
49
|
-
<p className="${tw('sr-only')}" data-build-marker={ultramodernUiMarker.build} data-testid="ultramodern-ui-marker">
|
|
50
|
-
{ultramodernUiMarker.appId}:{ultramodernUiMarker.version}
|
|
51
|
-
</p>
|
|
52
|
-
</ShellFrame>
|
|
53
|
-
);
|
|
54
|
-
}
|
|
55
|
-
`;
|
|
7
|
+
return renderFileTemplate('workspace/apps/shell-super-app/src/routes/[lang]/page.tsx', {
|
|
8
|
+
value0: tw('mx-auto grid max-w-7xl items-center gap-8 py-8 md:grid-cols-[0.9fr_1.1fr] lg:gap-14'),
|
|
9
|
+
value1: tw('min-w-0'),
|
|
10
|
+
value2: tw('text-xs font-black uppercase tracking-[0.18em] text-emerald-800'),
|
|
11
|
+
value3: tw('mt-3 max-w-3xl text-5xl font-black leading-none tracking-normal text-stone-950 md:text-7xl'),
|
|
12
|
+
value4: tw('mt-5 max-w-2xl text-lg leading-8 text-stone-600'),
|
|
13
|
+
value5: tw('mt-7 flex flex-wrap gap-3'),
|
|
14
|
+
value6: tw('inline-flex min-h-11 items-center justify-center rounded-full bg-emerald-800 px-5 font-bold text-white shadow-lg shadow-stone-900/10'),
|
|
15
|
+
value7: tw('inline-flex min-h-11 items-center justify-center rounded-full border border-stone-900/15 bg-white/90 px-5 font-bold text-stone-950 shadow-lg shadow-stone-900/10'),
|
|
16
|
+
value8: tw('rounded-3xl bg-white/90 p-6 shadow-2xl shadow-stone-900/15'),
|
|
17
|
+
value9: tw('grid gap-4 sm:grid-cols-2'),
|
|
18
|
+
value10: tw('rounded-2xl bg-emerald-50 p-5'),
|
|
19
|
+
value11: tw('text-sm font-black uppercase tracking-[0.16em] text-emerald-800'),
|
|
20
|
+
value12: tw('mt-3 block text-3xl font-black text-stone-950'),
|
|
21
|
+
value13: remoteCount,
|
|
22
|
+
value14: tw('mt-2 text-sm font-semibold text-stone-600'),
|
|
23
|
+
value15: tw('rounded-2xl bg-amber-50 p-5'),
|
|
24
|
+
value16: tw('text-sm font-black uppercase tracking-[0.16em] text-amber-800'),
|
|
25
|
+
value17: tw('mt-3 block text-3xl font-black text-stone-950'),
|
|
26
|
+
value18: tw('mt-2 text-sm font-semibold text-stone-600'),
|
|
27
|
+
value19: tw('sr-only'),
|
|
28
|
+
value20: tw('sr-only')
|
|
29
|
+
});
|
|
56
30
|
}
|
|
57
31
|
function createShellRemoteComponents(scope, remotes = []) {
|
|
58
32
|
const tw = createTw(tailwindPrefixForApp(shellApp));
|
|
@@ -62,150 +36,34 @@ function createShellRemoteComponents(scope, remotes = []) {
|
|
|
62
36
|
const componentName = `${toPascalCase(remote.id)}Widget`;
|
|
63
37
|
return `const ${componentName} = createHydratedRemote(${componentName}Server, '${remoteDependencyAlias(remote)}/Widget');`;
|
|
64
38
|
}).join('\n');
|
|
65
|
-
const federationImports = widgetRemotes.length > 0 ?
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
import { getInstance, loadRemote } from '@module-federation/modern-js-v3/runtime';
|
|
73
|
-
import { Suspense, useEffect, useMemo, useState } from 'react';
|
|
74
|
-
import type { ComponentType } from 'react';
|
|
75
|
-
${serverImports}
|
|
76
|
-
` : '';
|
|
77
|
-
const federationHelpers = widgetRemotes.length > 0 ? `interface RemoteComponentModule {
|
|
78
|
-
default: ComponentType;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
const loadRemoteComponent = (specifier: string) =>
|
|
82
|
-
loadRemote<RemoteComponentModule>(specifier) as Promise<RemoteComponentModule>;
|
|
83
|
-
|
|
84
|
-
const createRemoteFallback = (specifier: string) =>
|
|
85
|
-
({ error }: { error: Error }) => {
|
|
86
|
-
const { t } = useModernI18n();
|
|
87
|
-
const classification = classifyModuleFederationFallback(error);
|
|
88
|
-
const telemetryEntry =
|
|
89
|
-
typeof window === 'undefined' ? undefined : window.location.href;
|
|
90
|
-
const telemetry = createModuleFederationFallbackTelemetry({
|
|
91
|
-
appName: '${shellApp.id}',
|
|
92
|
-
classification,
|
|
93
|
-
...(telemetryEntry === undefined ? {} : { entry: telemetryEntry }),
|
|
94
|
-
error,
|
|
95
|
-
eventName: 'mf.client.remote.fallback',
|
|
96
|
-
exportName: 'default',
|
|
97
|
-
phase: 'load',
|
|
98
|
-
remote: specifier,
|
|
99
|
-
status: 'degraded',
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
useEffect(() => {
|
|
103
|
-
void emitModuleFederationFallbackTelemetry({
|
|
104
|
-
appName: telemetry.appName,
|
|
105
|
-
classification,
|
|
106
|
-
...(telemetry.entry === undefined ? {} : { entry: telemetry.entry }),
|
|
107
|
-
error,
|
|
108
|
-
eventName: telemetry.eventName,
|
|
109
|
-
exportName: 'default',
|
|
110
|
-
metadata: telemetry.metadata,
|
|
111
|
-
phase: telemetry.phase,
|
|
112
|
-
remote: specifier,
|
|
113
|
-
status: 'degraded',
|
|
114
|
-
});
|
|
115
|
-
}, [classification, error, telemetry]);
|
|
116
|
-
|
|
117
|
-
return <div className="${tw('rounded-xl border border-red-900/20 bg-red-50 px-4 py-3 text-sm font-semibold text-red-900')}" data-remote-error={error.name} {...toModuleFederationFallbackAttributes(telemetry)}>{t('shell.remoteUnavailable')}</div>;
|
|
118
|
-
};
|
|
119
|
-
|
|
120
|
-
const createHydratedRemote =
|
|
121
|
-
(ServerComponent: ComponentType, specifier: string) =>
|
|
122
|
-
function HydratedRemote() {
|
|
123
|
-
const [hydrated, setHydrated] = useState(false);
|
|
124
|
-
|
|
125
|
-
useEffect(() => {
|
|
126
|
-
setHydrated(true);
|
|
127
|
-
}, []);
|
|
128
|
-
|
|
129
|
-
const FederatedComponent = useMemo(() => {
|
|
130
|
-
if (!hydrated) {
|
|
131
|
-
return null;
|
|
132
|
-
}
|
|
133
|
-
const instance = getInstance();
|
|
134
|
-
if (instance === null || instance === undefined) {
|
|
135
|
-
return null;
|
|
136
|
-
}
|
|
137
|
-
return createLazyComponent({
|
|
138
|
-
export: 'default',
|
|
139
|
-
fallback: createRemoteFallback(specifier),
|
|
140
|
-
instance,
|
|
141
|
-
loader: () => loadRemoteComponent(specifier),
|
|
142
|
-
loading: <ServerComponent />,
|
|
143
|
-
});
|
|
144
|
-
}, [hydrated]);
|
|
145
|
-
|
|
146
|
-
if (FederatedComponent === null) {
|
|
147
|
-
return <ServerComponent />;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
return (
|
|
151
|
-
<Suspense fallback={<ServerComponent />}>
|
|
152
|
-
<FederatedComponent />
|
|
153
|
-
</Suspense>
|
|
154
|
-
);
|
|
155
|
-
};
|
|
156
|
-
` : '';
|
|
39
|
+
const federationImports = widgetRemotes.length > 0 ? renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.imports.tsx', {
|
|
40
|
+
value0: serverImports
|
|
41
|
+
}) : '';
|
|
42
|
+
const federationHelpers = widgetRemotes.length > 0 ? renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.helpers.tsx', {
|
|
43
|
+
value0: shellApp.id,
|
|
44
|
+
value1: tw('rounded-xl border border-red-900/20 bg-red-50 px-4 py-3 text-sm font-semibold text-red-900')
|
|
45
|
+
}) : '';
|
|
157
46
|
const showcaseItems = widgetRemotes.map((remote)=>{
|
|
158
47
|
const componentName = `${toPascalCase(remote.id)}Widget`;
|
|
159
48
|
return ` <${componentName} key="${remote.id}" />`;
|
|
160
49
|
}).join('\n');
|
|
161
50
|
const remoteCount = String(widgetRemotes.length);
|
|
162
|
-
return
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
export const StatusBadge = () => {
|
|
180
|
-
const { t } = useModernI18n();
|
|
181
|
-
|
|
182
|
-
return (
|
|
183
|
-
<span className="${tw('inline-flex h-10 shrink-0 items-center justify-center rounded-full border border-stone-900/15 bg-white px-4 text-sm font-extrabold text-stone-950 shadow-lg shadow-stone-900/5')}">
|
|
184
|
-
{widgetCount} {t('shell.hero.cardOneKicker')}
|
|
185
|
-
</span>
|
|
186
|
-
);
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
export const VerticalShowcase = () => {
|
|
190
|
-
const { t } = useModernI18n();
|
|
191
|
-
|
|
192
|
-
if (widgetCount === 0) {
|
|
193
|
-
return (
|
|
194
|
-
<section className="${tw('mx-auto mt-12 max-w-7xl rounded-2xl bg-white/90 p-6 shadow-xl shadow-stone-900/10')}">
|
|
195
|
-
<p className="${tw('text-lg font-bold text-stone-700')}">{t('shell.hero.empty')}</p>
|
|
196
|
-
</section>
|
|
197
|
-
);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
return (
|
|
201
|
-
<section className="${tw('mx-auto mt-12 max-w-7xl')}" data-modern-boundary-id="${shellApp.mfName}">
|
|
202
|
-
<div className="${tw('grid gap-4 md:grid-cols-2')}">
|
|
203
|
-
${showcaseItems}
|
|
204
|
-
</div>
|
|
205
|
-
</section>
|
|
206
|
-
);
|
|
207
|
-
};
|
|
208
|
-
`;
|
|
51
|
+
return renderFileTemplate('workspace/apps/shell-super-app/src/routes/vertical-components.tsx', {
|
|
52
|
+
value0: federationImports,
|
|
53
|
+
value1: remoteCount,
|
|
54
|
+
value2: federationHelpers,
|
|
55
|
+
value3: hydratedExports,
|
|
56
|
+
value4: tw('flex min-w-0 flex-wrap items-center gap-x-8 gap-y-2 md:flex-1'),
|
|
57
|
+
value5: shellApp.mfName,
|
|
58
|
+
value6: tw('whitespace-nowrap text-xl font-black tracking-normal text-stone-950 no-underline'),
|
|
59
|
+
value7: tw('inline-flex h-10 shrink-0 items-center justify-center rounded-full border border-stone-900/15 bg-white px-4 text-sm font-extrabold text-stone-950 shadow-lg shadow-stone-900/5'),
|
|
60
|
+
value8: tw('mx-auto mt-12 max-w-7xl rounded-2xl bg-white/90 p-6 shadow-xl shadow-stone-900/10'),
|
|
61
|
+
value9: tw('text-lg font-bold text-stone-700'),
|
|
62
|
+
value10: tw('mx-auto mt-12 max-w-7xl'),
|
|
63
|
+
value11: shellApp.mfName,
|
|
64
|
+
value12: tw('grid gap-4 md:grid-cols-2'),
|
|
65
|
+
value13: showcaseItems
|
|
66
|
+
});
|
|
209
67
|
}
|
|
210
68
|
function createRemotePage(app) {
|
|
211
69
|
const tw = createTw(tailwindPrefixForApp(app));
|