@bleedingdev/modern-js-create 3.2.0-ultramodern.99 → 3.4.0-ultramodern.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/README.md +281 -106
  2. package/bin/run.js +1 -0
  3. package/dist/cjs/create-package-root.cjs +63 -0
  4. package/dist/cjs/index.cjs +658 -0
  5. package/dist/cjs/locale/en.cjs +101 -0
  6. package/dist/cjs/locale/index.cjs +50 -0
  7. package/dist/cjs/locale/zh.cjs +101 -0
  8. package/dist/cjs/ultramodern-package-source.cjs +135 -0
  9. package/dist/cjs/ultramodern-workspace/add-vertical.cjs +603 -0
  10. package/dist/cjs/ultramodern-workspace/app-files.cjs +223 -0
  11. package/dist/cjs/ultramodern-workspace/codesmith.cjs +134 -0
  12. package/dist/cjs/ultramodern-workspace/contracts.cjs +837 -0
  13. package/dist/cjs/ultramodern-workspace/demo-components.cjs +422 -0
  14. package/dist/cjs/ultramodern-workspace/descriptors.cjs +222 -0
  15. package/dist/cjs/ultramodern-workspace/effect-api.cjs +952 -0
  16. package/dist/cjs/ultramodern-workspace/fs-io.cjs +191 -0
  17. package/dist/cjs/ultramodern-workspace/generation-result.cjs +158 -0
  18. package/dist/cjs/ultramodern-workspace/index.cjs +51 -0
  19. package/dist/cjs/ultramodern-workspace/locales.cjs +173 -0
  20. package/dist/cjs/ultramodern-workspace/module-federation.cjs +487 -0
  21. package/dist/cjs/ultramodern-workspace/naming.cjs +161 -0
  22. package/dist/cjs/ultramodern-workspace/overlays.cjs +120 -0
  23. package/dist/cjs/ultramodern-workspace/package-json.cjs +406 -0
  24. package/dist/cjs/ultramodern-workspace/package-source.cjs +59 -0
  25. package/dist/cjs/ultramodern-workspace/policy.cjs +248 -0
  26. package/dist/cjs/ultramodern-workspace/public-api.cjs +47 -0
  27. package/dist/cjs/ultramodern-workspace/public-surface.cjs +268 -0
  28. package/dist/cjs/ultramodern-workspace/routes.cjs +375 -0
  29. package/dist/cjs/ultramodern-workspace/types.cjs +61 -0
  30. package/dist/cjs/ultramodern-workspace/versions.cjs +161 -0
  31. package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +154 -0
  32. package/dist/cjs/ultramodern-workspace/write-workspace.cjs +197 -0
  33. package/dist/esm/create-package-root.js +14 -0
  34. package/dist/esm/index.js +621 -0
  35. package/dist/esm/locale/en.js +63 -0
  36. package/dist/esm/locale/index.js +9 -0
  37. package/dist/esm/locale/zh.js +63 -0
  38. package/dist/esm/ultramodern-package-source.js +63 -0
  39. package/dist/esm/ultramodern-workspace/add-vertical.js +511 -0
  40. package/dist/esm/ultramodern-workspace/app-files.js +149 -0
  41. package/dist/esm/ultramodern-workspace/codesmith.js +86 -0
  42. package/dist/esm/ultramodern-workspace/contracts.js +742 -0
  43. package/dist/esm/ultramodern-workspace/demo-components.js +363 -0
  44. package/dist/esm/ultramodern-workspace/descriptors.js +133 -0
  45. package/dist/esm/ultramodern-workspace/effect-api.js +854 -0
  46. package/dist/esm/ultramodern-workspace/fs-io.js +90 -0
  47. package/dist/esm/ultramodern-workspace/generation-result.js +102 -0
  48. package/dist/esm/ultramodern-workspace/index.js +3 -0
  49. package/dist/esm/ultramodern-workspace/locales.js +122 -0
  50. package/dist/esm/ultramodern-workspace/module-federation.js +415 -0
  51. package/dist/esm/ultramodern-workspace/naming.js +71 -0
  52. package/dist/esm/ultramodern-workspace/overlays.js +79 -0
  53. package/dist/esm/ultramodern-workspace/package-json.js +338 -0
  54. package/dist/esm/ultramodern-workspace/package-source.js +21 -0
  55. package/dist/esm/ultramodern-workspace/policy.js +183 -0
  56. package/dist/esm/ultramodern-workspace/public-api.js +2 -0
  57. package/dist/esm/ultramodern-workspace/public-surface.js +183 -0
  58. package/dist/esm/ultramodern-workspace/routes.js +280 -0
  59. package/dist/esm/ultramodern-workspace/types.js +16 -0
  60. package/dist/esm/ultramodern-workspace/versions.js +36 -0
  61. package/dist/esm/ultramodern-workspace/workspace-scripts.js +92 -0
  62. package/dist/esm/ultramodern-workspace/write-workspace.js +143 -0
  63. package/dist/esm-node/create-package-root.js +15 -0
  64. package/dist/esm-node/index.js +622 -0
  65. package/dist/esm-node/locale/en.js +64 -0
  66. package/dist/esm-node/locale/index.js +10 -0
  67. package/dist/esm-node/locale/zh.js +64 -0
  68. package/dist/esm-node/ultramodern-package-source.js +64 -0
  69. package/dist/esm-node/ultramodern-workspace/add-vertical.js +512 -0
  70. package/dist/esm-node/ultramodern-workspace/app-files.js +150 -0
  71. package/dist/esm-node/ultramodern-workspace/codesmith.js +87 -0
  72. package/dist/esm-node/ultramodern-workspace/contracts.js +743 -0
  73. package/dist/esm-node/ultramodern-workspace/demo-components.js +364 -0
  74. package/dist/esm-node/ultramodern-workspace/descriptors.js +134 -0
  75. package/dist/esm-node/ultramodern-workspace/effect-api.js +855 -0
  76. package/dist/esm-node/ultramodern-workspace/fs-io.js +91 -0
  77. package/dist/esm-node/ultramodern-workspace/generation-result.js +103 -0
  78. package/dist/esm-node/ultramodern-workspace/index.js +4 -0
  79. package/dist/esm-node/ultramodern-workspace/locales.js +123 -0
  80. package/dist/esm-node/ultramodern-workspace/module-federation.js +416 -0
  81. package/dist/esm-node/ultramodern-workspace/naming.js +72 -0
  82. package/dist/esm-node/ultramodern-workspace/overlays.js +80 -0
  83. package/dist/esm-node/ultramodern-workspace/package-json.js +339 -0
  84. package/dist/esm-node/ultramodern-workspace/package-source.js +22 -0
  85. package/dist/esm-node/ultramodern-workspace/policy.js +184 -0
  86. package/dist/esm-node/ultramodern-workspace/public-api.js +3 -0
  87. package/dist/esm-node/ultramodern-workspace/public-surface.js +184 -0
  88. package/dist/esm-node/ultramodern-workspace/routes.js +281 -0
  89. package/dist/esm-node/ultramodern-workspace/types.js +17 -0
  90. package/dist/esm-node/ultramodern-workspace/versions.js +37 -0
  91. package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +93 -0
  92. package/dist/esm-node/ultramodern-workspace/write-workspace.js +144 -0
  93. package/dist/types/create-package-root.d.ts +1 -0
  94. package/dist/types/locale/en.d.ts +12 -8
  95. package/dist/types/locale/index.d.ts +125 -2
  96. package/dist/types/locale/zh.d.ts +12 -8
  97. package/dist/types/ultramodern-package-source.d.ts +28 -0
  98. package/dist/types/ultramodern-workspace/add-vertical.d.ts +36 -0
  99. package/dist/types/ultramodern-workspace/app-files.d.ts +14 -0
  100. package/dist/types/ultramodern-workspace/codesmith.d.ts +53 -0
  101. package/dist/types/ultramodern-workspace/contracts.d.ts +21 -0
  102. package/dist/types/ultramodern-workspace/demo-components.d.ts +9 -0
  103. package/dist/types/ultramodern-workspace/descriptors.d.ts +39 -0
  104. package/dist/types/ultramodern-workspace/effect-api.d.ts +73 -0
  105. package/dist/types/ultramodern-workspace/fs-io.d.ts +18 -0
  106. package/dist/types/ultramodern-workspace/generation-result.d.ts +14 -0
  107. package/dist/types/ultramodern-workspace/index.d.ts +4 -0
  108. package/dist/types/ultramodern-workspace/locales.d.ts +183 -0
  109. package/dist/types/ultramodern-workspace/module-federation.d.ts +16 -0
  110. package/dist/types/ultramodern-workspace/naming.d.ts +16 -0
  111. package/dist/types/ultramodern-workspace/overlays.d.ts +6 -0
  112. package/dist/types/ultramodern-workspace/package-json.d.ts +12 -0
  113. package/dist/types/ultramodern-workspace/package-source.d.ts +2 -0
  114. package/dist/types/ultramodern-workspace/policy.d.ts +60 -0
  115. package/dist/types/ultramodern-workspace/public-api.d.ts +3 -0
  116. package/dist/types/ultramodern-workspace/public-surface.d.ts +37 -0
  117. package/dist/types/ultramodern-workspace/routes.d.ts +25 -0
  118. package/dist/types/ultramodern-workspace/types.d.ts +197 -0
  119. package/dist/types/ultramodern-workspace/versions.d.ts +40 -0
  120. package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +10 -0
  121. package/dist/types/ultramodern-workspace/write-workspace.d.ts +4 -0
  122. package/package.json +58 -15
  123. package/template-workspace/.github/workflows/ultramodern-workspace-gates.yml.handlebars +23 -10
  124. package/template-workspace/.mise.toml.handlebars +1 -0
  125. package/template-workspace/{AGENTS.md → AGENTS.md.handlebars} +20 -9
  126. package/template-workspace/README.md.handlebars +85 -14
  127. package/template-workspace/lefthook.yml +18 -4
  128. package/template-workspace/pnpm-workspace.yaml.handlebars +45 -0
  129. package/template-workspace/scripts/bootstrap-agent-skills.mjs +69 -75
  130. package/template-workspace/scripts/setup-agent-reference-repos.mjs +8 -6
  131. package/templates/app/shell-frame.tsx +49 -0
  132. package/templates/app/ultramodern-route-head.tsx.handlebars +142 -0
  133. package/templates/packages/shared-contracts-index.ts +466 -0
  134. package/templates/workspace-scripts/assert-mf-types.mjs.handlebars +69 -0
  135. package/templates/workspace-scripts/check-ultramodern-i18n-boundaries.mjs +9 -0
  136. package/templates/workspace-scripts/generate-public-surface-assets.mjs +529 -0
  137. package/templates/workspace-scripts/proof-cloudflare-version.mjs +125 -0
  138. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +851 -0
  139. package/templates/workspace-scripts/ultramodern-performance-readiness.config.mjs +7 -0
  140. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +223 -0
  141. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +986 -0
  142. package/dist/index.js +0 -6625
  143. package/dist/types/ultramodern-workspace.d.ts +0 -31
  144. package/template/.agents/skills-lock.json +0 -34
  145. package/template/.browserslistrc +0 -4
  146. package/template/.codex/hooks.json +0 -16
  147. package/template/.github/renovate.json +0 -53
  148. package/template/.github/workflows/ultramodern-gates.yml.handlebars +0 -54
  149. package/template/.gitignore.handlebars +0 -30
  150. package/template/.mise.toml.handlebars +0 -2
  151. package/template/.nvmrc +0 -2
  152. package/template/AGENTS.md +0 -23
  153. package/template/README.md +0 -105
  154. package/template/api/effect/index.ts.handlebars +0 -34
  155. package/template/api/lambda/hello.ts.handlebars +0 -6
  156. package/template/config/public/locales/cs/translation.json +0 -39
  157. package/template/config/public/locales/en/translation.json +0 -39
  158. package/template/lefthook.yml +0 -10
  159. package/template/modern.config.ts.handlebars +0 -71
  160. package/template/oxfmt.config.ts +0 -15
  161. package/template/oxlint.config.ts +0 -19
  162. package/template/package.json.handlebars +0 -66
  163. package/template/pnpm-workspace.yaml +0 -29
  164. package/template/postcss.config.mjs.handlebars +0 -6
  165. package/template/rstest.config.mts +0 -5
  166. package/template/scripts/bootstrap-agent-skills.mjs +0 -228
  167. package/template/scripts/check-i18n-strings.mjs +0 -94
  168. package/template/scripts/validate-ultramodern.mjs.handlebars +0 -538
  169. package/template/shared/effect/api.ts.handlebars +0 -17
  170. package/template/src/modern-app-env.d.ts +0 -3
  171. package/template/src/modern.runtime.ts.handlebars +0 -23
  172. package/template/src/routes/[lang]/page.tsx.handlebars +0 -211
  173. package/template/src/routes/index.css.handlebars +0 -129
  174. package/template/src/routes/layout.tsx.handlebars +0 -10
  175. package/template/tailwind.config.ts.handlebars +0 -10
  176. package/template/tests/tsconfig.json +0 -7
  177. package/template/tests/ultramodern.contract.test.ts.handlebars +0 -78
  178. package/template/tsconfig.json +0 -120
  179. package/template-workspace/pnpm-workspace.yaml +0 -35
