@bleedingdev/modern-js-create 3.4.0-ultramodern.11 → 3.4.0-ultramodern.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -11
- package/dist/cjs/index.cjs +36 -3
- package/dist/cjs/locale/en.cjs +10 -0
- package/dist/cjs/locale/zh.cjs +10 -0
- package/dist/cjs/ultramodern-tooling/commands.cjs +185 -0
- package/dist/cjs/ultramodern-tooling/config.cjs +248 -0
- package/dist/cjs/ultramodern-workspace/add-vertical.cjs +39 -18
- package/dist/cjs/ultramodern-workspace/bridge-config.cjs +327 -0
- package/dist/cjs/ultramodern-workspace/codesmith.cjs +1 -0
- package/dist/cjs/ultramodern-workspace/contracts.cjs +119 -653
- package/dist/cjs/ultramodern-workspace/descriptors.cjs +4 -0
- package/dist/cjs/ultramodern-workspace/generation-result.cjs +1 -1
- package/dist/cjs/ultramodern-workspace/index.cjs +4 -0
- package/dist/cjs/ultramodern-workspace/mf-validation.cjs +572 -0
- package/dist/cjs/ultramodern-workspace/module-federation.cjs +14 -0
- package/dist/cjs/ultramodern-workspace/package-json.cjs +26 -12
- package/dist/cjs/ultramodern-workspace/public-api.cjs +4 -0
- package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +74 -44
- package/dist/cjs/ultramodern-workspace/write-workspace.cjs +37 -8
- package/dist/esm/index.js +36 -3
- package/dist/esm/locale/en.js +10 -0
- package/dist/esm/locale/zh.js +10 -0
- package/dist/esm/ultramodern-tooling/commands.js +132 -0
- package/dist/esm/ultramodern-tooling/config.js +196 -0
- package/dist/esm/ultramodern-workspace/add-vertical.js +39 -21
- package/dist/esm/ultramodern-workspace/bridge-config.js +270 -0
- package/dist/esm/ultramodern-workspace/codesmith.js +1 -0
- package/dist/esm/ultramodern-workspace/contracts.js +122 -608
- package/dist/esm/ultramodern-workspace/descriptors.js +2 -1
- package/dist/esm/ultramodern-workspace/generation-result.js +2 -2
- package/dist/esm/ultramodern-workspace/index.js +1 -0
- package/dist/esm/ultramodern-workspace/mf-validation.js +517 -0
- package/dist/esm/ultramodern-workspace/module-federation.js +14 -0
- package/dist/esm/ultramodern-workspace/package-json.js +26 -12
- package/dist/esm/ultramodern-workspace/public-api.js +1 -0
- package/dist/esm/ultramodern-workspace/workspace-scripts.js +75 -27
- package/dist/esm/ultramodern-workspace/write-workspace.js +38 -12
- package/dist/esm-node/index.js +36 -3
- package/dist/esm-node/locale/en.js +10 -0
- package/dist/esm-node/locale/zh.js +10 -0
- package/dist/esm-node/ultramodern-tooling/commands.js +133 -0
- package/dist/esm-node/ultramodern-tooling/config.js +197 -0
- package/dist/esm-node/ultramodern-workspace/add-vertical.js +39 -21
- package/dist/esm-node/ultramodern-workspace/bridge-config.js +271 -0
- package/dist/esm-node/ultramodern-workspace/codesmith.js +1 -0
- package/dist/esm-node/ultramodern-workspace/contracts.js +122 -608
- package/dist/esm-node/ultramodern-workspace/descriptors.js +2 -1
- package/dist/esm-node/ultramodern-workspace/generation-result.js +2 -2
- package/dist/esm-node/ultramodern-workspace/index.js +1 -0
- package/dist/esm-node/ultramodern-workspace/mf-validation.js +518 -0
- package/dist/esm-node/ultramodern-workspace/module-federation.js +14 -0
- package/dist/esm-node/ultramodern-workspace/package-json.js +26 -12
- package/dist/esm-node/ultramodern-workspace/public-api.js +1 -0
- package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +75 -27
- package/dist/esm-node/ultramodern-workspace/write-workspace.js +38 -12
- package/dist/types/locale/en.d.ts +10 -0
- package/dist/types/locale/index.d.ts +20 -0
- package/dist/types/locale/zh.d.ts +10 -0
- package/dist/types/ultramodern-tooling/commands.d.ts +1 -0
- package/dist/types/ultramodern-tooling/config.d.ts +43 -0
- package/dist/types/ultramodern-workspace/add-vertical.d.ts +5 -2
- package/dist/types/ultramodern-workspace/bridge-config.d.ts +64 -0
- package/dist/types/ultramodern-workspace/codesmith.d.ts +1 -0
- package/dist/types/ultramodern-workspace/contracts.d.ts +2 -17
- package/dist/types/ultramodern-workspace/descriptors.d.ts +1 -0
- package/dist/types/ultramodern-workspace/index.d.ts +2 -0
- package/dist/types/ultramodern-workspace/mf-validation.d.ts +27 -0
- package/dist/types/ultramodern-workspace/package-json.d.ts +4 -3
- package/dist/types/ultramodern-workspace/public-api.d.ts +2 -0
- package/dist/types/ultramodern-workspace/types.d.ts +2 -0
- package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +1 -7
- package/dist/types/ultramodern-workspace/write-workspace.d.ts +4 -2
- package/package.json +3 -3
- package/template-workspace/{.agents → .codex}/skills-lock.json +12 -12
- package/template-workspace/.gitignore.handlebars +3 -0
- package/template-workspace/AGENTS.md.handlebars +11 -5
- package/template-workspace/README.md.handlebars +15 -12
- package/template-workspace/oxfmt.config.ts +1 -0
- package/template-workspace/oxlint.config.ts +1 -0
- package/template-workspace/scripts/bootstrap-agent-skills.mjs +77 -67
- package/templates/workspace-scripts/assert-mf-types.mjs.handlebars +56 -3
- package/templates/workspace-scripts/generate-public-surface-assets.mjs +239 -4
- package/templates/workspace-scripts/proof-cloudflare-version.mjs +282 -4
- package/templates/workspace-scripts/ultramodern-performance-readiness.mjs +172 -1
- package/templates/workspace-scripts/ultramodern-typecheck.mjs +4 -2
- package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +783 -26
- /package/template-workspace/{.agents → .codex}/rstackjs-agent-skills-LICENSE +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsbuild-best-practices/SKILL.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/SKILL.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/command-map.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/common-analysis-patterns.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor-common.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor-rspack.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor-webpack.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/install-rsdoctor.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rsdoctor-analysis/references/rsdoctor-data-types.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rslib-best-practices/SKILL.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rslib-modern-package/SKILL.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rspack-best-practices/SKILL.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/SKILL.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/references/bottlenecks.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/references/tracing-guide.md +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rspack-tracing/scripts/analyze_trace.js +0 -0
- /package/template-workspace/{.agents → .codex}/skills/rstest-best-practices/SKILL.md +0 -0
|
@@ -126,7 +126,7 @@ const effectDiagnostics = [
|
|
|
126
126
|
'unnecessaryPipe',
|
|
127
127
|
'unnecessaryPipeChain'
|
|
128
128
|
];
|
|
129
|
-
function appDependencies(scope, packageSource, app, remotes = []) {
|
|
129
|
+
function appDependencies(scope, packageSource, app, remotes = [], bridge) {
|
|
130
130
|
const dependencies = {
|
|
131
131
|
'@modern-js/plugin-tanstack': (0, external_ultramodern_package_source_cjs_namespaceObject.modernPackageSpecifier)('@modern-js/plugin-tanstack', packageSource),
|
|
132
132
|
'@modern-js/plugin-i18n': (0, external_ultramodern_package_source_cjs_namespaceObject.modernPackageSpecifier)('@modern-js/plugin-i18n', packageSource),
|
|
@@ -143,6 +143,7 @@ function appDependencies(scope, packageSource, app, remotes = []) {
|
|
|
143
143
|
'react-dom': external_versions_cjs_namespaceObject.REACT_DOM_VERSION,
|
|
144
144
|
'react-router': external_versions_cjs_namespaceObject.REACT_ROUTER_VERSION
|
|
145
145
|
};
|
|
146
|
+
for (const dependency of bridge?.dependencies ?? [])dependencies[dependency] = external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION;
|
|
146
147
|
if ('shell' === app.kind) {
|
|
147
148
|
dependencies['@modern-js/plugin-bff'] = (0, external_ultramodern_package_source_cjs_namespaceObject.modernPackageSpecifier)('@modern-js/plugin-bff', packageSource);
|
|
148
149
|
for (const remote of (0, external_descriptors_cjs_namespaceObject.verticalEffectApps)(remotes))dependencies[(0, external_naming_cjs_namespaceObject.packageName)(scope, remote.packageSuffix)] = external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION;
|
|
@@ -169,12 +170,28 @@ function appDevDependencies(packageSource, enableTailwind) {
|
|
|
169
170
|
wrangler: external_versions_cjs_namespaceObject.WRANGLER_VERSION
|
|
170
171
|
};
|
|
171
172
|
}
|
|
172
|
-
function createRootPackageJson(scope, packageSource, remotes = []) {
|
|
173
|
+
function createRootPackageJson(scope, packageSource, remotes = [], bridge) {
|
|
173
174
|
const shellFilter = `--filter ${(0, external_naming_cjs_namespaceObject.packageName)(scope, external_descriptors_cjs_namespaceObject.shellApp.packageSuffix)}`;
|
|
174
175
|
const remoteFilters = remotes.map((remote)=>`--filter ${(0, external_naming_cjs_namespaceObject.packageName)(scope, remote.packageSuffix)}`);
|
|
175
176
|
const remoteBuildPrefix = remotes.length > 0 ? 'ULTRAMODERN_ZEPHYR=false pnpm -r --filter "./verticals/*" run build && ' : '';
|
|
176
177
|
const remoteCloudflareBuildPrefix = remotes.length > 0 ? 'pnpm -r --filter "./verticals/*" run cloudflare:build && ' : '';
|
|
177
178
|
const remoteCloudflareDeployPrefix = remotes.length > 0 ? 'pnpm -r --filter "./verticals/*" run cloudflare:deploy && ' : '';
|
|
179
|
+
const generatedPackageTypecheck = 'pnpm -r --filter "./apps/*" --filter "./verticals/*" --filter "./packages/*" run typecheck';
|
|
180
|
+
const typecheck = bridge ? generatedPackageTypecheck : "node ./scripts/ultramodern-typecheck.mjs --build tsconfig.json";
|
|
181
|
+
const bridgeScripts = bridge ? {
|
|
182
|
+
...Object.fromEntries(bridge.gates.map((gate)=>[
|
|
183
|
+
`bridge:${gate.name}`,
|
|
184
|
+
`${gate.cwd ? `cd ${gate.cwd} && ` : ''}${gate.command}`
|
|
185
|
+
])),
|
|
186
|
+
'bridge:check': bridge.gates.map((gate)=>`pnpm run bridge:${gate.name}`).join(' && ')
|
|
187
|
+
} : {};
|
|
188
|
+
const bridgeCheck = bridge ? ' && pnpm bridge:check' : '';
|
|
189
|
+
const workspacePackages = [
|
|
190
|
+
'apps/*',
|
|
191
|
+
'verticals/*',
|
|
192
|
+
'packages/*',
|
|
193
|
+
...bridge?.workspacePackages.map((entry)=>entry.pattern) ?? []
|
|
194
|
+
];
|
|
178
195
|
return {
|
|
179
196
|
private: true,
|
|
180
197
|
name: scope,
|
|
@@ -196,7 +213,7 @@ function createRootPackageJson(scope, packageSource, remotes = []) {
|
|
|
196
213
|
'format:check': "oxfmt --check . '!repos/**'",
|
|
197
214
|
lint: 'oxlint apps verticals packages',
|
|
198
215
|
'lint:fix': 'oxlint apps verticals packages --fix',
|
|
199
|
-
typecheck
|
|
216
|
+
typecheck,
|
|
200
217
|
'cloudflare:build': `${remoteCloudflareBuildPrefix}pnpm --filter "./apps/shell-super-app" run cloudflare:build && pnpm mf:types`,
|
|
201
218
|
'cloudflare:deploy': `${remoteCloudflareDeployPrefix}pnpm --filter "./apps/shell-super-app" run cloudflare:deploy`,
|
|
202
219
|
'cloudflare:proof': "node ./scripts/proof-cloudflare-version.mjs --out .codex/reports/cloudflare-version-proof/public-url-proof.json",
|
|
@@ -208,18 +225,15 @@ function createRootPackageJson(scope, packageSource, remotes = []) {
|
|
|
208
225
|
'performance:readiness': "node ./scripts/ultramodern-performance-readiness.mjs",
|
|
209
226
|
'contract:check': "node ./scripts/validate-ultramodern-workspace.mjs",
|
|
210
227
|
'i18n:boundaries': "node ./scripts/check-ultramodern-i18n-boundaries.mjs",
|
|
228
|
+
...bridgeScripts,
|
|
211
229
|
postinstall: "oxfmt . '!repos/**' && node ./scripts/bootstrap-agent-skills.mjs --postinstall",
|
|
212
|
-
check:
|
|
230
|
+
check: `pnpm format:check && pnpm lint && pnpm typecheck && pnpm skills:check && pnpm i18n:boundaries && pnpm contract:check && pnpm performance:readiness${bridgeCheck}`
|
|
213
231
|
},
|
|
214
232
|
engines: {
|
|
215
233
|
node: '>=26',
|
|
216
234
|
pnpm: '>=11'
|
|
217
235
|
},
|
|
218
|
-
workspaces:
|
|
219
|
-
'apps/*',
|
|
220
|
-
'verticals/*',
|
|
221
|
-
'packages/*'
|
|
222
|
-
],
|
|
236
|
+
workspaces: workspacePackages,
|
|
223
237
|
modernjs: {
|
|
224
238
|
preset: 'presetUltramodern',
|
|
225
239
|
workspace: 'ultramodern-superapp',
|
|
@@ -227,7 +241,7 @@ function createRootPackageJson(scope, packageSource, remotes = []) {
|
|
|
227
241
|
ownership: './topology/ownership.json',
|
|
228
242
|
packageSource: {
|
|
229
243
|
strategy: packageSource.strategy,
|
|
230
|
-
config: './.modernjs/ultramodern
|
|
244
|
+
config: './.modernjs/ultramodern.json#packageSource'
|
|
231
245
|
}
|
|
232
246
|
},
|
|
233
247
|
devDependencies: {
|
|
@@ -385,7 +399,7 @@ function createRootTsConfig(apps = []) {
|
|
|
385
399
|
]
|
|
386
400
|
};
|
|
387
401
|
}
|
|
388
|
-
function createAppPackage(scope, app, packageSource, enableTailwind, remotes = []) {
|
|
402
|
+
function createAppPackage(scope, app, packageSource, enableTailwind, remotes = [], bridge) {
|
|
389
403
|
const publicSurfaceBuildCommand = (0, external_public_surface_cjs_namespaceObject.createPublicSurfaceGenerationCommand)(app, 'dist');
|
|
390
404
|
const publicSurfaceCloudflareBuildCommand = (0, external_public_surface_cjs_namespaceObject.createPublicSurfaceGenerationCommand)(app, 'dist');
|
|
391
405
|
const publicSurfaceCloudflareOutputCommand = (0, external_public_surface_cjs_namespaceObject.createPublicSurfaceGenerationCommand)(app, 'cloudflare');
|
|
@@ -417,7 +431,7 @@ function createAppPackage(scope, app, packageSource, enableTailwind, remotes = [
|
|
|
417
431
|
} : {}
|
|
418
432
|
},
|
|
419
433
|
'zephyr:dependencies': createZephyrDependencies(scope, app, remotes),
|
|
420
|
-
dependencies: appDependencies(scope, packageSource, app, remotes),
|
|
434
|
+
dependencies: appDependencies(scope, packageSource, app, remotes, bridge),
|
|
421
435
|
devDependencies: appDevDependencies(packageSource, enableTailwind)
|
|
422
436
|
};
|
|
423
437
|
if ((0, external_descriptors_cjs_namespaceObject.appHasEffectApi)(app)) Object.assign(packageExports, {
|
|
@@ -30,16 +30,20 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
31
|
addUltramodernVertical: ()=>external_add_vertical_cjs_namespaceObject.addUltramodernVertical,
|
|
32
32
|
generateUltramodernWorkspace: ()=>external_write_workspace_cjs_namespaceObject.generateUltramodernWorkspace,
|
|
33
|
+
normalizeUltramodernBridgeConfig: ()=>external_bridge_config_cjs_namespaceObject.normalizeUltramodernBridgeConfig,
|
|
33
34
|
planUltramodernVertical: ()=>external_add_vertical_cjs_namespaceObject.planUltramodernVertical
|
|
34
35
|
});
|
|
35
36
|
const external_add_vertical_cjs_namespaceObject = require("./add-vertical.cjs");
|
|
37
|
+
const external_bridge_config_cjs_namespaceObject = require("./bridge-config.cjs");
|
|
36
38
|
const external_write_workspace_cjs_namespaceObject = require("./write-workspace.cjs");
|
|
37
39
|
exports.addUltramodernVertical = __webpack_exports__.addUltramodernVertical;
|
|
38
40
|
exports.generateUltramodernWorkspace = __webpack_exports__.generateUltramodernWorkspace;
|
|
41
|
+
exports.normalizeUltramodernBridgeConfig = __webpack_exports__.normalizeUltramodernBridgeConfig;
|
|
39
42
|
exports.planUltramodernVertical = __webpack_exports__.planUltramodernVertical;
|
|
40
43
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
41
44
|
"addUltramodernVertical",
|
|
42
45
|
"generateUltramodernWorkspace",
|
|
46
|
+
"normalizeUltramodernBridgeConfig",
|
|
43
47
|
"planUltramodernVertical"
|
|
44
48
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
45
49
|
Object.defineProperty(exports, '__esModule', {
|
|
@@ -28,13 +28,7 @@ var __webpack_require__ = {};
|
|
|
28
28
|
var __webpack_exports__ = {};
|
|
29
29
|
__webpack_require__.r(__webpack_exports__);
|
|
30
30
|
__webpack_require__.d(__webpack_exports__, {
|
|
31
|
-
createAssertMfTypesScript: ()=>createAssertMfTypesScript,
|
|
32
|
-
createCloudflareProofHelperScript: ()=>createCloudflareProofHelperScript,
|
|
33
|
-
createCloudflareVersionProofScript: ()=>createCloudflareVersionProofScript,
|
|
34
31
|
createPerformanceReadinessConfigScript: ()=>createPerformanceReadinessConfigScript,
|
|
35
|
-
createPerformanceReadinessScript: ()=>createPerformanceReadinessScript,
|
|
36
|
-
createPublicSurfaceAssetsScript: ()=>createPublicSurfaceAssetsScript,
|
|
37
|
-
createUltramodernTypecheckScript: ()=>createUltramodernTypecheckScript,
|
|
38
32
|
createWorkspaceI18nBoundaryValidationScript: ()=>createWorkspaceI18nBoundaryValidationScript,
|
|
39
33
|
createWorkspaceValidationScript: ()=>createWorkspaceValidationScript,
|
|
40
34
|
writeGeneratedWorkspaceScripts: ()=>writeGeneratedWorkspaceScripts
|
|
@@ -48,10 +42,73 @@ const external_policy_cjs_namespaceObject = require("./policy.cjs");
|
|
|
48
42
|
const external_public_surface_cjs_namespaceObject = require("./public-surface.cjs");
|
|
49
43
|
const external_routes_cjs_namespaceObject = require("./routes.cjs");
|
|
50
44
|
const external_versions_cjs_namespaceObject = require("./versions.cjs");
|
|
51
|
-
function
|
|
52
|
-
|
|
53
|
-
|
|
45
|
+
function createToolWrapperScript(command, extraArgs = []) {
|
|
46
|
+
const commandJson = JSON.stringify(command);
|
|
47
|
+
const extraArgsJson = JSON.stringify(extraArgs);
|
|
48
|
+
return `#!/usr/bin/env node
|
|
49
|
+
import { spawnSync } from 'node:child_process';
|
|
50
|
+
import path from 'node:path';
|
|
51
|
+
import { fileURLToPath } from 'node:url';
|
|
52
|
+
|
|
53
|
+
const createBin = process.env.ULTRAMODERN_CREATE_BIN;
|
|
54
|
+
const forwardedArgs = process.argv.slice(2);
|
|
55
|
+
const workspaceRoot =
|
|
56
|
+
process.env.ULTRAMODERN_WORKSPACE_ROOT ??
|
|
57
|
+
path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
|
|
58
|
+
const ultramodernArgs = ['ultramodern', ${commandJson}, ...${extraArgsJson}, ...forwardedArgs];
|
|
59
|
+
const result = createBin
|
|
60
|
+
? spawnSync(process.execPath, [createBin, ...ultramodernArgs], {
|
|
61
|
+
env: { ...process.env, ULTRAMODERN_WORKSPACE_ROOT: workspaceRoot },
|
|
62
|
+
stdio: 'inherit',
|
|
63
|
+
})
|
|
64
|
+
: spawnSync('modern-js-create', ultramodernArgs, {
|
|
65
|
+
env: { ...process.env, ULTRAMODERN_WORKSPACE_ROOT: workspaceRoot },
|
|
66
|
+
shell: process.platform === 'win32',
|
|
67
|
+
stdio: 'inherit',
|
|
54
68
|
});
|
|
69
|
+
|
|
70
|
+
if (result.error) {
|
|
71
|
+
console.error(result.error.message);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
process.exit(result.status ?? 1);
|
|
76
|
+
`;
|
|
77
|
+
}
|
|
78
|
+
function createSkillsToolWrapperScript() {
|
|
79
|
+
return `#!/usr/bin/env node
|
|
80
|
+
import { spawnSync } from 'node:child_process';
|
|
81
|
+
import path from 'node:path';
|
|
82
|
+
import { fileURLToPath } from 'node:url';
|
|
83
|
+
|
|
84
|
+
const createBin = process.env.ULTRAMODERN_CREATE_BIN;
|
|
85
|
+
const forwardedArgs = process.argv.slice(2);
|
|
86
|
+
const workspaceRoot =
|
|
87
|
+
process.env.ULTRAMODERN_WORKSPACE_ROOT ??
|
|
88
|
+
path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..');
|
|
89
|
+
const checkOnly = forwardedArgs.includes('--check');
|
|
90
|
+
const skillArgs = checkOnly
|
|
91
|
+
? ['skills', 'check', ...forwardedArgs.filter(arg => arg !== '--check')]
|
|
92
|
+
: ['skills', 'install', ...forwardedArgs];
|
|
93
|
+
const ultramodernArgs = ['ultramodern', ...skillArgs];
|
|
94
|
+
const result = createBin
|
|
95
|
+
? spawnSync(process.execPath, [createBin, ...ultramodernArgs], {
|
|
96
|
+
env: { ...process.env, ULTRAMODERN_WORKSPACE_ROOT: workspaceRoot },
|
|
97
|
+
stdio: 'inherit',
|
|
98
|
+
})
|
|
99
|
+
: spawnSync('modern-js-create', ultramodernArgs, {
|
|
100
|
+
env: { ...process.env, ULTRAMODERN_WORKSPACE_ROOT: workspaceRoot },
|
|
101
|
+
shell: process.platform === 'win32',
|
|
102
|
+
stdio: 'inherit',
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
if (result.error) {
|
|
106
|
+
console.error(result.error.message);
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
process.exit(result.status ?? 1);
|
|
111
|
+
`;
|
|
55
112
|
}
|
|
56
113
|
function createWorkspaceValidationScript(scope, enableTailwind, remotes = []) {
|
|
57
114
|
const verticals = remotes.filter(external_descriptors_cjs_namespaceObject.appHasEffectApi).map((remote)=>({
|
|
@@ -105,53 +162,26 @@ function createWorkspaceValidationScript(scope, enableTailwind, remotes = []) {
|
|
|
105
162
|
function createWorkspaceI18nBoundaryValidationScript() {
|
|
106
163
|
return (0, external_fs_io_cjs_namespaceObject.readFileTemplate)("workspace-scripts/check-ultramodern-i18n-boundaries.mjs");
|
|
107
164
|
}
|
|
108
|
-
function createPublicSurfaceAssetsScript() {
|
|
109
|
-
return (0, external_fs_io_cjs_namespaceObject.readFileTemplate)("workspace-scripts/generate-public-surface-assets.mjs");
|
|
110
|
-
}
|
|
111
|
-
function createCloudflareProofHelperScript() {
|
|
112
|
-
return (0, external_fs_io_cjs_namespaceObject.readFileTemplate)("workspace-scripts/ultramodern-cloudflare-proof.mjs");
|
|
113
|
-
}
|
|
114
|
-
function createCloudflareVersionProofScript() {
|
|
115
|
-
return (0, external_fs_io_cjs_namespaceObject.readFileTemplate)("workspace-scripts/proof-cloudflare-version.mjs");
|
|
116
|
-
}
|
|
117
165
|
function createPerformanceReadinessConfigScript() {
|
|
118
166
|
return (0, external_fs_io_cjs_namespaceObject.readFileTemplate)("workspace-scripts/ultramodern-performance-readiness.config.mjs");
|
|
119
167
|
}
|
|
120
|
-
function
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
function createUltramodernTypecheckScript() {
|
|
124
|
-
return (0, external_fs_io_cjs_namespaceObject.readFileTemplate)("workspace-scripts/ultramodern-typecheck.mjs");
|
|
125
|
-
}
|
|
126
|
-
function writeGeneratedWorkspaceScripts(targetDir, scope, enableTailwind, remotes = []) {
|
|
127
|
-
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/assert-mf-types.mjs", createAssertMfTypesScript(remotes));
|
|
128
|
-
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/validate-ultramodern-workspace.mjs", createWorkspaceValidationScript(scope, enableTailwind, remotes));
|
|
168
|
+
function writeGeneratedWorkspaceScripts(targetDir, _scope, _enableTailwind, _remotes = []) {
|
|
169
|
+
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/assert-mf-types.mjs", createToolWrapperScript('mf-types'));
|
|
170
|
+
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/validate-ultramodern-workspace.mjs", createToolWrapperScript('validate'));
|
|
129
171
|
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/check-ultramodern-i18n-boundaries.mjs", createWorkspaceI18nBoundaryValidationScript());
|
|
130
|
-
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/generate-public-surface-assets.mjs",
|
|
131
|
-
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/
|
|
132
|
-
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/proof-cloudflare-version.mjs", createCloudflareVersionProofScript());
|
|
172
|
+
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/generate-public-surface-assets.mjs", createToolWrapperScript('public-surface'));
|
|
173
|
+
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/proof-cloudflare-version.mjs", createToolWrapperScript('cloudflare-proof'));
|
|
133
174
|
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/ultramodern-performance-readiness.config.mjs", createPerformanceReadinessConfigScript());
|
|
134
|
-
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/ultramodern-performance-readiness.mjs",
|
|
135
|
-
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/ultramodern-typecheck.mjs",
|
|
175
|
+
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/ultramodern-performance-readiness.mjs", createToolWrapperScript('performance-readiness'));
|
|
176
|
+
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/ultramodern-typecheck.mjs", createToolWrapperScript('typecheck'));
|
|
177
|
+
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/bootstrap-agent-skills.mjs", createSkillsToolWrapperScript());
|
|
136
178
|
}
|
|
137
|
-
exports.createAssertMfTypesScript = __webpack_exports__.createAssertMfTypesScript;
|
|
138
|
-
exports.createCloudflareProofHelperScript = __webpack_exports__.createCloudflareProofHelperScript;
|
|
139
|
-
exports.createCloudflareVersionProofScript = __webpack_exports__.createCloudflareVersionProofScript;
|
|
140
179
|
exports.createPerformanceReadinessConfigScript = __webpack_exports__.createPerformanceReadinessConfigScript;
|
|
141
|
-
exports.createPerformanceReadinessScript = __webpack_exports__.createPerformanceReadinessScript;
|
|
142
|
-
exports.createPublicSurfaceAssetsScript = __webpack_exports__.createPublicSurfaceAssetsScript;
|
|
143
|
-
exports.createUltramodernTypecheckScript = __webpack_exports__.createUltramodernTypecheckScript;
|
|
144
180
|
exports.createWorkspaceI18nBoundaryValidationScript = __webpack_exports__.createWorkspaceI18nBoundaryValidationScript;
|
|
145
181
|
exports.createWorkspaceValidationScript = __webpack_exports__.createWorkspaceValidationScript;
|
|
146
182
|
exports.writeGeneratedWorkspaceScripts = __webpack_exports__.writeGeneratedWorkspaceScripts;
|
|
147
183
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
148
|
-
"createAssertMfTypesScript",
|
|
149
|
-
"createCloudflareProofHelperScript",
|
|
150
|
-
"createCloudflareVersionProofScript",
|
|
151
184
|
"createPerformanceReadinessConfigScript",
|
|
152
|
-
"createPerformanceReadinessScript",
|
|
153
|
-
"createPublicSurfaceAssetsScript",
|
|
154
|
-
"createUltramodernTypecheckScript",
|
|
155
185
|
"createWorkspaceI18nBoundaryValidationScript",
|
|
156
186
|
"createWorkspaceValidationScript",
|
|
157
187
|
"writeGeneratedWorkspaceScripts"
|
|
@@ -37,6 +37,7 @@ var __webpack_require__ = {};
|
|
|
37
37
|
var __webpack_exports__ = {};
|
|
38
38
|
__webpack_require__.r(__webpack_exports__);
|
|
39
39
|
__webpack_require__.d(__webpack_exports__, {
|
|
40
|
+
createCompactUltramodernConfig: ()=>createCompactUltramodernConfig,
|
|
40
41
|
generateUltramodernWorkspace: ()=>generateUltramodernWorkspace,
|
|
41
42
|
writeApp: ()=>writeApp,
|
|
42
43
|
writeSharedPackages: ()=>writeSharedPackages
|
|
@@ -44,6 +45,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
44
45
|
const external_node_fs_namespaceObject = require("node:fs");
|
|
45
46
|
var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
|
|
46
47
|
const external_app_files_cjs_namespaceObject = require("./app-files.cjs");
|
|
48
|
+
const external_bridge_config_cjs_namespaceObject = require("./bridge-config.cjs");
|
|
47
49
|
const external_contracts_cjs_namespaceObject = require("./contracts.cjs");
|
|
48
50
|
const external_demo_components_cjs_namespaceObject = require("./demo-components.cjs");
|
|
49
51
|
const external_descriptors_cjs_namespaceObject = require("./descriptors.cjs");
|
|
@@ -59,13 +61,13 @@ const external_package_source_cjs_namespaceObject = require("./package-source.cj
|
|
|
59
61
|
const external_public_surface_cjs_namespaceObject = require("./public-surface.cjs");
|
|
60
62
|
const external_versions_cjs_namespaceObject = require("./versions.cjs");
|
|
61
63
|
const external_workspace_scripts_cjs_namespaceObject = require("./workspace-scripts.cjs");
|
|
62
|
-
function writeApp(targetDir, scope, app, packageSource, enableTailwind, remotes = []) {
|
|
64
|
+
function writeApp(targetDir, scope, app, packageSource, enableTailwind, remotes = [], bridge) {
|
|
63
65
|
const resolvedApp = 'shell' === app.kind ? (0, external_descriptors_cjs_namespaceObject.createShellHost)(remotes) : app;
|
|
64
66
|
const publicWeb = (0, external_public_surface_cjs_namespaceObject.createPublicWebAppArtifacts)(resolvedApp);
|
|
65
67
|
const writeAppFile = (relativePath, content)=>{
|
|
66
68
|
(0, external_fs_io_cjs_namespaceObject.writeFile)(targetDir, `${resolvedApp.directory}/${relativePath}`, content);
|
|
67
69
|
};
|
|
68
|
-
(0, external_fs_io_cjs_namespaceObject.writeJson)(targetDir, `${resolvedApp.directory}/package.json`, (0, external_package_json_cjs_namespaceObject.createAppPackage)(scope, resolvedApp, packageSource, enableTailwind, remotes));
|
|
70
|
+
(0, external_fs_io_cjs_namespaceObject.writeJson)(targetDir, `${resolvedApp.directory}/package.json`, (0, external_package_json_cjs_namespaceObject.createAppPackage)(scope, resolvedApp, packageSource, enableTailwind, remotes, bridge));
|
|
69
71
|
(0, external_fs_io_cjs_namespaceObject.writeJson)(targetDir, `${resolvedApp.directory}/tsconfig.json`, (0, external_package_json_cjs_namespaceObject.createAppTsConfig)(resolvedApp, remotes));
|
|
70
72
|
(0, external_fs_io_cjs_namespaceObject.writeJson)(targetDir, `${resolvedApp.directory}/tsconfig.mf-types.json`, (0, external_package_json_cjs_namespaceObject.createAppMfTypesTsConfig)(resolvedApp));
|
|
71
73
|
(0, external_fs_io_cjs_namespaceObject.writeFile)(targetDir, `${resolvedApp.directory}/src/modern-app-env.d.ts`, (0, external_app_files_cjs_namespaceObject.createAppEnvDts)(resolvedApp, remotes));
|
|
@@ -124,10 +126,36 @@ function writeSharedPackages(targetDir, scope) {
|
|
|
124
126
|
`);
|
|
125
127
|
(0, external_fs_io_cjs_namespaceObject.writeFile)(targetDir, 'packages/shared-design-tokens/src/tokens.css', (0, external_app_files_cjs_namespaceObject.createSharedDesignTokensCss)());
|
|
126
128
|
}
|
|
129
|
+
function createCompactRootPackageJson(scope, packageSource, remotes, bridge) {
|
|
130
|
+
const rootPackage = (0, external_package_json_cjs_namespaceObject.createRootPackageJson)(scope, packageSource, remotes, bridge);
|
|
131
|
+
if (rootPackage.modernjs?.packageSource && 'object' == typeof rootPackage.modernjs.packageSource) rootPackage.modernjs.packageSource.config = `./${external_descriptors_cjs_namespaceObject.ULTRAMODERN_CONFIG_PATH}`;
|
|
132
|
+
return rootPackage;
|
|
133
|
+
}
|
|
134
|
+
function createCompactUltramodernConfig(scope, modernVersion, packageSource, apps = [
|
|
135
|
+
(0, external_descriptors_cjs_namespaceObject.createShellHost)()
|
|
136
|
+
], enableTailwind = true, bridge) {
|
|
137
|
+
const config = (0, external_contracts_cjs_namespaceObject.createUltramodernConfig)(scope, modernVersion, packageSource, apps, enableTailwind, bridge);
|
|
138
|
+
if (config.packageSource && 'object' == typeof config.packageSource && !Array.isArray(config.packageSource)) delete config.packageSource.metadata;
|
|
139
|
+
return config;
|
|
140
|
+
}
|
|
141
|
+
function writePnpmWorkspacePackages(targetDir, bridge) {
|
|
142
|
+
if (!bridge) return;
|
|
143
|
+
const pnpmWorkspacePath = `${targetDir}/pnpm-workspace.yaml`;
|
|
144
|
+
const pnpmWorkspace = external_node_fs_default().readFileSync(pnpmWorkspacePath, 'utf-8');
|
|
145
|
+
const packages = [
|
|
146
|
+
'apps/*',
|
|
147
|
+
'verticals/*',
|
|
148
|
+
'packages/*',
|
|
149
|
+
...bridge.workspacePackages.map((entry)=>entry.pattern)
|
|
150
|
+
];
|
|
151
|
+
const renderedPackages = packages.map((pattern)=>` - ${pattern}`).join('\n');
|
|
152
|
+
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, 'pnpm-workspace.yaml', pnpmWorkspace.replace(/^packages:\n(?: {2}- .+\n)+/u, `packages:\n${renderedPackages}\n`));
|
|
153
|
+
}
|
|
127
154
|
function generateUltramodernWorkspace(options) {
|
|
128
155
|
const beforeFiles = (0, external_generation_result_cjs_namespaceObject.createFileSnapshot)(options.targetDir);
|
|
129
156
|
const scope = (0, external_naming_cjs_namespaceObject.toPackageScope)(options.packageName);
|
|
130
157
|
const packageSource = (0, external_package_source_cjs_namespaceObject.resolvePackageSource)(options);
|
|
158
|
+
const bridge = (0, external_bridge_config_cjs_namespaceObject.normalizeUltramodernBridgeConfig)(options.bridge);
|
|
131
159
|
const enableTailwind = false !== options.enableTailwind;
|
|
132
160
|
const initialVerticals = [];
|
|
133
161
|
const createdApps = [
|
|
@@ -152,17 +180,16 @@ function generateUltramodernWorkspace(options) {
|
|
|
152
180
|
typescriptVersion: external_versions_cjs_namespaceObject.TYPESCRIPT_VERSION,
|
|
153
181
|
tailwindEnabled: String(enableTailwind)
|
|
154
182
|
});
|
|
155
|
-
(
|
|
183
|
+
writePnpmWorkspacePackages(options.targetDir, bridge);
|
|
184
|
+
(0, external_fs_io_cjs_namespaceObject.writeJson)(options.targetDir, 'package.json', createCompactRootPackageJson(scope, packageSource, initialVerticals, bridge));
|
|
156
185
|
(0, external_fs_io_cjs_namespaceObject.writeJson)(options.targetDir, 'tsconfig.base.json', (0, external_package_json_cjs_namespaceObject.createTsConfigBase)());
|
|
157
186
|
(0, external_fs_io_cjs_namespaceObject.writeJson)(options.targetDir, 'tsconfig.json', (0, external_package_json_cjs_namespaceObject.createRootTsConfig)(createdApps));
|
|
158
187
|
(0, external_fs_io_cjs_namespaceObject.writeJson)(options.targetDir, 'topology/reference-topology.json', (0, external_contracts_cjs_namespaceObject.createTopology)(scope, initialVerticals));
|
|
159
188
|
(0, external_fs_io_cjs_namespaceObject.writeJson)(options.targetDir, 'topology/ownership.json', (0, external_contracts_cjs_namespaceObject.createOwnership)(scope, initialVerticals));
|
|
160
189
|
(0, external_fs_io_cjs_namespaceObject.writeJson)(options.targetDir, 'topology/local-overlays/development.json', (0, external_contracts_cjs_namespaceObject.createDevelopmentOverlay)(initialVerticals));
|
|
161
|
-
(0, external_fs_io_cjs_namespaceObject.writeJson)(options.targetDir,
|
|
162
|
-
(
|
|
163
|
-
(
|
|
164
|
-
writeApp(options.targetDir, scope, external_descriptors_cjs_namespaceObject.shellApp, packageSource, enableTailwind, initialVerticals);
|
|
165
|
-
for (const remote of initialVerticals)writeApp(options.targetDir, scope, remote, packageSource, enableTailwind, initialVerticals);
|
|
190
|
+
(0, external_fs_io_cjs_namespaceObject.writeJson)(options.targetDir, external_descriptors_cjs_namespaceObject.ULTRAMODERN_CONFIG_PATH, createCompactUltramodernConfig(scope, options.modernVersion, packageSource, createdApps, enableTailwind, bridge));
|
|
191
|
+
writeApp(options.targetDir, scope, external_descriptors_cjs_namespaceObject.shellApp, packageSource, enableTailwind, initialVerticals, bridge);
|
|
192
|
+
for (const remote of initialVerticals)writeApp(options.targetDir, scope, remote, packageSource, enableTailwind, initialVerticals, bridge);
|
|
166
193
|
writeSharedPackages(options.targetDir, scope);
|
|
167
194
|
(0, external_workspace_scripts_cjs_namespaceObject.writeGeneratedWorkspaceScripts)(options.targetDir, scope, enableTailwind, initialVerticals);
|
|
168
195
|
const afterFiles = (0, external_generation_result_cjs_namespaceObject.createFileSnapshot)(options.targetDir);
|
|
@@ -183,10 +210,12 @@ function generateUltramodernWorkspace(options) {
|
|
|
183
210
|
});
|
|
184
211
|
return result;
|
|
185
212
|
}
|
|
213
|
+
exports.createCompactUltramodernConfig = __webpack_exports__.createCompactUltramodernConfig;
|
|
186
214
|
exports.generateUltramodernWorkspace = __webpack_exports__.generateUltramodernWorkspace;
|
|
187
215
|
exports.writeApp = __webpack_exports__.writeApp;
|
|
188
216
|
exports.writeSharedPackages = __webpack_exports__.writeSharedPackages;
|
|
189
217
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
218
|
+
"createCompactUltramodernConfig",
|
|
190
219
|
"generateUltramodernWorkspace",
|
|
191
220
|
"writeApp",
|
|
192
221
|
"writeSharedPackages"
|
package/dist/esm/index.js
CHANGED
|
@@ -6,7 +6,9 @@ import { fileURLToPath } from "node:url";
|
|
|
6
6
|
import { resolveCreatePackageRoot } from "./create-package-root.js";
|
|
7
7
|
import { i18n, localeKeys } from "./locale/index.js";
|
|
8
8
|
import { BLEEDINGDEV_CREATE_PACKAGE, BLEEDINGDEV_FRAMEWORK_VERSION_ENV, BLEEDINGDEV_PACKAGE_NAME_PREFIX, BLEEDINGDEV_PACKAGE_SCOPE, WORKSPACE_PACKAGE_VERSION } from "./ultramodern-package-source.js";
|
|
9
|
+
import { runUltramodernToolingCli } from "./ultramodern-tooling/commands.js";
|
|
9
10
|
import { addUltramodernVertical, generateUltramodernWorkspace, planUltramodernVertical } from "./ultramodern-workspace/index.js";
|
|
11
|
+
import { hasUltramodernBridgeCliOptions, parseUltramodernBridgeCliOptions, ultramodernBridgeCliBooleanFlags, ultramodernBridgeCliValueFlags } from "./ultramodern-workspace/bridge-config.js";
|
|
10
12
|
const src_dirname = node_path.dirname(fileURLToPath(import.meta.url));
|
|
11
13
|
const createPackageRoot = resolveCreatePackageRoot(src_dirname);
|
|
12
14
|
const semverPattern = /^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;
|
|
@@ -84,6 +86,16 @@ function showHelp() {
|
|
|
84
86
|
console.log(i18n.t(localeKeys.help.optionUltramodernPackageRegistry));
|
|
85
87
|
console.log(i18n.t(localeKeys.help.optionUltramodernPackageScope));
|
|
86
88
|
console.log(i18n.t(localeKeys.help.optionUltramodernPackageNamePrefix));
|
|
89
|
+
console.log(i18n.t(localeKeys.help.optionBridge));
|
|
90
|
+
console.log(i18n.t(localeKeys.help.optionBridgeParentRoot));
|
|
91
|
+
console.log(i18n.t(localeKeys.help.optionBridgeWorkspacePackage));
|
|
92
|
+
console.log(i18n.t(localeKeys.help.optionBridgeWorkspacePackageName));
|
|
93
|
+
console.log(i18n.t(localeKeys.help.optionBridgeTestAlias));
|
|
94
|
+
console.log(i18n.t(localeKeys.help.optionBridgeDependency));
|
|
95
|
+
console.log(i18n.t(localeKeys.help.optionBridgeLockfilePolicy));
|
|
96
|
+
console.log(i18n.t(localeKeys.help.optionBridgeGate));
|
|
97
|
+
console.log(i18n.t(localeKeys.help.optionBridgeGateCwd));
|
|
98
|
+
console.log(i18n.t(localeKeys.help.optionBridgeReactSingleton));
|
|
87
99
|
console.log(i18n.t(localeKeys.help.optionVertical));
|
|
88
100
|
console.log(i18n.t(localeKeys.help.optionVerticalName));
|
|
89
101
|
console.log(i18n.t(localeKeys.help.optionDryRun));
|
|
@@ -197,7 +209,8 @@ function collectPositionalArgs(args) {
|
|
|
197
209
|
'--ultramodern-package-scope',
|
|
198
210
|
'--ultramodern-package-name-prefix',
|
|
199
211
|
VERTICAL_NAME_FLAG,
|
|
200
|
-
CODESMITH_OVERLAY_FLAG
|
|
212
|
+
CODESMITH_OVERLAY_FLAG,
|
|
213
|
+
...ultramodernBridgeCliValueFlags
|
|
201
214
|
]);
|
|
202
215
|
const optionWithoutValue = new Set([
|
|
203
216
|
'--help',
|
|
@@ -210,7 +223,8 @@ function collectPositionalArgs(args) {
|
|
|
210
223
|
WORKSPACE_PROTOCOL_FLAG,
|
|
211
224
|
DRY_RUN_FLAG,
|
|
212
225
|
VERTICAL_FLAG,
|
|
213
|
-
LEGACY_MODERN_JS_FLAG
|
|
226
|
+
LEGACY_MODERN_JS_FLAG,
|
|
227
|
+
...ultramodernBridgeCliBooleanFlags
|
|
214
228
|
]);
|
|
215
229
|
const positionalArgs = [];
|
|
216
230
|
for(let i = 0; i < args.length; i++){
|
|
@@ -220,7 +234,7 @@ function collectPositionalArgs(args) {
|
|
|
220
234
|
i += 1;
|
|
221
235
|
continue;
|
|
222
236
|
}
|
|
223
|
-
if (!(arg.startsWith('--lang=') || arg.startsWith(`${BFF_RUNTIME_OPTION}=`) || arg.startsWith('--ultramodern-package-source=') || arg.startsWith('--ultramodern-package-version=') || arg.startsWith('--ultramodern-package-registry=') || arg.startsWith('--ultramodern-package-scope=') || arg.startsWith('--ultramodern-package-name-prefix=') || arg.startsWith(`${VERTICAL_FLAG}=`) || arg.startsWith(`${VERTICAL_NAME_FLAG}=`) || arg.startsWith(`${CODESMITH_OVERLAY_FLAG}=`))) positionalArgs.push(arg);
|
|
237
|
+
if (!(arg.startsWith('--lang=') || arg.startsWith(`${BFF_RUNTIME_OPTION}=`) || arg.startsWith('--ultramodern-package-source=') || arg.startsWith('--ultramodern-package-version=') || arg.startsWith('--ultramodern-package-registry=') || arg.startsWith('--ultramodern-package-scope=') || arg.startsWith('--ultramodern-package-name-prefix=') || arg.startsWith(`${VERTICAL_FLAG}=`) || arg.startsWith(`${VERTICAL_NAME_FLAG}=`) || arg.startsWith(`${CODESMITH_OVERLAY_FLAG}=`) || ultramodernBridgeCliBooleanFlags.some((flag)=>arg.startsWith(`${flag}=`)) || ultramodernBridgeCliValueFlags.some((flag)=>arg.startsWith(`${flag}=`)))) positionalArgs.push(arg);
|
|
224
238
|
}
|
|
225
239
|
}
|
|
226
240
|
return positionalArgs;
|
|
@@ -336,6 +350,14 @@ function detectCodeSmithOverlays(args) {
|
|
|
336
350
|
}
|
|
337
351
|
return overlays.length > 0 ? overlays : void 0;
|
|
338
352
|
}
|
|
353
|
+
function readBridgeCliOptions(args) {
|
|
354
|
+
try {
|
|
355
|
+
return parseUltramodernBridgeCliOptions(args);
|
|
356
|
+
} catch (error) {
|
|
357
|
+
console.error(error instanceof Error ? error.message : String(error));
|
|
358
|
+
process.exit(1);
|
|
359
|
+
}
|
|
360
|
+
}
|
|
339
361
|
function detectUltramodernPackageSource(args, defaultPackageVersion, createPackage) {
|
|
340
362
|
const bleedingDevDefaults = isBleedingDevCreatePackage(createPackage);
|
|
341
363
|
const strategy = getOptionValue(args, [
|
|
@@ -545,6 +567,10 @@ async function getProjectName() {
|
|
|
545
567
|
}
|
|
546
568
|
async function main() {
|
|
547
569
|
const args = process.argv.slice(2);
|
|
570
|
+
if ('ultramodern' === args[0]) {
|
|
571
|
+
process.exitCode = await runUltramodernToolingCli(args.slice(1));
|
|
572
|
+
return;
|
|
573
|
+
}
|
|
548
574
|
if (args.includes('--help') || args.includes('-h')) return void showHelp();
|
|
549
575
|
if (args.includes('--version') || args.includes('-v')) return void showVersion();
|
|
550
576
|
if (detectLegacyModernJsFlag(args)) {
|
|
@@ -556,10 +582,16 @@ async function main() {
|
|
|
556
582
|
const dryRun = detectDryRunFlag(args);
|
|
557
583
|
const verticalInput = resolveVerticalCliInput(args);
|
|
558
584
|
const overlays = detectCodeSmithOverlays(args);
|
|
585
|
+
const bridgeRequested = hasUltramodernBridgeCliOptions(args);
|
|
559
586
|
if (dryRun && !verticalInput.addVertical) {
|
|
560
587
|
console.error(`${DRY_RUN_FLAG} is currently supported only with ${VERTICAL_FLAG}`);
|
|
561
588
|
process.exit(1);
|
|
562
589
|
}
|
|
590
|
+
if (verticalInput.addVertical && bridgeRequested) {
|
|
591
|
+
console.error('Bridge options are supported only when creating a new UltraModern workspace.');
|
|
592
|
+
process.exit(1);
|
|
593
|
+
}
|
|
594
|
+
const bridge = readBridgeCliOptions(args);
|
|
563
595
|
if (!dryRun) console.log(`\n${i18n.t(localeKeys.message.welcome)}\n`);
|
|
564
596
|
const createPackage = readCreatePackageJson();
|
|
565
597
|
const version = createPackage.version || 'latest';
|
|
@@ -600,6 +632,7 @@ async function main() {
|
|
|
600
632
|
packageName: generatedPackageName,
|
|
601
633
|
modernVersion: version,
|
|
602
634
|
enableTailwind: detectTailwindFlag(),
|
|
635
|
+
bridge,
|
|
603
636
|
overlays,
|
|
604
637
|
packageSource
|
|
605
638
|
});
|
package/dist/esm/locale/en.js
CHANGED
|
@@ -38,6 +38,16 @@ const EN_LOCALE = {
|
|
|
38
38
|
optionUltramodernPackageRegistry: ' --ultramodern-package-registry npm registry URL used for install package sources',
|
|
39
39
|
optionUltramodernPackageScope: ' --ultramodern-package-scope Publish scope for npm alias installs (for example bleedingdev)',
|
|
40
40
|
optionUltramodernPackageNamePrefix: ' --ultramodern-package-name-prefix Prefix for npm alias package names (default: modern-js-)',
|
|
41
|
+
optionBridge: ' --bridge Enable explicit nested parent-monorepo bridge mode for new workspaces',
|
|
42
|
+
optionBridgeParentRoot: ' --bridge-parent-root <path> Parent monorepo root for bridge mode',
|
|
43
|
+
optionBridgeWorkspacePackage: ' --bridge-workspace-package <glob> Parent workspace package glob consumed by generated apps',
|
|
44
|
+
optionBridgeWorkspacePackageName: ' --bridge-workspace-package-name <glob=package[,package]> Package names covered by a bridge workspace glob',
|
|
45
|
+
optionBridgeTestAlias: ' --bridge-test-alias <glob:alias=target> Test/source alias for a bridge workspace package glob',
|
|
46
|
+
optionBridgeDependency: ' --bridge-dependency <package[,package]> Explicit parent package dependency consumed by generated apps',
|
|
47
|
+
optionBridgeLockfilePolicy: ' --bridge-lockfile-policy <nested|parent> Bridge lockfile ownership policy (default: nested)',
|
|
48
|
+
optionBridgeGate: ' --bridge-gate <name=command> Delegated parent workspace gate command for bridge packages',
|
|
49
|
+
optionBridgeGateCwd: ' --bridge-gate-cwd <name=cwd> Working directory for a named bridge gate',
|
|
50
|
+
optionBridgeReactSingleton: ' --bridge-react-singleton <package[,package]> React singleton package expectation (default: react,react-dom)',
|
|
41
51
|
optionVertical: ' --vertical[=<name>] Mutate the current existing UltraModern workspace and wire a MicroVertical',
|
|
42
52
|
optionVerticalName: ' --vertical-name <name> Explicit MicroVertical name for automation-friendly workspace mutation',
|
|
43
53
|
optionDryRun: ' --dry-run Preview a MicroVertical mutation plan without writing files (supported with --vertical)',
|
package/dist/esm/locale/zh.js
CHANGED
|
@@ -38,6 +38,16 @@ const ZH_LOCALE = {
|
|
|
38
38
|
optionUltramodernPackageRegistry: ' --ultramodern-package-registry install 依赖来源使用的 npm registry 地址',
|
|
39
39
|
optionUltramodernPackageScope: ' --ultramodern-package-scope npm alias 安装使用的发布 scope(例如 bleedingdev)',
|
|
40
40
|
optionUltramodernPackageNamePrefix: ' --ultramodern-package-name-prefix npm alias 包名前缀(默认:modern-js-)',
|
|
41
|
+
optionBridge: ' --bridge 为新工作区启用显式的嵌套父 monorepo 桥接模式',
|
|
42
|
+
optionBridgeParentRoot: ' --bridge-parent-root <路径> 桥接模式使用的父 monorepo 根目录',
|
|
43
|
+
optionBridgeWorkspacePackage: ' --bridge-workspace-package <glob> 生成应用消费的父工作区包 glob',
|
|
44
|
+
optionBridgeWorkspacePackageName: ' --bridge-workspace-package-name <glob=包名[,包名]> 桥接工作区 glob 覆盖的包名',
|
|
45
|
+
optionBridgeTestAlias: ' --bridge-test-alias <glob:别名=目标> 桥接工作区包 glob 的测试/源码 alias',
|
|
46
|
+
optionBridgeDependency: ' --bridge-dependency <包名[,包名]> 生成应用显式消费的父包依赖',
|
|
47
|
+
optionBridgeLockfilePolicy: ' --bridge-lockfile-policy <nested|parent> 桥接 lockfile 归属策略(默认:nested)',
|
|
48
|
+
optionBridgeGate: ' --bridge-gate <名称=命令> 桥接包委托给父工作区执行的 gate 命令',
|
|
49
|
+
optionBridgeGateCwd: ' --bridge-gate-cwd <名称=目录> 指定桥接 gate 的工作目录',
|
|
50
|
+
optionBridgeReactSingleton: ' --bridge-react-singleton <包名[,包名]> React 单例包预期(默认:react,react-dom)',
|
|
41
51
|
optionVertical: ' --vertical[=<名称>] 修改当前已有的 UltraModern 工作区,并接入 MicroVertical',
|
|
42
52
|
optionVerticalName: ' --vertical-name <名称> 为自动化工作流显式指定 MicroVertical 名称',
|
|
43
53
|
optionDryRun: ' --dry-run 预览 MicroVertical 修改计划但不写入文件(与 --vertical 一起使用)',
|