@bleedingdev/modern-js-create 3.5.0-ultramodern.40 → 3.5.0-ultramodern.42
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/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.cjs +2 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.cjs +119 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect.cjs +3 -0
- package/dist/cjs/ultramodern-workspace/workspace-validation-contract.cjs +4 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +2 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.js +64 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect.js +3 -0
- package/dist/esm/ultramodern-workspace/workspace-validation-contract.js +4 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/api-metadata.js +2 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.js +65 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect.js +3 -0
- package/dist/esm-node/ultramodern-workspace/workspace-validation-contract.js +4 -0
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/toolchain-pins.d.ts +4 -0
- package/dist/types/ultramodern-workspace/workspace-validation-contract.d.ts +4 -0
- package/package.json +4 -4
|
@@ -45,6 +45,7 @@ var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node
|
|
|
45
45
|
const external_node_path_namespaceObject = require("node:path");
|
|
46
46
|
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
47
47
|
const external_io_cjs_namespaceObject = require("./io.cjs");
|
|
48
|
+
const external_toolchain_pins_cjs_namespaceObject = require("./toolchain-pins.cjs");
|
|
48
49
|
function normalizeStrictEffectApiMetadata(value) {
|
|
49
50
|
let changed = false;
|
|
50
51
|
const backendFederation = value.backendFederation;
|
|
@@ -135,6 +136,7 @@ function updateUltramodernConfig(io, config, packageSource) {
|
|
|
135
136
|
} : {}
|
|
136
137
|
};
|
|
137
138
|
if (config.generator && 'object' == typeof config.generator && !Array.isArray(config.generator) && 'string' == typeof config.generator.version) config.generator.version = packageSource.modernPackageVersion;
|
|
139
|
+
(0, external_toolchain_pins_cjs_namespaceObject.updateUltramodernConfigToolchain)(config);
|
|
138
140
|
for (const app of config.topology?.apps ?? [])if (app && 'object' == typeof app && !Array.isArray(app)) normalizeStrictEffectApiMetadata(app);
|
|
139
141
|
(0, external_io_cjs_namespaceObject.writeJsonFile)(io, configPath, config);
|
|
140
142
|
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
(()=>{
|
|
13
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
14
|
+
var define = (defs, kind)=>{
|
|
15
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
[kind]: defs[key]
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
define(getters, "get");
|
|
21
|
+
define(values, "value");
|
|
22
|
+
};
|
|
23
|
+
})();
|
|
24
|
+
(()=>{
|
|
25
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
26
|
+
})();
|
|
27
|
+
(()=>{
|
|
28
|
+
__webpack_require__.r = (exports1)=>{
|
|
29
|
+
if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
30
|
+
value: 'Module'
|
|
31
|
+
});
|
|
32
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
33
|
+
value: true
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
37
|
+
var __webpack_exports__ = {};
|
|
38
|
+
__webpack_require__.r(__webpack_exports__);
|
|
39
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
40
|
+
updateGeneratedToolchainFiles: ()=>updateGeneratedToolchainFiles,
|
|
41
|
+
updateRootPackageToolchain: ()=>updateRootPackageToolchain,
|
|
42
|
+
updateUltramodernConfigToolchain: ()=>updateUltramodernConfigToolchain
|
|
43
|
+
});
|
|
44
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
45
|
+
var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
|
|
46
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
47
|
+
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
48
|
+
const versions_cjs_namespaceObject = require("../../../ultramodern-workspace/versions.cjs");
|
|
49
|
+
const NODE_ENGINE_RANGE = '>=26';
|
|
50
|
+
const PNPM_ENGINE_RANGE = '>=11';
|
|
51
|
+
function isRecord(value) {
|
|
52
|
+
return Boolean(value) && 'object' == typeof value && !Array.isArray(value);
|
|
53
|
+
}
|
|
54
|
+
function updateUltramodernConfigToolchain(config) {
|
|
55
|
+
const workspace = isRecord(config.workspace) ? config.workspace : {};
|
|
56
|
+
config.workspace = workspace;
|
|
57
|
+
const packageManager = isRecord(workspace.packageManager) ? workspace.packageManager : {};
|
|
58
|
+
workspace.packageManager = packageManager;
|
|
59
|
+
packageManager.name = 'pnpm';
|
|
60
|
+
packageManager.version = versions_cjs_namespaceObject.PNPM_VERSION;
|
|
61
|
+
const node = isRecord(workspace.node) ? workspace.node : {};
|
|
62
|
+
workspace.node = node;
|
|
63
|
+
node.version = versions_cjs_namespaceObject.NODE_VERSION;
|
|
64
|
+
node.engineRange = NODE_ENGINE_RANGE;
|
|
65
|
+
}
|
|
66
|
+
function updateRootPackageToolchain(packageJson) {
|
|
67
|
+
packageJson.packageManager = `pnpm@${versions_cjs_namespaceObject.PNPM_VERSION}`;
|
|
68
|
+
const engines = isRecord(packageJson.engines) ? packageJson.engines : {};
|
|
69
|
+
packageJson.engines = engines;
|
|
70
|
+
engines.node = NODE_ENGINE_RANGE;
|
|
71
|
+
engines.pnpm = PNPM_ENGINE_RANGE;
|
|
72
|
+
}
|
|
73
|
+
function updateMiseTools(content) {
|
|
74
|
+
const lines = content.replace(/\r\n/gu, '\n').split('\n');
|
|
75
|
+
if ('' === lines.at(-1)) lines.pop();
|
|
76
|
+
let toolsStart = lines.findIndex((line)=>/^\s*\[tools\]\s*(?:#.*)?$/u.test(line));
|
|
77
|
+
if (-1 === toolsStart) {
|
|
78
|
+
if (lines.length > 0) lines.push('');
|
|
79
|
+
toolsStart = lines.length;
|
|
80
|
+
lines.push('[tools]');
|
|
81
|
+
}
|
|
82
|
+
const nextSection = lines.findIndex((line, index)=>index > toolsStart && /^\s*\[[^\]]+\]\s*(?:#.*)?$/u.test(line));
|
|
83
|
+
let toolsEnd = -1 === nextSection ? lines.length : nextSection;
|
|
84
|
+
const upsertTool = (name, version)=>{
|
|
85
|
+
const pattern = new RegExp(`^\\s*${name}\\s*=`, 'u');
|
|
86
|
+
const line = `${name} = "${version}"`;
|
|
87
|
+
const index = lines.findIndex((candidate, candidateIndex)=>candidateIndex > toolsStart && candidateIndex < toolsEnd && pattern.test(candidate));
|
|
88
|
+
if (-1 === index) {
|
|
89
|
+
lines.splice(toolsEnd, 0, line);
|
|
90
|
+
toolsEnd += 1;
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
lines[index] = line;
|
|
94
|
+
};
|
|
95
|
+
upsertTool('node', versions_cjs_namespaceObject.NODE_VERSION);
|
|
96
|
+
upsertTool('pnpm', versions_cjs_namespaceObject.PNPM_VERSION);
|
|
97
|
+
return `${lines.join('\n')}\n`;
|
|
98
|
+
}
|
|
99
|
+
function updateGeneratedToolchainFiles(io) {
|
|
100
|
+
const misePath = external_node_path_default().join(io.workspaceRoot, '.mise.toml');
|
|
101
|
+
const miseContent = external_node_fs_default().existsSync(misePath) ? external_node_fs_default().readFileSync(misePath, 'utf-8') : '';
|
|
102
|
+
io.write(misePath, updateMiseTools(miseContent));
|
|
103
|
+
const workflowPath = external_node_path_default().join(io.workspaceRoot, '.github/workflows/ultramodern-workspace-gates.yml');
|
|
104
|
+
if (!external_node_fs_default().existsSync(workflowPath)) return;
|
|
105
|
+
const workflow = external_node_fs_default().readFileSync(workflowPath, 'utf-8');
|
|
106
|
+
const updatedWorkflow = workflow.replace(/^(\s*)node-version\s*:\s*.*$/mu, `$1node-version: '${versions_cjs_namespaceObject.NODE_VERSION}'`);
|
|
107
|
+
io.write(workflowPath, updatedWorkflow);
|
|
108
|
+
}
|
|
109
|
+
exports.updateGeneratedToolchainFiles = __webpack_exports__.updateGeneratedToolchainFiles;
|
|
110
|
+
exports.updateRootPackageToolchain = __webpack_exports__.updateRootPackageToolchain;
|
|
111
|
+
exports.updateUltramodernConfigToolchain = __webpack_exports__.updateUltramodernConfigToolchain;
|
|
112
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
113
|
+
"updateGeneratedToolchainFiles",
|
|
114
|
+
"updateRootPackageToolchain",
|
|
115
|
+
"updateUltramodernConfigToolchain"
|
|
116
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
117
|
+
Object.defineProperty(exports, '__esModule', {
|
|
118
|
+
value: true
|
|
119
|
+
});
|
|
@@ -53,6 +53,7 @@ const io_cjs_namespaceObject = require("./migrate-strict-effect/io.cjs");
|
|
|
53
53
|
const package_cohort_cjs_namespaceObject = require("./migrate-strict-effect/package-cohort.cjs");
|
|
54
54
|
const package_source_cjs_namespaceObject = require("./migrate-strict-effect/package-source.cjs");
|
|
55
55
|
const pnpm_policy_cjs_namespaceObject = require("./migrate-strict-effect/pnpm-policy.cjs");
|
|
56
|
+
const toolchain_pins_cjs_namespaceObject = require("./migrate-strict-effect/toolchain-pins.cjs");
|
|
56
57
|
const external_options_cjs_namespaceObject = require("./options.cjs");
|
|
57
58
|
function runMigrateStrictEffect(args, context) {
|
|
58
59
|
if (args.includes('--help') || args.includes('-h')) {
|
|
@@ -113,6 +114,7 @@ function runMigrateStrictEffect(args, context) {
|
|
|
113
114
|
strategy: packageSource.strategy,
|
|
114
115
|
config: './.modernjs/ultramodern.json'
|
|
115
116
|
};
|
|
117
|
+
(0, toolchain_pins_cjs_namespaceObject.updateRootPackageToolchain)(packageJson);
|
|
116
118
|
}
|
|
117
119
|
(0, package_cohort_cjs_namespaceObject.updateModernDependencies)(packageJson, packageSource);
|
|
118
120
|
(0, package_cohort_cjs_namespaceObject.updateGeneratedToolingDependencies)(packageJson);
|
|
@@ -124,6 +126,7 @@ function runMigrateStrictEffect(args, context) {
|
|
|
124
126
|
(0, io_cjs_namespaceObject.writeJsonFile)(io, packageFile, packageJson);
|
|
125
127
|
}
|
|
126
128
|
(0, pnpm_policy_cjs_namespaceObject.updateGeneratedPnpmWorkspacePolicy)(io);
|
|
129
|
+
(0, toolchain_pins_cjs_namespaceObject.updateGeneratedToolchainFiles)(io);
|
|
127
130
|
(0, pnpm_policy_cjs_namespaceObject.ensureGeneratedDeclarationPatches)(io, {
|
|
128
131
|
includeDrizzleOrmPatch: (0, pnpm_policy_cjs_namespaceObject.workspaceUsesDependency)(io.workspaceRoot, 'drizzle-orm')
|
|
129
132
|
});
|
|
@@ -66,6 +66,10 @@ function createWorkspaceValidationContract(scope, enableTailwind, remotes = [])
|
|
|
66
66
|
}));
|
|
67
67
|
return {
|
|
68
68
|
packageScope: scope,
|
|
69
|
+
node: {
|
|
70
|
+
version: external_versions_cjs_namespaceObject.NODE_VERSION,
|
|
71
|
+
engineRange: '>=26'
|
|
72
|
+
},
|
|
69
73
|
versions: {
|
|
70
74
|
cloudflareCompatibilityDate: external_versions_cjs_namespaceObject.CLOUDFLARE_COMPATIBILITY_DATE,
|
|
71
75
|
effect: external_versions_cjs_namespaceObject.EFFECT_VERSION,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import node_fs from "node:fs";
|
|
2
2
|
import node_path from "node:path";
|
|
3
3
|
import { readJsonFile, writeJsonFile } from "./io.js";
|
|
4
|
+
import { updateUltramodernConfigToolchain } from "./toolchain-pins.js";
|
|
4
5
|
function normalizeStrictEffectApiMetadata(value) {
|
|
5
6
|
let changed = false;
|
|
6
7
|
const backendFederation = value.backendFederation;
|
|
@@ -91,6 +92,7 @@ function updateUltramodernConfig(io, config, packageSource) {
|
|
|
91
92
|
} : {}
|
|
92
93
|
};
|
|
93
94
|
if (config.generator && 'object' == typeof config.generator && !Array.isArray(config.generator) && 'string' == typeof config.generator.version) config.generator.version = packageSource.modernPackageVersion;
|
|
95
|
+
updateUltramodernConfigToolchain(config);
|
|
94
96
|
for (const app of config.topology?.apps ?? [])if (app && 'object' == typeof app && !Array.isArray(app)) normalizeStrictEffectApiMetadata(app);
|
|
95
97
|
writeJsonFile(io, configPath, config);
|
|
96
98
|
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import node_fs from "node:fs";
|
|
2
|
+
import node_path from "node:path";
|
|
3
|
+
import { NODE_VERSION, PNPM_VERSION } from "../../../ultramodern-workspace/versions.js";
|
|
4
|
+
const NODE_ENGINE_RANGE = '>=26';
|
|
5
|
+
const PNPM_ENGINE_RANGE = '>=11';
|
|
6
|
+
function isRecord(value) {
|
|
7
|
+
return Boolean(value) && 'object' == typeof value && !Array.isArray(value);
|
|
8
|
+
}
|
|
9
|
+
function updateUltramodernConfigToolchain(config) {
|
|
10
|
+
const workspace = isRecord(config.workspace) ? config.workspace : {};
|
|
11
|
+
config.workspace = workspace;
|
|
12
|
+
const packageManager = isRecord(workspace.packageManager) ? workspace.packageManager : {};
|
|
13
|
+
workspace.packageManager = packageManager;
|
|
14
|
+
packageManager.name = 'pnpm';
|
|
15
|
+
packageManager.version = PNPM_VERSION;
|
|
16
|
+
const node = isRecord(workspace.node) ? workspace.node : {};
|
|
17
|
+
workspace.node = node;
|
|
18
|
+
node.version = NODE_VERSION;
|
|
19
|
+
node.engineRange = NODE_ENGINE_RANGE;
|
|
20
|
+
}
|
|
21
|
+
function updateRootPackageToolchain(packageJson) {
|
|
22
|
+
packageJson.packageManager = `pnpm@${PNPM_VERSION}`;
|
|
23
|
+
const engines = isRecord(packageJson.engines) ? packageJson.engines : {};
|
|
24
|
+
packageJson.engines = engines;
|
|
25
|
+
engines.node = NODE_ENGINE_RANGE;
|
|
26
|
+
engines.pnpm = PNPM_ENGINE_RANGE;
|
|
27
|
+
}
|
|
28
|
+
function updateMiseTools(content) {
|
|
29
|
+
const lines = content.replace(/\r\n/gu, '\n').split('\n');
|
|
30
|
+
if ('' === lines.at(-1)) lines.pop();
|
|
31
|
+
let toolsStart = lines.findIndex((line)=>/^\s*\[tools\]\s*(?:#.*)?$/u.test(line));
|
|
32
|
+
if (-1 === toolsStart) {
|
|
33
|
+
if (lines.length > 0) lines.push('');
|
|
34
|
+
toolsStart = lines.length;
|
|
35
|
+
lines.push('[tools]');
|
|
36
|
+
}
|
|
37
|
+
const nextSection = lines.findIndex((line, index)=>index > toolsStart && /^\s*\[[^\]]+\]\s*(?:#.*)?$/u.test(line));
|
|
38
|
+
let toolsEnd = -1 === nextSection ? lines.length : nextSection;
|
|
39
|
+
const upsertTool = (name, version)=>{
|
|
40
|
+
const pattern = new RegExp(`^\\s*${name}\\s*=`, 'u');
|
|
41
|
+
const line = `${name} = "${version}"`;
|
|
42
|
+
const index = lines.findIndex((candidate, candidateIndex)=>candidateIndex > toolsStart && candidateIndex < toolsEnd && pattern.test(candidate));
|
|
43
|
+
if (-1 === index) {
|
|
44
|
+
lines.splice(toolsEnd, 0, line);
|
|
45
|
+
toolsEnd += 1;
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
lines[index] = line;
|
|
49
|
+
};
|
|
50
|
+
upsertTool('node', NODE_VERSION);
|
|
51
|
+
upsertTool('pnpm', PNPM_VERSION);
|
|
52
|
+
return `${lines.join('\n')}\n`;
|
|
53
|
+
}
|
|
54
|
+
function updateGeneratedToolchainFiles(io) {
|
|
55
|
+
const misePath = node_path.join(io.workspaceRoot, '.mise.toml');
|
|
56
|
+
const miseContent = node_fs.existsSync(misePath) ? node_fs.readFileSync(misePath, 'utf-8') : '';
|
|
57
|
+
io.write(misePath, updateMiseTools(miseContent));
|
|
58
|
+
const workflowPath = node_path.join(io.workspaceRoot, '.github/workflows/ultramodern-workspace-gates.yml');
|
|
59
|
+
if (!node_fs.existsSync(workflowPath)) return;
|
|
60
|
+
const workflow = node_fs.readFileSync(workflowPath, 'utf-8');
|
|
61
|
+
const updatedWorkflow = workflow.replace(/^(\s*)node-version\s*:\s*.*$/mu, `$1node-version: '${NODE_VERSION}'`);
|
|
62
|
+
io.write(workflowPath, updatedWorkflow);
|
|
63
|
+
}
|
|
64
|
+
export { updateGeneratedToolchainFiles, updateRootPackageToolchain, updateUltramodernConfigToolchain };
|
|
@@ -10,6 +10,7 @@ import { createMigrationIo, listWorkspacePackageFiles, readJsonFile, writeJsonFi
|
|
|
10
10
|
import { updateGeneratedPackageScripts, updateGeneratedToolingDependencies, updateModernDependencies } from "./migrate-strict-effect/package-cohort.js";
|
|
11
11
|
import { createMigrationPackageSource } from "./migrate-strict-effect/package-source.js";
|
|
12
12
|
import { ensureGeneratedDeclarationPatches, updateGeneratedPnpmWorkspacePolicy, workspaceUsesDependency } from "./migrate-strict-effect/pnpm-policy.js";
|
|
13
|
+
import { updateGeneratedToolchainFiles, updateRootPackageToolchain } from "./migrate-strict-effect/toolchain-pins.js";
|
|
13
14
|
import { hasFlag } from "./options.js";
|
|
14
15
|
function runMigrateStrictEffect(args, context) {
|
|
15
16
|
if (args.includes('--help') || args.includes('-h')) {
|
|
@@ -70,6 +71,7 @@ function runMigrateStrictEffect(args, context) {
|
|
|
70
71
|
strategy: packageSource.strategy,
|
|
71
72
|
config: './.modernjs/ultramodern.json'
|
|
72
73
|
};
|
|
74
|
+
updateRootPackageToolchain(packageJson);
|
|
73
75
|
}
|
|
74
76
|
updateModernDependencies(packageJson, packageSource);
|
|
75
77
|
updateGeneratedToolingDependencies(packageJson);
|
|
@@ -81,6 +83,7 @@ function runMigrateStrictEffect(args, context) {
|
|
|
81
83
|
writeJsonFile(io, packageFile, packageJson);
|
|
82
84
|
}
|
|
83
85
|
updateGeneratedPnpmWorkspacePolicy(io);
|
|
86
|
+
updateGeneratedToolchainFiles(io);
|
|
84
87
|
ensureGeneratedDeclarationPatches(io, {
|
|
85
88
|
includeDrizzleOrmPatch: workspaceUsesDependency(io.workspaceRoot, 'drizzle-orm')
|
|
86
89
|
});
|
|
@@ -34,6 +34,10 @@ function createWorkspaceValidationContract(scope, enableTailwind, remotes = [])
|
|
|
34
34
|
}));
|
|
35
35
|
return {
|
|
36
36
|
packageScope: scope,
|
|
37
|
+
node: {
|
|
38
|
+
version: NODE_VERSION,
|
|
39
|
+
engineRange: '>=26'
|
|
40
|
+
},
|
|
37
41
|
versions: {
|
|
38
42
|
cloudflareCompatibilityDate: CLOUDFLARE_COMPATIBILITY_DATE,
|
|
39
43
|
effect: EFFECT_VERSION,
|
|
@@ -2,6 +2,7 @@ import "node:module";
|
|
|
2
2
|
import node_fs from "node:fs";
|
|
3
3
|
import node_path from "node:path";
|
|
4
4
|
import { readJsonFile, writeJsonFile } from "./io.js";
|
|
5
|
+
import { updateUltramodernConfigToolchain } from "./toolchain-pins.js";
|
|
5
6
|
function normalizeStrictEffectApiMetadata(value) {
|
|
6
7
|
let changed = false;
|
|
7
8
|
const backendFederation = value.backendFederation;
|
|
@@ -92,6 +93,7 @@ function updateUltramodernConfig(io, config, packageSource) {
|
|
|
92
93
|
} : {}
|
|
93
94
|
};
|
|
94
95
|
if (config.generator && 'object' == typeof config.generator && !Array.isArray(config.generator) && 'string' == typeof config.generator.version) config.generator.version = packageSource.modernPackageVersion;
|
|
96
|
+
updateUltramodernConfigToolchain(config);
|
|
95
97
|
for (const app of config.topology?.apps ?? [])if (app && 'object' == typeof app && !Array.isArray(app)) normalizeStrictEffectApiMetadata(app);
|
|
96
98
|
writeJsonFile(io, configPath, config);
|
|
97
99
|
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import "node:module";
|
|
2
|
+
import node_fs from "node:fs";
|
|
3
|
+
import node_path from "node:path";
|
|
4
|
+
import { NODE_VERSION, PNPM_VERSION } from "../../../ultramodern-workspace/versions.js";
|
|
5
|
+
const NODE_ENGINE_RANGE = '>=26';
|
|
6
|
+
const PNPM_ENGINE_RANGE = '>=11';
|
|
7
|
+
function isRecord(value) {
|
|
8
|
+
return Boolean(value) && 'object' == typeof value && !Array.isArray(value);
|
|
9
|
+
}
|
|
10
|
+
function updateUltramodernConfigToolchain(config) {
|
|
11
|
+
const workspace = isRecord(config.workspace) ? config.workspace : {};
|
|
12
|
+
config.workspace = workspace;
|
|
13
|
+
const packageManager = isRecord(workspace.packageManager) ? workspace.packageManager : {};
|
|
14
|
+
workspace.packageManager = packageManager;
|
|
15
|
+
packageManager.name = 'pnpm';
|
|
16
|
+
packageManager.version = PNPM_VERSION;
|
|
17
|
+
const node = isRecord(workspace.node) ? workspace.node : {};
|
|
18
|
+
workspace.node = node;
|
|
19
|
+
node.version = NODE_VERSION;
|
|
20
|
+
node.engineRange = NODE_ENGINE_RANGE;
|
|
21
|
+
}
|
|
22
|
+
function updateRootPackageToolchain(packageJson) {
|
|
23
|
+
packageJson.packageManager = `pnpm@${PNPM_VERSION}`;
|
|
24
|
+
const engines = isRecord(packageJson.engines) ? packageJson.engines : {};
|
|
25
|
+
packageJson.engines = engines;
|
|
26
|
+
engines.node = NODE_ENGINE_RANGE;
|
|
27
|
+
engines.pnpm = PNPM_ENGINE_RANGE;
|
|
28
|
+
}
|
|
29
|
+
function updateMiseTools(content) {
|
|
30
|
+
const lines = content.replace(/\r\n/gu, '\n').split('\n');
|
|
31
|
+
if ('' === lines.at(-1)) lines.pop();
|
|
32
|
+
let toolsStart = lines.findIndex((line)=>/^\s*\[tools\]\s*(?:#.*)?$/u.test(line));
|
|
33
|
+
if (-1 === toolsStart) {
|
|
34
|
+
if (lines.length > 0) lines.push('');
|
|
35
|
+
toolsStart = lines.length;
|
|
36
|
+
lines.push('[tools]');
|
|
37
|
+
}
|
|
38
|
+
const nextSection = lines.findIndex((line, index)=>index > toolsStart && /^\s*\[[^\]]+\]\s*(?:#.*)?$/u.test(line));
|
|
39
|
+
let toolsEnd = -1 === nextSection ? lines.length : nextSection;
|
|
40
|
+
const upsertTool = (name, version)=>{
|
|
41
|
+
const pattern = new RegExp(`^\\s*${name}\\s*=`, 'u');
|
|
42
|
+
const line = `${name} = "${version}"`;
|
|
43
|
+
const index = lines.findIndex((candidate, candidateIndex)=>candidateIndex > toolsStart && candidateIndex < toolsEnd && pattern.test(candidate));
|
|
44
|
+
if (-1 === index) {
|
|
45
|
+
lines.splice(toolsEnd, 0, line);
|
|
46
|
+
toolsEnd += 1;
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
lines[index] = line;
|
|
50
|
+
};
|
|
51
|
+
upsertTool('node', NODE_VERSION);
|
|
52
|
+
upsertTool('pnpm', PNPM_VERSION);
|
|
53
|
+
return `${lines.join('\n')}\n`;
|
|
54
|
+
}
|
|
55
|
+
function updateGeneratedToolchainFiles(io) {
|
|
56
|
+
const misePath = node_path.join(io.workspaceRoot, '.mise.toml');
|
|
57
|
+
const miseContent = node_fs.existsSync(misePath) ? node_fs.readFileSync(misePath, 'utf-8') : '';
|
|
58
|
+
io.write(misePath, updateMiseTools(miseContent));
|
|
59
|
+
const workflowPath = node_path.join(io.workspaceRoot, '.github/workflows/ultramodern-workspace-gates.yml');
|
|
60
|
+
if (!node_fs.existsSync(workflowPath)) return;
|
|
61
|
+
const workflow = node_fs.readFileSync(workflowPath, 'utf-8');
|
|
62
|
+
const updatedWorkflow = workflow.replace(/^(\s*)node-version\s*:\s*.*$/mu, `$1node-version: '${NODE_VERSION}'`);
|
|
63
|
+
io.write(workflowPath, updatedWorkflow);
|
|
64
|
+
}
|
|
65
|
+
export { updateGeneratedToolchainFiles, updateRootPackageToolchain, updateUltramodernConfigToolchain };
|
|
@@ -11,6 +11,7 @@ import { createMigrationIo, listWorkspacePackageFiles, readJsonFile, writeJsonFi
|
|
|
11
11
|
import { updateGeneratedPackageScripts, updateGeneratedToolingDependencies, updateModernDependencies } from "./migrate-strict-effect/package-cohort.js";
|
|
12
12
|
import { createMigrationPackageSource } from "./migrate-strict-effect/package-source.js";
|
|
13
13
|
import { ensureGeneratedDeclarationPatches, updateGeneratedPnpmWorkspacePolicy, workspaceUsesDependency } from "./migrate-strict-effect/pnpm-policy.js";
|
|
14
|
+
import { updateGeneratedToolchainFiles, updateRootPackageToolchain } from "./migrate-strict-effect/toolchain-pins.js";
|
|
14
15
|
import { hasFlag } from "./options.js";
|
|
15
16
|
function runMigrateStrictEffect(args, context) {
|
|
16
17
|
if (args.includes('--help') || args.includes('-h')) {
|
|
@@ -71,6 +72,7 @@ function runMigrateStrictEffect(args, context) {
|
|
|
71
72
|
strategy: packageSource.strategy,
|
|
72
73
|
config: './.modernjs/ultramodern.json'
|
|
73
74
|
};
|
|
75
|
+
updateRootPackageToolchain(packageJson);
|
|
74
76
|
}
|
|
75
77
|
updateModernDependencies(packageJson, packageSource);
|
|
76
78
|
updateGeneratedToolingDependencies(packageJson);
|
|
@@ -82,6 +84,7 @@ function runMigrateStrictEffect(args, context) {
|
|
|
82
84
|
writeJsonFile(io, packageFile, packageJson);
|
|
83
85
|
}
|
|
84
86
|
updateGeneratedPnpmWorkspacePolicy(io);
|
|
87
|
+
updateGeneratedToolchainFiles(io);
|
|
85
88
|
ensureGeneratedDeclarationPatches(io, {
|
|
86
89
|
includeDrizzleOrmPatch: workspaceUsesDependency(io.workspaceRoot, 'drizzle-orm')
|
|
87
90
|
});
|
|
@@ -35,6 +35,10 @@ function createWorkspaceValidationContract(scope, enableTailwind, remotes = [])
|
|
|
35
35
|
}));
|
|
36
36
|
return {
|
|
37
37
|
packageScope: scope,
|
|
38
|
+
node: {
|
|
39
|
+
version: NODE_VERSION,
|
|
40
|
+
engineRange: '>=26'
|
|
41
|
+
},
|
|
38
42
|
versions: {
|
|
39
43
|
cloudflareCompatibilityDate: CLOUDFLARE_COMPATIBILITY_DATE,
|
|
40
44
|
effect: EFFECT_VERSION,
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { MigrationIo } from './io';
|
|
2
|
+
export declare function updateUltramodernConfigToolchain(config: Record<string, any>): void;
|
|
3
|
+
export declare function updateRootPackageToolchain(packageJson: Record<string, any>): void;
|
|
4
|
+
export declare function updateGeneratedToolchainFiles(io: MigrationIo): void;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import type { WorkspaceApp } from './types';
|
|
2
2
|
export declare function createWorkspaceValidationContract(scope: string, enableTailwind: boolean, remotes?: WorkspaceApp[]): {
|
|
3
3
|
packageScope: string;
|
|
4
|
+
node: {
|
|
5
|
+
version: string;
|
|
6
|
+
engineRange: string;
|
|
7
|
+
};
|
|
4
8
|
versions: {
|
|
5
9
|
cloudflareCompatibilityDate: string;
|
|
6
10
|
effect: string;
|
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.42",
|
|
25
25
|
"types": "./dist/types/index.d.ts",
|
|
26
26
|
"main": "./dist/esm-node/index.js",
|
|
27
27
|
"bin": {
|
|
@@ -77,8 +77,8 @@
|
|
|
77
77
|
"@modern-js/codesmith": "2.6.9",
|
|
78
78
|
"oxfmt": "0.58.0",
|
|
79
79
|
"ultracite": "7.9.3",
|
|
80
|
-
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.5.0-ultramodern.
|
|
81
|
-
"@modern-js/
|
|
80
|
+
"@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.5.0-ultramodern.42",
|
|
81
|
+
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.5.0-ultramodern.42"
|
|
82
82
|
},
|
|
83
83
|
"devDependencies": {
|
|
84
84
|
"@rslib/core": "0.23.2",
|
|
@@ -102,6 +102,6 @@
|
|
|
102
102
|
"type-check": "tsgo --noEmit -p tsconfig.json"
|
|
103
103
|
},
|
|
104
104
|
"ultramodern": {
|
|
105
|
-
"frameworkVersion": "3.5.0-ultramodern.
|
|
105
|
+
"frameworkVersion": "3.5.0-ultramodern.42"
|
|
106
106
|
}
|
|
107
107
|
}
|