@bleedingdev/modern-js-create 3.5.0-ultramodern.0 → 3.5.0-ultramodern.2
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 +24 -0
- package/dist/cjs/ultramodern-tooling/commands.cjs +246 -0
- package/dist/cjs/ultramodern-workspace/contracts.cjs +1 -0
- package/dist/cjs/ultramodern-workspace/module-federation.cjs +6 -0
- package/dist/cjs/ultramodern-workspace/package-json.cjs +1 -0
- package/dist/cjs/ultramodern-workspace/versions.cjs +12 -2
- package/dist/cjs/ultramodern-workspace/workspace-scripts.cjs +1 -0
- package/dist/cjs/ultramodern-workspace/write-workspace.cjs +2 -0
- package/dist/esm/ultramodern-tooling/commands.js +246 -0
- package/dist/esm/ultramodern-workspace/contracts.js +1 -0
- package/dist/esm/ultramodern-workspace/module-federation.js +6 -0
- package/dist/esm/ultramodern-workspace/package-json.js +1 -0
- package/dist/esm/ultramodern-workspace/versions.js +7 -3
- package/dist/esm/ultramodern-workspace/workspace-scripts.js +1 -0
- package/dist/esm/ultramodern-workspace/write-workspace.js +3 -1
- package/dist/esm-node/ultramodern-tooling/commands.js +246 -0
- package/dist/esm-node/ultramodern-workspace/contracts.js +1 -0
- package/dist/esm-node/ultramodern-workspace/module-federation.js +6 -0
- package/dist/esm-node/ultramodern-workspace/package-json.js +1 -0
- package/dist/esm-node/ultramodern-workspace/versions.js +7 -3
- package/dist/esm-node/ultramodern-workspace/workspace-scripts.js +1 -0
- package/dist/esm-node/ultramodern-workspace/write-workspace.js +3 -1
- package/dist/types/ultramodern-workspace/versions.d.ts +6 -2
- package/package.json +6 -6
- package/template-workspace/README.md.handlebars +40 -1
- package/template-workspace/pnpm-workspace.yaml.handlebars +3 -0
- package/templates/workspace-scripts/check-ultramodern-api-boundaries.mts +30 -8
- package/templates/workspace-scripts/validate-ultramodern-workspace.mjs.handlebars +2 -0
package/README.md
CHANGED
|
@@ -189,6 +189,30 @@ mise exec -- pnpm check
|
|
|
189
189
|
mise exec -- pnpm build
|
|
190
190
|
```
|
|
191
191
|
|
|
192
|
+
For strict Effect API migrations, update generated package metadata and Modern
|
|
193
|
+
package aliases through the framework command before hand-editing app code:
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
pnpm dlx @bleedingdev/modern-js-create@3.5.0-ultramodern.2 ultramodern \
|
|
197
|
+
migrate-strict-effect --version 3.5.0-ultramodern.2
|
|
198
|
+
pnpm api:check
|
|
199
|
+
pnpm contract:check
|
|
200
|
+
pnpm check
|
|
201
|
+
pnpm build
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
The command updates `.modernjs/ultramodern.json`, root `modernjs.packageSource`,
|
|
205
|
+
generated Modern package aliases, old direct topology metadata, and the pnpm
|
|
206
|
+
lockfile. It does not invent compatibility shims or move business code behind
|
|
207
|
+
your back. If `pnpm api:check` still fails, migrate the source to
|
|
208
|
+
`shared/api.ts`, `api/index.ts`, and `src/api/*-client.ts` and delete
|
|
209
|
+
`api/effect`, `api/lambda`, `shared/effect`, and `src/effect` paths.
|
|
210
|
+
|
|
211
|
+
Generated strict Effect workspaces pin the compatible Effect cohort through
|
|
212
|
+
`pnpm-workspace.yaml` overrides: `effect@4.0.0-beta.91` and
|
|
213
|
+
`@effect/vitest@4.0.0-beta.91`. Do not override those in app packages; update
|
|
214
|
+
the framework cohort when the runtime moves.
|
|
215
|
+
|
|
192
216
|
Use `--ultramodern-package-source=install` for published cohort proof and pin a
|
|
193
217
|
specific release with `--ultramodern-package-version` when CI must prove an
|
|
194
218
|
exact framework version. Keep `--workspace` only for local monorepo testing
|
|
@@ -51,6 +51,7 @@ const external_node_path_namespaceObject = require("node:path");
|
|
|
51
51
|
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
52
52
|
const external_node_url_namespaceObject = require("node:url");
|
|
53
53
|
const external_create_package_root_cjs_namespaceObject = require("../create-package-root.cjs");
|
|
54
|
+
const external_ultramodern_package_source_cjs_namespaceObject = require("../ultramodern-package-source.cjs");
|
|
54
55
|
const mf_validation_cjs_namespaceObject = require("../ultramodern-workspace/mf-validation.cjs");
|
|
55
56
|
const workspace_scripts_cjs_namespaceObject = require("../ultramodern-workspace/workspace-scripts.cjs");
|
|
56
57
|
const external_config_cjs_namespaceObject = require("./config.cjs");
|
|
@@ -64,6 +65,7 @@ Commands:
|
|
|
64
65
|
validate
|
|
65
66
|
typecheck
|
|
66
67
|
mf-types
|
|
68
|
+
migrate-strict-effect
|
|
67
69
|
public-surface
|
|
68
70
|
cloudflare-proof
|
|
69
71
|
performance-readiness
|
|
@@ -129,6 +131,248 @@ Checks real Module Federation config files and DTS archives for exposed apps.
|
|
|
129
131
|
});
|
|
130
132
|
return 0;
|
|
131
133
|
}
|
|
134
|
+
const modernPackageNames = new Set([
|
|
135
|
+
...external_ultramodern_package_source_cjs_namespaceObject.ULTRAMODERN_SINGLE_APP_MODERN_PACKAGES,
|
|
136
|
+
...external_ultramodern_package_source_cjs_namespaceObject.ULTRAMODERN_WORKSPACE_MODERN_PACKAGES
|
|
137
|
+
]);
|
|
138
|
+
function readJsonFile(filePath) {
|
|
139
|
+
return JSON.parse(external_node_fs_default().readFileSync(filePath, 'utf-8'));
|
|
140
|
+
}
|
|
141
|
+
function writeJsonFile(filePath, value) {
|
|
142
|
+
external_node_fs_default().writeFileSync(filePath, `${JSON.stringify(value, null, 2)}\n`, 'utf-8');
|
|
143
|
+
}
|
|
144
|
+
function readOption(args, name) {
|
|
145
|
+
const prefix = `${name}=`;
|
|
146
|
+
const inline = args.find((arg)=>arg.startsWith(prefix));
|
|
147
|
+
if (inline) {
|
|
148
|
+
const value = inline.slice(prefix.length);
|
|
149
|
+
if (!value) throw new Error(`${name} needs a value.`);
|
|
150
|
+
return value;
|
|
151
|
+
}
|
|
152
|
+
const index = args.indexOf(name);
|
|
153
|
+
if (-1 === index) return;
|
|
154
|
+
const value = args[index + 1];
|
|
155
|
+
if (!value || value.startsWith('--')) throw new Error(`${name} needs a value.`);
|
|
156
|
+
return value;
|
|
157
|
+
}
|
|
158
|
+
function hasFlag(args, name) {
|
|
159
|
+
return args.includes(name);
|
|
160
|
+
}
|
|
161
|
+
function listWorkspacePackageFiles(workspaceRoot) {
|
|
162
|
+
const packageFiles = [
|
|
163
|
+
'package.json'
|
|
164
|
+
];
|
|
165
|
+
for (const directory of [
|
|
166
|
+
'apps',
|
|
167
|
+
'verticals',
|
|
168
|
+
'packages'
|
|
169
|
+
]){
|
|
170
|
+
const absoluteDirectory = external_node_path_default().join(workspaceRoot, directory);
|
|
171
|
+
if (external_node_fs_default().existsSync(absoluteDirectory)) for (const entry of external_node_fs_default().readdirSync(absoluteDirectory, {
|
|
172
|
+
withFileTypes: true
|
|
173
|
+
})){
|
|
174
|
+
if (!entry.isDirectory()) continue;
|
|
175
|
+
const packageFile = external_node_path_default().join(directory, entry.name, 'package.json');
|
|
176
|
+
if (external_node_fs_default().existsSync(external_node_path_default().join(workspaceRoot, packageFile))) packageFiles.push(packageFile);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return packageFiles;
|
|
180
|
+
}
|
|
181
|
+
function updateModernDependencies(packageJson, packageSource) {
|
|
182
|
+
let changed = false;
|
|
183
|
+
for (const section of [
|
|
184
|
+
'dependencies',
|
|
185
|
+
'devDependencies',
|
|
186
|
+
'peerDependencies',
|
|
187
|
+
'optionalDependencies'
|
|
188
|
+
]){
|
|
189
|
+
const dependencies = packageJson[section];
|
|
190
|
+
if (!(!dependencies || 'object' != typeof dependencies || Array.isArray(dependencies))) for (const packageName of Object.keys(dependencies)){
|
|
191
|
+
if (!modernPackageNames.has(packageName)) continue;
|
|
192
|
+
const nextSpecifier = (0, external_ultramodern_package_source_cjs_namespaceObject.modernPackageSpecifier)(packageName, packageSource);
|
|
193
|
+
if (dependencies[packageName] !== nextSpecifier) {
|
|
194
|
+
dependencies[packageName] = nextSpecifier;
|
|
195
|
+
changed = true;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return changed;
|
|
200
|
+
}
|
|
201
|
+
function normalizeStrictEffectApiMetadata(value) {
|
|
202
|
+
const api = value.api;
|
|
203
|
+
if (!api || 'object' != typeof api || Array.isArray(api)) return false;
|
|
204
|
+
let changed = false;
|
|
205
|
+
const oldEffect = api.effect;
|
|
206
|
+
if (oldEffect && 'object' == typeof oldEffect && !Array.isArray(oldEffect)) {
|
|
207
|
+
if (void 0 === api.stem && 'string' == typeof oldEffect.stem) {
|
|
208
|
+
api.stem = oldEffect.stem;
|
|
209
|
+
changed = true;
|
|
210
|
+
}
|
|
211
|
+
if (void 0 === api.prefix && 'string' == typeof oldEffect.prefix) {
|
|
212
|
+
api.prefix = oldEffect.prefix;
|
|
213
|
+
changed = true;
|
|
214
|
+
}
|
|
215
|
+
if (void 0 === api.consumedBy && Array.isArray(oldEffect.consumedBy)) {
|
|
216
|
+
api.consumedBy = oldEffect.consumedBy;
|
|
217
|
+
changed = true;
|
|
218
|
+
}
|
|
219
|
+
delete api.effect;
|
|
220
|
+
changed = true;
|
|
221
|
+
}
|
|
222
|
+
if (void 0 !== api.runtime && 'effect' !== api.runtime) {
|
|
223
|
+
api.runtime = 'effect';
|
|
224
|
+
changed = true;
|
|
225
|
+
}
|
|
226
|
+
if (api.bff && 'object' == typeof api.bff && !Array.isArray(api.bff)) {
|
|
227
|
+
if (true !== api.bff.strictEffectApproach) {
|
|
228
|
+
api.bff.strictEffectApproach = true;
|
|
229
|
+
changed = true;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
if ('string' == typeof value.path) {
|
|
233
|
+
const directServerEntry = `${value.path}/api/index.ts`;
|
|
234
|
+
if ('string' == typeof api.serverEntry && /\/api\/effect\/index\.[cm]?[jt]sx?$/u.test(api.serverEntry)) {
|
|
235
|
+
api.serverEntry = directServerEntry;
|
|
236
|
+
changed = true;
|
|
237
|
+
}
|
|
238
|
+
if (api.contract && 'object' == typeof api.contract && !Array.isArray(api.contract)) {
|
|
239
|
+
if ('./shared/effect/api' === api.contract.export) {
|
|
240
|
+
api.contract.export = './api';
|
|
241
|
+
changed = true;
|
|
242
|
+
}
|
|
243
|
+
if ('string' == typeof api.contract.path && /\/shared\/effect\/api\.[cm]?[jt]sx?$/u.test(api.contract.path)) {
|
|
244
|
+
api.contract.path = `${value.path}/shared/api.ts`;
|
|
245
|
+
changed = true;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (api.client && 'object' == typeof api.client && !Array.isArray(api.client)) {
|
|
249
|
+
if ('./effect/client' === api.client.export) {
|
|
250
|
+
api.client.export = './api/client';
|
|
251
|
+
changed = true;
|
|
252
|
+
}
|
|
253
|
+
if ('string' == typeof api.client.path && /\/src\/effect\/[^/]+-client\.[cm]?ts$/u.test(api.client.path)) {
|
|
254
|
+
const basename = external_node_path_default().basename(api.client.path);
|
|
255
|
+
api.client.path = `${value.path}/src/api/${basename}`;
|
|
256
|
+
changed = true;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
if (void 0 === api.serverEntry && 'effect' === api.runtime) {
|
|
260
|
+
api.serverEntry = directServerEntry;
|
|
261
|
+
changed = true;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
return changed;
|
|
265
|
+
}
|
|
266
|
+
function updateUltramodernConfig(workspaceRoot, packageSource) {
|
|
267
|
+
const configPath = external_node_path_default().join(workspaceRoot, '.modernjs/ultramodern.json');
|
|
268
|
+
const config = readJsonFile(configPath);
|
|
269
|
+
config.packageSource = {
|
|
270
|
+
strategy: packageSource.strategy,
|
|
271
|
+
modernPackageVersion: packageSource.modernPackageVersion,
|
|
272
|
+
...packageSource.registry ? {
|
|
273
|
+
registry: packageSource.registry
|
|
274
|
+
} : {},
|
|
275
|
+
...packageSource.aliasScope ? {
|
|
276
|
+
aliasScope: packageSource.aliasScope
|
|
277
|
+
} : {},
|
|
278
|
+
...packageSource.aliasPackageNamePrefix ? {
|
|
279
|
+
aliasPackageNamePrefix: packageSource.aliasPackageNamePrefix
|
|
280
|
+
} : {}
|
|
281
|
+
};
|
|
282
|
+
for (const app of config.topology?.apps ?? [])if (app && 'object' == typeof app && !Array.isArray(app)) normalizeStrictEffectApiMetadata(app);
|
|
283
|
+
writeJsonFile(configPath, config);
|
|
284
|
+
}
|
|
285
|
+
function updateReferenceTopology(workspaceRoot) {
|
|
286
|
+
const topologyPath = external_node_path_default().join(workspaceRoot, 'topology/reference-topology.json');
|
|
287
|
+
if (!external_node_fs_default().existsSync(topologyPath)) return false;
|
|
288
|
+
const topology = readJsonFile(topologyPath);
|
|
289
|
+
let changed = false;
|
|
290
|
+
for (const vertical of topology.verticals ?? [])if (vertical && 'object' == typeof vertical && !Array.isArray(vertical)) changed = normalizeStrictEffectApiMetadata(vertical) || changed;
|
|
291
|
+
if (changed) writeJsonFile(topologyPath, topology);
|
|
292
|
+
return changed;
|
|
293
|
+
}
|
|
294
|
+
function createMigrationPackageSource(args, current) {
|
|
295
|
+
const strategy = hasFlag(args, '--workspace') ? 'workspace' : 'install';
|
|
296
|
+
const registry = readOption(args, '--registry') ?? readOption(args, '--ultramodern-package-registry');
|
|
297
|
+
const explicitAliasScope = readOption(args, '--alias-scope') ?? readOption(args, '--ultramodern-package-scope');
|
|
298
|
+
const aliasScope = explicitAliasScope ?? ('install' === strategy && void 0 === registry ? current.packageSource?.aliasScope ?? external_ultramodern_package_source_cjs_namespaceObject.BLEEDINGDEV_PACKAGE_SCOPE : current.packageSource?.aliasScope);
|
|
299
|
+
const aliasPackageNamePrefix = readOption(args, '--alias-package-name-prefix') ?? readOption(args, '--ultramodern-package-name-prefix') ?? current.packageSource?.aliasPackageNamePrefix ?? (aliasScope ? external_ultramodern_package_source_cjs_namespaceObject.BLEEDINGDEV_PACKAGE_NAME_PREFIX : void 0);
|
|
300
|
+
if ('workspace' === strategy) return {
|
|
301
|
+
strategy,
|
|
302
|
+
modernPackageVersion: external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION,
|
|
303
|
+
...registry ? {
|
|
304
|
+
registry
|
|
305
|
+
} : {},
|
|
306
|
+
...aliasScope ? {
|
|
307
|
+
aliasScope
|
|
308
|
+
} : {},
|
|
309
|
+
...aliasPackageNamePrefix ? {
|
|
310
|
+
aliasPackageNamePrefix
|
|
311
|
+
} : {}
|
|
312
|
+
};
|
|
313
|
+
const version = readOption(args, '--version') ?? readOption(args, '--ultramodern-package-version') ?? current.packageSource?.modernPackageVersion;
|
|
314
|
+
if (!version || version === external_ultramodern_package_source_cjs_namespaceObject.WORKSPACE_PACKAGE_VERSION) throw new Error('migrate-strict-effect needs --version <published-ultramodern-version> for install package source.');
|
|
315
|
+
return {
|
|
316
|
+
strategy,
|
|
317
|
+
modernPackageVersion: version,
|
|
318
|
+
...registry ? {
|
|
319
|
+
registry
|
|
320
|
+
} : {},
|
|
321
|
+
...aliasScope ? {
|
|
322
|
+
aliasScope
|
|
323
|
+
} : {},
|
|
324
|
+
...aliasPackageNamePrefix ? {
|
|
325
|
+
aliasPackageNamePrefix
|
|
326
|
+
} : {}
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
function runPnpmLockfileRefresh(context) {
|
|
330
|
+
const result = (0, external_node_child_process_namespaceObject.spawnSync)('pnpm', [
|
|
331
|
+
'install',
|
|
332
|
+
'--lockfile-only',
|
|
333
|
+
"--ignore-scripts"
|
|
334
|
+
], {
|
|
335
|
+
cwd: context.workspaceRoot,
|
|
336
|
+
stdio: 'inherit'
|
|
337
|
+
});
|
|
338
|
+
if (result.error) throw result.error;
|
|
339
|
+
return result.status ?? 1;
|
|
340
|
+
}
|
|
341
|
+
function runMigrateStrictEffect(args, context) {
|
|
342
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
343
|
+
process.stdout.write(`Usage:
|
|
344
|
+
modern-js-create ultramodern migrate-strict-effect --version <version> [--skip-install]
|
|
345
|
+
|
|
346
|
+
Updates generated UltraModern package-source metadata, Modern package aliases,
|
|
347
|
+
direct Effect API topology metadata, and the pnpm lockfile for strict Effect
|
|
348
|
+
workspaces. Source code still has to pass pnpm api:check and pnpm contract:check.
|
|
349
|
+
`);
|
|
350
|
+
return 0;
|
|
351
|
+
}
|
|
352
|
+
const current = (0, external_config_cjs_namespaceObject.readUltramodernConfig)(context.workspaceRoot);
|
|
353
|
+
const packageSource = createMigrationPackageSource(args, current);
|
|
354
|
+
updateUltramodernConfig(context.workspaceRoot, packageSource);
|
|
355
|
+
updateReferenceTopology(context.workspaceRoot);
|
|
356
|
+
for (const relativePackageFile of listWorkspacePackageFiles(context.workspaceRoot)){
|
|
357
|
+
const packageFile = external_node_path_default().join(context.workspaceRoot, relativePackageFile);
|
|
358
|
+
const packageJson = readJsonFile(packageFile);
|
|
359
|
+
if ('package.json' === relativePackageFile) {
|
|
360
|
+
packageJson.modernjs ??= {};
|
|
361
|
+
packageJson.modernjs.packageSource = {
|
|
362
|
+
strategy: packageSource.strategy,
|
|
363
|
+
config: './.modernjs/ultramodern.json'
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
if (updateModernDependencies(packageJson, packageSource)) writeJsonFile(packageFile, packageJson);
|
|
367
|
+
else if ('package.json' === relativePackageFile) writeJsonFile(packageFile, packageJson);
|
|
368
|
+
}
|
|
369
|
+
if (!hasFlag(args, '--skip-install')) {
|
|
370
|
+
const status = runPnpmLockfileRefresh(context);
|
|
371
|
+
if (0 !== status) return status;
|
|
372
|
+
}
|
|
373
|
+
process.stdout.write(`UltraModern strict Effect metadata migrated to ${packageSource.modernPackageVersion}. Run pnpm api:check && pnpm contract:check next.\n`);
|
|
374
|
+
return 0;
|
|
375
|
+
}
|
|
132
376
|
function runSkills(args, context) {
|
|
133
377
|
const [subcommand, ...rest] = args;
|
|
134
378
|
if ('install' === subcommand) return spawnNodeScript("template-workspace/scripts/bootstrap-agent-skills.mjs", rest, context);
|
|
@@ -159,6 +403,8 @@ async function runUltramodernToolingCli(args, workspaceRoot = process.env.ULTRAM
|
|
|
159
403
|
});
|
|
160
404
|
case 'mf-types':
|
|
161
405
|
return runMfTypes(rest, context);
|
|
406
|
+
case 'migrate-strict-effect':
|
|
407
|
+
return runMigrateStrictEffect(rest, context);
|
|
162
408
|
case 'public-surface':
|
|
163
409
|
return spawnNodeScript("templates/workspace-scripts/generate-public-surface-assets.mjs", rest, context);
|
|
164
410
|
case 'cloudflare-proof':
|
|
@@ -289,6 +289,7 @@ function createUltramodernConfig(scope, modernVersion, packageSource, apps = [
|
|
|
289
289
|
publicSurface: "scripts/generate-public-surface-assets.mts",
|
|
290
290
|
cloudflareProof: "scripts/proof-cloudflare-version.mts",
|
|
291
291
|
performanceReadiness: "scripts/ultramodern-performance-readiness.mts",
|
|
292
|
+
migrateStrictEffect: "scripts/migrate-strict-effect.mts",
|
|
292
293
|
apiBoundaries: "scripts/check-ultramodern-api-boundaries.mts",
|
|
293
294
|
skills: "scripts/bootstrap-agent-skills.mts"
|
|
294
295
|
}
|
|
@@ -144,6 +144,8 @@ ${defaultAssetPrefixSource}
|
|
|
144
144
|
// load remoteEntry.js and exposed chunks from the remote origin, not the host.
|
|
145
145
|
const assetPrefix =
|
|
146
146
|
configuredModernAssetPrefix || configuredUltramodernAssetPrefix || defaultAssetPrefix;
|
|
147
|
+
const buildCacheTarget = cloudflareDeployEnabled ? 'cloudflare' : 'web';
|
|
148
|
+
const buildCacheDirectory = \`node_modules/.cache/rspack-\${appId}-\${buildCacheTarget}\`;
|
|
147
149
|
|
|
148
150
|
if (
|
|
149
151
|
cloudflareDeployEnabled &&
|
|
@@ -190,6 +192,10 @@ ${bffConfig} ...(cloudflareDeployEnabled
|
|
|
190
192
|
splitRouteChunks: true,
|
|
191
193
|
},
|
|
192
194
|
performance: {
|
|
195
|
+
buildCache: {
|
|
196
|
+
cacheDigest: [appId, buildCacheTarget],
|
|
197
|
+
cacheDirectory: buildCacheDirectory,
|
|
198
|
+
},
|
|
193
199
|
rsdoctor: {
|
|
194
200
|
disableClientServer: true,
|
|
195
201
|
enabled: process.env['ULTRAMODERN_RSDOCTOR'] === 'true',
|
|
@@ -224,6 +224,7 @@ function createRootPackageJson(scope, packageSource, remotes = [], bridge) {
|
|
|
224
224
|
'agents:refs:check': "node ./scripts/setup-agent-reference-repos.mts --check",
|
|
225
225
|
'mf:types': "node ./scripts/assert-mf-types.mts",
|
|
226
226
|
'performance:readiness': "node ./scripts/ultramodern-performance-readiness.mts",
|
|
227
|
+
'migrate:strict-effect': "node ./scripts/migrate-strict-effect.mts",
|
|
227
228
|
'contract:check': "node ./scripts/validate-ultramodern-workspace.mts",
|
|
228
229
|
'api:check': "node ./scripts/check-ultramodern-api-boundaries.mts",
|
|
229
230
|
'i18n:boundaries': "node ./scripts/check-ultramodern-i18n-boundaries.mts",
|
|
@@ -37,12 +37,14 @@ const CLOUDFLARE_COMPATIBILITY_DATE = '2026-06-02';
|
|
|
37
37
|
const TAILWIND_VERSION = '4.3.1';
|
|
38
38
|
const TAILWIND_POSTCSS_VERSION = '4.3.1';
|
|
39
39
|
const POSTCSS_VERSION = '8.5.15';
|
|
40
|
+
const EFFECT_VERSION = '4.0.0-beta.91';
|
|
41
|
+
const EFFECT_VITEST_VERSION = '4.0.0-beta.91';
|
|
40
42
|
const EFFECT_TSGO_VERSION = '0.14.6';
|
|
41
43
|
const TYPESCRIPT_STABLE_VERSION = '6.0.3';
|
|
42
|
-
const TYPESCRIPT_NATIVE_PREVIEW_VERSION = '7.0.0-dev.
|
|
44
|
+
const TYPESCRIPT_NATIVE_PREVIEW_VERSION = '7.0.0-dev.20260628.1';
|
|
43
45
|
const TYPESCRIPT_VERSION = TYPESCRIPT_STABLE_VERSION;
|
|
44
46
|
const OXLINT_VERSION = '1.71.0';
|
|
45
|
-
const OXFMT_VERSION = '0.
|
|
47
|
+
const OXFMT_VERSION = '0.56.0';
|
|
46
48
|
const ULTRACITE_VERSION = '7.8.3';
|
|
47
49
|
const LEFTHOOK_VERSION = '^2.1.9';
|
|
48
50
|
const I18NEXT_VERSION = '26.3.1';
|
|
@@ -60,12 +62,16 @@ const ultramodernWorkspaceVersions = {
|
|
|
60
62
|
tanstackRouter: TANSTACK_ROUTER_VERSION,
|
|
61
63
|
tanstackRouterCore: TANSTACK_ROUTER_CORE_VERSION,
|
|
62
64
|
moduleFederation: MODULE_FEDERATION_VERSION,
|
|
65
|
+
effect: EFFECT_VERSION,
|
|
66
|
+
effectVitest: EFFECT_VITEST_VERSION,
|
|
63
67
|
tailwind: TAILWIND_VERSION,
|
|
64
68
|
tailwindPostcss: TAILWIND_POSTCSS_VERSION
|
|
65
69
|
};
|
|
66
70
|
__webpack_require__.d(__webpack_exports__, {}, {
|
|
67
71
|
CLOUDFLARE_COMPATIBILITY_DATE: CLOUDFLARE_COMPATIBILITY_DATE,
|
|
68
72
|
EFFECT_TSGO_VERSION: EFFECT_TSGO_VERSION,
|
|
73
|
+
EFFECT_VERSION: EFFECT_VERSION,
|
|
74
|
+
EFFECT_VITEST_VERSION: EFFECT_VITEST_VERSION,
|
|
69
75
|
I18NEXT_VERSION: I18NEXT_VERSION,
|
|
70
76
|
LEFTHOOK_VERSION: LEFTHOOK_VERSION,
|
|
71
77
|
MODULE_FEDERATION_AGENT_SKILLS_COMMIT: MODULE_FEDERATION_AGENT_SKILLS_COMMIT,
|
|
@@ -97,6 +103,8 @@ __webpack_require__.d(__webpack_exports__, {}, {
|
|
|
97
103
|
});
|
|
98
104
|
exports.CLOUDFLARE_COMPATIBILITY_DATE = __webpack_exports__.CLOUDFLARE_COMPATIBILITY_DATE;
|
|
99
105
|
exports.EFFECT_TSGO_VERSION = __webpack_exports__.EFFECT_TSGO_VERSION;
|
|
106
|
+
exports.EFFECT_VERSION = __webpack_exports__.EFFECT_VERSION;
|
|
107
|
+
exports.EFFECT_VITEST_VERSION = __webpack_exports__.EFFECT_VITEST_VERSION;
|
|
100
108
|
exports.I18NEXT_VERSION = __webpack_exports__.I18NEXT_VERSION;
|
|
101
109
|
exports.LEFTHOOK_VERSION = __webpack_exports__.LEFTHOOK_VERSION;
|
|
102
110
|
exports.MODULE_FEDERATION_AGENT_SKILLS_COMMIT = __webpack_exports__.MODULE_FEDERATION_AGENT_SKILLS_COMMIT;
|
|
@@ -128,6 +136,8 @@ exports.ultramodernWorkspaceVersions = __webpack_exports__.ultramodernWorkspaceV
|
|
|
128
136
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
129
137
|
"CLOUDFLARE_COMPATIBILITY_DATE",
|
|
130
138
|
"EFFECT_TSGO_VERSION",
|
|
139
|
+
"EFFECT_VERSION",
|
|
140
|
+
"EFFECT_VITEST_VERSION",
|
|
131
141
|
"I18NEXT_VERSION",
|
|
132
142
|
"LEFTHOOK_VERSION",
|
|
133
143
|
"MODULE_FEDERATION_AGENT_SKILLS_COMMIT",
|
|
@@ -209,6 +209,7 @@ function writeGeneratedWorkspaceScripts(targetDir, _scope, _enableTailwind, _rem
|
|
|
209
209
|
writeWorkspaceOwnedMtsScript(targetDir, 'proof-cloudflare-version', createToolWrapperScript('cloudflare-proof'));
|
|
210
210
|
(0, external_fs_io_cjs_namespaceObject.writeFileReplacing)(targetDir, "scripts/ultramodern-performance-readiness.config.mjs", createPerformanceReadinessConfigScript());
|
|
211
211
|
writeWorkspaceOwnedMtsScript(targetDir, 'ultramodern-performance-readiness', createToolWrapperScript('performance-readiness'));
|
|
212
|
+
writeWorkspaceOwnedMtsScript(targetDir, 'migrate-strict-effect', createToolWrapperScript('migrate-strict-effect'));
|
|
212
213
|
writeWorkspaceOwnedMtsScript(targetDir, 'ultramodern-typecheck', createToolWrapperScript('typecheck'));
|
|
213
214
|
writeWorkspaceOwnedMtsScript(targetDir, 'bootstrap-agent-skills', createSkillsToolWrapperScript());
|
|
214
215
|
migrateCopiedWorkspaceScriptToMts(targetDir, 'setup-agent-reference-repos');
|
|
@@ -175,6 +175,8 @@ function generateUltramodernWorkspace(options) {
|
|
|
175
175
|
nodeVersion: external_versions_cjs_namespaceObject.NODE_VERSION,
|
|
176
176
|
pnpmVersion: external_versions_cjs_namespaceObject.PNPM_VERSION,
|
|
177
177
|
nodeFetchVersion: external_versions_cjs_namespaceObject.NODE_FETCH_VERSION,
|
|
178
|
+
effectVersion: external_versions_cjs_namespaceObject.EFFECT_VERSION,
|
|
179
|
+
effectVitestVersion: external_versions_cjs_namespaceObject.EFFECT_VITEST_VERSION,
|
|
178
180
|
tanstackRouterCoreVersion: external_versions_cjs_namespaceObject.TANSTACK_ROUTER_CORE_VERSION,
|
|
179
181
|
tanstackRouterVersion: external_versions_cjs_namespaceObject.TANSTACK_ROUTER_VERSION,
|
|
180
182
|
typescriptVersion: external_versions_cjs_namespaceObject.TYPESCRIPT_VERSION,
|