@bleedingdev/modern-js-create 3.5.0-ultramodern.3 → 3.5.0-ultramodern.30
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 +21 -17
- package/dist/cjs/ultramodern-tooling/commands.cjs +772 -75
- package/dist/cjs/ultramodern-tooling/config.cjs +149 -8
- package/dist/cjs/ultramodern-workspace/add-vertical.cjs +25 -0
- package/dist/cjs/ultramodern-workspace/api.cjs +44 -0
- package/dist/cjs/ultramodern-workspace/app-files.cjs +8 -11
- package/dist/cjs/ultramodern-workspace/backend-federation.cjs +282 -0
- package/dist/cjs/ultramodern-workspace/contracts.cjs +24 -8
- package/dist/cjs/ultramodern-workspace/delivery-unit-sync.cjs +157 -0
- package/dist/cjs/ultramodern-workspace/delivery-unit.cjs +88 -0
- package/dist/cjs/ultramodern-workspace/descriptors.cjs +24 -0
- package/dist/cjs/ultramodern-workspace/module-federation.cjs +161 -50
- package/dist/cjs/ultramodern-workspace/package-json.cjs +26 -43
- package/dist/cjs/ultramodern-workspace/pnpm-workspace-policy-plan.cjs +166 -0
- package/dist/cjs/ultramodern-workspace/tooling-command-catalog.cjs +153 -0
- package/dist/cjs/ultramodern-workspace/versions.cjs +8 -3
- package/dist/cjs/ultramodern-workspace/workspace-script-plan.cjs +175 -0
- package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +104 -63
- package/dist/cjs/ultramodern-workspace/workspace-validation-contract.cjs +97 -0
- package/dist/cjs/ultramodern-workspace/write-workspace.cjs +11 -3
- package/dist/cjs/ultramodern-workspace/zerops.cjs +100 -0
- package/dist/esm/ultramodern-tooling/commands.js +775 -78
- package/dist/esm/ultramodern-tooling/config.js +144 -9
- package/dist/esm/ultramodern-workspace/add-vertical.js +26 -1
- package/dist/esm/ultramodern-workspace/api.js +43 -2
- package/dist/esm/ultramodern-workspace/app-files.js +8 -11
- package/dist/esm/ultramodern-workspace/backend-federation.js +217 -0
- package/dist/esm/ultramodern-workspace/contracts.js +24 -8
- package/dist/esm/ultramodern-workspace/delivery-unit-sync.js +108 -0
- package/dist/esm/ultramodern-workspace/delivery-unit.js +31 -0
- package/dist/esm/ultramodern-workspace/descriptors.js +13 -1
- package/dist/esm/ultramodern-workspace/module-federation.js +160 -42
- package/dist/esm/ultramodern-workspace/package-json.js +16 -40
- package/dist/esm/ultramodern-workspace/pnpm-workspace-policy-plan.js +113 -0
- package/dist/esm/ultramodern-workspace/tooling-command-catalog.js +100 -0
- package/dist/esm/ultramodern-workspace/versions.js +6 -4
- package/dist/esm/ultramodern-workspace/workspace-script-plan.js +110 -0
- package/dist/esm/ultramodern-workspace/workspace-scripts.js +88 -65
- package/dist/esm/ultramodern-workspace/workspace-validation-contract.js +59 -0
- package/dist/esm/ultramodern-workspace/write-workspace.js +14 -6
- package/dist/esm/ultramodern-workspace/zerops.js +62 -0
- package/dist/esm-node/ultramodern-tooling/commands.js +775 -78
- package/dist/esm-node/ultramodern-tooling/config.js +144 -9
- package/dist/esm-node/ultramodern-workspace/add-vertical.js +26 -1
- package/dist/esm-node/ultramodern-workspace/api.js +43 -2
- package/dist/esm-node/ultramodern-workspace/app-files.js +8 -11
- package/dist/esm-node/ultramodern-workspace/backend-federation.js +218 -0
- package/dist/esm-node/ultramodern-workspace/contracts.js +24 -8
- package/dist/esm-node/ultramodern-workspace/delivery-unit-sync.js +109 -0
- package/dist/esm-node/ultramodern-workspace/delivery-unit.js +32 -0
- package/dist/esm-node/ultramodern-workspace/descriptors.js +13 -1
- package/dist/esm-node/ultramodern-workspace/module-federation.js +160 -42
- package/dist/esm-node/ultramodern-workspace/package-json.js +16 -40
- package/dist/esm-node/ultramodern-workspace/pnpm-workspace-policy-plan.js +114 -0
- package/dist/esm-node/ultramodern-workspace/tooling-command-catalog.js +101 -0
- package/dist/esm-node/ultramodern-workspace/versions.js +6 -4
- package/dist/esm-node/ultramodern-workspace/workspace-script-plan.js +111 -0
- package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +88 -65
- package/dist/esm-node/ultramodern-workspace/workspace-validation-contract.js +60 -0
- package/dist/esm-node/ultramodern-workspace/write-workspace.js +14 -6
- package/dist/esm-node/ultramodern-workspace/zerops.js +63 -0
- package/dist/types/ultramodern-tooling/config.d.ts +6 -0
- package/dist/types/ultramodern-workspace/api.d.ts +1 -0
- package/dist/types/ultramodern-workspace/backend-federation.d.ts +11 -0
- package/dist/types/ultramodern-workspace/contracts.d.ts +1 -1
- package/dist/types/ultramodern-workspace/delivery-unit-sync.d.ts +6 -0
- package/dist/types/ultramodern-workspace/delivery-unit.d.ts +27 -0
- package/dist/types/ultramodern-workspace/descriptors.d.ts +4 -0
- package/dist/types/ultramodern-workspace/module-federation.d.ts +4 -9
- package/dist/types/ultramodern-workspace/package-json.d.ts +0 -1
- package/dist/types/ultramodern-workspace/pnpm-workspace-policy-plan.d.ts +39 -0
- package/dist/types/ultramodern-workspace/tooling-command-catalog.d.ts +18 -0
- package/dist/types/ultramodern-workspace/versions.d.ts +5 -3
- package/dist/types/ultramodern-workspace/workspace-script-plan.d.ts +72 -0
- package/dist/types/ultramodern-workspace/workspace-scripts.d.ts +13 -0
- package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +42 -0
- package/dist/types/ultramodern-workspace/zerops.d.ts +2 -0
- package/package.json +3 -3
- package/template-workspace/.gitignore.handlebars +4 -0
- package/template-workspace/README.md.handlebars +18 -15
- package/template-workspace/patches/@module-federation__bridge-react@2.6.0.patch +140 -0
- package/template-workspace/patches/@module-federation__modern-js-v3@2.6.0.patch +57 -0
- package/template-workspace/patches/drizzle-orm-ts7-strict-declarations.patch +452 -0
- package/template-workspace/patches/effect-schema-error-type-id.patch +18 -0
- package/template-workspace/pnpm-workspace.yaml.handlebars +8 -0
- package/template-workspace/scripts/bootstrap-agent-skills.mjs +11 -3
- package/templates/workspace-scripts/check-ultramodern-api-boundaries.mts +40 -2
- package/templates/workspace-scripts/generate-node-backend-federation.mjs +270 -0
- package/templates/workspace-scripts/materialize-zerops-runtime.mjs +448 -0
- package/templates/workspace-scripts/proof-cloudflare-version.mjs +237 -9
- package/templates/workspace-scripts/proof-node-backend-federation.mjs +729 -0
- package/templates/workspace-scripts/ultramodern-cloudflare-proof.mjs +188 -2
- package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +434 -18
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import "node:module";
|
|
2
2
|
import node_fs from "node:fs";
|
|
3
|
-
import { createApiClient, createApiServiceEntry, createSharedApi, createShellApiClient } from "./api.js";
|
|
3
|
+
import { createApiClient, createApiServiceEntry, createBackendEffectApiExpose, createSharedApi, createShellApiClient } from "./api.js";
|
|
4
4
|
import { createAppEnvDts, createAppRuntimeConfig, createAppStyles, createPostcssConfig, createSharedDesignTokensCss, createShellFrameComponent, createTailwindConfig } from "./app-files.js";
|
|
5
|
+
import { createBackendFederationContractFile } from "./backend-federation.js";
|
|
5
6
|
import { normalizeUltramodernBridgeConfig } from "./bridge-config.js";
|
|
6
7
|
import { createDevelopmentOverlay, createOwnership, createTopology, createUltramodernConfig } from "./contracts.js";
|
|
7
8
|
import { createLayout, createRemoteEntry, createRemoteExposeComponent, createRemotePage, createShellPage, createShellRemoteComponents, remoteComponentOutputPath } from "./demo-components.js";
|
|
@@ -9,14 +10,15 @@ import { ULTRAMODERN_CONFIG_PATH, appHasApi, appI18nNamespace, createShellHost,
|
|
|
9
10
|
import { copyRootTemplate, formatGeneratedWorkspaceFiles, writeFile, writeFileReplacing, writeJson } from "./fs-io.js";
|
|
10
11
|
import { createFileSnapshot, createGenerationResult, diffFileSnapshots } from "./generation-result.js";
|
|
11
12
|
import { createAppPublicLocaleMessages } from "./locales.js";
|
|
12
|
-
import { createAppModernConfig, createRemoteModuleFederationConfig, createShellModuleFederationConfig, createUltramodernBuildModule, createUltramodernBuildReexportModule } from "./module-federation.js";
|
|
13
|
+
import { createAppModernConfig, createBackendModuleFederationConfig, createRemoteModuleFederationConfig, createShellModuleFederationConfig, createUltramodernBuildModule, createUltramodernBuildReexportModule } from "./module-federation.js";
|
|
13
14
|
import { assertUniqueTailwindPrefixes, toPackageScope } from "./naming.js";
|
|
14
15
|
import { runCodeSmithOverlays } from "./overlays.js";
|
|
15
16
|
import { createAppMfTypesTsConfig, createAppPackage, createAppTsConfig, createRootPackageJson, createRootTsConfig, createSharedContractsIndex, createSharedPackage, createSharedPackageTsConfig, createTsConfigBase } from "./package-json.js";
|
|
16
17
|
import { resolvePackageSource } from "./package-source.js";
|
|
17
18
|
import { createPublicWebAppArtifacts } from "./public-surface.js";
|
|
18
|
-
import { EFFECT_VERSION, EFFECT_VITEST_VERSION, NODE_FETCH_VERSION, NODE_VERSION, PNPM_VERSION, TANSTACK_ROUTER_CORE_VERSION, TANSTACK_ROUTER_VERSION, TYPESCRIPT_VERSION } from "./versions.js";
|
|
19
|
+
import { DRIZZLE_ORM_VERSION, EFFECT_VERSION, EFFECT_VITEST_VERSION, MODULE_FEDERATION_VERSION, NODE_FETCH_VERSION, NODE_VERSION, PNPM_VERSION, TANSTACK_ROUTER_CORE_VERSION, TANSTACK_ROUTER_VERSION, TYPESCRIPT_VERSION } from "./versions.js";
|
|
19
20
|
import { writeGeneratedWorkspaceScripts } from "./workspace-scripts.js";
|
|
21
|
+
import { createZeropsYaml } from "./zerops.js";
|
|
20
22
|
function writeApp(targetDir, scope, app, packageSource, enableTailwind, remotes = [], bridge) {
|
|
21
23
|
const resolvedApp = 'shell' === app.kind ? createShellHost(remotes) : app;
|
|
22
24
|
const publicWeb = createPublicWebAppArtifacts(resolvedApp);
|
|
@@ -32,7 +34,7 @@ function writeApp(targetDir, scope, app, packageSource, enableTailwind, remotes
|
|
|
32
34
|
writeFile(targetDir, publicWeb.jsonLdHelperFile.path, publicWeb.jsonLdHelperFile.content);
|
|
33
35
|
writeFile(targetDir, publicWeb.routeMetadataFile.path, publicWeb.routeMetadataFile.content);
|
|
34
36
|
writeFile(targetDir, publicWeb.routeHeadFile.path, publicWeb.routeHeadFile.content);
|
|
35
|
-
writeFile(targetDir, `${resolvedApp.directory}/modern.config.ts`, createAppModernConfig(scope, resolvedApp));
|
|
37
|
+
writeFile(targetDir, `${resolvedApp.directory}/modern.config.ts`, createAppModernConfig(scope, resolvedApp, remotes));
|
|
36
38
|
writeFile(targetDir, `${resolvedApp.directory}/src/modern.runtime.ts`, createAppRuntimeConfig(resolvedApp, scope, remotes));
|
|
37
39
|
writeJson(targetDir, `${resolvedApp.directory}/locales/en/translation.json`, createAppPublicLocaleMessages(resolvedApp, 'en', remotes));
|
|
38
40
|
writeJson(targetDir, `${resolvedApp.directory}/locales/en/${appI18nNamespace(resolvedApp)}.json`, createAppPublicLocaleMessages(resolvedApp, 'en', remotes));
|
|
@@ -44,6 +46,7 @@ function writeApp(targetDir, scope, app, packageSource, enableTailwind, remotes
|
|
|
44
46
|
writeFile(targetDir, `${resolvedApp.directory}/tailwind.config.ts`, createTailwindConfig());
|
|
45
47
|
}
|
|
46
48
|
writeFile(targetDir, `${resolvedApp.directory}/module-federation.config.ts`, 'shell' === resolvedApp.kind ? createShellModuleFederationConfig(scope, remotes) : createRemoteModuleFederationConfig(scope, resolvedApp, remotes));
|
|
49
|
+
if (appHasApi(resolvedApp)) writeFile(targetDir, `${resolvedApp.directory}/backend-federation.config.ts`, createBackendModuleFederationConfig(resolvedApp));
|
|
47
50
|
writeAppFile('src/routes/layout.tsx', createLayout(resolvedApp.id));
|
|
48
51
|
writeAppFile('src/routes/[lang]/page.tsx', 'shell' === resolvedApp.kind ? createShellPage(remotes) : createRemotePage(resolvedApp));
|
|
49
52
|
for (const generatedFile of publicWeb.routeMetaFiles)writeFile(targetDir, generatedFile.path, generatedFile.content);
|
|
@@ -56,6 +59,8 @@ function writeApp(targetDir, scope, app, packageSource, enableTailwind, remotes
|
|
|
56
59
|
if (appHasApi(resolvedApp)) {
|
|
57
60
|
writeFile(targetDir, `${resolvedApp.directory}/shared/api.ts`, createSharedApi(resolvedApp));
|
|
58
61
|
writeFile(targetDir, `${resolvedApp.directory}/api/index.ts`, createApiServiceEntry(resolvedApp, '../shared/api.ts'));
|
|
62
|
+
writeFile(targetDir, `${resolvedApp.directory}/api/backend-federation.ts`, createBackendFederationContractFile(resolvedApp));
|
|
63
|
+
writeFile(targetDir, `${resolvedApp.directory}/api/effect-api.ts`, createBackendEffectApiExpose(scope, resolvedApp));
|
|
59
64
|
writeFile(targetDir, `${resolvedApp.directory}/src/api/${resolvedApp.api.stem}-client.ts`, createApiClient(resolvedApp, '../../shared/api'));
|
|
60
65
|
}
|
|
61
66
|
if ('vertical' === resolvedApp.kind) {
|
|
@@ -105,7 +110,7 @@ function writePnpmWorkspacePackages(targetDir, bridge) {
|
|
|
105
110
|
...bridge.workspacePackages.map((entry)=>entry.pattern)
|
|
106
111
|
];
|
|
107
112
|
const renderedPackages = packages.map((pattern)=>` - ${pattern}`).join('\n');
|
|
108
|
-
writeFileReplacing(targetDir, 'pnpm-workspace.yaml', pnpmWorkspace.replace(/^packages:\n(?: {2}- .+\n)+/u, `packages:\n${renderedPackages}\n`));
|
|
113
|
+
writeFileReplacing(targetDir, 'pnpm-workspace.yaml', pnpmWorkspace.replace(/^packages:\r?\n(?: {2}- .+\r?\n)+/u, `packages:\n${renderedPackages}\n`));
|
|
109
114
|
}
|
|
110
115
|
function generateUltramodernWorkspace(options) {
|
|
111
116
|
const beforeFiles = createFileSnapshot(options.targetDir);
|
|
@@ -131,8 +136,10 @@ function generateUltramodernWorkspace(options) {
|
|
|
131
136
|
nodeVersion: NODE_VERSION,
|
|
132
137
|
pnpmVersion: PNPM_VERSION,
|
|
133
138
|
nodeFetchVersion: NODE_FETCH_VERSION,
|
|
139
|
+
drizzleOrmVersion: DRIZZLE_ORM_VERSION,
|
|
134
140
|
effectVersion: EFFECT_VERSION,
|
|
135
141
|
effectVitestVersion: EFFECT_VITEST_VERSION,
|
|
142
|
+
moduleFederationVersion: MODULE_FEDERATION_VERSION,
|
|
136
143
|
tanstackRouterCoreVersion: TANSTACK_ROUTER_CORE_VERSION,
|
|
137
144
|
tanstackRouterVersion: TANSTACK_ROUTER_VERSION,
|
|
138
145
|
typescriptVersion: TYPESCRIPT_VERSION,
|
|
@@ -140,11 +147,12 @@ function generateUltramodernWorkspace(options) {
|
|
|
140
147
|
});
|
|
141
148
|
writePnpmWorkspacePackages(options.targetDir, bridge);
|
|
142
149
|
writeJson(options.targetDir, 'package.json', createCompactRootPackageJson(scope, packageSource, initialVerticals, bridge));
|
|
150
|
+
writeFile(options.targetDir, 'zerops.yaml', `${createZeropsYaml(scope, createdApps)}\n`);
|
|
143
151
|
writeJson(options.targetDir, 'tsconfig.base.json', createTsConfigBase());
|
|
144
152
|
writeJson(options.targetDir, 'tsconfig.json', createRootTsConfig(createdApps));
|
|
145
153
|
writeJson(options.targetDir, 'topology/reference-topology.json', createTopology(scope, initialVerticals));
|
|
146
154
|
writeJson(options.targetDir, 'topology/ownership.json', createOwnership(scope, initialVerticals));
|
|
147
|
-
writeJson(options.targetDir, 'topology/local-overlays/development.json', createDevelopmentOverlay(initialVerticals));
|
|
155
|
+
writeJson(options.targetDir, 'topology/local-overlays/development.json', createDevelopmentOverlay(scope, initialVerticals));
|
|
148
156
|
writeJson(options.targetDir, ULTRAMODERN_CONFIG_PATH, createCompactUltramodernConfig(scope, options.modernVersion, packageSource, createdApps, enableTailwind, bridge));
|
|
149
157
|
writeApp(options.targetDir, scope, shellApp, packageSource, enableTailwind, initialVerticals, bridge);
|
|
150
158
|
for (const remote of initialVerticals)writeApp(options.targetDir, scope, remote, packageSource, enableTailwind, initialVerticals, bridge);
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import "node:module";
|
|
2
|
+
import { appHasApi, resolveApiPrefix, resolveApiStem } from "./descriptors.js";
|
|
3
|
+
import { packageName } from "./naming.js";
|
|
4
|
+
import { NODE_VERSION } from "./versions.js";
|
|
5
|
+
const zeropsNodeRuntime = `nodejs@${NODE_VERSION.split('.')[0]}`;
|
|
6
|
+
function quoteYamlString(value) {
|
|
7
|
+
return `'${value.replace(/'/gu, "''")}'`;
|
|
8
|
+
}
|
|
9
|
+
function readinessPath(app) {
|
|
10
|
+
if (!appHasApi(app)) return '/';
|
|
11
|
+
return `${resolveApiPrefix(app)}/${resolveApiStem(app)}/readiness`;
|
|
12
|
+
}
|
|
13
|
+
function createZeropsService(scope, app) {
|
|
14
|
+
const runtimeDirectory = `.zerops/runtime/${app.id}`;
|
|
15
|
+
const appPackageName = packageName(scope, app.packageSuffix);
|
|
16
|
+
const commands = [
|
|
17
|
+
'curl https://mise.run | sh',
|
|
18
|
+
'~/.local/bin/mise install',
|
|
19
|
+
'~/.local/bin/mise exec -- pnpm install --frozen-lockfile',
|
|
20
|
+
`~/.local/bin/mise exec -- pnpm --filter ${appPackageName} run build`,
|
|
21
|
+
`~/.local/bin/mise exec -- pnpm run zerops:materialize -- --app ${app.id} --package ${appPackageName} --package-dir ${app.directory}`,
|
|
22
|
+
`cp topology/reference-topology.json ${runtimeDirectory}/topology.json`,
|
|
23
|
+
`cp topology/local-overlays/development.json ${runtimeDirectory}/local-overlay.json`
|
|
24
|
+
];
|
|
25
|
+
return [
|
|
26
|
+
` - setup: ${app.id}`,
|
|
27
|
+
' build:',
|
|
28
|
+
` base: ${zeropsNodeRuntime}`,
|
|
29
|
+
' buildCommands:',
|
|
30
|
+
' - |',
|
|
31
|
+
...commands.map((command)=>` ${command}`),
|
|
32
|
+
' deployFiles:',
|
|
33
|
+
` - ${runtimeDirectory}`,
|
|
34
|
+
' deploy:',
|
|
35
|
+
' temporaryShutdown: false',
|
|
36
|
+
' readinessCheck:',
|
|
37
|
+
' httpGet:',
|
|
38
|
+
` port: ${app.port}`,
|
|
39
|
+
` path: ${readinessPath(app)}`,
|
|
40
|
+
' failureTimeout: 120',
|
|
41
|
+
' retryPeriod: 10',
|
|
42
|
+
' run:',
|
|
43
|
+
` base: ${zeropsNodeRuntime}`,
|
|
44
|
+
' ports:',
|
|
45
|
+
` - port: ${app.port}`,
|
|
46
|
+
' protocol: TCP',
|
|
47
|
+
' httpSupport: true',
|
|
48
|
+
' envVariables:',
|
|
49
|
+
' NODE_ENV: production',
|
|
50
|
+
` ${app.portEnv}: ${quoteYamlString(String(app.port))}`,
|
|
51
|
+
` ULTRAMODERN_ZEROPS_SERVICE: ${quoteYamlString(app.id)}`,
|
|
52
|
+
` start: cd ${runtimeDirectory} && npm run serve`
|
|
53
|
+
].join('\n');
|
|
54
|
+
}
|
|
55
|
+
function createZeropsYaml(scope, apps) {
|
|
56
|
+
return [
|
|
57
|
+
'# Generated by Modern.js UltraModern workspace tooling.',
|
|
58
|
+
'# Zerops runs each full-stack MicroVertical as a package-owned Node service.',
|
|
59
|
+
'zerops:',
|
|
60
|
+
...apps.map((app)=>createZeropsService(scope, app))
|
|
61
|
+
].join('\n\n');
|
|
62
|
+
}
|
|
63
|
+
export { createZeropsYaml };
|
|
@@ -39,5 +39,11 @@ export type UltramodernToolingConfig = {
|
|
|
39
39
|
apps: UltramodernToolingConfigApp[];
|
|
40
40
|
};
|
|
41
41
|
};
|
|
42
|
+
export declare function normalizeCompactUltramodernConfig(workspaceRoot: string, compact: Record<string, any>): UltramodernToolingConfig;
|
|
43
|
+
export declare function synthesizeCompactUltramodernConfig(workspaceRoot: string): {
|
|
44
|
+
compact: Record<string, any>;
|
|
45
|
+
missing: string[];
|
|
46
|
+
sources: string[];
|
|
47
|
+
} | undefined;
|
|
42
48
|
export declare function readUltramodernConfig(workspaceRoot?: any): UltramodernToolingConfig;
|
|
43
49
|
export declare function workspaceAppsFromToolingConfig(config: UltramodernToolingConfig): WorkspaceApp[];
|
|
@@ -52,6 +52,7 @@ export declare function createApiServiceEntry(service: {
|
|
|
52
52
|
id: string;
|
|
53
53
|
api?: WorkspaceApi;
|
|
54
54
|
}, contractImportPath: string): string;
|
|
55
|
+
export declare function createBackendEffectApiExpose(scope: string, service: WorkspaceApp): string;
|
|
55
56
|
export declare function createApiClient(service: {
|
|
56
57
|
id: string;
|
|
57
58
|
api?: WorkspaceApi;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { JsonValue, WorkspaceApp } from './types';
|
|
2
|
+
export declare const BACKEND_FEDERATION_CONTRACT_VERSION = "microvertical-server-effect-v1";
|
|
3
|
+
export declare const BACKEND_FEDERATION_NODE_ADAPTER_VERSION = "backend-mf-effect-v1";
|
|
4
|
+
export declare function createWorkerBindingName(app: WorkspaceApp): string;
|
|
5
|
+
export declare function createWorkerBindingEnv(app: WorkspaceApp): string;
|
|
6
|
+
export declare function createDispatchWorkerNameEnv(app: WorkspaceApp): string;
|
|
7
|
+
export declare function createServerExecutionOverlay(scope: string, app: WorkspaceApp): JsonValue | undefined;
|
|
8
|
+
export declare function createBackendFederationContract(scope: string, app: WorkspaceApp): JsonValue | undefined;
|
|
9
|
+
export declare function createBackendFederationMetadata(scope: string, app: WorkspaceApp): JsonValue | undefined;
|
|
10
|
+
export declare function createBackendFederationContractFile(app: WorkspaceApp): string;
|
|
11
|
+
export declare function createBackendFederationSummary(scope: string, app: WorkspaceApp): JsonValue | undefined;
|
|
@@ -2,5 +2,5 @@ import type { UltramodernBridgeConfig } from './bridge-config';
|
|
|
2
2
|
import type { JsonValue, ResolvedPackageSource, WorkspaceApp } from './types';
|
|
3
3
|
export declare function createTopology(scope: string, remotes?: WorkspaceApp[]): JsonValue;
|
|
4
4
|
export declare function createOwnership(scope: string, remotes?: WorkspaceApp[]): JsonValue;
|
|
5
|
-
export declare function createDevelopmentOverlay(remotes?: WorkspaceApp[]): JsonValue;
|
|
5
|
+
export declare function createDevelopmentOverlay(scope: string, remotes?: WorkspaceApp[]): JsonValue;
|
|
6
6
|
export declare function createUltramodernConfig(scope: string, modernVersion: string, packageSource: ResolvedPackageSource, apps?: WorkspaceApp[], enableTailwind?: boolean, bridge?: UltramodernBridgeConfig): JsonValue;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { WorkspaceApp } from './types';
|
|
2
|
+
export declare const DELIVERY_UNIT_SCHEMA_VERSION = 1;
|
|
3
|
+
export type DeliveryUnitRecord = {
|
|
4
|
+
schemaVersion: 1;
|
|
5
|
+
kind: 'microvertical-delivery-unit';
|
|
6
|
+
unitId: string;
|
|
7
|
+
appId: string;
|
|
8
|
+
packageName: string;
|
|
9
|
+
version: string;
|
|
10
|
+
sourceRevision: string;
|
|
11
|
+
buildMarker: string;
|
|
12
|
+
deployProfile: 'cloudflare-ssr-mf-effect-v1';
|
|
13
|
+
};
|
|
14
|
+
export declare function createBuildMarker(scope: string, app: {
|
|
15
|
+
id: string;
|
|
16
|
+
packageSuffix: string;
|
|
17
|
+
}): any;
|
|
18
|
+
export declare function deliveryUnitContractBlock(record: DeliveryUnitRecord): {
|
|
19
|
+
schemaVersion: 1;
|
|
20
|
+
kind: "microvertical-delivery-unit";
|
|
21
|
+
unitId: string;
|
|
22
|
+
packageName: string;
|
|
23
|
+
version: string;
|
|
24
|
+
buildMarker: string;
|
|
25
|
+
sourceRevision: string;
|
|
26
|
+
};
|
|
27
|
+
export declare function createDeliveryUnitRecord(scope: string, app: WorkspaceApp): DeliveryUnitRecord;
|
|
@@ -27,6 +27,10 @@ export declare function remoteDependencyAlias(remote: WorkspaceApp): string;
|
|
|
27
27
|
export declare function zephyrRemoteDependency(scope: string, remote: WorkspaceApp): string;
|
|
28
28
|
export declare function resolveRemoteRefs(app: WorkspaceApp, remotes?: WorkspaceApp[]): WorkspaceApp[];
|
|
29
29
|
export declare function createRemoteManifestEnv(remote: WorkspaceApp): string;
|
|
30
|
+
export declare function createBackendFederationManifestEnv(remote: WorkspaceApp): string;
|
|
31
|
+
export declare function createBackendFederationName(app: WorkspaceApp): string;
|
|
32
|
+
export declare function createBackendFederationManifestUrl(app: WorkspaceApp): string;
|
|
33
|
+
export declare function createBackendFederationContainerEntry(app: WorkspaceApp): string;
|
|
30
34
|
export declare function createModuleFederationRemoteContracts(app: WorkspaceApp, remotes?: WorkspaceApp[]): {
|
|
31
35
|
id: string;
|
|
32
36
|
alias: string;
|
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
import type { WorkspaceApp } from './types';
|
|
2
|
-
export declare function createAppModernConfig(scope: string, app: WorkspaceApp): string;
|
|
2
|
+
export declare function createAppModernConfig(scope: string, app: WorkspaceApp, remotes?: WorkspaceApp[]): string;
|
|
3
3
|
export declare function createSharedModuleFederationConfig(): string;
|
|
4
4
|
export declare function formatTsObjectLiteral(value: Record<string, string>): string;
|
|
5
5
|
export declare function createModuleFederationRemoteUrlHelpers(app: WorkspaceApp, remotes?: WorkspaceApp[]): string;
|
|
6
6
|
export declare function createModuleFederationRemotesConfig(scope: string, app: WorkspaceApp, remotes?: WorkspaceApp[]): string;
|
|
7
7
|
export declare function createShellModuleFederationConfig(scope: string, remotes?: WorkspaceApp[]): string;
|
|
8
|
-
export declare function
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}): any;
|
|
12
|
-
export declare function createUltramodernBuildModule(scope: string, app: {
|
|
13
|
-
id: string;
|
|
14
|
-
packageSuffix: string;
|
|
15
|
-
}): string;
|
|
8
|
+
export declare function createBackendModuleFederationConfig(app: WorkspaceApp): string;
|
|
9
|
+
export { createBuildMarker } from './delivery-unit';
|
|
10
|
+
export declare function createUltramodernBuildModule(scope: string, app: WorkspaceApp): string;
|
|
16
11
|
export declare function createUltramodernBuildReexportModule(): string;
|
|
17
12
|
export declare function createRemoteModuleFederationConfig(scope: string, app: WorkspaceApp, remotes?: WorkspaceApp[]): string;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { UltramodernBridgeConfig } from './bridge-config';
|
|
2
2
|
import type { JsonValue, ResolvedPackageSource, WorkspaceApp } from './types';
|
|
3
|
-
export declare const createStrictTsgoTypecheckCommand: (packageDir: string) => string;
|
|
4
3
|
export declare const effectDiagnostics: string[];
|
|
5
4
|
export declare function appDependencies(scope: string, packageSource: ResolvedPackageSource, app: WorkspaceApp, remotes?: WorkspaceApp[], bridge?: UltramodernBridgeConfig): Record<string, string>;
|
|
6
5
|
export declare function appDevDependencies(packageSource: ResolvedPackageSource, enableTailwind: boolean): Record<string, string>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export declare const strictEffectPackageVersionPolicyExclusions: string[];
|
|
2
|
+
export declare const moduleFederationModernJsPatchPath = "patches/@module-federation__modern-js-v3@2.6.0.patch";
|
|
3
|
+
export declare const moduleFederationBridgeReactPatchPath = "patches/@module-federation__bridge-react@2.6.0.patch";
|
|
4
|
+
export declare const effectDeclarationPatchPath = "patches/effect-schema-error-type-id.patch";
|
|
5
|
+
export declare const drizzleOrmDeclarationPatchPath = "patches/drizzle-orm-ts7-strict-declarations.patch";
|
|
6
|
+
export type PnpmWorkspaceYamlAction = {
|
|
7
|
+
kind: 'replace-line';
|
|
8
|
+
pattern: RegExp;
|
|
9
|
+
replacement: string;
|
|
10
|
+
} | {
|
|
11
|
+
kind: 'ensure-scalar-map-entry';
|
|
12
|
+
key: string;
|
|
13
|
+
entryKey: string;
|
|
14
|
+
value: string;
|
|
15
|
+
} | {
|
|
16
|
+
kind: 'ensure-list-item';
|
|
17
|
+
key: string;
|
|
18
|
+
item: string;
|
|
19
|
+
} | {
|
|
20
|
+
kind: 'ensure-map-entry';
|
|
21
|
+
key: string;
|
|
22
|
+
entryKey: string;
|
|
23
|
+
value: string;
|
|
24
|
+
} | {
|
|
25
|
+
kind: 'remove-map-entry';
|
|
26
|
+
entryKey: string;
|
|
27
|
+
};
|
|
28
|
+
export type GeneratedDeclarationPatchAction = {
|
|
29
|
+
kind: 'ensure' | 'remove-if-unchanged';
|
|
30
|
+
relativePatchPath: string;
|
|
31
|
+
};
|
|
32
|
+
export type PnpmWorkspacePolicyPlan = {
|
|
33
|
+
yamlActions: PnpmWorkspaceYamlAction[];
|
|
34
|
+
declarationPatchActions: GeneratedDeclarationPatchAction[];
|
|
35
|
+
requiresInstallOnChange: boolean;
|
|
36
|
+
};
|
|
37
|
+
export declare function createPnpmWorkspacePolicyPlan(options: {
|
|
38
|
+
usesDrizzleOrm: boolean;
|
|
39
|
+
}): PnpmWorkspacePolicyPlan;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type GeneratedToolingCommandId = 'validate' | 'typecheck' | 'mfTypes' | 'publicSurface' | 'backendFederationGenerate' | 'backendFederationProof' | 'cloudflareProof' | 'cloudflareOutputVerify' | 'performanceReadiness' | 'migrateStrictEffect' | 'routesGenerate';
|
|
2
|
+
export type GeneratedToolingCommandKey = GeneratedToolingCommandId;
|
|
3
|
+
export interface GeneratedToolingCommand {
|
|
4
|
+
id: GeneratedToolingCommandId;
|
|
5
|
+
command: string;
|
|
6
|
+
wrapperName: string;
|
|
7
|
+
wrapperPath: `scripts/${string}.mts`;
|
|
8
|
+
contractKey: string;
|
|
9
|
+
rootScript?: string;
|
|
10
|
+
templatePath?: `templates/workspace-scripts/${string}.mjs`;
|
|
11
|
+
cwd?: 'invocation';
|
|
12
|
+
}
|
|
13
|
+
export declare const generatedToolingCommands: readonly [GeneratedToolingCommand, GeneratedToolingCommand, GeneratedToolingCommand, GeneratedToolingCommand, GeneratedToolingCommand, GeneratedToolingCommand, GeneratedToolingCommand, GeneratedToolingCommand, GeneratedToolingCommand, GeneratedToolingCommand, GeneratedToolingCommand];
|
|
14
|
+
export declare const toolingCommandById: Record<GeneratedToolingCommandId, GeneratedToolingCommand>;
|
|
15
|
+
export declare const GENERATED_TOOLING_COMMANDS: Record<GeneratedToolingCommandId, GeneratedToolingCommand>;
|
|
16
|
+
export declare const generatedToolingCommandList: () => string[];
|
|
17
|
+
export declare const createToolingWrapperContract: () => Record<GeneratedToolingCommandKey, GeneratedToolingCommand['wrapperPath']>;
|
|
18
|
+
export declare const createGeneratedToolingWrapperMap: () => Record<GeneratedToolingCommandKey, GeneratedToolingCommand['wrapperPath']>;
|
|
@@ -13,9 +13,10 @@ export declare const CLOUDFLARE_COMPATIBILITY_DATE = "2026-06-02";
|
|
|
13
13
|
export declare const TAILWIND_VERSION = "4.3.1";
|
|
14
14
|
export declare const TAILWIND_POSTCSS_VERSION = "4.3.1";
|
|
15
15
|
export declare const POSTCSS_VERSION = "8.5.15";
|
|
16
|
-
export declare const EFFECT_VERSION = "4.0.0-beta.
|
|
17
|
-
export declare const EFFECT_VITEST_VERSION = "4.0.0-beta.
|
|
16
|
+
export declare const EFFECT_VERSION = "4.0.0-beta.92";
|
|
17
|
+
export declare const EFFECT_VITEST_VERSION = "4.0.0-beta.92";
|
|
18
18
|
export declare const EFFECT_TSGO_VERSION = "0.14.6";
|
|
19
|
+
export declare const DRIZZLE_ORM_VERSION = "1.0.0-rc.4";
|
|
19
20
|
export declare const TYPESCRIPT_STABLE_VERSION = "6.0.3";
|
|
20
21
|
export declare const TYPESCRIPT_NATIVE_PREVIEW_VERSION = "7.0.0-dev.20260628.1";
|
|
21
22
|
export declare const TYPESCRIPT_VERSION = "6.0.3";
|
|
@@ -27,7 +28,7 @@ export declare const I18NEXT_VERSION = "26.3.1";
|
|
|
27
28
|
export declare const NODE_FETCH_VERSION = "^3.3.2";
|
|
28
29
|
export declare const REACT_VERSION = "^19.2.7";
|
|
29
30
|
export declare const REACT_DOM_VERSION = "^19.2.7";
|
|
30
|
-
export declare const REACT_ROUTER_VERSION = "7.18.
|
|
31
|
+
export declare const REACT_ROUTER_VERSION = "7.18.1";
|
|
31
32
|
export declare const TYPES_REACT_VERSION = "^19.2.17";
|
|
32
33
|
export declare const TYPES_REACT_DOM_VERSION = "^19.2.3";
|
|
33
34
|
export declare const NODE_VERSION = "26.3.0";
|
|
@@ -40,6 +41,7 @@ export declare const ultramodernWorkspaceVersions: {
|
|
|
40
41
|
moduleFederation: string;
|
|
41
42
|
effect: string;
|
|
42
43
|
effectVitest: string;
|
|
44
|
+
drizzleOrm: string;
|
|
43
45
|
tailwind: string;
|
|
44
46
|
tailwindPostcss: string;
|
|
45
47
|
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type GeneratedToolingCommandKey } from './tooling-command-catalog';
|
|
2
|
+
import type { WorkspaceApp } from './types';
|
|
3
|
+
export declare const rootToolingScriptName: (key: GeneratedToolingCommandKey) => string;
|
|
4
|
+
export declare const rootToolingWrapperCommand: (key: GeneratedToolingCommandKey) => string;
|
|
5
|
+
export declare const packageToolingWrapperCommand: (packageDir: string, key: GeneratedToolingCommandKey) => string;
|
|
6
|
+
export interface WorkspaceRootScriptPlan {
|
|
7
|
+
build: string;
|
|
8
|
+
cloudflareBuild: string;
|
|
9
|
+
cloudflareDeploy: string;
|
|
10
|
+
cloudflareProof: string;
|
|
11
|
+
cloudflareOutputVerify: string;
|
|
12
|
+
backendFederationGenerate: string;
|
|
13
|
+
nodeProof: string;
|
|
14
|
+
mfTypes: string;
|
|
15
|
+
performanceReadiness: string;
|
|
16
|
+
migrateStrictEffect: string;
|
|
17
|
+
zeropsMaterialize: string;
|
|
18
|
+
contractCheck: string;
|
|
19
|
+
typecheck: string;
|
|
20
|
+
check: string;
|
|
21
|
+
}
|
|
22
|
+
export declare const workspaceRootPackageScriptNames: {
|
|
23
|
+
readonly build: 'build';
|
|
24
|
+
readonly cloudflareBuild: 'cloudflare:build';
|
|
25
|
+
readonly cloudflareDeploy: 'cloudflare:deploy';
|
|
26
|
+
readonly cloudflareProof: string;
|
|
27
|
+
readonly cloudflareOutputVerify: string;
|
|
28
|
+
readonly backendFederationGenerate: string;
|
|
29
|
+
readonly nodeProof: string;
|
|
30
|
+
readonly mfTypes: string;
|
|
31
|
+
readonly performanceReadiness: string;
|
|
32
|
+
readonly migrateStrictEffect: string;
|
|
33
|
+
readonly zeropsMaterialize: 'zerops:materialize';
|
|
34
|
+
readonly contractCheck: string;
|
|
35
|
+
readonly typecheck: 'typecheck';
|
|
36
|
+
readonly check: 'check';
|
|
37
|
+
};
|
|
38
|
+
export type WorkspaceRootPackageScriptName = (typeof workspaceRootPackageScriptNames)[keyof typeof workspaceRootPackageScriptNames];
|
|
39
|
+
export type WorkspaceRootPackageScripts = Record<WorkspaceRootPackageScriptName, string>;
|
|
40
|
+
export interface WorkspaceAppScriptPlan {
|
|
41
|
+
dev: string;
|
|
42
|
+
build: string;
|
|
43
|
+
cloudflareBuild: string;
|
|
44
|
+
cloudflareDeploy: string;
|
|
45
|
+
cloudflarePreview: string;
|
|
46
|
+
cloudflareProof: string;
|
|
47
|
+
serve: string;
|
|
48
|
+
typecheck: string;
|
|
49
|
+
}
|
|
50
|
+
export declare const workspaceAppPackageScriptNames: {
|
|
51
|
+
readonly dev: 'dev';
|
|
52
|
+
readonly build: 'build';
|
|
53
|
+
readonly cloudflareBuild: 'cloudflare:build';
|
|
54
|
+
readonly cloudflareDeploy: 'cloudflare:deploy';
|
|
55
|
+
readonly cloudflarePreview: 'cloudflare:preview';
|
|
56
|
+
readonly cloudflareProof: 'cloudflare:proof';
|
|
57
|
+
readonly serve: 'serve';
|
|
58
|
+
readonly typecheck: 'typecheck';
|
|
59
|
+
};
|
|
60
|
+
export type WorkspaceAppPackageScriptName = (typeof workspaceAppPackageScriptNames)[keyof typeof workspaceAppPackageScriptNames];
|
|
61
|
+
export type WorkspaceAppPackageScripts = Record<WorkspaceAppPackageScriptName, string>;
|
|
62
|
+
export declare const createStrictTsgoTypecheckCommand: (packageDir: string) => string;
|
|
63
|
+
export declare function createWorkspaceAppScriptPlan(app: WorkspaceApp): WorkspaceAppScriptPlan;
|
|
64
|
+
export declare function createWorkspaceAppPackageScripts(app: WorkspaceApp): WorkspaceAppPackageScripts;
|
|
65
|
+
export declare function createWorkspaceRootScriptPlan(remotes?: WorkspaceApp[], options?: {
|
|
66
|
+
bridgeCheck?: string;
|
|
67
|
+
typecheck?: string;
|
|
68
|
+
}): WorkspaceRootScriptPlan;
|
|
69
|
+
export declare function createWorkspaceRootPackageScripts(remotes?: WorkspaceApp[], options?: {
|
|
70
|
+
bridgeCheck?: string;
|
|
71
|
+
typecheck?: string;
|
|
72
|
+
}): WorkspaceRootPackageScripts;
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import type { WorkspaceApp } from './types';
|
|
2
|
+
export declare function writeGeneratedToolWrapperScripts(targetDir: string): void;
|
|
2
3
|
export declare function createWorkspaceValidationScript(scope: string, enableTailwind: boolean, remotes?: WorkspaceApp[]): string;
|
|
3
4
|
export declare function createWorkspaceI18nBoundaryValidationScript(): string;
|
|
4
5
|
export declare function createWorkspaceApiBoundaryValidationScript(): string;
|
|
5
6
|
export declare function createPerformanceReadinessConfigScript(): string;
|
|
7
|
+
export declare function createNodeBackendFederationProofScript(): string;
|
|
8
|
+
export declare function createZeropsRuntimeMaterializationScript(): string;
|
|
6
9
|
export declare function writeGeneratedWorkspaceScripts(targetDir: string, _scope: string, _enableTailwind: boolean, _remotes?: WorkspaceApp[]): void;
|
|
10
|
+
export declare function createAgentReferenceReposSetupScript(): string;
|
|
11
|
+
export interface MigratedWorkspaceScriptArtifact {
|
|
12
|
+
relativePath: string;
|
|
13
|
+
content: string;
|
|
14
|
+
legacyPath?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function migratedWorkspaceScriptArtifacts(options: {
|
|
17
|
+
shellOnly: boolean;
|
|
18
|
+
}): MigratedWorkspaceScriptArtifact[];
|
|
19
|
+
export declare const migratedWorkspaceScriptBasenames: readonly string[];
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { WorkspaceApp } from './types';
|
|
2
|
+
export type WorkspaceValidationContract = ReturnType<typeof createWorkspaceValidationContract>;
|
|
3
|
+
export declare function createWorkspaceValidationContract(scope: string, enableTailwind: boolean, remotes?: WorkspaceApp[]): {
|
|
4
|
+
packageScope: string;
|
|
5
|
+
versions: {
|
|
6
|
+
cloudflareCompatibilityDate: string;
|
|
7
|
+
effect: string;
|
|
8
|
+
moduleFederation: string;
|
|
9
|
+
node: string;
|
|
10
|
+
pnpm: string;
|
|
11
|
+
};
|
|
12
|
+
tailwindEnabled: boolean;
|
|
13
|
+
fullStackVerticals: {
|
|
14
|
+
id: string;
|
|
15
|
+
domain: string | undefined;
|
|
16
|
+
stem: string;
|
|
17
|
+
group: string;
|
|
18
|
+
path: string;
|
|
19
|
+
port: number;
|
|
20
|
+
mfName: string;
|
|
21
|
+
apiPrefix: string;
|
|
22
|
+
tailwindPrefix: string;
|
|
23
|
+
zephyrAlias: string;
|
|
24
|
+
packageName: string;
|
|
25
|
+
backendFederation: import("./types").JsonValue | undefined;
|
|
26
|
+
deliveryUnit: import("./delivery-unit").DeliveryUnitRecord;
|
|
27
|
+
exposes: string[];
|
|
28
|
+
componentPaths: string[];
|
|
29
|
+
namespace: string;
|
|
30
|
+
routePagePaths: string[];
|
|
31
|
+
routeMetaPaths: string[];
|
|
32
|
+
localisedUrls: Record<string, import("./types").JsonValue>;
|
|
33
|
+
verticalRefs: string[];
|
|
34
|
+
}[];
|
|
35
|
+
shellNamespace: string;
|
|
36
|
+
oldRemotePaths: string[];
|
|
37
|
+
scripts: import("./workspace-script-plan").WorkspaceRootScriptPlan;
|
|
38
|
+
packageScripts: import("./workspace-script-plan").WorkspaceRootPackageScripts;
|
|
39
|
+
cloudflareSecurity: import("./types").JsonValue;
|
|
40
|
+
publicSurfaceManagedSourceAssetPaths: ("config/public/robots.txt" | "config/public/site.webmanifest" | "config/public/sitemap.xml")[];
|
|
41
|
+
shellRouteMetaPaths: string[];
|
|
42
|
+
};
|
package/package.json
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"engines": {
|
|
22
22
|
"node": ">=20"
|
|
23
23
|
},
|
|
24
|
-
"version": "3.5.0-ultramodern.
|
|
24
|
+
"version": "3.5.0-ultramodern.30",
|
|
25
25
|
"types": "./dist/types/index.d.ts",
|
|
26
26
|
"main": "./dist/esm-node/index.js",
|
|
27
27
|
"bin": {
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"@modern-js/codesmith": "2.6.9",
|
|
78
78
|
"oxfmt": "0.56.0",
|
|
79
79
|
"ultracite": "7.8.3",
|
|
80
|
-
"@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.5.0-ultramodern.
|
|
80
|
+
"@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.5.0-ultramodern.30"
|
|
81
81
|
},
|
|
82
82
|
"devDependencies": {
|
|
83
83
|
"@rslib/core": "0.23.1",
|
|
@@ -99,6 +99,6 @@
|
|
|
99
99
|
"test": "rm -rf dist && rslib build -c rslibconfig.mts && rstest --passWithNoTests"
|
|
100
100
|
},
|
|
101
101
|
"ultramodern": {
|
|
102
|
-
"frameworkVersion": "3.5.0-ultramodern.
|
|
102
|
+
"frameworkVersion": "3.5.0-ultramodern.30"
|
|
103
103
|
}
|
|
104
104
|
}
|
|
@@ -117,19 +117,21 @@ regenerating or updating the workspace.
|
|
|
117
117
|
| `ULTRAMODERN_ASSET_PREFIX` | UltraModern compatibility asset prefix | Modern/Rspack-emitted asset URLs when `MODERN_ASSET_PREFIX` is unset |
|
|
118
118
|
| `ULTRAMODERN_PUBLIC_URL_<APP_ID>` | Per-app deployment/proof URL | Cloudflare proof inputs and Module Federation remote URLs |
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
`ULTRAMODERN_ASSET_PREFIX` → origin-relative `/`.
|
|
122
|
-
|
|
120
|
+
Shell asset URLs use this precedence: `MODERN_ASSET_PREFIX` →
|
|
121
|
+
`ULTRAMODERN_ASSET_PREFIX` → origin-relative `/`. Module Federation remotes use
|
|
122
|
+
the same env precedence, then fall back to their per-app public origin:
|
|
123
|
+
configured public URL, inferred workers.dev URL, or local dev port.
|
|
124
|
+
`MODERN_PUBLIC_SITE_URL` is canonical/SEO-only and must not be used as an
|
|
125
|
+
asset-prefix fallback.
|
|
123
126
|
SEO output uses `MODERN_PUBLIC_SITE_URL`; if it is unset, generated local and
|
|
124
127
|
preview outputs remain non-public until deployment proof provides explicit
|
|
125
128
|
public URLs.
|
|
126
129
|
|
|
127
|
-
Without public URLs configured, asset paths are origin-relative (`/`)
|
|
128
|
-
dev
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
from.
|
|
130
|
+
Without public URLs configured, shell asset paths are origin-relative (`/`).
|
|
131
|
+
Remote dev manifests publish their own local origin so host shells load
|
|
132
|
+
`remoteEntry.js` and exposed chunks from the remote dev server. Shell-only
|
|
133
|
+
workspaces can set `MODERN_PUBLIC_SITE_URL` for SEO output without changing
|
|
134
|
+
where assets load from.
|
|
133
135
|
|
|
134
136
|
## Cloudflare Proof
|
|
135
137
|
|
|
@@ -144,7 +146,7 @@ pattern with hyphens converted to underscores and uppercased.
|
|
|
144
146
|
```bash
|
|
145
147
|
pnpm cloudflare:deploy
|
|
146
148
|
ULTRAMODERN_PUBLIC_URL_SHELL_SUPER_APP=https://shell-super-app.example.workers.dev \
|
|
147
|
-
pnpm cloudflare:proof --
|
|
149
|
+
pnpm cloudflare:proof --require-public-urls
|
|
148
150
|
```
|
|
149
151
|
|
|
150
152
|
## Strict Effect API
|
|
@@ -169,15 +171,16 @@ in API modules.
|
|
|
169
171
|
Generated pnpm overrides pin the framework-compatible Effect cohort. Keep
|
|
170
172
|
`effect` and `@effect/vitest` aligned with `pnpm-workspace.yaml`; do not add
|
|
171
173
|
new direct package-level Effect versions unless the whole UltraModern cohort is
|
|
172
|
-
upgraded. The generated pnpm
|
|
173
|
-
`@effect/opentelemetry` cohort
|
|
174
|
-
|
|
174
|
+
upgraded. The generated pnpm policy intentionally excludes the matching
|
|
175
|
+
`effect` and `@effect/opentelemetry` cohort versions from the
|
|
176
|
+
minimum-release-age and no-downgrade checks while Effect's beta publishes move
|
|
177
|
+
from trusted-publisher metadata to provenance attestations.
|
|
175
178
|
|
|
176
179
|
For older generated workspaces, run the framework migration command first:
|
|
177
180
|
|
|
178
181
|
```bash
|
|
179
|
-
pnpm dlx @bleedingdev/modern-js-create@3.5.0-ultramodern.
|
|
180
|
-
migrate-strict-effect --version 3.5.0-ultramodern.
|
|
182
|
+
pnpm dlx @bleedingdev/modern-js-create@3.5.0-ultramodern.10 ultramodern \
|
|
183
|
+
migrate-strict-effect --version 3.5.0-ultramodern.10
|
|
181
184
|
pnpm api:check
|
|
182
185
|
pnpm contract:check
|
|
183
186
|
```
|