@@ -0,0 +1,91 @@
1
+ import "node:module";
2
+ import node_crypto from "node:crypto";
3
+ import node_fs from "node:fs";
4
+ import node_path from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import { resolveCreatePackageRoot } from "../create-package-root.js";
7
+ import { normalizePath } from "./naming.js";
8
+ const fs_io_dirname = node_path.dirname(fileURLToPath(import.meta.url));
9
+ const createPackageRoot = resolveCreatePackageRoot(fs_io_dirname);
10
+ const workspaceTemplateDir = node_path.join(createPackageRoot, 'template-workspace');
11
+ const fileTemplatesDir = node_path.join(createPackageRoot, 'templates');
12
+ function readFileTemplate(relativePath) {
13
+ return node_fs.readFileSync(node_path.join(fileTemplatesDir, relativePath), 'utf-8');
14
+ }
15
+ function renderFileTemplate(relativePath, data) {
16
+ return renderTemplate(readFileTemplate(`${relativePath}.handlebars`), data);
17
+ }
18
+ function assertSafeRelativePath(relativePath) {
19
+ if (0 === relativePath.length || node_path.isAbsolute(relativePath) || relativePath.split(/[\\/]+/).includes('..')) throw new Error(`Unsafe workspace template path: ${relativePath}`);
20
+ }
21
+ function ensureInsideRoot(root, targetPath) {
22
+ const relativePath = node_path.relative(root, targetPath);
23
+ if (relativePath.startsWith('..') || node_path.isAbsolute(relativePath)) throw new Error(`Refusing to write outside workspace root: ${targetPath}`);
24
+ }
25
+ function writeFile(targetDir, relativePath, content) {
26
+ assertSafeRelativePath(relativePath);
27
+ const filePath = node_path.join(targetDir, relativePath);
28
+ ensureInsideRoot(targetDir, filePath);
29
+ if (node_fs.existsSync(filePath)) throw new Error(`Refusing to overwrite generated workspace file: ${relativePath}`);
30
+ node_fs.mkdirSync(node_path.dirname(filePath), {
31
+ recursive: true
32
+ });
33
+ node_fs.writeFileSync(filePath, content, 'utf-8');
34
+ }
35
+ function writeFileReplacing(targetDir, relativePath, content) {
36
+ assertSafeRelativePath(relativePath);
37
+ const filePath = node_path.join(targetDir, relativePath);
38
+ ensureInsideRoot(targetDir, filePath);
39
+ node_fs.mkdirSync(node_path.dirname(filePath), {
40
+ recursive: true
41
+ });
42
+ node_fs.writeFileSync(filePath, content, 'utf-8');
43
+ }
44
+ function writeJson(targetDir, relativePath, value) {
45
+ writeFile(targetDir, relativePath, `${JSON.stringify(value, null, 2)}\n`);
46
+ }
47
+ function renderTemplate(template, data) {
48
+ return template.replace(/\{\{(\w+)\}\}/g, (match, key)=>data[key] ?? match);
49
+ }
50
+ function collectTemplateFiles(dir) {
51
+ const files = [];
52
+ function collect(currentDir) {
53
+ for (const entry of node_fs.readdirSync(currentDir, {
54
+ withFileTypes: true
55
+ }).sort((a, b)=>a.name.localeCompare(b.name))){
56
+ const entryPath = node_path.join(currentDir, entry.name);
57
+ if (entry.isDirectory()) collect(entryPath);
58
+ else if (entry.isFile()) files.push(normalizePath(node_path.relative(dir, entryPath)));
59
+ }
60
+ }
61
+ collect(dir);
62
+ return files;
63
+ }
64
+ function hashFile(filePath) {
65
+ return node_crypto.createHash('sha256').update(node_fs.readFileSync(filePath)).digest('hex');
66
+ }
67
+ function hashTemplateTree(dir) {
68
+ const hash = node_crypto.createHash('sha256');
69
+ for (const relativePath of collectTemplateFiles(dir)){
70
+ hash.update(relativePath);
71
+ hash.update('\0');
72
+ hash.update(hashFile(node_path.join(dir, relativePath)));
73
+ hash.update('\0');
74
+ }
75
+ return hash.digest('hex');
76
+ }
77
+ function copyRootTemplate(targetDir, data) {
78
+ for (const relativePath of collectTemplateFiles(workspaceTemplateDir)){
79
+ const sourcePath = node_path.join(workspaceTemplateDir, relativePath);
80
+ const outputPath = relativePath.replace(/\.handlebars$/, '');
81
+ const content = relativePath.endsWith('.handlebars') ? renderTemplate(node_fs.readFileSync(sourcePath, 'utf-8'), data) : node_fs.readFileSync(sourcePath, 'utf-8');
82
+ writeFile(targetDir, outputPath, content);
83
+ }
84
+ }
85
+ function readJsonFile(filePath) {
86
+ return JSON.parse(node_fs.readFileSync(filePath, 'utf-8'));
87
+ }
88
+ function writeJsonFile(filePath, value) {
89
+ node_fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, 'utf-8');
90
+ }
91
+ export { assertSafeRelativePath, collectTemplateFiles, copyRootTemplate, createPackageRoot, ensureInsideRoot, fileTemplatesDir, hashFile, hashTemplateTree, readFileTemplate, readJsonFile, renderFileTemplate, renderTemplate, workspaceTemplateDir, writeFile, writeFileReplacing, writeJson, writeJsonFile };
@@ -0,0 +1,103 @@
1
+ import "node:module";
2
+ import node_crypto from "node:crypto";
3
+ import node_fs from "node:fs";
4
+ import node_path from "node:path";
5
+ import { GENERATED_CONTRACT_PATH, appHasEffectApi } from "./descriptors.js";
6
+ import { normalizePath, packageName } from "./naming.js";
7
+ const ignoredSnapshotDirectories = new Set([
8
+ '.git',
9
+ '.nx',
10
+ '.output',
11
+ 'coverage',
12
+ 'dist',
13
+ 'node_modules'
14
+ ]);
15
+ function createFileSnapshot(root) {
16
+ const files = new Map();
17
+ if (!node_fs.existsSync(root)) return files;
18
+ function collect(currentDir) {
19
+ for (const entry of node_fs.readdirSync(currentDir, {
20
+ withFileTypes: true
21
+ }).sort((left, right)=>left.name.localeCompare(right.name))){
22
+ if (entry.isDirectory() && ignoredSnapshotDirectories.has(entry.name)) continue;
23
+ const entryPath = node_path.join(currentDir, entry.name);
24
+ if (entry.isDirectory()) collect(entryPath);
25
+ else if (entry.isFile()) {
26
+ const relativePath = normalizePath(node_path.relative(root, entryPath));
27
+ files.set(relativePath, hashFile(entryPath));
28
+ }
29
+ }
30
+ }
31
+ collect(root);
32
+ return files;
33
+ }
34
+ function diffFileSnapshots(before, after) {
35
+ const createdPaths = [];
36
+ const rewrittenPaths = [];
37
+ for (const [relativePath, hash] of after){
38
+ const previousHash = before.get(relativePath);
39
+ if (void 0 === previousHash) createdPaths.push(relativePath);
40
+ else if (previousHash !== hash) rewrittenPaths.push(relativePath);
41
+ }
42
+ return {
43
+ createdPaths: createdPaths.sort(),
44
+ rewrittenPaths: rewrittenPaths.sort()
45
+ };
46
+ }
47
+ function createGenerationResult(options) {
48
+ const createdApps = options.createdApps.map((app)=>createGeneratedAppDescriptor(options.packageScope, app));
49
+ return {
50
+ operation: options.operation,
51
+ workspaceRoot: options.workspaceRoot,
52
+ packageScope: options.packageScope,
53
+ packageSource: {
54
+ ...options.packageSource
55
+ },
56
+ createdApps,
57
+ createdPaths: [
58
+ ...options.createdPaths
59
+ ].sort(),
60
+ rewrittenPaths: [
61
+ ...options.rewrittenPaths
62
+ ].sort(),
63
+ assignedPorts: Object.fromEntries(createdApps.map((app)=>[
64
+ app.id,
65
+ app.port
66
+ ])),
67
+ moduleFederationNames: Object.fromEntries(createdApps.map((app)=>[
68
+ app.id,
69
+ app.moduleFederationName
70
+ ])),
71
+ effectApiPrefixes: Object.fromEntries(createdApps.filter((app)=>app.effectApiPrefix).map((app)=>[
72
+ app.id,
73
+ app.effectApiPrefix
74
+ ])),
75
+ generatedContractPath: GENERATED_CONTRACT_PATH,
76
+ warnings: options.warnings ?? []
77
+ };
78
+ }
79
+ function createGeneratedAppDescriptor(scope, app) {
80
+ return {
81
+ id: app.id,
82
+ directory: app.directory,
83
+ packageName: packageName(scope, app.packageSuffix),
84
+ packageSuffix: app.packageSuffix,
85
+ displayName: app.displayName,
86
+ kind: app.kind,
87
+ portEnv: app.portEnv,
88
+ port: app.port,
89
+ moduleFederationName: app.mfName,
90
+ ...app.exposes ? {
91
+ exposes: {
92
+ ...app.exposes
93
+ }
94
+ } : {},
95
+ ...appHasEffectApi(app) ? {
96
+ effectApiPrefix: app.effectApi.prefix
97
+ } : {}
98
+ };
99
+ }
100
+ function hashFile(filePath) {
101
+ return node_crypto.createHash('sha256').update(node_fs.readFileSync(filePath)).digest('hex');
102
+ }
103
+ export { createFileSnapshot, createGenerationResult, diffFileSnapshots };
@@ -0,0 +1,4 @@
1
+ import "node:module";
2
+ export { addUltramodernVertical, planUltramodernVertical } from "./add-vertical.js";
3
+ export { ultramodernWorkspaceVersions } from "./versions.js";
4
+ export { generateUltramodernWorkspace } from "./write-workspace.js";
@@ -0,0 +1,123 @@
1
+ import "node:module";
2
+ const commonLocaleMessages = {
3
+ cs: {
4
+ language: {
5
+ cs: 'Čeština',
6
+ en: 'Angličtina',
7
+ switcher: 'Jazyk'
8
+ },
9
+ routes: {
10
+ home: 'Domů'
11
+ },
12
+ seo: {
13
+ description: 'Route-owned UltraModern plocha s lokalizovaným SSR a frameworkem řízenými public metadata.'
14
+ }
15
+ },
16
+ en: {
17
+ language: {
18
+ cs: 'Czech',
19
+ en: 'English',
20
+ switcher: 'Language'
21
+ },
22
+ routes: {
23
+ home: 'Home'
24
+ },
25
+ seo: {
26
+ description: 'Route-owned UltraModern surface with localized SSR and framework-owned public metadata.'
27
+ }
28
+ }
29
+ };
30
+ const generatedLocaleResources = {
31
+ cs: {
32
+ shell: {
33
+ boundaries: {
34
+ toggle: 'zobrazit hranice týmů'
35
+ },
36
+ hero: {
37
+ cardOne: 'Přidejte první business vertical příkazem create <domain> --vertical, až ho opravdu potřebujete.',
38
+ cardOneKicker: 'Verticaly',
39
+ cardTwo: 'Plný markup, styly a lokalizovaný obsah se vykreslí před hydratací.',
40
+ cardTwoKicker: 'Vykreslení',
41
+ empty: 'Zatím nejsou připojené žádné MicroVerticaly.',
42
+ eyebrow: 'Shell SuperApp starter',
43
+ lede: 'Začněte s produkčně připraveným shellem. MicroVerticaly přidávejte až podle skutečných business domén.',
44
+ primary: 'Shell je připraven',
45
+ secondary: 'Přidejte vertical, až bude potřeba'
46
+ },
47
+ language: commonLocaleMessages.cs.language,
48
+ remoteUnavailable: 'Remote vertical je nedostupný',
49
+ remotes: {},
50
+ routes: {
51
+ home: commonLocaleMessages.cs.routes.home
52
+ },
53
+ seo: {
54
+ description: 'UltraModern shell SuperApp s lokalizovaným SSR, Module Federation a frameworkem řízenými public metadata.'
55
+ },
56
+ title: 'UltraModern Workspace'
57
+ }
58
+ },
59
+ en: {
60
+ shell: {
61
+ boundaries: {
62
+ toggle: 'show team boundaries'
63
+ },
64
+ hero: {
65
+ cardOne: 'Add the first business vertical with create <domain> --vertical when the product needs one.',
66
+ cardOneKicker: 'Verticals',
67
+ cardTwo: 'Full page markup, styles, and localized content render before hydration.',
68
+ cardTwoKicker: 'Rendering',
69
+ empty: 'No MicroVerticals are connected yet.',
70
+ eyebrow: 'Shell SuperApp starter',
71
+ lede: 'Start with a production-ready shell. Add MicroVerticals later for real business domains.',
72
+ primary: 'Shell ready',
73
+ secondary: 'Add a vertical when needed'
74
+ },
75
+ language: commonLocaleMessages.en.language,
76
+ remoteUnavailable: 'Remote vertical unavailable',
77
+ remotes: {},
78
+ routes: {
79
+ home: commonLocaleMessages.en.routes.home
80
+ },
81
+ seo: {
82
+ description: 'UltraModern shell SuperApp with localized SSR, Module Federation, and framework-owned public metadata.'
83
+ },
84
+ title: 'UltraModern Workspace'
85
+ }
86
+ }
87
+ };
88
+ const verticalLocaleCopy = {
89
+ cs: {
90
+ federatedSurface: 'Federovaná plocha vlastněná tímto verticalem.',
91
+ remoteUnavailable: 'Remote vertical je nedostupný',
92
+ routeSurface: 'Routovaná plocha vlastněná tímto verticalem.',
93
+ widgetBody: 'Vlastní routovanou plochu verticalu.'
94
+ },
95
+ en: {
96
+ federatedSurface: 'Federated surface owned by this vertical.',
97
+ remoteUnavailable: 'Remote vertical unavailable',
98
+ routeSurface: 'Route surface owned by this vertical.',
99
+ widgetBody: 'Owns a vertical route surface.'
100
+ }
101
+ };
102
+ const createFallbackLocaleMessages = (app, language)=>({
103
+ ...commonLocaleMessages[language],
104
+ federatedSurface: verticalLocaleCopy[language].federatedSurface,
105
+ remoteUnavailable: verticalLocaleCopy[language].remoteUnavailable,
106
+ role: app.domain ?? app.kind,
107
+ routeSurface: verticalLocaleCopy[language].routeSurface,
108
+ title: app.displayName,
109
+ widgetBody: verticalLocaleCopy[language].widgetBody
110
+ });
111
+ function createAppLocaleMessages(app, language) {
112
+ const domain = app.domain ?? app.id;
113
+ const messageKey = 'shell' === app.kind ? 'shell' : domain;
114
+ const messages = 'shell' === app.kind ? generatedLocaleResources[language].shell : createFallbackLocaleMessages(app, language);
115
+ return {
116
+ [messageKey]: messages
117
+ };
118
+ }
119
+ function createAppPublicLocaleMessages(app, language, remotes = []) {
120
+ if ('shell' !== app.kind) return createAppLocaleMessages(app, language);
121
+ return Object.assign({}, createAppLocaleMessages(app, language), ...remotes.map((remote)=>createAppLocaleMessages(remote, language)));
122
+ }
123
+ export { commonLocaleMessages, createAppLocaleMessages, createAppPublicLocaleMessages, createFallbackLocaleMessages, generatedLocaleResources };