@bleedingdev/modern-js-create 3.2.0-ultramodern.120 → 3.2.0-ultramodern.121

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.
Files changed (118) hide show
  1. package/README.md +35 -12
  2. package/dist/cjs/create-package-root.cjs +7 -9
  3. package/dist/cjs/index.cjs +74 -44
  4. package/dist/cjs/locale/en.cjs +6 -7
  5. package/dist/cjs/locale/zh.cjs +6 -7
  6. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +337 -0
  7. package/dist/cjs/ultramodern-workspace/app-files.cjs +223 -0
  8. package/dist/cjs/ultramodern-workspace/contracts.cjs +836 -0
  9. package/dist/cjs/ultramodern-workspace/demo-components.cjs +422 -0
  10. package/dist/cjs/ultramodern-workspace/descriptors.cjs +222 -0
  11. package/dist/cjs/ultramodern-workspace/effect-api.cjs +952 -0
  12. package/dist/cjs/ultramodern-workspace/fs-io.cjs +191 -0
  13. package/dist/cjs/ultramodern-workspace/index.cjs +48 -0
  14. package/dist/cjs/ultramodern-workspace/locales.cjs +173 -0
  15. package/dist/cjs/ultramodern-workspace/module-federation.cjs +487 -0
  16. package/dist/cjs/ultramodern-workspace/naming.cjs +161 -0
  17. package/dist/cjs/ultramodern-workspace/package-json.cjs +406 -0
  18. package/dist/cjs/ultramodern-workspace/package-source.cjs +59 -0
  19. package/dist/cjs/ultramodern-workspace/policy.cjs +248 -0
  20. package/dist/cjs/ultramodern-workspace/public-surface.cjs +268 -0
  21. package/dist/cjs/ultramodern-workspace/routes.cjs +375 -0
  22. package/dist/cjs/ultramodern-workspace/types.cjs +61 -0
  23. package/dist/cjs/ultramodern-workspace/versions.cjs +153 -0
  24. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +153 -0
  25. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +175 -0
  26. package/dist/esm/create-package-root.js +7 -9
  27. package/dist/esm/index.js +72 -42
  28. package/dist/esm/locale/en.js +6 -7
  29. package/dist/esm/locale/zh.js +6 -7
  30. package/dist/esm/ultramodern-workspace/add-vertical.js +252 -0
  31. package/dist/esm/ultramodern-workspace/app-files.js +149 -0
  32. package/dist/esm/ultramodern-workspace/contracts.js +741 -0
  33. package/dist/esm/ultramodern-workspace/demo-components.js +363 -0
  34. package/dist/esm/ultramodern-workspace/descriptors.js +133 -0
  35. package/dist/esm/ultramodern-workspace/effect-api.js +854 -0
  36. package/dist/esm/ultramodern-workspace/fs-io.js +90 -0
  37. package/dist/esm/ultramodern-workspace/index.js +3 -0
  38. package/dist/esm/ultramodern-workspace/locales.js +122 -0
  39. package/dist/esm/ultramodern-workspace/module-federation.js +415 -0
  40. package/dist/esm/ultramodern-workspace/naming.js +71 -0
  41. package/dist/esm/ultramodern-workspace/package-json.js +338 -0
  42. package/dist/esm/ultramodern-workspace/package-source.js +21 -0
  43. package/dist/esm/ultramodern-workspace/policy.js +183 -0
  44. package/dist/esm/ultramodern-workspace/public-surface.js +183 -0
  45. package/dist/esm/ultramodern-workspace/routes.js +280 -0
  46. package/dist/esm/ultramodern-workspace/types.js +16 -0
  47. package/dist/esm/ultramodern-workspace/versions.js +34 -0
  48. package/dist/esm/ultramodern-workspace/workspace-scripts.js +91 -0
  49. package/dist/esm/ultramodern-workspace/write-workspace.js +121 -0
  50. package/dist/esm-node/create-package-root.js +7 -9
  51. package/dist/esm-node/index.js +72 -42
  52. package/dist/esm-node/locale/en.js +6 -7
  53. package/dist/esm-node/locale/zh.js +6 -7
  54. package/dist/esm-node/ultramodern-workspace/add-vertical.js +253 -0
  55. package/dist/esm-node/ultramodern-workspace/app-files.js +150 -0
  56. package/dist/esm-node/ultramodern-workspace/contracts.js +742 -0
  57. package/dist/esm-node/ultramodern-workspace/demo-components.js +364 -0
  58. package/dist/esm-node/ultramodern-workspace/descriptors.js +134 -0
  59. package/dist/esm-node/ultramodern-workspace/effect-api.js +855 -0
  60. package/dist/esm-node/ultramodern-workspace/fs-io.js +91 -0
  61. package/dist/esm-node/ultramodern-workspace/index.js +4 -0
  62. package/dist/esm-node/ultramodern-workspace/locales.js +123 -0
  63. package/dist/esm-node/ultramodern-workspace/module-federation.js +416 -0
  64. package/dist/esm-node/ultramodern-workspace/naming.js +72 -0
  65. package/dist/esm-node/ultramodern-workspace/package-json.js +339 -0
  66. package/dist/esm-node/ultramodern-workspace/package-source.js +22 -0
  67. package/dist/esm-node/ultramodern-workspace/policy.js +184 -0
  68. package/dist/esm-node/ultramodern-workspace/public-surface.js +184 -0
  69. package/dist/esm-node/ultramodern-workspace/routes.js +281 -0
  70. package/dist/esm-node/ultramodern-workspace/types.js +17 -0
  71. package/dist/esm-node/ultramodern-workspace/versions.js +35 -0
  72. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +92 -0
  73. package/dist/esm-node/ultramodern-workspace/write-workspace.js +122 -0
  74. package/dist/types/locale/en.d.ts +4 -5
  75. package/dist/types/locale/index.d.ts +8 -10
  76. package/dist/types/locale/zh.d.ts +4 -5
  77. package/dist/types/ultramodern-workspace/add-vertical.d.ts +19 -0
  78. package/dist/types/ultramodern-workspace/app-files.d.ts +14 -0
  79. package/dist/types/ultramodern-workspace/contracts.d.ts +21 -0
  80. package/dist/types/ultramodern-workspace/demo-components.d.ts +9 -0
  81. package/dist/types/ultramodern-workspace/descriptors.d.ts +39 -0
  82. package/dist/types/ultramodern-workspace/effect-api.d.ts +73 -0
  83. package/dist/types/ultramodern-workspace/fs-io.d.ts +18 -0
  84. package/dist/types/ultramodern-workspace/index.d.ts +4 -0
  85. package/dist/types/ultramodern-workspace/locales.d.ts +183 -0
  86. package/dist/types/ultramodern-workspace/module-federation.d.ts +16 -0
  87. package/dist/types/ultramodern-workspace/naming.d.ts +16 -0
  88. package/dist/types/ultramodern-workspace/package-json.d.ts +12 -0
  89. package/dist/types/ultramodern-workspace/package-source.d.ts +2 -0
  90. package/dist/types/ultramodern-workspace/policy.d.ts +60 -0
  91. package/dist/types/ultramodern-workspace/public-surface.d.ts +37 -0
  92. package/dist/types/ultramodern-workspace/routes.d.ts +25 -0
  93. package/dist/types/ultramodern-workspace/types.d.ts +95 -0
  94. package/dist/types/ultramodern-workspace/versions.d.ts +38 -0
  95. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +10 -0
  96. package/dist/types/ultramodern-workspace/write-workspace.d.ts +4 -0
  97. package/package.json +4 -3
  98. package/template-workspace/.github/workflows/ultramodern-workspace-gates.yml.handlebars +1 -4
  99. package/template-workspace/.mise.toml.handlebars +1 -0
  100. package/template-workspace/{AGENTS.md → AGENTS.md.handlebars} +12 -7
  101. package/template-workspace/README.md.handlebars +40 -24
  102. package/template-workspace/{pnpm-workspace.yaml → pnpm-workspace.yaml.handlebars} +2 -2
  103. package/template-workspace/scripts/bootstrap-agent-skills.mjs +31 -51
  104. package/templates/app/shell-frame.tsx +49 -0
  105. package/templates/app/ultramodern-route-head.tsx.handlebars +142 -0
  106. package/templates/packages/shared-contracts-index.ts +466 -0
  107. package/templates/workspace-scripts/assert-mf-types.mjs.handlebars +69 -0
  108. package/templates/workspace-scripts/check-ultramodern-i18n-boundaries.mjs +9 -0
  109. package/templates/workspace-scripts/generate-public-surface-assets.mjs +529 -0
  110. package/templates/workspace-scripts/proof-cloudflare-version.mjs +125 -0
  111. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +851 -0
  112. package/templates/workspace-scripts/ultramodern-performance-readiness.config.mjs +7 -0
  113. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +223 -0
  114. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +593 -0
  115. package/dist/cjs/ultramodern-workspace.cjs +0 -6797
  116. package/dist/esm/ultramodern-workspace.js +0 -6738
  117. package/dist/esm-node/ultramodern-workspace.js +0 -6739
  118. package/dist/types/ultramodern-workspace.d.ts +0 -29
