@bleedingdev/modern-js-create 3.2.0-ultramodern.98 → 3.4.0-ultramodern.0

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 (194) 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/.agents/agent-reference-repos.json +24 -0
  124. package/template-workspace/.agents/rstackjs-agent-skills-LICENSE +21 -0
  125. package/template-workspace/.agents/skills/rsbuild-best-practices/SKILL.md +57 -0
  126. package/template-workspace/.agents/skills/rsdoctor-analysis/SKILL.md +96 -0
  127. package/template-workspace/.agents/skills/rsdoctor-analysis/references/command-map.md +113 -0
  128. package/template-workspace/.agents/skills/rsdoctor-analysis/references/common-analysis-patterns.md +190 -0
  129. package/template-workspace/.agents/skills/rsdoctor-analysis/references/install-rsdoctor-common.md +88 -0
  130. package/template-workspace/.agents/skills/rsdoctor-analysis/references/install-rsdoctor-rspack.md +138 -0
  131. package/template-workspace/.agents/skills/rsdoctor-analysis/references/install-rsdoctor-webpack.md +71 -0
  132. package/template-workspace/.agents/skills/rsdoctor-analysis/references/install-rsdoctor.md +39 -0
  133. package/template-workspace/.agents/skills/rsdoctor-analysis/references/rsdoctor-data-types.md +103 -0
  134. package/template-workspace/.agents/skills/rslib-best-practices/SKILL.md +58 -0
  135. package/template-workspace/.agents/skills/rslib-modern-package/SKILL.md +173 -0
  136. package/template-workspace/.agents/skills/rspack-best-practices/SKILL.md +70 -0
  137. package/template-workspace/.agents/skills/rspack-tracing/SKILL.md +75 -0
  138. package/template-workspace/.agents/skills/rspack-tracing/references/bottlenecks.md +47 -0
  139. package/template-workspace/.agents/skills/rspack-tracing/references/tracing-guide.md +38 -0
  140. package/template-workspace/.agents/skills/rspack-tracing/scripts/analyze_trace.js +184 -0
  141. package/template-workspace/.agents/skills/rstest-best-practices/SKILL.md +133 -0
  142. package/template-workspace/.agents/skills-lock.json +114 -0
  143. package/template-workspace/.codex/hooks.json +16 -0
  144. package/template-workspace/.github/renovate.json +29 -0
  145. package/template-workspace/.github/workflows/ultramodern-workspace-gates.yml.handlebars +67 -0
  146. package/template-workspace/.gitignore.handlebars +5 -0
  147. package/template-workspace/.mise.toml.handlebars +3 -0
  148. package/template-workspace/{AGENTS.md → AGENTS.md.handlebars} +20 -9
  149. package/template-workspace/README.md.handlebars +85 -14
  150. package/template-workspace/lefthook.yml +18 -4
  151. package/template-workspace/pnpm-workspace.yaml.handlebars +45 -0
  152. package/template-workspace/scripts/bootstrap-agent-skills.mjs +69 -75
  153. package/template-workspace/scripts/setup-agent-reference-repos.mjs +8 -6
  154. package/templates/app/shell-frame.tsx +49 -0
  155. package/templates/app/ultramodern-route-head.tsx.handlebars +142 -0
  156. package/templates/packages/shared-contracts-index.ts +466 -0
  157. package/templates/workspace-scripts/assert-mf-types.mjs.handlebars +69 -0
  158. package/templates/workspace-scripts/check-ultramodern-i18n-boundaries.mjs +9 -0
  159. package/templates/workspace-scripts/generate-public-surface-assets.mjs +529 -0
  160. package/templates/workspace-scripts/proof-cloudflare-version.mjs +125 -0
  161. package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +851 -0
  162. package/templates/workspace-scripts/ultramodern-performance-readiness.config.mjs +7 -0
  163. package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +223 -0
  164. package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +986 -0
  165. package/dist/index.js +0 -6625
  166. package/dist/types/ultramodern-workspace.d.ts +0 -31
  167. package/template/AGENTS.md +0 -23
  168. package/template/README.md +0 -105
  169. package/template/api/effect/index.ts.handlebars +0 -34
  170. package/template/api/lambda/hello.ts.handlebars +0 -6
  171. package/template/config/public/locales/cs/translation.json +0 -39
  172. package/template/config/public/locales/en/translation.json +0 -39
  173. package/template/lefthook.yml +0 -10
  174. package/template/modern.config.ts.handlebars +0 -71
  175. package/template/oxfmt.config.ts +0 -15
  176. package/template/oxlint.config.ts +0 -19
  177. package/template/package.json.handlebars +0 -66
  178. package/template/pnpm-workspace.yaml +0 -29
  179. package/template/postcss.config.mjs.handlebars +0 -6
  180. package/template/rstest.config.mts +0 -5
  181. package/template/scripts/bootstrap-agent-skills.mjs +0 -228
  182. package/template/scripts/check-i18n-strings.mjs +0 -94
  183. package/template/scripts/validate-ultramodern.mjs.handlebars +0 -538
  184. package/template/shared/effect/api.ts.handlebars +0 -17
  185. package/template/src/modern-app-env.d.ts +0 -3
  186. package/template/src/modern.runtime.ts.handlebars +0 -23
  187. package/template/src/routes/[lang]/page.tsx.handlebars +0 -211
  188. package/template/src/routes/index.css.handlebars +0 -129
  189. package/template/src/routes/layout.tsx.handlebars +0 -10
  190. package/template/tailwind.config.ts.handlebars +0 -10
  191. package/template/tests/tsconfig.json +0 -7
  192. package/template/tests/ultramodern.contract.test.ts.handlebars +0 -78
  193. package/template/tsconfig.json +0 -120
  194. package/template-workspace/pnpm-workspace.yaml +0 -35
