@bleedingdev/modern-js-create 3.5.0-ultramodern.36 → 3.5.0-ultramodern.38
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 +11 -14
- package/dist/cjs/cli/flags.cjs +0 -31
- package/dist/cjs/cli/help.cjs +0 -1
- package/dist/cjs/cli/package-source.cjs +0 -3
- package/dist/cjs/cli/prompts.cjs +2 -20
- package/dist/cjs/index.cjs +0 -5
- package/dist/cjs/locale/en.cjs +2 -6
- package/dist/cjs/locale/zh.cjs +2 -6
- package/dist/cjs/ultramodern-package-source.cjs +0 -32
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.cjs +1 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.cjs +1 -1
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.cjs +1 -1
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.cjs +5 -3
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.cjs +8 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.cjs +2 -8
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.cjs +14 -0
- package/dist/cjs/ultramodern-workspace/add-vertical/plan.cjs +0 -12
- package/dist/cjs/ultramodern-workspace/add-vertical/preflight.cjs +2 -26
- package/dist/cjs/ultramodern-workspace/add-vertical/shell-files.cjs +1 -1
- package/dist/cjs/ultramodern-workspace/add-vertical/topology.cjs +6 -4
- package/dist/cjs/ultramodern-workspace/app-files.cjs +2 -23
- package/dist/cjs/ultramodern-workspace/contracts.cjs +25 -16
- package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +1 -1
- package/dist/cjs/ultramodern-workspace/demo-components.cjs +0 -3
- package/dist/cjs/ultramodern-workspace/fs-io.cjs +0 -33
- package/dist/cjs/ultramodern-workspace/locales.cjs +1 -14
- package/dist/cjs/ultramodern-workspace/mf-validation/inspect.cjs +2 -10
- package/dist/cjs/ultramodern-workspace/mf-validation/object-literal.cjs +2 -17
- package/dist/cjs/ultramodern-workspace/mf-validation/path-utils.cjs +0 -6
- package/dist/cjs/ultramodern-workspace/mf-validation/syntax.cjs +2 -29
- package/dist/cjs/ultramodern-workspace/mf-validation/validate.cjs +1 -1
- package/dist/cjs/ultramodern-workspace/module-federation/config.cjs +19 -8
- package/dist/cjs/ultramodern-workspace/module-federation/reexport-module.cjs +3 -2
- package/dist/cjs/ultramodern-workspace/naming.cjs +0 -6
- package/dist/cjs/ultramodern-workspace/package-json.cjs +5 -14
- package/dist/cjs/ultramodern-workspace/policy.cjs +0 -21
- package/dist/cjs/ultramodern-workspace/public-surface.cjs +0 -21
- package/dist/cjs/ultramodern-workspace/routes.cjs +0 -15
- package/dist/cjs/ultramodern-workspace/shared-patches.cjs +4 -3
- package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +2 -8
- package/dist/cjs/ultramodern-workspace/versions.cjs +25 -37
- package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +2 -20
- package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +0 -21
- package/dist/cjs/ultramodern-workspace/write-app.cjs +3 -6
- package/dist/cjs/ultramodern-workspace/write-workspace.cjs +3 -5
- package/dist/esm/cli/flags.js +1 -11
- package/dist/esm/cli/help.js +0 -1
- package/dist/esm/cli/package-source.js +1 -1
- package/dist/esm/cli/prompts.js +2 -14
- package/dist/esm/index.js +2 -7
- package/dist/esm/locale/en.js +2 -6
- package/dist/esm/locale/zh.js +2 -6
- package/dist/esm/ultramodern-package-source.js +1 -24
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +2 -1
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +1 -1
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +1 -1
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +6 -4
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +9 -1
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +1 -1
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +6 -1
- package/dist/esm/ultramodern-workspace/add-vertical/plan.js +1 -1
- package/dist/esm/ultramodern-workspace/add-vertical/preflight.js +1 -1
- package/dist/esm/ultramodern-workspace/add-vertical/shell-files.js +1 -1
- package/dist/esm/ultramodern-workspace/add-vertical/topology.js +6 -4
- package/dist/esm/ultramodern-workspace/app-files.js +1 -4
- package/dist/esm/ultramodern-workspace/contracts.js +25 -16
- package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +1 -1
- package/dist/esm/ultramodern-workspace/demo-components.js +1 -1
- package/dist/esm/ultramodern-workspace/fs-io.js +1 -15
- package/dist/esm/ultramodern-workspace/locales.js +1 -1
- package/dist/esm/ultramodern-workspace/mf-validation/inspect.js +3 -2
- package/dist/esm/ultramodern-workspace/mf-validation/object-literal.js +1 -1
- package/dist/esm/ultramodern-workspace/mf-validation/path-utils.js +1 -1
- package/dist/esm/ultramodern-workspace/mf-validation/syntax.js +1 -1
- package/dist/esm/ultramodern-workspace/mf-validation/validate.js +1 -1
- package/dist/esm/ultramodern-workspace/module-federation/config.js +19 -8
- package/dist/esm/ultramodern-workspace/module-federation/reexport-module.js +4 -3
- package/dist/esm/ultramodern-workspace/naming.js +1 -1
- package/dist/esm/ultramodern-workspace/package-json.js +5 -8
- package/dist/esm/ultramodern-workspace/policy.js +1 -7
- package/dist/esm/ultramodern-workspace/public-surface.js +1 -1
- package/dist/esm/ultramodern-workspace/routes.js +1 -1
- package/dist/esm/ultramodern-workspace/shared-patches.js +4 -3
- package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +1 -1
- package/dist/esm/ultramodern-workspace/versions.js +20 -23
- package/dist/esm/ultramodern-workspace/workspace-script-plan.js +1 -1
- package/dist/esm/ultramodern-workspace/workspace-scripts.js +6 -9
- package/dist/esm/ultramodern-workspace/write-app.js +4 -7
- package/dist/esm/ultramodern-workspace/write-workspace.js +3 -2
- package/dist/esm-node/cli/flags.js +1 -11
- package/dist/esm-node/cli/help.js +0 -1
- package/dist/esm-node/cli/package-source.js +1 -1
- package/dist/esm-node/cli/prompts.js +2 -14
- package/dist/esm-node/index.js +2 -7
- package/dist/esm-node/locale/en.js +2 -6
- package/dist/esm-node/locale/zh.js +2 -6
- package/dist/esm-node/ultramodern-package-source.js +1 -24
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/declaration-patches.js +2 -1
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-build-identity.js +1 -1
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +1 -1
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/package-cohort.js +6 -4
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +9 -1
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.js +1 -1
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.js +6 -1
- package/dist/esm-node/ultramodern-workspace/add-vertical/plan.js +1 -1
- package/dist/esm-node/ultramodern-workspace/add-vertical/preflight.js +1 -1
- package/dist/esm-node/ultramodern-workspace/add-vertical/shell-files.js +1 -1
- package/dist/esm-node/ultramodern-workspace/add-vertical/topology.js +6 -4
- package/dist/esm-node/ultramodern-workspace/app-files.js +1 -4
- package/dist/esm-node/ultramodern-workspace/contracts.js +25 -16
- package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +1 -1
- package/dist/esm-node/ultramodern-workspace/demo-components.js +1 -1
- package/dist/esm-node/ultramodern-workspace/fs-io.js +1 -15
- package/dist/esm-node/ultramodern-workspace/locales.js +1 -1
- package/dist/esm-node/ultramodern-workspace/mf-validation/inspect.js +3 -2
- package/dist/esm-node/ultramodern-workspace/mf-validation/object-literal.js +1 -1
- package/dist/esm-node/ultramodern-workspace/mf-validation/path-utils.js +1 -1
- package/dist/esm-node/ultramodern-workspace/mf-validation/syntax.js +1 -1
- package/dist/esm-node/ultramodern-workspace/mf-validation/validate.js +1 -1
- package/dist/esm-node/ultramodern-workspace/module-federation/config.js +19 -8
- package/dist/esm-node/ultramodern-workspace/module-federation/reexport-module.js +4 -3
- package/dist/esm-node/ultramodern-workspace/naming.js +1 -1
- package/dist/esm-node/ultramodern-workspace/package-json.js +5 -8
- package/dist/esm-node/ultramodern-workspace/policy.js +1 -7
- package/dist/esm-node/ultramodern-workspace/public-surface.js +1 -1
- package/dist/esm-node/ultramodern-workspace/routes.js +1 -1
- package/dist/esm-node/ultramodern-workspace/shared-patches.js +4 -3
- package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +1 -1
- package/dist/esm-node/ultramodern-workspace/versions.js +20 -23
- package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +1 -1
- package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +6 -9
- package/dist/esm-node/ultramodern-workspace/write-app.js +4 -7
- package/dist/esm-node/ultramodern-workspace/write-workspace.js +3 -2
- package/dist/types/cli/flags.d.ts +4 -9
- package/dist/types/cli/package-source.d.ts +3 -3
- package/dist/types/cli/project-setup.d.ts +1 -1
- package/dist/types/cli/prompts.d.ts +0 -2
- package/dist/types/locale/en.d.ts +0 -4
- package/dist/types/locale/index.d.ts +0 -8
- package/dist/types/locale/zh.d.ts +0 -4
- package/dist/types/ultramodern-package-source.d.ts +0 -11
- package/dist/types/ultramodern-tooling/commands/cloudflare-output-verify.d.ts +1 -1
- package/dist/types/ultramodern-tooling/commands/context.d.ts +3 -3
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/install.d.ts +1 -1
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/pnpm-yaml.d.ts +0 -5
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/policy-constants.d.ts +9 -6
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect.d.ts +1 -1
- package/dist/types/ultramodern-tooling/commands/routes-generate.d.ts +1 -1
- package/dist/types/ultramodern-tooling/commands/skills.d.ts +1 -1
- package/dist/types/ultramodern-tooling/commands/validate.d.ts +1 -1
- package/dist/types/ultramodern-tooling/commands.d.ts +1 -1
- package/dist/types/ultramodern-tooling/config/load.d.ts +1 -1
- package/dist/types/ultramodern-workspace/add-vertical/plan.d.ts +1 -6
- package/dist/types/ultramodern-workspace/add-vertical/preflight.d.ts +1 -9
- package/dist/types/ultramodern-workspace/app-files.d.ts +1 -7
- package/dist/types/ultramodern-workspace/codesmith.d.ts +5 -5
- package/dist/types/ultramodern-workspace/delivery-unit.d.ts +1 -1
- package/dist/types/ultramodern-workspace/demo-components.d.ts +0 -1
- package/dist/types/ultramodern-workspace/fs-io.d.ts +1 -7
- package/dist/types/ultramodern-workspace/generation-result.d.ts +2 -1
- package/dist/types/ultramodern-workspace/locales.d.ts +0 -181
- package/dist/types/ultramodern-workspace/mf-validation/inspect.d.ts +0 -3
- package/dist/types/ultramodern-workspace/mf-validation/object-literal.d.ts +0 -5
- package/dist/types/ultramodern-workspace/mf-validation/path-utils.d.ts +0 -2
- package/dist/types/ultramodern-workspace/mf-validation/syntax.d.ts +0 -9
- package/dist/types/ultramodern-workspace/module-federation/config.d.ts +1 -1
- package/dist/types/ultramodern-workspace/module-federation/reexport-module.d.ts +1 -1
- package/dist/types/ultramodern-workspace/naming.d.ts +0 -2
- package/dist/types/ultramodern-workspace/package-json.d.ts +0 -2
- package/dist/types/ultramodern-workspace/policy.d.ts +0 -47
- package/dist/types/ultramodern-workspace/public-surface.d.ts +5 -15
- package/dist/types/ultramodern-workspace/routes.d.ts +0 -9
- package/dist/types/ultramodern-workspace/shared-patches.d.ts +1 -2
- package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +4 -4
- package/dist/types/ultramodern-workspace/types.d.ts +3 -2
- package/dist/types/ultramodern-workspace/versions.d.ts +20 -23
- package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +7 -21
- package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +2 -9
- package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +0 -1
- package/dist/types/ultramodern-workspace/write-workspace.d.ts +0 -1
- package/package.json +14 -12
- package/template-workspace/AGENTS.md.handlebars +2 -2
- package/template-workspace/README.md.handlebars +3 -4
- package/template-workspace/patches/{@module-federation__bridge-react@2.6.0.patch → @module-federation__bridge-react@2.7.0.patch} +22 -22
- package/template-workspace/patches/@module-federation__dts-plugin@2.7.0.patch +37 -0
- package/template-workspace/patches/{@module-federation__modern-js-v3@2.6.0.patch → @module-federation__modern-js-v3@2.7.0.patch} +22 -22
- package/template-workspace/patches/@tanstack__router-core@1.171.14.patch +123 -0
- package/template-workspace/pnpm-workspace.yaml.handlebars +25 -2
- package/templates/workspace/apps/modern.config.ts.handlebars +1 -1
- package/templates/workspace-scripts/assert-mf-types.mjs.handlebars +4 -4
- package/templates/workspace-scripts/ultramodern-typecheck.mjs +1 -1
- package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +3 -5
- package/dist/cjs/ultramodern-workspace/pnpm-workspace-policy-plan.cjs +0 -166
- package/dist/esm/ultramodern-workspace/pnpm-workspace-policy-plan.js +0 -113
- package/dist/esm-node/ultramodern-workspace/pnpm-workspace-policy-plan.js +0 -114
- package/dist/types/ultramodern-workspace/pnpm-workspace-policy-plan.d.ts +0 -39
- package/template-workspace/patches/@tanstack__router-core@1.171.13.patch +0 -51
- package/templates/workspace/postcss.config.mjs.handlebars +0 -5
|
@@ -116,4 +116,4 @@ function resolveWorkspacePackageSource(args, createPackage, packageSource) {
|
|
|
116
116
|
};
|
|
117
117
|
return resolveInstallBackedPackageSource(args, createPackage, packageSource);
|
|
118
118
|
}
|
|
119
|
-
export { detectUltramodernPackageSource, getBleedingDevFrameworkVersion, isBleedingDevCreatePackage, readCreatePackageJson,
|
|
119
|
+
export { detectUltramodernPackageSource, getBleedingDevFrameworkVersion, isBleedingDevCreatePackage, readCreatePackageJson, resolveWorkspacePackageSource };
|
package/dist/esm/cli/prompts.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import node_path from "node:path";
|
|
2
2
|
import node_readline from "node:readline";
|
|
3
3
|
import { i18n, localeKeys } from "../locale/index.js";
|
|
4
|
-
import {
|
|
4
|
+
import { collectPositionalArgs } from "./flags.js";
|
|
5
5
|
import { isDirectoryEmpty } from "./project-setup.js";
|
|
6
6
|
function promptInput(question) {
|
|
7
7
|
const rl = node_readline.createInterface({
|
|
@@ -15,18 +15,6 @@ function promptInput(question) {
|
|
|
15
15
|
});
|
|
16
16
|
});
|
|
17
17
|
}
|
|
18
|
-
async function confirmLegacyModernJsSetup() {
|
|
19
|
-
console.error('');
|
|
20
|
-
console.error(i18n.t(localeKeys.message.legacyModernJsWarning));
|
|
21
|
-
console.error('');
|
|
22
|
-
const answer = await promptInput(i18n.t(localeKeys.prompt.legacyModernJsConfirmation, {
|
|
23
|
-
confirmation: LEGACY_MODERN_JS_CONFIRMATION
|
|
24
|
-
}));
|
|
25
|
-
if (answer !== LEGACY_MODERN_JS_CONFIRMATION) {
|
|
26
|
-
console.error(i18n.t(localeKeys.error.legacyModernJsNotConfirmed));
|
|
27
|
-
process.exit(1);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
18
|
async function getProjectName() {
|
|
31
19
|
const args = process.argv.slice(2);
|
|
32
20
|
const positionalArgs = collectPositionalArgs(args);
|
|
@@ -60,4 +48,4 @@ async function getProjectName() {
|
|
|
60
48
|
useCurrentDir: false
|
|
61
49
|
};
|
|
62
50
|
}
|
|
63
|
-
export {
|
|
51
|
+
export { getProjectName };
|
package/dist/esm/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import node_fs from "node:fs";
|
|
2
2
|
import node_path from "node:path";
|
|
3
|
-
import { DRY_RUN_FLAG, VERTICAL_FLAG, detectBffRuntime, detectCodeSmithOverlays, detectDryRunFlag, detectExplicitTailwindFlag, detectLanguage,
|
|
3
|
+
import { DRY_RUN_FLAG, VERTICAL_FLAG, detectBffRuntime, detectCodeSmithOverlays, detectDryRunFlag, detectExplicitTailwindFlag, detectLanguage, detectTailwindFlag, readBridgeCliOptions, resolveVerticalCliInput } from "./cli/flags.js";
|
|
4
4
|
import { showHelp, showVersion } from "./cli/help.js";
|
|
5
5
|
import { detectUltramodernPackageSource, getBleedingDevFrameworkVersion, isBleedingDevCreatePackage, readCreatePackageJson, resolveWorkspacePackageSource } from "./cli/package-source.js";
|
|
6
6
|
import { initializeGeneratedGitRepository } from "./cli/project-setup.js";
|
|
7
|
-
import {
|
|
7
|
+
import { getProjectName } from "./cli/prompts.js";
|
|
8
8
|
import { i18n, localeKeys } from "./locale/index.js";
|
|
9
9
|
import { runUltramodernToolingCli } from "./ultramodern-tooling/commands.js";
|
|
10
10
|
import { addUltramodernVertical, generateUltramodernWorkspace, planUltramodernVertical } from "./ultramodern-workspace/index.js";
|
|
@@ -20,11 +20,6 @@ async function main() {
|
|
|
20
20
|
}
|
|
21
21
|
if (args.includes('--help') || args.includes('-h')) return void showHelp();
|
|
22
22
|
if (args.includes('--version') || args.includes('-v')) return void showVersion();
|
|
23
|
-
if (detectLegacyModernJsFlag(args)) {
|
|
24
|
-
await confirmLegacyModernJsSetup();
|
|
25
|
-
delegateLegacyModernJsSetup(args);
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
23
|
detectBffRuntime(args);
|
|
29
24
|
const dryRun = detectDryRunFlag(args);
|
|
30
25
|
const verticalInput = resolveVerticalCliInput(args);
|
package/dist/esm/locale/en.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
const EN_LOCALE = {
|
|
2
2
|
prompt: {
|
|
3
|
-
projectName: 'Please enter project name: '
|
|
4
|
-
legacyModernJsConfirmation: 'Type "{confirmation}" to continue with the original Modern.js setup: '
|
|
3
|
+
projectName: 'Please enter project name: '
|
|
5
4
|
},
|
|
6
5
|
error: {
|
|
7
6
|
projectNameEmpty: 'Error: Project name cannot be empty',
|
|
8
7
|
directoryExists: 'Error: Directory "{projectName}" already exists and is not empty',
|
|
9
8
|
verticalNameMissing: 'Error: Missing MicroVertical name. Use <name> --vertical, --vertical=<name>, or --vertical-name <name>.',
|
|
10
9
|
verticalNameAmbiguous: 'Error: Ambiguous MicroVertical name: "{firstName}" from {firstSource} does not match "{secondName}" from {secondSource}.',
|
|
11
|
-
legacyModernJsNotConfirmed: 'Aborted. UltraModern.js remains the default unattended setup.',
|
|
12
10
|
createFailed: 'Error creating project:'
|
|
13
11
|
},
|
|
14
12
|
message: {
|
|
@@ -17,8 +15,7 @@ const EN_LOCALE = {
|
|
|
17
15
|
nextSteps: '📋 Next steps:',
|
|
18
16
|
step1: 'cd {projectName}',
|
|
19
17
|
step2: 'pnpm install',
|
|
20
|
-
step3: 'pnpm dev'
|
|
21
|
-
legacyModernJsWarning: "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\nBRUTAL WARNING: YOU ARE OPTING OUT OF ULTRAMODERN.JS DEFAULTS.\nThe unattended default is the best UltraModern.js configuration:\na structured SuperApp workspace, presetUltramodern, TanStack Router,\na strict Effect API runtime, Tailwind CSS v4, and the BleedingDev package cohort.\nThe original Modern.js setup is a dangerous opt-in path.\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
|
18
|
+
step3: 'pnpm dev'
|
|
22
19
|
},
|
|
23
20
|
help: {
|
|
24
21
|
title: '🚀 UltraModern.js Project Creator',
|
|
@@ -52,7 +49,6 @@ const EN_LOCALE = {
|
|
|
52
49
|
optionVerticalName: ' --vertical-name <name> Explicit MicroVertical name for automation-friendly workspace mutation',
|
|
53
50
|
optionDryRun: ' --dry-run Preview a MicroVertical mutation plan without writing files (supported with --vertical)',
|
|
54
51
|
optionCodeSmithOverlay: ' --codesmith-overlay <package-or-path> Run an explicit CodeSmith overlay after generation',
|
|
55
|
-
optionLegacyModernJs: ' --legacy-modern-js Opt into the original Modern.js setup after a large warning and typed confirmation',
|
|
56
52
|
examples: '💡 Examples:',
|
|
57
53
|
example1: ' pnpm dlx @bleedingdev/modern-js-create my-workspace',
|
|
58
54
|
example2: ' pnpm dlx @bleedingdev/modern-js-create my-workspace --lang zh',
|
package/dist/esm/locale/zh.js
CHANGED
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
const ZH_LOCALE = {
|
|
2
2
|
prompt: {
|
|
3
|
-
projectName: '请输入项目名称: '
|
|
4
|
-
legacyModernJsConfirmation: '输入 "{confirmation}" 以继续使用原始 Modern.js 初始化: '
|
|
3
|
+
projectName: '请输入项目名称: '
|
|
5
4
|
},
|
|
6
5
|
error: {
|
|
7
6
|
projectNameEmpty: '错误: 项目名称不能为空',
|
|
8
7
|
directoryExists: '错误: 目录 "{projectName}" 已存在且不为空',
|
|
9
8
|
verticalNameMissing: '错误: 缺少 MicroVertical 名称。请使用 <名称> --vertical、--vertical=<名称> 或 --vertical-name <名称>。',
|
|
10
9
|
verticalNameAmbiguous: '错误: MicroVertical 名称不明确:{firstSource} 的 "{firstName}" 与 {secondSource} 的 "{secondName}" 不一致。',
|
|
11
|
-
legacyModernJsNotConfirmed: '已中止。UltraModern.js 仍是默认的免交互初始化方案。',
|
|
12
10
|
createFailed: '创建项目时出错:'
|
|
13
11
|
},
|
|
14
12
|
message: {
|
|
@@ -17,8 +15,7 @@ const ZH_LOCALE = {
|
|
|
17
15
|
nextSteps: '📋 下一步:',
|
|
18
16
|
step1: 'cd {projectName}',
|
|
19
17
|
step2: 'pnpm install',
|
|
20
|
-
step3: 'pnpm dev'
|
|
21
|
-
legacyModernJsWarning: "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n严重警告:你正在退出 ULTRAMODERN.JS 默认配置。\n免交互默认值是最佳 UltraModern.js 配置:\n结构化 SuperApp 工作区、presetUltramodern、TanStack Router、\n严格 Effect API 运行时、Tailwind CSS v4,以及 BleedingDev 包版本队列。\n原始 Modern.js 初始化是危险的显式选择路径。\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
|
|
18
|
+
step3: 'pnpm dev'
|
|
22
19
|
},
|
|
23
20
|
help: {
|
|
24
21
|
title: '🚀 UltraModern.js 项目创建工具',
|
|
@@ -52,7 +49,6 @@ const ZH_LOCALE = {
|
|
|
52
49
|
optionVerticalName: ' --vertical-name <名称> 为自动化工作流显式指定 MicroVertical 名称',
|
|
53
50
|
optionDryRun: ' --dry-run 预览 MicroVertical 修改计划但不写入文件(与 --vertical 一起使用)',
|
|
54
51
|
optionCodeSmithOverlay: ' --codesmith-overlay <包或路径> 生成完成后运行显式配置的 CodeSmith overlay',
|
|
55
|
-
optionLegacyModernJs: ' --legacy-modern-js 在大型警告和输入确认后,选择原始 Modern.js 初始化',
|
|
56
52
|
examples: '💡 示例:',
|
|
57
53
|
example1: ' pnpm dlx @bleedingdev/modern-js-create my-workspace',
|
|
58
54
|
example2: ' pnpm dlx @bleedingdev/modern-js-create my-workspace --lang zh',
|
|
@@ -37,27 +37,4 @@ function modernPackageSpecifier(packageName, packageSource) {
|
|
|
37
37
|
if (!packageSource.aliasScope) return packageSource.modernPackageVersion;
|
|
38
38
|
return `npm:${modernAliasPackageName(packageName, packageSource)}@${packageSource.modernPackageVersion}`;
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
if (!packageSource.aliasScope) return;
|
|
42
|
-
return Object.fromEntries(packageNames.map((packageName)=>[
|
|
43
|
-
packageName,
|
|
44
|
-
modernAliasPackageName(packageName, packageSource)
|
|
45
|
-
]));
|
|
46
|
-
}
|
|
47
|
-
function createModernPackagesMetadata(packageNames, packageSource, options = {}) {
|
|
48
|
-
const includeAliases = options.includeAliases ?? Boolean(packageSource.aliasScope);
|
|
49
|
-
const aliases = includeAliases ? modernPackageAliases(packageNames, packageSource) : void 0;
|
|
50
|
-
return {
|
|
51
|
-
packages: [
|
|
52
|
-
...packageNames
|
|
53
|
-
],
|
|
54
|
-
specifier: modernPackageVersion(packageSource),
|
|
55
|
-
...packageSource.registry ? {
|
|
56
|
-
registry: packageSource.registry
|
|
57
|
-
} : {},
|
|
58
|
-
...aliases ? {
|
|
59
|
-
aliases
|
|
60
|
-
} : {}
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
export { BLEEDINGDEV_CREATE_PACKAGE, BLEEDINGDEV_FRAMEWORK_VERSION_ENV, BLEEDINGDEV_PACKAGE_NAME_PREFIX, BLEEDINGDEV_PACKAGE_SCOPE, ULTRAMODERN_SINGLE_APP_MODERN_PACKAGES, ULTRAMODERN_WORKSPACE_MODERN_PACKAGES, WORKSPACE_PACKAGE_VERSION, createModernPackagesMetadata, modernAliasPackageName, modernPackageAliases, modernPackageSpecifier, modernPackageVersion };
|
|
40
|
+
export { BLEEDINGDEV_CREATE_PACKAGE, BLEEDINGDEV_FRAMEWORK_VERSION_ENV, BLEEDINGDEV_PACKAGE_NAME_PREFIX, BLEEDINGDEV_PACKAGE_SCOPE, ULTRAMODERN_SINGLE_APP_MODERN_PACKAGES, ULTRAMODERN_WORKSPACE_MODERN_PACKAGES, WORKSPACE_PACKAGE_VERSION, modernPackageSpecifier, modernPackageVersion };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { ensureGeneratedPatchFile, removeGeneratedPatchFileIfUnchanged } from "./generated-patches.js";
|
|
2
|
-
import { drizzleOrmDeclarationPatchPath, drizzleOrmDeclarationPatchSourcePath, effectDeclarationPatchPath, effectDeclarationPatchSourcePath, moduleFederationBridgeReactPatchPath, moduleFederationBridgeReactPatchSourcePath, moduleFederationModernJsPatchPath, moduleFederationModernJsPatchSourcePath } from "./policy-constants.js";
|
|
2
|
+
import { drizzleOrmDeclarationPatchPath, drizzleOrmDeclarationPatchSourcePath, effectDeclarationPatchPath, effectDeclarationPatchSourcePath, moduleFederationBridgeReactPatchPath, moduleFederationBridgeReactPatchSourcePath, moduleFederationDtsPluginPatchPath, moduleFederationDtsPluginPatchSourcePath, moduleFederationModernJsPatchPath, moduleFederationModernJsPatchSourcePath } from "./policy-constants.js";
|
|
3
3
|
function ensureGeneratedDeclarationPatches(io, options) {
|
|
4
4
|
let changed = false;
|
|
5
5
|
changed = ensureGeneratedPatchFile(io, moduleFederationModernJsPatchPath, moduleFederationModernJsPatchSourcePath) || changed;
|
|
6
|
+
changed = ensureGeneratedPatchFile(io, moduleFederationDtsPluginPatchPath, moduleFederationDtsPluginPatchSourcePath) || changed;
|
|
6
7
|
changed = ensureGeneratedPatchFile(io, moduleFederationBridgeReactPatchPath, moduleFederationBridgeReactPatchSourcePath) || changed;
|
|
7
8
|
changed = ensureGeneratedPatchFile(io, effectDeclarationPatchPath, effectDeclarationPatchSourcePath) || changed;
|
|
8
9
|
changed = options.includeDrizzleOrmPatch ? ensureGeneratedPatchFile(io, drizzleOrmDeclarationPatchPath, drizzleOrmDeclarationPatchSourcePath) || changed : removeGeneratedPatchFileIfUnchanged(io, drizzleOrmDeclarationPatchPath, drizzleOrmDeclarationPatchSourcePath) || changed;
|
|
@@ -6,7 +6,7 @@ function updateGeneratedBuildIdentityModules(io, config) {
|
|
|
6
6
|
let changed = false;
|
|
7
7
|
for (const app of workspaceAppsFromToolingConfig(config)){
|
|
8
8
|
changed = writeTextIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'src/ultramodern-build.ts'), createUltramodernBuildReexportModule()) || changed;
|
|
9
|
-
changed = writeTextIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'shared/ultramodern-build.ts'), createUltramodernBuildModule()) || changed;
|
|
9
|
+
changed = writeTextIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'shared/ultramodern-build.ts'), createUltramodernBuildModule(config.workspace.packageScope, app)) || changed;
|
|
10
10
|
changed = writeTextIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'shared/ultramodern-build.json'), createUltramodernBuildArtifactJson(config.workspace.packageScope, app)) || changed;
|
|
11
11
|
}
|
|
12
12
|
return changed;
|
|
@@ -6,7 +6,7 @@ function updateGeneratedModernConfigs(io, config) {
|
|
|
6
6
|
let changed = false;
|
|
7
7
|
const apps = workspaceAppsFromToolingConfig(config);
|
|
8
8
|
const remotes = apps.filter((app)=>'shell' !== app.kind);
|
|
9
|
-
for (const app of apps)changed = writeTextIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'modern.config.ts'), createAppModernConfig(config.workspace.packageScope, app, remotes)) || changed;
|
|
9
|
+
for (const app of apps)changed = writeTextIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'modern.config.ts'), createAppModernConfig(config.workspace.packageScope, app, remotes, config.features.tailwind)) || changed;
|
|
10
10
|
return changed;
|
|
11
11
|
}
|
|
12
12
|
export { updateGeneratedModernConfigs };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ULTRAMODERN_SINGLE_APP_MODERN_PACKAGES, ULTRAMODERN_WORKSPACE_MODERN_PACKAGES, modernPackageSpecifier } from "../../../ultramodern-package-source.js";
|
|
2
|
-
import { EFFECT_TSGO_VERSION, OXFMT_VERSION, OXLINT_VERSION,
|
|
2
|
+
import { EFFECT_TSGO_VERSION, OXFMT_VERSION, OXLINT_VERSION, TYPESCRIPT_VERSION, WRANGLER_VERSION, ZEPHYR_AGENT_VERSION, ZEPHYR_RSPACK_PLUGIN_VERSION } from "../../../ultramodern-workspace/versions.js";
|
|
3
3
|
import { createWorkspaceAppPackageScripts, createWorkspaceRootPackageScripts } from "../../../ultramodern-workspace/workspace-script-plan.js";
|
|
4
4
|
import { migratedWorkspaceScriptBasenames } from "../../../ultramodern-workspace/workspace-scripts.js";
|
|
5
5
|
const modernPackageNames = new Set([
|
|
@@ -32,8 +32,8 @@ const generatedToolingDependencyPins = new Map([
|
|
|
32
32
|
EFFECT_TSGO_VERSION
|
|
33
33
|
],
|
|
34
34
|
[
|
|
35
|
-
"
|
|
36
|
-
|
|
35
|
+
"typescript",
|
|
36
|
+
TYPESCRIPT_VERSION
|
|
37
37
|
],
|
|
38
38
|
[
|
|
39
39
|
'oxfmt',
|
|
@@ -139,7 +139,9 @@ function updateGeneratedPackageScripts(packageJson, options = {}) {
|
|
|
139
139
|
}
|
|
140
140
|
continue;
|
|
141
141
|
}
|
|
142
|
-
|
|
142
|
+
if (void 0 === value) continue;
|
|
143
|
+
const existingScript = scripts[name];
|
|
144
|
+
const nextValue = 'check' === name && 'string' == typeof existingScript ? mergeAggregateCheckScript(existingScript, value) : value;
|
|
143
145
|
if (scripts[name] !== nextValue) {
|
|
144
146
|
scripts[name] = nextValue;
|
|
145
147
|
changed = true;
|
|
@@ -3,7 +3,7 @@ import node_path from "node:path";
|
|
|
3
3
|
import { DRIZZLE_ORM_VERSION, EFFECT_VERSION, EFFECT_VITEST_VERSION, MODULE_FEDERATION_VERSION } from "../../../ultramodern-workspace/versions.js";
|
|
4
4
|
import { workspaceUsesDependency } from "./dependency-usage.js";
|
|
5
5
|
import { ensureYamlListItem, ensureYamlMapEntry, ensureYamlScalarMapEntry, removeYamlMapEntry, replaceYamlLine } from "./pnpm-yaml.js";
|
|
6
|
-
import { drizzleOrmDeclarationPatchPath, effectDeclarationPatchPath, moduleFederationBridgeReactPatchPath, moduleFederationModernJsPatchPath, strictEffectPackageVersionPolicyExclusions } from "./policy-constants.js";
|
|
6
|
+
import { drizzleOrmDeclarationPatchPath, effectDeclarationPatchPath, moduleFederationBridgeReactPatchPath, moduleFederationDtsPluginPatchPath, moduleFederationModernJsPatchPath, moduleFederationPackageVersionPolicyExclusions, strictEffectPackageVersionPolicyExclusions } from "./policy-constants.js";
|
|
7
7
|
function updateGeneratedPnpmWorkspacePolicy(io) {
|
|
8
8
|
const workspaceFile = node_path.join(io.workspaceRoot, 'pnpm-workspace.yaml');
|
|
9
9
|
if (!node_fs.existsSync(workspaceFile)) return false;
|
|
@@ -57,12 +57,20 @@ function updateGeneratedPnpmWorkspacePolicy(io) {
|
|
|
57
57
|
changed = policyExclude.changed || changed;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
+
for (const item of moduleFederationPackageVersionPolicyExclusions){
|
|
61
|
+
const policyExclude = ensureYamlListItem(source, 'minimumReleaseAgeExclude', item);
|
|
62
|
+
source = policyExclude.source;
|
|
63
|
+
changed = policyExclude.changed || changed;
|
|
64
|
+
}
|
|
60
65
|
const effectPatch = ensureYamlMapEntry(source, 'patchedDependencies', `effect@${EFFECT_VERSION}`, effectDeclarationPatchPath);
|
|
61
66
|
source = effectPatch.source;
|
|
62
67
|
changed = effectPatch.changed || changed;
|
|
63
68
|
const moduleFederationModernJsPatch = ensureYamlMapEntry(source, 'patchedDependencies', `@module-federation/modern-js-v3@${MODULE_FEDERATION_VERSION}`, moduleFederationModernJsPatchPath);
|
|
64
69
|
source = moduleFederationModernJsPatch.source;
|
|
65
70
|
changed = moduleFederationModernJsPatch.changed || changed;
|
|
71
|
+
const moduleFederationDtsPluginPatch = ensureYamlMapEntry(source, 'patchedDependencies', `@module-federation/dts-plugin@${MODULE_FEDERATION_VERSION}`, moduleFederationDtsPluginPatchPath);
|
|
72
|
+
source = moduleFederationDtsPluginPatch.source;
|
|
73
|
+
changed = moduleFederationDtsPluginPatch.changed || changed;
|
|
66
74
|
const moduleFederationBridgeReactPatch = ensureYamlMapEntry(source, 'patchedDependencies', `@module-federation/bridge-react@${MODULE_FEDERATION_VERSION}`, moduleFederationBridgeReactPatchPath);
|
|
67
75
|
source = moduleFederationBridgeReactPatch.source;
|
|
68
76
|
changed = moduleFederationBridgeReactPatch.changed || changed;
|
|
@@ -102,4 +102,4 @@ function removeYamlMapEntry(source, entryKey) {
|
|
|
102
102
|
changed
|
|
103
103
|
};
|
|
104
104
|
}
|
|
105
|
-
export { ensureYamlListItem, ensureYamlMapEntry, ensureYamlScalarMapEntry, removeYamlMapEntry, replaceYamlLine
|
|
105
|
+
export { ensureYamlListItem, ensureYamlMapEntry, ensureYamlScalarMapEntry, removeYamlMapEntry, replaceYamlLine };
|
|
@@ -5,12 +5,17 @@ const strictEffectPackageVersionPolicyExclusions = [
|
|
|
5
5
|
`effect@${EFFECT_VERSION}`,
|
|
6
6
|
`@effect/opentelemetry@${EFFECT_VERSION}`
|
|
7
7
|
];
|
|
8
|
+
const moduleFederationPackageVersionPolicyExclusions = [
|
|
9
|
+
'@module-federation/*'
|
|
10
|
+
];
|
|
8
11
|
const moduleFederationModernJsPatchPath = `patches/@module-federation__modern-js-v3@${MODULE_FEDERATION_VERSION}.patch`;
|
|
9
12
|
const moduleFederationModernJsPatchSourcePath = node_path.join(createPackageRoot, 'template-workspace', moduleFederationModernJsPatchPath);
|
|
13
|
+
const moduleFederationDtsPluginPatchPath = `patches/@module-federation__dts-plugin@${MODULE_FEDERATION_VERSION}.patch`;
|
|
14
|
+
const moduleFederationDtsPluginPatchSourcePath = node_path.join(createPackageRoot, 'template-workspace', moduleFederationDtsPluginPatchPath);
|
|
10
15
|
const moduleFederationBridgeReactPatchPath = `patches/@module-federation__bridge-react@${MODULE_FEDERATION_VERSION}.patch`;
|
|
11
16
|
const moduleFederationBridgeReactPatchSourcePath = node_path.join(createPackageRoot, 'template-workspace', moduleFederationBridgeReactPatchPath);
|
|
12
17
|
const effectDeclarationPatchPath = 'patches/effect-schema-error-type-id.patch';
|
|
13
18
|
const effectDeclarationPatchSourcePath = node_path.join(createPackageRoot, 'template-workspace', effectDeclarationPatchPath);
|
|
14
19
|
const drizzleOrmDeclarationPatchPath = 'patches/drizzle-orm-ts7-strict-declarations.patch';
|
|
15
20
|
const drizzleOrmDeclarationPatchSourcePath = node_path.join(createPackageRoot, 'template-workspace', drizzleOrmDeclarationPatchPath);
|
|
16
|
-
export { drizzleOrmDeclarationPatchPath, drizzleOrmDeclarationPatchSourcePath, effectDeclarationPatchPath, effectDeclarationPatchSourcePath, moduleFederationBridgeReactPatchPath, moduleFederationBridgeReactPatchSourcePath, moduleFederationModernJsPatchPath, moduleFederationModernJsPatchSourcePath, strictEffectPackageVersionPolicyExclusions };
|
|
21
|
+
export { drizzleOrmDeclarationPatchPath, drizzleOrmDeclarationPatchSourcePath, effectDeclarationPatchPath, effectDeclarationPatchSourcePath, moduleFederationBridgeReactPatchPath, moduleFederationBridgeReactPatchSourcePath, moduleFederationDtsPluginPatchPath, moduleFederationDtsPluginPatchSourcePath, moduleFederationModernJsPatchPath, moduleFederationModernJsPatchSourcePath, moduleFederationPackageVersionPolicyExclusions, strictEffectPackageVersionPolicyExclusions };
|
|
@@ -119,4 +119,4 @@ function assertNonEmptyString(value, label) {
|
|
|
119
119
|
function assertSafeOutputPath(relativePath, appId) {
|
|
120
120
|
if (node_path.isAbsolute(relativePath) || relativePath.split(/[\\/]+/u).includes('..')) throw new Error(`Unsafe output path for ${appId}: ${relativePath}`);
|
|
121
121
|
}
|
|
122
|
-
export { assertNonEmptyString,
|
|
122
|
+
export { assertNonEmptyString, prepareAddUltramodernVertical };
|
|
@@ -24,7 +24,7 @@ function rewriteShellAppFiles(workspaceRoot, scope, packageSource, enableTailwin
|
|
|
24
24
|
writeJsonFile(node_path.join(workspaceRoot, `${shellApp.directory}/tsconfig.json`), createAppTsConfig(shellHost, remotes));
|
|
25
25
|
writeJsonFile(node_path.join(workspaceRoot, `${shellApp.directory}/tsconfig.mf-types.json`), createAppMfTypesTsConfig(shellHost));
|
|
26
26
|
writeFileReplacing(workspaceRoot, `${shellApp.directory}/src/modern-app-env.d.ts`, createAppEnvDts(shellHost, remotes));
|
|
27
|
-
writeFileReplacing(workspaceRoot, `${shellApp.directory}/modern.config.ts`, createAppModernConfig(scope, shellHost, remotes));
|
|
27
|
+
writeFileReplacing(workspaceRoot, `${shellApp.directory}/modern.config.ts`, createAppModernConfig(scope, shellHost, remotes, enableTailwind));
|
|
28
28
|
writeFileReplacing(workspaceRoot, publicWeb.jsonLdHelperFile.path, publicWeb.jsonLdHelperFile.content);
|
|
29
29
|
writeFileReplacing(workspaceRoot, publicWeb.routeMetadataFile.path, publicWeb.routeMetadataFile.content);
|
|
30
30
|
writeFileReplacing(workspaceRoot, publicWeb.routeHeadFile.path, publicWeb.routeHeadFile.content);
|
|
@@ -5,10 +5,13 @@ import { createModuleFederationRemoteContracts, createNeutralOwnership, shellApp
|
|
|
5
5
|
import { packageName, toEnvSegment, toPascalCase } from "../naming.js";
|
|
6
6
|
import { createCloudflareDeployContract } from "../policy.js";
|
|
7
7
|
function verticalTopologyEntry(scope, vertical, remotes = []) {
|
|
8
|
+
const backendFederation = createBackendFederationContract(scope, vertical);
|
|
8
9
|
return {
|
|
9
10
|
id: vertical.id,
|
|
10
11
|
kind: vertical.kind,
|
|
11
|
-
|
|
12
|
+
...vertical.domain ? {
|
|
13
|
+
domain: vertical.domain
|
|
14
|
+
} : {},
|
|
12
15
|
package: packageName(scope, vertical.packageSuffix),
|
|
13
16
|
path: vertical.directory,
|
|
14
17
|
moduleFederation: {
|
|
@@ -21,11 +24,10 @@ function verticalTopologyEntry(scope, vertical, remotes = []) {
|
|
|
21
24
|
remotes: createModuleFederationRemoteContracts(vertical, remotes)
|
|
22
25
|
} : {},
|
|
23
26
|
ssr: true,
|
|
24
|
-
fallbackTelemetryEvent: 'modernjs:mv-runtime-parity',
|
|
25
27
|
sharedContractVersion: 'mf-ssr-contract-v1'
|
|
26
28
|
},
|
|
27
|
-
...
|
|
28
|
-
backendFederation
|
|
29
|
+
...backendFederation ? {
|
|
30
|
+
backendFederation
|
|
29
31
|
} : {},
|
|
30
32
|
...vertical.api ? {
|
|
31
33
|
deliveryUnit: deliveryUnitContractBlock(createDeliveryUnitRecord(scope, vertical))
|
|
@@ -111,9 +111,6 @@ function createRemoteStyles(enableTailwind, scope, app) {
|
|
|
111
111
|
function createAppStyles(enableTailwind, scope, app) {
|
|
112
112
|
return 'shell' === app.kind ? createShellStyles(enableTailwind, scope) : createRemoteStyles(enableTailwind, scope, app);
|
|
113
113
|
}
|
|
114
|
-
function createPostcssConfig() {
|
|
115
|
-
return renderFileTemplate('workspace/postcss.config.mjs', {});
|
|
116
|
-
}
|
|
117
114
|
function createTailwindConfig() {
|
|
118
115
|
return renderFileTemplate('workspace/tailwind.config.ts', {});
|
|
119
116
|
}
|
|
@@ -128,4 +125,4 @@ function createRouteHeadModule(app) {
|
|
|
128
125
|
function createShellFrameComponent() {
|
|
129
126
|
return readFileTemplate('app/shell-frame.tsx');
|
|
130
127
|
}
|
|
131
|
-
export { createAppEnvDts, createAppRuntimeConfig, createAppStyles,
|
|
128
|
+
export { createAppEnvDts, createAppRuntimeConfig, createAppStyles, createRouteHeadModule, createSharedDesignTokensCss, createShellFrameComponent, createTailwindConfig };
|
|
@@ -6,6 +6,20 @@ import { packageName } from "./naming.js";
|
|
|
6
6
|
import { createCloudflareDeployContract } from "./policy.js";
|
|
7
7
|
import { createGeneratedToolingWrapperMap } from "./tooling-command-catalog.js";
|
|
8
8
|
import { CLOUDFLARE_COMPATIBILITY_DATE, NODE_VERSION, PNPM_VERSION } from "./versions.js";
|
|
9
|
+
function isJsonValue(value) {
|
|
10
|
+
return void 0 !== value;
|
|
11
|
+
}
|
|
12
|
+
function optionalJsonEntry(key, value) {
|
|
13
|
+
return void 0 === value ? {} : {
|
|
14
|
+
[key]: value
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
function jsonEntries(entries) {
|
|
18
|
+
return Object.fromEntries(entries.filter((entry)=>isJsonValue(entry[1])));
|
|
19
|
+
}
|
|
20
|
+
function presentJsonValues(values) {
|
|
21
|
+
return values.filter(isJsonValue);
|
|
22
|
+
}
|
|
9
23
|
function createTopology(scope, remotes = []) {
|
|
10
24
|
const shellHost = createShellHost(remotes);
|
|
11
25
|
return {
|
|
@@ -17,7 +31,7 @@ function createTopology(scope, remotes = []) {
|
|
|
17
31
|
id: shellApp.id,
|
|
18
32
|
kind: 'shell',
|
|
19
33
|
package: packageName(scope, shellApp.packageSuffix),
|
|
20
|
-
verticalRefs: shellHost.verticalRefs,
|
|
34
|
+
verticalRefs: shellHost.verticalRefs ?? [],
|
|
21
35
|
moduleFederation: {
|
|
22
36
|
role: 'host',
|
|
23
37
|
name: shellApp.mfName,
|
|
@@ -31,7 +45,9 @@ function createTopology(scope, remotes = []) {
|
|
|
31
45
|
verticals: remotes.map((vertical)=>({
|
|
32
46
|
id: vertical.id,
|
|
33
47
|
kind: vertical.kind,
|
|
34
|
-
|
|
48
|
+
...vertical.domain ? {
|
|
49
|
+
domain: vertical.domain
|
|
50
|
+
} : {},
|
|
35
51
|
package: packageName(scope, vertical.packageSuffix),
|
|
36
52
|
path: vertical.directory,
|
|
37
53
|
moduleFederation: {
|
|
@@ -44,18 +60,13 @@ function createTopology(scope, remotes = []) {
|
|
|
44
60
|
remotes: createModuleFederationRemoteContracts(vertical)
|
|
45
61
|
} : {},
|
|
46
62
|
ssr: true,
|
|
47
|
-
fallbackTelemetryEvent: 'modernjs:mv-runtime-parity',
|
|
48
63
|
sharedContractVersion: 'mf-ssr-contract-v1'
|
|
49
64
|
},
|
|
50
|
-
...createBackendFederationContract(scope, vertical)
|
|
51
|
-
backendFederation: createBackendFederationContract(scope, vertical)
|
|
52
|
-
} : {},
|
|
65
|
+
...optionalJsonEntry('backendFederation', createBackendFederationContract(scope, vertical)),
|
|
53
66
|
...vertical.api ? {
|
|
54
67
|
deliveryUnit: deliveryUnitContractBlock(createDeliveryUnitRecord(scope, vertical))
|
|
55
68
|
} : {},
|
|
56
|
-
...apiTopologyMetadata(vertical)
|
|
57
|
-
api: apiTopologyMetadata(vertical)
|
|
58
|
-
} : {},
|
|
69
|
+
...optionalJsonEntry('api', apiTopologyMetadata(vertical)),
|
|
59
70
|
cloudflare: createCloudflareDeployContract(scope, vertical),
|
|
60
71
|
ownership: vertical.ownership
|
|
61
72
|
})),
|
|
@@ -124,7 +135,7 @@ function createDevelopmentOverlay(scope, remotes = []) {
|
|
|
124
135
|
remote.id,
|
|
125
136
|
`http://localhost:${remote.port}/mf-manifest.json`
|
|
126
137
|
])),
|
|
127
|
-
serverExecution:
|
|
138
|
+
serverExecution: jsonEntries(verticalApiApps(remotes).map((app)=>[
|
|
128
139
|
app.id,
|
|
129
140
|
createServerExecutionOverlay(scope, app)
|
|
130
141
|
])),
|
|
@@ -192,7 +203,7 @@ function createUltramodernConfig(scope, modernVersion, packageSource, apps = [
|
|
|
192
203
|
name: app.mfName,
|
|
193
204
|
exposes: Object.keys(app.exposes ?? {}),
|
|
194
205
|
...'shell' === app.kind ? {
|
|
195
|
-
verticalRefs: shellHost.verticalRefs,
|
|
206
|
+
verticalRefs: shellHost.verticalRefs ?? [],
|
|
196
207
|
remotes: createModuleFederationRemoteContracts(shellHost, remotes)
|
|
197
208
|
} : app.verticalRefs?.length ? {
|
|
198
209
|
verticalRefs: app.verticalRefs,
|
|
@@ -200,13 +211,11 @@ function createUltramodernConfig(scope, modernVersion, packageSource, apps = [
|
|
|
200
211
|
} : {},
|
|
201
212
|
ssr: true,
|
|
202
213
|
dts: {
|
|
203
|
-
compilerInstance: 'tsgo',
|
|
214
|
+
compilerInstance: 'effect-tsgo',
|
|
204
215
|
tsConfigPath: './tsconfig.mf-types.json'
|
|
205
216
|
}
|
|
206
217
|
},
|
|
207
|
-
...createBackendFederationContract(scope, app)
|
|
208
|
-
backendFederation: createBackendFederationContract(scope, app)
|
|
209
|
-
} : {},
|
|
218
|
+
...optionalJsonEntry('backendFederation', createBackendFederationContract(scope, app)),
|
|
210
219
|
...app.api ? {
|
|
211
220
|
deliveryUnit: deliveryUnitContractBlock(createDeliveryUnitRecord(scope, app))
|
|
212
221
|
} : {},
|
|
@@ -254,7 +263,7 @@ function createUltramodernConfig(scope, modernVersion, packageSource, apps = [
|
|
|
254
263
|
}))
|
|
255
264
|
},
|
|
256
265
|
backendFederation: {
|
|
257
|
-
apps: verticalApiApps(remotes).map((app)=>createBackendFederationSummary(scope, app))
|
|
266
|
+
apps: presentJsonValues(verticalApiApps(remotes).map((app)=>createBackendFederationSummary(scope, app)))
|
|
258
267
|
},
|
|
259
268
|
agentSkills: {
|
|
260
269
|
target: 'codex',
|
|
@@ -96,7 +96,7 @@ nothing.
|
|
|
96
96
|
for (const app of apiApps){
|
|
97
97
|
const buildModulePath = node_path.join(app.directory, 'shared/ultramodern-build.ts');
|
|
98
98
|
const buildArtifactPath = node_path.join(app.directory, 'shared/ultramodern-build.json');
|
|
99
|
-
track(buildModulePath, writeTextIfChanged(node_path.join(workspaceRoot, buildModulePath), createUltramodernBuildModule()));
|
|
99
|
+
track(buildModulePath, writeTextIfChanged(node_path.join(workspaceRoot, buildModulePath), createUltramodernBuildModule(scope, app)));
|
|
100
100
|
track(buildArtifactPath, writeTextIfChanged(node_path.join(workspaceRoot, buildArtifactPath), createUltramodernBuildArtifactJson(scope, app)));
|
|
101
101
|
}
|
|
102
102
|
if (0 === written.length) process.stdout.write('[ultramodern] sync-delivery-unit: already in sync; no files written.\n');
|
|
@@ -211,4 +211,4 @@ function remoteComponentOutputPath(app, expose) {
|
|
|
211
211
|
if (!exposePath?.startsWith('./src/components/')) return;
|
|
212
212
|
return `${app.directory}/${exposePath.replace(/^\.\//u, '')}`;
|
|
213
213
|
}
|
|
214
|
-
export { createLayout, createRemoteEntry, createRemoteExposeComponent, createRemotePage,
|
|
214
|
+
export { createLayout, createRemoteEntry, createRemoteExposeComponent, createRemotePage, createShellPage, createShellRemoteComponents, remoteComponentOutputPath };
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { spawnSync } from "node:child_process";
|
|
2
|
-
import node_crypto from "node:crypto";
|
|
3
2
|
import node_fs from "node:fs";
|
|
4
3
|
import { createRequire } from "node:module";
|
|
5
4
|
import node_path from "node:path";
|
|
@@ -196,19 +195,6 @@ function collectTemplateFiles(dir) {
|
|
|
196
195
|
collect(dir);
|
|
197
196
|
return files;
|
|
198
197
|
}
|
|
199
|
-
function hashFile(filePath) {
|
|
200
|
-
return node_crypto.createHash('sha256').update(node_fs.readFileSync(filePath)).digest('hex');
|
|
201
|
-
}
|
|
202
|
-
function hashTemplateTree(dir) {
|
|
203
|
-
const hash = node_crypto.createHash('sha256');
|
|
204
|
-
for (const relativePath of collectTemplateFiles(dir)){
|
|
205
|
-
hash.update(relativePath);
|
|
206
|
-
hash.update('\0');
|
|
207
|
-
hash.update(hashFile(node_path.join(dir, relativePath)));
|
|
208
|
-
hash.update('\0');
|
|
209
|
-
}
|
|
210
|
-
return hash.digest('hex');
|
|
211
|
-
}
|
|
212
198
|
function copyRootTemplate(targetDir, data) {
|
|
213
199
|
for (const relativePath of collectTemplateFiles(workspaceTemplateDir)){
|
|
214
200
|
const sourcePath = node_path.join(workspaceTemplateDir, relativePath);
|
|
@@ -223,4 +209,4 @@ function readJsonFile(filePath) {
|
|
|
223
209
|
function writeJsonFile(filePath, value) {
|
|
224
210
|
node_fs.writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, 'utf-8');
|
|
225
211
|
}
|
|
226
|
-
export {
|
|
212
|
+
export { copyRootTemplate, createPackageRoot, formatGeneratedWorkspaceFiles, readFileTemplate, readJsonFile, renderFileTemplate, renderTemplate, workspaceTemplateDir, writeFile, writeFileReplacing, writeJson, writeJsonFile };
|
|
@@ -119,4 +119,4 @@ function createAppPublicLocaleMessages(app, language, remotes = []) {
|
|
|
119
119
|
if ('shell' !== app.kind) return createAppLocaleMessages(app, language);
|
|
120
120
|
return Object.assign({}, createAppLocaleMessages(app, language), ...remotes.map((remote)=>createAppLocaleMessages(remote, language)));
|
|
121
121
|
}
|
|
122
|
-
export {
|
|
122
|
+
export { createAppPublicLocaleMessages };
|
|
@@ -17,8 +17,9 @@ function extractDtsSettings(configPath, value) {
|
|
|
17
17
|
if (!dts || dts.hasSpread) throw new Error(`Cannot statically extract Module Federation DTS settings from ${configPath}; use a literal dts object.`);
|
|
18
18
|
const generateTypes = parseObjectLiteral(dts.properties.get('generateTypes'));
|
|
19
19
|
if (generateTypes?.hasSpread) throw new Error(`Cannot statically extract Module Federation generateTypes settings from ${configPath}; use a literal generateTypes object.`);
|
|
20
|
+
const compilerInstanceSource = generateTypes?.properties.get('compilerInstance');
|
|
20
21
|
return {
|
|
21
|
-
compilerInstance: parseLiteralString(
|
|
22
|
+
compilerInstance: parseLiteralString(compilerInstanceSource) ?? ('tsgoCompilerInstance' === compilerInstanceSource ? 'effect-tsgo' : void 0),
|
|
22
23
|
tsConfigPath: parseLiteralString(dts.properties.get('tsConfigPath'))
|
|
23
24
|
};
|
|
24
25
|
}
|
|
@@ -42,4 +43,4 @@ function inspectModuleFederationConfigSource(source, appDir, configPath) {
|
|
|
42
43
|
hostOnlyNoExposes
|
|
43
44
|
};
|
|
44
45
|
}
|
|
45
|
-
export {
|
|
46
|
+
export { inspectModuleFederationConfigSource };
|
|
@@ -141,4 +141,4 @@ function parseArrayLiteral(source) {
|
|
|
141
141
|
}
|
|
142
142
|
return exposes;
|
|
143
143
|
}
|
|
144
|
-
export {
|
|
144
|
+
export { parseArrayLiteral, parseLiteralString, parseObjectLiteral };
|
|
@@ -86,4 +86,4 @@ function scanForModuleFederationConfigs(workspaceRoot, scanRoot, appDirs) {
|
|
|
86
86
|
};
|
|
87
87
|
visit(absoluteRoot);
|
|
88
88
|
}
|
|
89
|
-
export {
|
|
89
|
+
export { collectBridgeScanRoots, collectMetadataAppDirs, firstSegment, isRecord, normalizeRelativePath, readGeneratedMetadata, readJsonIfExists, relativePath, scanForModuleFederationConfigs, toPosixPath };
|
|
@@ -151,4 +151,4 @@ function getOuterBlock(source, open, close) {
|
|
|
151
151
|
suffix
|
|
152
152
|
};
|
|
153
153
|
}
|
|
154
|
-
export {
|
|
154
|
+
export { findCreateModuleFederationConfigObject, findExportDefaultObject, getOuterBlock, skipSyntax };
|
|
@@ -5,7 +5,7 @@ import { discoverModuleFederationConfigs } from "./discovery.js";
|
|
|
5
5
|
import { inspectModuleFederationConfigSource } from "./inspect.js";
|
|
6
6
|
import { relativePath } from "./path-utils.js";
|
|
7
7
|
function assertExposedAppDtsSettings(app) {
|
|
8
|
-
if ('tsgo' !== app.dts.compilerInstance) throw new Error(`Module Federation DTS compilerInstance must
|
|
8
|
+
if ('effect-tsgo' !== app.dts.compilerInstance) throw new Error(`Module Federation DTS compilerInstance must resolve "@effect/tsgo" for ${app.appDir}.`);
|
|
9
9
|
if ('./tsconfig.mf-types.json' !== app.dts.tsConfigPath) throw new Error(`Module Federation DTS tsConfigPath must be "./tsconfig.mf-types.json" for ${app.appDir}.`);
|
|
10
10
|
}
|
|
11
11
|
function assertTypesArchive(workspaceRoot, appDir) {
|