@@ -0,0 +1,337 @@
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
+ (()=>{
28
+ __webpack_require__.r = (exports1)=>{
29
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
30
+ value: 'Module'
31
+ });
32
+ Object.defineProperty(exports1, '__esModule', {
33
+ value: true
34
+ });
35
+ };
36
+ })();
37
+ var __webpack_exports__ = {};
38
+ __webpack_require__.r(__webpack_exports__);
39
+ __webpack_require__.d(__webpack_exports__, {
40
+ addShellWorkspaceDependency: ()=>addShellWorkspaceDependency,
41
+ addShellZephyrDependency: ()=>addShellZephyrDependency,
42
+ addUltramodernVertical: ()=>addUltramodernVertical,
43
+ assertCanCreate: ()=>assertCanCreate,
44
+ assertValidVerticalName: ()=>assertValidVerticalName,
45
+ existingPackageSource: ()=>existingPackageSource,
46
+ existingTailwindEnabled: ()=>existingTailwindEnabled,
47
+ nextAvailablePort: ()=>nextAvailablePort,
48
+ ownershipEntry: ()=>ownershipEntry,
49
+ rewriteShellAppFiles: ()=>rewriteShellAppFiles,
50
+ updateRootWorkspaceScripts: ()=>updateRootWorkspaceScripts,
51
+ verticalTopologyEntry: ()=>verticalTopologyEntry,
52
+ verticalsFromTopology: ()=>verticalsFromTopology
53
+ });
54
+ const external_node_fs_namespaceObject = require("node:fs");
55
+ var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
56
+ const external_node_path_namespaceObject = require("node:path");
57
+ var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
58
+ const external_ultramodern_package_source_cjs_namespaceObject = require("../ultramodern-package-source.cjs");
59
+ const external_app_files_cjs_namespaceObject = require("./app-files.cjs");
60
+ const external_contracts_cjs_namespaceObject = require("./contracts.cjs");
61
+ const external_demo_components_cjs_namespaceObject = require("./demo-components.cjs");
62
+ const external_descriptors_cjs_namespaceObject = require("./descriptors.cjs");
63
+ const external_effect_api_cjs_namespaceObject = require("./effect-api.cjs");
64
+ const external_fs_io_cjs_namespaceObject = require("./fs-io.cjs");
65
+ const external_locales_cjs_namespaceObject = require("./locales.cjs");
66
+ const external_module_federation_cjs_namespaceObject = require("./module-federation.cjs");
67
+ const external_naming_cjs_namespaceObject = require("./naming.cjs");
68
+ const external_package_json_cjs_namespaceObject = require("./package-json.cjs");
69
+ const external_package_source_cjs_namespaceObject = require("./package-source.cjs");
70
+ const external_policy_cjs_namespaceObject = require("./policy.cjs");
71
+ const external_public_surface_cjs_namespaceObject = require("./public-surface.cjs");
72
+ const external_types_cjs_namespaceObject = require("./types.cjs");
73
+ const external_workspace_scripts_cjs_namespaceObject = require("./workspace-scripts.cjs");
74
+ const external_write_workspace_cjs_namespaceObject = require("./write-workspace.cjs");
75
+ const FIRST_VERTICAL_PORT = 4101;
76
+ function existingPackageSource(workspaceRoot, modernVersion, packageSource) {
77
+ if (packageSource) return (0, external_package_source_cjs_namespaceObject.resolvePackageSource)({
78
+ targetDir: workspaceRoot,
79
+ packageName: external_node_path_default().basename(workspaceRoot),
80
+ modernVersion,
81
+ packageSource
82
+ });
83
+ const metadataPath = external_node_path_default().join(workspaceRoot, '.modernjs/ultramodern-package-source.json');
84
+ if (!external_node_fs_default().existsSync(metadataPath)) return (0, external_package_source_cjs_namespaceObject.resolvePackageSource)({
85
+ targetDir: workspaceRoot,
86
+ packageName: external_node_path_default().basename(workspaceRoot),
87
+ modernVersion
88
+ });
89
+ const metadata = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(metadataPath);
90
+ const aliases = metadata.modernPackages?.aliases ?? {};
91
+ const firstAlias = Object.values(aliases).find((value)=>'string' == typeof value);
92
+ const firstPackage = Object.keys(aliases)[0];
93
+ const aliasScope = firstAlias?.match(/^@([^/]+)\//)?.[1];
94
+ const unscopedName = firstPackage?.split('/').at(-1) ?? '';
95
+ const aliasUnscopedName = firstAlias?.split('/').at(-1) ?? '';
96
+ const aliasPackageNamePrefix = aliasUnscopedName && unscopedName && aliasUnscopedName.endsWith(unscopedName) ? aliasUnscopedName.slice(0, -unscopedName.length) : void 0;
97
+ return {
98
+ strategy: 'install' === metadata.strategy ? 'install' : 'workspace',
99
+ modernPackageVersion: 'string' == typeof metadata.modernPackages?.specifier ? metadata.modernPackages.specifier : modernVersion,
100
+ registry: metadata.modernPackages?.registry,
101
+ aliasScope,
102
+ aliasPackageNamePrefix
103
+ };
104
+ }
105
+ function existingTailwindEnabled(workspaceRoot) {
106
+ const contractPath = external_node_path_default().join(workspaceRoot, external_descriptors_cjs_namespaceObject.GENERATED_CONTRACT_PATH);
107
+ if (!external_node_fs_default().existsSync(contractPath)) return true;
108
+ const contract = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(contractPath);
109
+ const apps = (0, external_types_cjs_namespaceObject.isRecord)(contract) && Array.isArray(contract.apps) ? contract.apps : [];
110
+ const shell = apps.find((app)=>(0, external_types_cjs_namespaceObject.isRecord)(app) && app.id === external_descriptors_cjs_namespaceObject.shellApp.id);
111
+ return shell?.styling && (0, external_types_cjs_namespaceObject.isRecord)(shell.styling) ? false !== shell.styling.tailwind : true;
112
+ }
113
+ function assertValidVerticalName(name) {
114
+ const normalized = (0, external_naming_cjs_namespaceObject.toKebabCase)(name);
115
+ if (!normalized || normalized !== name) throw new Error(`Invalid Vertical name "${name}". Use lowercase kebab-case.`);
116
+ return normalized;
117
+ }
118
+ function nextAvailablePort(ports) {
119
+ const numericPorts = Object.values(ports).filter((value)=>'number' == typeof value && Number.isFinite(value));
120
+ return Math.max(FIRST_VERTICAL_PORT - 1, ...numericPorts) + 1;
121
+ }
122
+ function assertCanCreate(workspaceRoot, relativePath) {
123
+ if (external_node_fs_default().existsSync(external_node_path_default().join(workspaceRoot, relativePath))) throw new Error(`Refusing to overwrite existing path: ${relativePath}`);
124
+ }
125
+ function updateRootWorkspaceScripts(workspaceRoot, scope, packageSource, remotes) {
126
+ const packagePath = external_node_path_default().join(workspaceRoot, 'package.json');
127
+ const rootPackage = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(packagePath);
128
+ const generatedRootPackage = (0, external_package_json_cjs_namespaceObject.createRootPackageJson)(scope, packageSource, remotes);
129
+ rootPackage.scripts = generatedRootPackage.scripts;
130
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(packagePath, rootPackage);
131
+ }
132
+ function rewriteShellAppFiles(workspaceRoot, scope, packageSource, enableTailwind, remotes) {
133
+ const shellHost = (0, external_descriptors_cjs_namespaceObject.createShellHost)(remotes);
134
+ const publicWeb = (0, external_public_surface_cjs_namespaceObject.createPublicWebAppArtifacts)(shellHost);
135
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(external_node_path_default().join(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/package.json`), (0, external_package_json_cjs_namespaceObject.createAppPackage)(scope, shellHost, packageSource, enableTailwind, remotes));
136
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/src/modern-app-env.d.ts`, (0, external_app_files_cjs_namespaceObject.createAppEnvDts)(shellHost, remotes));
137
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, publicWeb.jsonLdHelperFile.path, publicWeb.jsonLdHelperFile.content);
138
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, publicWeb.routeMetadataFile.path, publicWeb.routeMetadataFile.content);
139
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, publicWeb.routeHeadFile.path, publicWeb.routeHeadFile.content);
140
+ for (const generatedFile of publicWeb.routeMetaFiles)(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, generatedFile.path, generatedFile.content);
141
+ (0, external_public_surface_cjs_namespaceObject.rewriteWorkspaceAssetsForApp)(workspaceRoot, shellHost);
142
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/src/modern.runtime.ts`, (0, external_app_files_cjs_namespaceObject.createAppRuntimeConfig)(shellHost, scope, remotes));
143
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(external_node_path_default().join(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/locales/en/translation.json`), (0, external_locales_cjs_namespaceObject.createAppPublicLocaleMessages)(shellHost, 'en', remotes));
144
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(external_node_path_default().join(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/locales/en/${(0, external_descriptors_cjs_namespaceObject.appI18nNamespace)(shellHost)}.json`), (0, external_locales_cjs_namespaceObject.createAppPublicLocaleMessages)(shellHost, 'en', remotes));
145
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(external_node_path_default().join(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/locales/cs/translation.json`), (0, external_locales_cjs_namespaceObject.createAppPublicLocaleMessages)(shellHost, 'cs', remotes));
146
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(external_node_path_default().join(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/locales/cs/${(0, external_descriptors_cjs_namespaceObject.appI18nNamespace)(shellHost)}.json`), (0, external_locales_cjs_namespaceObject.createAppPublicLocaleMessages)(shellHost, 'cs', remotes));
147
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/module-federation.config.ts`, (0, external_module_federation_cjs_namespaceObject.createShellModuleFederationConfig)(scope, remotes));
148
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/src/routes/[lang]/page.tsx`, (0, external_demo_components_cjs_namespaceObject.createShellPage)(remotes));
149
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/src/routes/vertical-components.tsx`, (0, external_demo_components_cjs_namespaceObject.createShellRemoteComponents)(scope, remotes));
150
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/src/routes/shell-frame.tsx`, (0, external_app_files_cjs_namespaceObject.createShellFrameComponent)());
151
+ (0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(workspaceRoot, `${external_descriptors_cjs_namespaceObject.shellApp.directory}/src/effect/vertical-clients.ts`, (0, external_effect_api_cjs_namespaceObject.createShellEffectClient)(scope, remotes));
152
+ }
153
+ function addShellZephyrDependency(workspaceRoot, scope, remote) {
154
+ const packagePath = external_node_path_default().join(workspaceRoot, external_descriptors_cjs_namespaceObject.shellApp.directory, 'package.json');
155
+ const shellPackage = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(packagePath);
156
+ shellPackage['zephyr:dependencies'] ??= {};
157
+ shellPackage['zephyr:dependencies'][(0, external_descriptors_cjs_namespaceObject.remoteDependencyAlias)(remote)] = (0, external_descriptors_cjs_namespaceObject.zephyrRemoteDependency)(scope, remote);
158
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(packagePath, shellPackage);
159
+ }
160
+ function addShellWorkspaceDependency(workspaceRoot, scope, remote) {
161
+ if (!(0, external_descriptors_cjs_namespaceObject.appHasEffectApi)(remote)) return;
162
+ const packagePath = external_node_path_default().join(workspaceRoot, external_descriptors_cjs_namespaceObject.shellApp.directory, 'package.json');
163
+ const shellPackage = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(packagePath);
164
+ shellPackage.dependencies ??= {};
165
+ shellPackage.dependencies[(0, external_naming_cjs_namespaceObject.packageName)(scope, remote.packageSuffix)] = external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION;
166
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(packagePath, shellPackage);
167
+ }
168
+ function verticalTopologyEntry(scope, vertical, remotes = []) {
169
+ return {
170
+ id: vertical.id,
171
+ kind: vertical.kind,
172
+ domain: vertical.domain,
173
+ package: (0, external_naming_cjs_namespaceObject.packageName)(scope, vertical.packageSuffix),
174
+ path: vertical.directory,
175
+ moduleFederation: {
176
+ role: 'remote',
177
+ name: vertical.mfName,
178
+ manifestUrl: `http://localhost:${vertical.port}/mf-manifest.json`,
179
+ exposes: Object.keys(vertical.exposes ?? {}),
180
+ ...vertical.verticalRefs?.length ? {
181
+ verticalRefs: vertical.verticalRefs,
182
+ remotes: (0, external_descriptors_cjs_namespaceObject.createModuleFederationRemoteContracts)(vertical, remotes)
183
+ } : {},
184
+ ssr: true,
185
+ fallbackTelemetryEvent: 'modernjs:mv-runtime-parity',
186
+ sharedContractVersion: 'mf-ssr-contract-v1'
187
+ },
188
+ ...(0, external_effect_api_cjs_namespaceObject.effectApiTopologyMetadata)(vertical) ? {
189
+ api: (0, external_effect_api_cjs_namespaceObject.effectApiTopologyMetadata)(vertical)
190
+ } : {},
191
+ cloudflare: (0, external_policy_cjs_namespaceObject.createCloudflareDeployContract)(scope, vertical),
192
+ ownership: vertical.ownership
193
+ };
194
+ }
195
+ function ownershipEntry(scope, owner) {
196
+ return {
197
+ id: owner.id,
198
+ package: (0, external_naming_cjs_namespaceObject.packageName)(scope, owner.packageSuffix),
199
+ path: owner.directory,
200
+ ownership: owner.ownership
201
+ };
202
+ }
203
+ function verticalsFromTopology(topology, ports) {
204
+ return (topology.verticals ?? []).map((vertical)=>{
205
+ const domain = vertical.domain ?? String(vertical.id);
206
+ const packageSuffix = vertical.package?.split('/').at(-1) ?? domain;
207
+ const effectApi = vertical.api?.effect ? {
208
+ stem: 'string' == typeof vertical.api.effect.basePath ? vertical.api.effect.basePath.split('/').filter(Boolean).at(-1) ?? domain : domain,
209
+ prefix: vertical.api.effect.bff?.prefix ?? `/${domain}-api`,
210
+ consumedBy: Array.isArray(vertical.api.effect.consumedBy) ? vertical.api.effect.consumedBy : [
211
+ external_descriptors_cjs_namespaceObject.shellApp.id,
212
+ vertical.id
213
+ ]
214
+ } : void 0;
215
+ return {
216
+ id: vertical.id,
217
+ directory: 'string' == typeof vertical.path ? vertical.path : `verticals/${domain}`,
218
+ packageSuffix,
219
+ displayName: vertical.displayName ?? `${(0, external_naming_cjs_namespaceObject.toPascalCase)(domain)} Vertical`,
220
+ kind: 'vertical',
221
+ domain,
222
+ portEnv: `VERTICAL_${(0, external_naming_cjs_namespaceObject.toEnvSegment)(domain)}_PORT`,
223
+ port: 'number' == typeof ports[vertical.id] ? ports[vertical.id] : 0,
224
+ mfName: vertical.moduleFederation?.name ?? `vertical${(0, external_naming_cjs_namespaceObject.toPascalCase)(domain)}`,
225
+ ...Array.isArray(vertical.moduleFederation?.exposes) ? {
226
+ exposes: Object.fromEntries(vertical.moduleFederation.exposes.map((expose)=>[
227
+ expose,
228
+ './Route' === expose ? './src/federation-entry.tsx' : './Widget' === expose ? `./src/components/${domain}-widget.tsx` : ''
229
+ ]))
230
+ } : {},
231
+ ...Array.isArray(vertical.moduleFederation?.verticalRefs) ? {
232
+ verticalRefs: vertical.moduleFederation.verticalRefs
233
+ } : Array.isArray(vertical.moduleFederation?.remotes) ? {
234
+ verticalRefs: vertical.moduleFederation.remotes.map((entry)=>entry.id).filter((id)=>'string' == typeof id)
235
+ } : {},
236
+ ...effectApi ? {
237
+ effectApi
238
+ } : {},
239
+ ownership: vertical.ownership ?? (0, external_descriptors_cjs_namespaceObject.createNeutralOwnership)(vertical.id)
240
+ };
241
+ });
242
+ }
243
+ function addUltramodernVertical(options) {
244
+ const name = assertValidVerticalName(options.name);
245
+ const rootPackage = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(external_node_path_default().join(options.workspaceRoot, 'package.json'));
246
+ const scope = (0, external_naming_cjs_namespaceObject.toPackageScope)(String(rootPackage.name ?? external_node_path_default().basename(options.workspaceRoot)));
247
+ const topologyPath = external_node_path_default().join(options.workspaceRoot, 'topology/reference-topology.json');
248
+ const ownershipPath = external_node_path_default().join(options.workspaceRoot, 'topology/ownership.json');
249
+ const overlayPath = external_node_path_default().join(options.workspaceRoot, 'topology/local-overlays/development.json');
250
+ for (const requiredPath of [
251
+ topologyPath,
252
+ ownershipPath,
253
+ overlayPath
254
+ ])if (!external_node_fs_default().existsSync(requiredPath)) throw new Error(`Missing UltraModern workspace file: ${requiredPath}`);
255
+ const topology = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(topologyPath);
256
+ const ownership = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(ownershipPath);
257
+ const overlay = (0, external_fs_io_cjs_namespaceObject.readJsonFile)(overlayPath);
258
+ overlay.ports ??= {};
259
+ const packageSource = existingPackageSource(options.workspaceRoot, options.modernVersion, options.packageSource);
260
+ const enableTailwind = options.enableTailwind ?? existingTailwindEnabled(options.workspaceRoot);
261
+ const port = nextAvailablePort(overlay.ports);
262
+ const vertical = (0, external_descriptors_cjs_namespaceObject.createVerticalDescriptor)(name, port);
263
+ assertCanCreate(options.workspaceRoot, vertical.directory);
264
+ if ((topology.verticals ?? []).some((entry)=>entry.id === vertical.id)) throw new Error(`Topology already contains ${vertical.id}`);
265
+ if (Object.values(overlay.ports).includes(vertical.port)) throw new Error(`Development port ${vertical.port} is already in use`);
266
+ (0, external_write_workspace_cjs_namespaceObject.writeApp)(options.workspaceRoot, scope, vertical, packageSource, enableTailwind);
267
+ topology.shell ??= {};
268
+ topology.shell.verticalRefs ??= [];
269
+ topology.shell.verticalRefs.push(vertical.id);
270
+ topology.shell.moduleFederation ??= {};
271
+ topology.shell.moduleFederation.remotes ??= [];
272
+ topology.shell.moduleFederation.remotes.push({
273
+ id: vertical.id,
274
+ name: vertical.mfName,
275
+ manifestUrl: `http://localhost:${vertical.port}/mf-manifest.json`
276
+ });
277
+ topology.verticals ??= [];
278
+ topology.verticals.push(verticalTopologyEntry(scope, vertical));
279
+ ownership.owners ??= [];
280
+ ownership.owners.push(ownershipEntry(scope, vertical));
281
+ overlay.ports[vertical.id] = vertical.port;
282
+ overlay.manifests ??= {};
283
+ overlay.manifests[vertical.id] = `http://localhost:${vertical.port}/mf-manifest.json`;
284
+ overlay.apis ??= {};
285
+ overlay.apis[vertical.id] = `http://localhost:${vertical.port}${(0, external_descriptors_cjs_namespaceObject.effectApiPrefix)(vertical)}`;
286
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(topologyPath, topology);
287
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(ownershipPath, ownership);
288
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(overlayPath, overlay);
289
+ const updatedVerticals = verticalsFromTopology(topology, overlay.ports);
290
+ (0, external_naming_cjs_namespaceObject.assertUniqueTailwindPrefixes)([
291
+ external_descriptors_cjs_namespaceObject.shellApp,
292
+ ...updatedVerticals
293
+ ]);
294
+ (0, external_fs_io_cjs_namespaceObject.writeJsonFile)(external_node_path_default().join(options.workspaceRoot, external_descriptors_cjs_namespaceObject.GENERATED_CONTRACT_PATH), (0, external_contracts_cjs_namespaceObject.createGeneratedContract)(scope, [
295
+ {
296
+ ...external_descriptors_cjs_namespaceObject.shellApp,
297
+ verticalRefs: updatedVerticals.map((vertical)=>vertical.id)
298
+ },
299
+ ...updatedVerticals
300
+ ], enableTailwind));
301
+ rewriteShellAppFiles(options.workspaceRoot, scope, packageSource, enableTailwind, updatedVerticals);
302
+ (0, external_workspace_scripts_cjs_namespaceObject.writeGeneratedWorkspaceScripts)(options.workspaceRoot, scope, enableTailwind, updatedVerticals);
303
+ addShellZephyrDependency(options.workspaceRoot, scope, vertical);
304
+ addShellWorkspaceDependency(options.workspaceRoot, scope, vertical);
305
+ updateRootWorkspaceScripts(options.workspaceRoot, scope, packageSource, updatedVerticals);
306
+ }
307
+ exports.addShellWorkspaceDependency = __webpack_exports__.addShellWorkspaceDependency;
308
+ exports.addShellZephyrDependency = __webpack_exports__.addShellZephyrDependency;
309
+ exports.addUltramodernVertical = __webpack_exports__.addUltramodernVertical;
310
+ exports.assertCanCreate = __webpack_exports__.assertCanCreate;
311
+ exports.assertValidVerticalName = __webpack_exports__.assertValidVerticalName;
312
+ exports.existingPackageSource = __webpack_exports__.existingPackageSource;
313
+ exports.existingTailwindEnabled = __webpack_exports__.existingTailwindEnabled;
314
+ exports.nextAvailablePort = __webpack_exports__.nextAvailablePort;
315
+ exports.ownershipEntry = __webpack_exports__.ownershipEntry;
316
+ exports.rewriteShellAppFiles = __webpack_exports__.rewriteShellAppFiles;
317
+ exports.updateRootWorkspaceScripts = __webpack_exports__.updateRootWorkspaceScripts;
318
+ exports.verticalTopologyEntry = __webpack_exports__.verticalTopologyEntry;
319
+ exports.verticalsFromTopology = __webpack_exports__.verticalsFromTopology;
320
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
321
+ "addShellWorkspaceDependency",
322
+ "addShellZephyrDependency",
323
+ "addUltramodernVertical",
324
+ "assertCanCreate",
325
+ "assertValidVerticalName",
326
+ "existingPackageSource",
327
+ "existingTailwindEnabled",
328
+ "nextAvailablePort",
329
+ "ownershipEntry",
330
+ "rewriteShellAppFiles",
331
+ "updateRootWorkspaceScripts",
332
+ "verticalTopologyEntry",
333
+ "verticalsFromTopology"
334
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
335
+ Object.defineProperty(exports, '__esModule', {
336
+ value: true
337
+ });
@@ -0,0 +1,223 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
+ })();
18
+ (()=>{
19
+ __webpack_require__.r = (exports1)=>{
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
+ value: 'Module'
22
+ });
23
+ Object.defineProperty(exports1, '__esModule', {
24
+ value: true
25
+ });
26
+ };
27
+ })();
28
+ var __webpack_exports__ = {};
29
+ __webpack_require__.r(__webpack_exports__);
30
+ __webpack_require__.d(__webpack_exports__, {
31
+ createAppEnvDts: ()=>createAppEnvDts,
32
+ createAppRuntimeConfig: ()=>createAppRuntimeConfig,
33
+ createAppStyles: ()=>createAppStyles,
34
+ createBoundaryDebugMetadata: ()=>createBoundaryDebugMetadata,
35
+ createCssTokenImport: ()=>createCssTokenImport,
36
+ createPostcssConfig: ()=>createPostcssConfig,
37
+ createRemoteStyles: ()=>createRemoteStyles,
38
+ createRouteHeadModule: ()=>createRouteHeadModule,
39
+ createSharedDesignTokensCss: ()=>createSharedDesignTokensCss,
40
+ createShellFrameComponent: ()=>createShellFrameComponent,
41
+ createShellStyles: ()=>createShellStyles,
42
+ createTailwindConfig: ()=>createTailwindConfig,
43
+ createTailwindImport: ()=>createTailwindImport
44
+ });
45
+ const external_descriptors_cjs_namespaceObject = require("./descriptors.cjs");
46
+ const external_fs_io_cjs_namespaceObject = require("./fs-io.cjs");
47
+ const external_naming_cjs_namespaceObject = require("./naming.cjs");
48
+ function createBoundaryDebugMetadata(scope, remotes = []) {
49
+ return {
50
+ appId: external_descriptors_cjs_namespaceObject.shellApp.id,
51
+ boundaries: [
52
+ external_descriptors_cjs_namespaceObject.shellApp,
53
+ ...remotes
54
+ ].map((app)=>({
55
+ appId: app.id,
56
+ label: app.displayName,
57
+ mfName: app.mfName,
58
+ ownerTeam: app.ownership.team,
59
+ packageName: (0, external_naming_cjs_namespaceObject.packageName)(scope, app.packageSuffix),
60
+ role: 'shell' === app.kind ? 'host' : 'vertical'
61
+ })),
62
+ schemaVersion: 1
63
+ };
64
+ }
65
+ function createAppEnvDts(app, remotes = []) {
66
+ const remoteModuleDeclarations = (0, external_descriptors_cjs_namespaceObject.resolveRemoteRefs)(app, remotes).flatMap((remote)=>Object.keys(remote.exposes ?? {}).filter((expose)=>'./Route' !== expose).map((expose)=>{
67
+ const moduleName = `${(0, external_descriptors_cjs_namespaceObject.remoteDependencyAlias)(remote)}/${expose.replace(/^\.\//u, '')}`;
68
+ return `declare module '${moduleName}' {
69
+ const Component: React.ComponentType<Record<string, never>>;
70
+ export default Component;
71
+ }
72
+ `;
73
+ })).join('\n');
74
+ const reactTypeReference = remoteModuleDeclarations ? "/// <reference types='react' />\n" : '';
75
+ const siteUrlDeclaration = 'declare const ULTRAMODERN_SITE_URL: string;';
76
+ return `${reactTypeReference}/// <reference types='@modern-js/app-tools/types' />
77
+
78
+ ${siteUrlDeclaration}
79
+ declare module '*.svg' {
80
+ const url: string;
81
+ export default url;
82
+ }
83
+ declare module '*.css';
84
+ ${remoteModuleDeclarations ? `\n${remoteModuleDeclarations}` : ''}`;
85
+ }
86
+ function createAppRuntimeConfig(app, scope, remotes = []) {
87
+ const pluginsConfig = 'shell' === app.kind ? ` plugins: [
88
+ ultramodernBoundaryDebuggerPlugin({
89
+ metadata: ${JSON.stringify(createBoundaryDebugMetadata(scope, remotes), null, 6).split('\n').join('\n ')},
90
+ }),
91
+ ],
92
+ ` : '';
93
+ return `import { defineRuntimeConfig } from '@modern-js/runtime';
94
+ ${'shell' === app.kind ? "import { ultramodernBoundaryDebuggerPlugin } from '@modern-js/runtime/boundary-debugger';\n" : ''}import { createInstance } from 'i18next';
95
+ import csResource from '../locales/cs/${(0, external_descriptors_cjs_namespaceObject.appI18nNamespace)(app)}.json';
96
+ import enResource from '../locales/en/${(0, external_descriptors_cjs_namespaceObject.appI18nNamespace)(app)}.json';
97
+ import { ultramodernRouteNamespace } from './routes/ultramodern-route-metadata';
98
+
99
+ type LocaleResource = string | { readonly [key: string]: LocaleResource };
100
+
101
+ const flattenLocaleResource = (
102
+ resource: LocaleResource,
103
+ prefix = '',
104
+ ): Record<string, string> => {
105
+ if (typeof resource === 'string') {
106
+ return prefix.length > 0 ? { [prefix]: resource } : {};
107
+ }
108
+
109
+ return Object.fromEntries(
110
+ Object.entries(resource).flatMap(([key, value]) => {
111
+ const nextKey = prefix.length > 0 ? \`\${prefix}.\${key}\` : key;
112
+ return typeof value === 'string'
113
+ ? [[nextKey, value]]
114
+ : Object.entries(flattenLocaleResource(value, nextKey));
115
+ }),
116
+ );
117
+ };
118
+
119
+ const i18nInstance = createInstance();
120
+ const resources = {
121
+ cs: { [ultramodernRouteNamespace]: flattenLocaleResource(csResource) },
122
+ en: { [ultramodernRouteNamespace]: flattenLocaleResource(enResource) },
123
+ } as const;
124
+
125
+ export default defineRuntimeConfig({
126
+ i18n: {
127
+ i18nInstance,
128
+ initOptions: {
129
+ defaultNS: ultramodernRouteNamespace,
130
+ fallbackLng: 'en',
131
+ interpolation: {
132
+ escapeValue: false,
133
+ },
134
+ ns: [ultramodernRouteNamespace, 'translation'],
135
+ resources,
136
+ supportedLngs: ['en', 'cs'],
137
+ },
138
+ },
139
+ ${pluginsConfig}
140
+ router: {
141
+ framework: 'tanstack',
142
+ },
143
+ });
144
+ `;
145
+ }
146
+ function createCssTokenImport(scope) {
147
+ return `@import '${(0, external_naming_cjs_namespaceObject.packageName)(scope, 'shared-design-tokens')}/tokens.css';\n`;
148
+ }
149
+ function createTailwindImport(prefix) {
150
+ return `@import 'tailwindcss' prefix(${prefix}) source(none);\n@source '..';\n`;
151
+ }
152
+ function createShellStyles(enableTailwind, scope) {
153
+ return `${enableTailwind ? createTailwindImport((0, external_naming_cjs_namespaceObject.tailwindPrefixForApp)(external_descriptors_cjs_namespaceObject.shellApp)) : ''}${createCssTokenImport(scope)}`;
154
+ }
155
+ function createRemoteStyles(enableTailwind, scope, app) {
156
+ return `${enableTailwind ? createTailwindImport((0, external_naming_cjs_namespaceObject.tailwindPrefixForApp)(app)) : ''}${createCssTokenImport(scope)}`;
157
+ }
158
+ function createAppStyles(enableTailwind, scope, app) {
159
+ return 'shell' === app.kind ? createShellStyles(enableTailwind, scope) : createRemoteStyles(enableTailwind, scope, app);
160
+ }
161
+ function createPostcssConfig() {
162
+ return `export default {
163
+ plugins: {
164
+ '@tailwindcss/postcss': {},
165
+ },
166
+ };
167
+ `;
168
+ }
169
+ function createTailwindConfig() {
170
+ return `import type { Config } from 'tailwindcss';
171
+
172
+ export default {} satisfies Config;
173
+ `;
174
+ }
175
+ function createSharedDesignTokensCss() {
176
+ return `@theme {
177
+ --color-um-accent: #2f8f68;
178
+ --color-um-canvas: #f1eadc;
179
+ --color-um-foreground: #133225;
180
+ --color-um-link: #166b4b;
181
+ --color-um-surface: #f6fbf7;
182
+ }
183
+ `;
184
+ }
185
+ function createRouteHeadModule(app) {
186
+ return (0, external_fs_io_cjs_namespaceObject.renderFileTemplate)('app/ultramodern-route-head.tsx', {
187
+ appDisplayNameJson: JSON.stringify(app.displayName)
188
+ });
189
+ }
190
+ function createShellFrameComponent() {
191
+ return (0, external_fs_io_cjs_namespaceObject.readFileTemplate)('app/shell-frame.tsx');
192
+ }
193
+ exports.createAppEnvDts = __webpack_exports__.createAppEnvDts;
194
+ exports.createAppRuntimeConfig = __webpack_exports__.createAppRuntimeConfig;
195
+ exports.createAppStyles = __webpack_exports__.createAppStyles;
196
+ exports.createBoundaryDebugMetadata = __webpack_exports__.createBoundaryDebugMetadata;
197
+ exports.createCssTokenImport = __webpack_exports__.createCssTokenImport;
198
+ exports.createPostcssConfig = __webpack_exports__.createPostcssConfig;
199
+ exports.createRemoteStyles = __webpack_exports__.createRemoteStyles;
200
+ exports.createRouteHeadModule = __webpack_exports__.createRouteHeadModule;
201
+ exports.createSharedDesignTokensCss = __webpack_exports__.createSharedDesignTokensCss;
202
+ exports.createShellFrameComponent = __webpack_exports__.createShellFrameComponent;
203
+ exports.createShellStyles = __webpack_exports__.createShellStyles;
204
+ exports.createTailwindConfig = __webpack_exports__.createTailwindConfig;
205
+ exports.createTailwindImport = __webpack_exports__.createTailwindImport;
206
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
207
+ "createAppEnvDts",
208
+ "createAppRuntimeConfig",
209
+ "createAppStyles",
210
+ "createBoundaryDebugMetadata",
211
+ "createCssTokenImport",
212
+ "createPostcssConfig",
213
+ "createRemoteStyles",
214
+ "createRouteHeadModule",
215
+ "createSharedDesignTokensCss",
216
+ "createShellFrameComponent",
217
+ "createShellStyles",
218
+ "createTailwindConfig",
219
+ "createTailwindImport"
220
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
221
+ Object.defineProperty(exports, '__esModule', {
222
+ value: true
223
+ });