@@ -0,0 +1,150 @@
1
+ import "node:module";
2
+ import { appI18nNamespace, remoteDependencyAlias, resolveRemoteRefs, shellApp } from "./descriptors.js";
3
+ import { readFileTemplate, renderFileTemplate } from "./fs-io.js";
4
+ import { packageName, tailwindPrefixForApp } from "./naming.js";
5
+ function createBoundaryDebugMetadata(scope, remotes = []) {
6
+ return {
7
+ appId: shellApp.id,
8
+ boundaries: [
9
+ shellApp,
10
+ ...remotes
11
+ ].map((app)=>({
12
+ appId: app.id,
13
+ label: app.displayName,
14
+ mfName: app.mfName,
15
+ ownerTeam: app.ownership.team,
16
+ packageName: packageName(scope, app.packageSuffix),
17
+ role: 'shell' === app.kind ? 'host' : 'vertical'
18
+ })),
19
+ schemaVersion: 1
20
+ };
21
+ }
22
+ function createAppEnvDts(app, remotes = []) {
23
+ const remoteModuleDeclarations = resolveRemoteRefs(app, remotes).flatMap((remote)=>Object.keys(remote.exposes ?? {}).filter((expose)=>'./Route' !== expose).map((expose)=>{
24
+ const moduleName = `${remoteDependencyAlias(remote)}/${expose.replace(/^\.\//u, '')}`;
25
+ return `declare module '${moduleName}' {
26
+ const Component: React.ComponentType<Record<string, never>>;
27
+ export default Component;
28
+ }
29
+ `;
30
+ })).join('\n');
31
+ const reactTypeReference = remoteModuleDeclarations ? "/// <reference types='react' />\n" : '';
32
+ const siteUrlDeclaration = 'declare const ULTRAMODERN_SITE_URL: string;';
33
+ return `${reactTypeReference}/// <reference types='@modern-js/app-tools/types' />
34
+
35
+ ${siteUrlDeclaration}
36
+ declare module '*.svg' {
37
+ const url: string;
38
+ export default url;
39
+ }
40
+ declare module '*.css';
41
+ ${remoteModuleDeclarations ? `\n${remoteModuleDeclarations}` : ''}`;
42
+ }
43
+ function createAppRuntimeConfig(app, scope, remotes = []) {
44
+ const pluginsConfig = 'shell' === app.kind ? ` plugins: [
45
+ ultramodernBoundaryDebuggerPlugin({
46
+ metadata: ${JSON.stringify(createBoundaryDebugMetadata(scope, remotes), null, 6).split('\n').join('\n ')},
47
+ }),
48
+ ],
49
+ ` : '';
50
+ return `import { defineRuntimeConfig } from '@modern-js/runtime';
51
+ ${'shell' === app.kind ? "import { ultramodernBoundaryDebuggerPlugin } from '@modern-js/runtime/boundary-debugger';\n" : ''}import { createInstance } from 'i18next';
52
+ import csResource from '../locales/cs/${appI18nNamespace(app)}.json';
53
+ import enResource from '../locales/en/${appI18nNamespace(app)}.json';
54
+ import { ultramodernRouteNamespace } from './routes/ultramodern-route-metadata';
55
+
56
+ type LocaleResource = string | { readonly [key: string]: LocaleResource };
57
+
58
+ const flattenLocaleResource = (
59
+ resource: LocaleResource,
60
+ prefix = '',
61
+ ): Record<string, string> => {
62
+ if (typeof resource === 'string') {
63
+ return prefix.length > 0 ? { [prefix]: resource } : {};
64
+ }
65
+
66
+ return Object.fromEntries(
67
+ Object.entries(resource).flatMap(([key, value]) => {
68
+ const nextKey = prefix.length > 0 ? \`\${prefix}.\${key}\` : key;
69
+ return typeof value === 'string'
70
+ ? [[nextKey, value]]
71
+ : Object.entries(flattenLocaleResource(value, nextKey));
72
+ }),
73
+ );
74
+ };
75
+
76
+ const i18nInstance = createInstance();
77
+ const resources = {
78
+ cs: { [ultramodernRouteNamespace]: flattenLocaleResource(csResource) },
79
+ en: { [ultramodernRouteNamespace]: flattenLocaleResource(enResource) },
80
+ } as const;
81
+
82
+ export default defineRuntimeConfig({
83
+ i18n: {
84
+ i18nInstance,
85
+ initOptions: {
86
+ defaultNS: ultramodernRouteNamespace,
87
+ fallbackLng: 'en',
88
+ interpolation: {
89
+ escapeValue: false,
90
+ },
91
+ ns: [ultramodernRouteNamespace, 'translation'],
92
+ resources,
93
+ supportedLngs: ['en', 'cs'],
94
+ },
95
+ },
96
+ ${pluginsConfig}
97
+ router: {
98
+ framework: 'tanstack',
99
+ },
100
+ });
101
+ `;
102
+ }
103
+ function createCssTokenImport(scope) {
104
+ return `@import '${packageName(scope, 'shared-design-tokens')}/tokens.css';\n`;
105
+ }
106
+ function createTailwindImport(prefix) {
107
+ return `@import 'tailwindcss' prefix(${prefix}) source(none);\n@source '..';\n`;
108
+ }
109
+ function createShellStyles(enableTailwind, scope) {
110
+ return `${enableTailwind ? createTailwindImport(tailwindPrefixForApp(shellApp)) : ''}${createCssTokenImport(scope)}`;
111
+ }
112
+ function createRemoteStyles(enableTailwind, scope, app) {
113
+ return `${enableTailwind ? createTailwindImport(tailwindPrefixForApp(app)) : ''}${createCssTokenImport(scope)}`;
114
+ }
115
+ function createAppStyles(enableTailwind, scope, app) {
116
+ return 'shell' === app.kind ? createShellStyles(enableTailwind, scope) : createRemoteStyles(enableTailwind, scope, app);
117
+ }
118
+ function createPostcssConfig() {
119
+ return `export default {
120
+ plugins: {
121
+ '@tailwindcss/postcss': {},
122
+ },
123
+ };
124
+ `;
125
+ }
126
+ function createTailwindConfig() {
127
+ return `import type { Config } from 'tailwindcss';
128
+
129
+ export default {} satisfies Config;
130
+ `;
131
+ }
132
+ function createSharedDesignTokensCss() {
133
+ return `@theme {
134
+ --color-um-accent: #2f8f68;
135
+ --color-um-canvas: #f1eadc;
136
+ --color-um-foreground: #133225;
137
+ --color-um-link: #166b4b;
138
+ --color-um-surface: #f6fbf7;
139
+ }
140
+ `;
141
+ }
142
+ function createRouteHeadModule(app) {
143
+ return renderFileTemplate('app/ultramodern-route-head.tsx', {
144
+ appDisplayNameJson: JSON.stringify(app.displayName)
145
+ });
146
+ }
147
+ function createShellFrameComponent() {
148
+ return readFileTemplate('app/shell-frame.tsx');
149
+ }
150
+ export { createAppEnvDts, createAppRuntimeConfig, createAppStyles, createBoundaryDebugMetadata, createCssTokenImport, createPostcssConfig, createRemoteStyles, createRouteHeadModule, createSharedDesignTokensCss, createShellFrameComponent, createShellStyles, createTailwindConfig, createTailwindImport };
@@ -0,0 +1,87 @@
1
+ import "node:module";
2
+ import node_path from "node:path";
3
+ import { addUltramodernVertical, generateUltramodernWorkspace, planUltramodernVertical } from "./public-api.js";
4
+ async function ultramodernCodeSmithAdapter(context, runtime) {
5
+ const config = context.config ?? {};
6
+ const mode = resolveMode(config);
7
+ const basePath = node_path.resolve(runtime?.outputPath ?? context.materials?.default?.basePath ?? process.cwd());
8
+ const modernVersion = config.modernVersion ?? 'latest';
9
+ const packageSource = resolvePackageSource(config);
10
+ const enableTailwind = config.enableTailwind ?? config.tailwind;
11
+ if (config.dryRun && 'vertical' !== mode) throw new Error('UltraModern CodeSmith dry-run is supported only in vertical mode.');
12
+ const name = await resolveName(context, config, mode);
13
+ const result = 'workspace' === mode ? generateUltramodernWorkspace({
14
+ targetDir: resolveTargetDir(basePath, config.targetDir, name),
15
+ packageName: name,
16
+ modernVersion,
17
+ enableTailwind,
18
+ overlays: config.overlays,
19
+ packageSource
20
+ }) : runVerticalMode({
21
+ workspaceRoot: resolveWorkspaceRoot(basePath, config.workspaceRoot),
22
+ name,
23
+ modernVersion,
24
+ enableTailwind,
25
+ overlays: config.overlays,
26
+ packageSource
27
+ }, Boolean(config.dryRun));
28
+ context.data ??= {};
29
+ context.data.ultramodernResult = result;
30
+ if (config.logResult) {
31
+ const logger = context.logger ?? runtime?.logger;
32
+ logger?.info?.(JSON.stringify(result, null, 2));
33
+ }
34
+ return result;
35
+ }
36
+ function resolveMode(config) {
37
+ if (void 0 === config.mode) return 'workspace';
38
+ if ('workspace' !== config.mode && 'vertical' !== config.mode) throw new Error(`Unsupported UltraModern CodeSmith mode "${String(config.mode)}". Use "workspace" or "vertical".`);
39
+ return config.mode;
40
+ }
41
+ async function resolveName(context, config, label) {
42
+ const configuredName = config.name ?? config.targetName ?? config.packageName;
43
+ if (configuredName) return configuredName;
44
+ const prompt = context.prompt ?? context.inquirer?.prompt;
45
+ if (!prompt) throw new Error(`Missing UltraModern ${label} name. Pass config.name for non-interactive CodeSmith usage.`);
46
+ const answer = await prompt([
47
+ {
48
+ type: 'input',
49
+ name: 'name',
50
+ message: `UltraModern ${label} name`
51
+ }
52
+ ]);
53
+ const promptedName = answer.name;
54
+ if ('string' != typeof promptedName || 0 === promptedName.length) throw new Error(`Missing UltraModern ${label} name.`);
55
+ return promptedName;
56
+ }
57
+ function resolveTargetDir(basePath, targetDir, name) {
58
+ return node_path.resolve(basePath, targetDir ?? name);
59
+ }
60
+ function resolveWorkspaceRoot(basePath, workspaceRoot) {
61
+ return node_path.resolve(basePath, workspaceRoot ?? '.');
62
+ }
63
+ function resolvePackageSource(config) {
64
+ const packageSource = {
65
+ ...config.packageSource ?? {},
66
+ ...config.packageSourceStrategy ? {
67
+ strategy: config.packageSourceStrategy
68
+ } : {},
69
+ ...config.modernPackageVersion ? {
70
+ modernPackageVersion: config.modernPackageVersion
71
+ } : {},
72
+ ...config.registry ? {
73
+ registry: config.registry
74
+ } : {},
75
+ ...config.aliasScope ? {
76
+ aliasScope: config.aliasScope
77
+ } : {},
78
+ ...config.aliasPackageNamePrefix ? {
79
+ aliasPackageNamePrefix: config.aliasPackageNamePrefix
80
+ } : {}
81
+ };
82
+ return Object.keys(packageSource).length > 0 ? packageSource : void 0;
83
+ }
84
+ function runVerticalMode(options, dryRun) {
85
+ return dryRun ? planUltramodernVertical(options) : addUltramodernVertical(options);
86
+ }
87
+ export default ultramodernCodeSmithAdapter;