@bleedingdev/modern-js-create 3.5.0-ultramodern.79 → 3.5.0-ultramodern.81
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/generated-artifacts-modern-configs.cjs +4 -3
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.cjs +2 -1
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.cjs +148 -0
- package/dist/cjs/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.cjs +42 -8
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +4 -3
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +2 -1
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.js +97 -0
- package/dist/esm/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +42 -8
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-modern-configs.js +4 -3
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-artifacts-typescript.js +2 -1
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.js +98 -0
- package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/pnpm-policy.js +42 -8
- package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.d.ts +3 -0
- package/package.json +4 -4
- package/template-workspace/.modernjs/release-cohort.json +34 -34
|
@@ -48,6 +48,7 @@ const demo_components_cjs_namespaceObject = require("../../../ultramodern-worksp
|
|
|
48
48
|
const descriptors_cjs_namespaceObject = require("../../../ultramodern-workspace/descriptors.cjs");
|
|
49
49
|
const module_federation_cjs_namespaceObject = require("../../../ultramodern-workspace/module-federation.cjs");
|
|
50
50
|
const external_config_cjs_namespaceObject = require("../../config.cjs");
|
|
51
|
+
const external_generated_ui_source_cjs_namespaceObject = require("./generated-ui-source.cjs");
|
|
51
52
|
const external_io_cjs_namespaceObject = require("./io.cjs");
|
|
52
53
|
function isGeneratedShellComposition(source) {
|
|
53
54
|
return source.includes('const createRemoteComponent =') && source.includes('export const VerticalShowcase =');
|
|
@@ -82,10 +83,10 @@ function updateGeneratedModernConfigs(io, config) {
|
|
|
82
83
|
changed = (0, external_io_cjs_namespaceObject.writeTextIfChanged)(io, componentsPath, (0, demo_components_cjs_namespaceObject.createShellRemoteComponents)(app, shellUiRemotes)) || changed;
|
|
83
84
|
changed = (0, external_io_cjs_namespaceObject.writeTextIfChanged)(io, workerComponentsPath, (0, demo_components_cjs_namespaceObject.createShellWorkerRemoteComponents)(app, shellUiRemotes)) || changed;
|
|
84
85
|
} else if (external_node_fs_default().existsSync(workerComponentsPath) && isGeneratedShellComposition(external_node_fs_default().readFileSync(workerComponentsPath, 'utf-8'))) changed = io.remove(workerComponentsPath) || changed;
|
|
85
|
-
} else for (const expose of (0, descriptors_cjs_namespaceObject.distributedSsrExposes)(app))changed = (0,
|
|
86
|
+
} else for (const expose of (0, descriptors_cjs_namespaceObject.distributedSsrExposes)(app))changed = (0, external_generated_ui_source_cjs_namespaceObject.writeGeneratedUiSourceIfChanged)(io, external_node_path_default().join(io.workspaceRoot, app.directory, `src/routes/[lang]/_mf/fragment/${(0, descriptors_cjs_namespaceObject.distributedSsrFragmentSlug)(expose)}/page.tsx`), (0, demo_components_cjs_namespaceObject.createRemoteExposeFragmentPage)(app, expose)) || changed;
|
|
86
87
|
if ((app.verticalRefs?.length ?? 0) > 0) {
|
|
87
|
-
changed = (0,
|
|
88
|
-
changed = (0,
|
|
88
|
+
changed = (0, external_generated_ui_source_cjs_namespaceObject.writeGeneratedUiSourceIfChanged)(io, external_node_path_default().join(io.workspaceRoot, app.directory, 'src/federated-components.tsx'), (0, demo_components_cjs_namespaceObject.createFederatedComponentsRegistry)(config.workspace.packageScope, app, remotes)) || changed;
|
|
89
|
+
changed = (0, external_generated_ui_source_cjs_namespaceObject.writeGeneratedUiSourceIfChanged)(io, external_node_path_default().join(io.workspaceRoot, app.directory, 'src/federated-components.worker.tsx'), (0, demo_components_cjs_namespaceObject.createFederatedComponentsRegistry)(config.workspace.packageScope, app, remotes, true)) || changed;
|
|
89
90
|
}
|
|
90
91
|
}
|
|
91
92
|
return changed;
|
|
@@ -48,6 +48,7 @@ const demo_components_cjs_namespaceObject = require("../../../ultramodern-worksp
|
|
|
48
48
|
const descriptors_cjs_namespaceObject = require("../../../ultramodern-workspace/descriptors.cjs");
|
|
49
49
|
const package_json_cjs_namespaceObject = require("../../../ultramodern-workspace/package-json.cjs");
|
|
50
50
|
const external_config_cjs_namespaceObject = require("../../config.cjs");
|
|
51
|
+
const external_generated_ui_source_cjs_namespaceObject = require("./generated-ui-source.cjs");
|
|
51
52
|
const external_io_cjs_namespaceObject = require("./io.cjs");
|
|
52
53
|
function jsonObject(value) {
|
|
53
54
|
return null === value || 'object' != typeof value || Array.isArray(value) ? void 0 : value;
|
|
@@ -189,7 +190,7 @@ function updateGeneratedTypeScriptSurfaces(io, config) {
|
|
|
189
190
|
const fragmentPagePath = external_node_path_default().join(io.workspaceRoot, app.directory, 'src/routes/[lang]/_mf/fragment', (0, descriptors_cjs_namespaceObject.distributedSsrFragmentSlug)(expose), 'page.tsx');
|
|
190
191
|
if (!external_node_fs_default().existsSync(fragmentPagePath)) continue;
|
|
191
192
|
const fragmentPageSource = external_node_fs_default().readFileSync(fragmentPagePath, 'utf-8');
|
|
192
|
-
if (fragmentPageSource.includes("from '@modern-js/runtime/module-federation';") && fragmentPageSource.includes('data-modern-distributed-ssr-marker="start"')) changed = (0,
|
|
193
|
+
if (fragmentPageSource.includes("from '@modern-js/runtime/module-federation';") && fragmentPageSource.includes('data-modern-distributed-ssr-marker="start"')) changed = (0, external_generated_ui_source_cjs_namespaceObject.writeGeneratedUiSourceIfChanged)(io, fragmentPagePath, (0, demo_components_cjs_namespaceObject.createRemoteExposeFragmentPage)(app, expose)) || changed;
|
|
193
194
|
}
|
|
194
195
|
}
|
|
195
196
|
changed = updateGeneratedShellRuntimeSurfaces(io, config) || changed;
|
|
@@ -0,0 +1,148 @@
|
|
|
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
|
+
generatedUiSourceRequiresRewrite: ()=>generatedUiSourceRequiresRewrite,
|
|
41
|
+
writeGeneratedUiSourceIfChanged: ()=>writeGeneratedUiSourceIfChanged
|
|
42
|
+
});
|
|
43
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
44
|
+
var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
|
|
45
|
+
const external_node_util_namespaceObject = require("node:util");
|
|
46
|
+
const external_io_cjs_namespaceObject = require("./io.cjs");
|
|
47
|
+
const multiCharacterTokens = [
|
|
48
|
+
'===',
|
|
49
|
+
'!==',
|
|
50
|
+
'**=',
|
|
51
|
+
'&&=',
|
|
52
|
+
'||=',
|
|
53
|
+
'??=',
|
|
54
|
+
'...',
|
|
55
|
+
'=>',
|
|
56
|
+
'==',
|
|
57
|
+
'!=',
|
|
58
|
+
'<=',
|
|
59
|
+
'>=',
|
|
60
|
+
'++',
|
|
61
|
+
'--',
|
|
62
|
+
'&&',
|
|
63
|
+
'||',
|
|
64
|
+
'??',
|
|
65
|
+
'?.',
|
|
66
|
+
'**',
|
|
67
|
+
'+=',
|
|
68
|
+
'-=',
|
|
69
|
+
'*=',
|
|
70
|
+
'/=',
|
|
71
|
+
'%=',
|
|
72
|
+
'&=',
|
|
73
|
+
'|=',
|
|
74
|
+
'^=',
|
|
75
|
+
'</',
|
|
76
|
+
'/>'
|
|
77
|
+
];
|
|
78
|
+
function isIdentifierPart(character) {
|
|
79
|
+
return /[$_\p{ID_Continue}\u200C\u200D]/u.test(character);
|
|
80
|
+
}
|
|
81
|
+
function generatedUiSourceTokens(source) {
|
|
82
|
+
const tokens = [];
|
|
83
|
+
let index = 0;
|
|
84
|
+
while(index < source.length){
|
|
85
|
+
const character = source[index] ?? '';
|
|
86
|
+
if (/\s/u.test(character)) {
|
|
87
|
+
index += 1;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (source.startsWith('//', index)) {
|
|
91
|
+
const lineEnd = source.indexOf('\n', index + 2);
|
|
92
|
+
index = lineEnd < 0 ? source.length : lineEnd + 1;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
if (source.startsWith('/*', index)) {
|
|
96
|
+
const commentEnd = source.indexOf('*/', index + 2);
|
|
97
|
+
index = commentEnd < 0 ? source.length : commentEnd + 2;
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
if ("'" === character || '"' === character || '`' === character) {
|
|
101
|
+
const quote = character;
|
|
102
|
+
const start = index;
|
|
103
|
+
index += 1;
|
|
104
|
+
let escaped = false;
|
|
105
|
+
while(index < source.length){
|
|
106
|
+
const current = source[index] ?? '';
|
|
107
|
+
index += 1;
|
|
108
|
+
if (escaped) escaped = false;
|
|
109
|
+
else if ('\\' === current) escaped = true;
|
|
110
|
+
else if (current === quote) break;
|
|
111
|
+
}
|
|
112
|
+
tokens.push(`literal:${source.slice(start, index)}`);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (isIdentifierPart(character)) {
|
|
116
|
+
const start = index;
|
|
117
|
+
index += 1;
|
|
118
|
+
while(isIdentifierPart(source[index] ?? ''))index += 1;
|
|
119
|
+
tokens.push(`word:${source.slice(start, index)}`);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const multiCharacterToken = multiCharacterTokens.find((token)=>source.startsWith(token, index));
|
|
123
|
+
if (multiCharacterToken) {
|
|
124
|
+
tokens.push(`punctuator:${multiCharacterToken}`);
|
|
125
|
+
index += multiCharacterToken.length;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
tokens.push(`punctuator:${character}`);
|
|
129
|
+
index += 1;
|
|
130
|
+
}
|
|
131
|
+
return tokens;
|
|
132
|
+
}
|
|
133
|
+
function generatedUiSourceRequiresRewrite(existingSource, nextSource) {
|
|
134
|
+
return !(0, external_node_util_namespaceObject.isDeepStrictEqual)(generatedUiSourceTokens(existingSource), generatedUiSourceTokens(nextSource));
|
|
135
|
+
}
|
|
136
|
+
function writeGeneratedUiSourceIfChanged(io, filePath, nextSource) {
|
|
137
|
+
if (external_node_fs_default().existsSync(filePath) && !generatedUiSourceRequiresRewrite(external_node_fs_default().readFileSync(filePath, 'utf-8'), nextSource)) return false;
|
|
138
|
+
return (0, external_io_cjs_namespaceObject.writeTextIfChanged)(io, filePath, nextSource);
|
|
139
|
+
}
|
|
140
|
+
exports.generatedUiSourceRequiresRewrite = __webpack_exports__.generatedUiSourceRequiresRewrite;
|
|
141
|
+
exports.writeGeneratedUiSourceIfChanged = __webpack_exports__.writeGeneratedUiSourceIfChanged;
|
|
142
|
+
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
143
|
+
"generatedUiSourceRequiresRewrite",
|
|
144
|
+
"writeGeneratedUiSourceIfChanged"
|
|
145
|
+
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
146
|
+
Object.defineProperty(exports, '__esModule', {
|
|
147
|
+
value: true
|
|
148
|
+
});
|
|
@@ -324,19 +324,40 @@ function packageVersionKey(packageName, version) {
|
|
|
324
324
|
function isRegistryRecord(value) {
|
|
325
325
|
return Boolean(value) && 'object' == typeof value && !Array.isArray(value);
|
|
326
326
|
}
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
327
|
+
const registryFetchConcurrency = 16;
|
|
328
|
+
const registryFetchAttempts = 3;
|
|
329
|
+
const registryFetchRetryDelayMs = 250;
|
|
330
|
+
function isTransientRegistryStatus(status) {
|
|
331
|
+
return 429 === status || status >= 500;
|
|
332
|
+
}
|
|
333
|
+
async function fetchRegistryResponse(fetchImpl, url) {
|
|
334
|
+
let lastError;
|
|
335
|
+
for(let attempt = 0; attempt < registryFetchAttempts; attempt += 1){
|
|
333
336
|
try {
|
|
334
|
-
response = await
|
|
337
|
+
const response = await fetchImpl(url, {
|
|
335
338
|
headers: {
|
|
336
339
|
accept: 'application/json'
|
|
337
340
|
},
|
|
338
341
|
redirect: 'error'
|
|
339
342
|
});
|
|
343
|
+
if (response.ok || !isTransientRegistryStatus(response.status) || attempt === registryFetchAttempts - 1) return response;
|
|
344
|
+
lastError = new Error(`HTTP ${response.status}`);
|
|
345
|
+
} catch (error) {
|
|
346
|
+
lastError = error;
|
|
347
|
+
if (attempt === registryFetchAttempts - 1) throw error;
|
|
348
|
+
}
|
|
349
|
+
await new Promise((resolve)=>setTimeout(resolve, registryFetchRetryDelayMs * 2 ** attempt));
|
|
350
|
+
}
|
|
351
|
+
throw lastError;
|
|
352
|
+
}
|
|
353
|
+
async function resolveRegistryCandidates(candidates, options) {
|
|
354
|
+
const nowTimestamp = options.now.getTime();
|
|
355
|
+
if (!Number.isFinite(nowTimestamp)) throw new Error('Release-age validation requires a valid current time.');
|
|
356
|
+
async function resolveCandidate(candidate) {
|
|
357
|
+
const key = packageVersionKey(candidate.packageName, candidate.version);
|
|
358
|
+
let response;
|
|
359
|
+
try {
|
|
360
|
+
response = await fetchRegistryResponse(options.fetchImpl, packageRegistryUrl(options.registryUrl, candidate.packageName));
|
|
340
361
|
} catch (error) {
|
|
341
362
|
throw new Error(`Registry metadata is uncertain for ${key} (${candidate.path.join(' -> ')}): ${error instanceof Error ? error.message : String(error)}`);
|
|
342
363
|
}
|
|
@@ -364,7 +385,20 @@ async function resolveRegistryCandidates(candidates, options) {
|
|
|
364
385
|
publishedAt: new Date(publishedAtTimestamp).toISOString()
|
|
365
386
|
}
|
|
366
387
|
};
|
|
367
|
-
}
|
|
388
|
+
}
|
|
389
|
+
const results = new Array(candidates.length);
|
|
390
|
+
let nextIndex = 0;
|
|
391
|
+
async function worker() {
|
|
392
|
+
while(nextIndex < candidates.length){
|
|
393
|
+
const index = nextIndex;
|
|
394
|
+
nextIndex += 1;
|
|
395
|
+
results[index] = await resolveCandidate(candidates[index]);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
await Promise.all(Array.from({
|
|
399
|
+
length: Math.min(registryFetchConcurrency, candidates.length)
|
|
400
|
+
}, ()=>worker()));
|
|
401
|
+
return results;
|
|
368
402
|
}
|
|
369
403
|
async function validateGeneratedPnpmLockReleaseAgePolicy(workspaceRoot, packageSource, options = {}) {
|
|
370
404
|
const lockfilePath = external_node_path_default().join(workspaceRoot, 'pnpm-lock.yaml');
|
|
@@ -5,6 +5,7 @@ import { createFederatedComponentsRegistry, createRemoteExposeFragmentPage, crea
|
|
|
5
5
|
import { appEmitsBrowserUi, appHasApi, distributedSsrExposes, distributedSsrFragmentSlug, resolveRemoteRefs } from "../../../ultramodern-workspace/descriptors.js";
|
|
6
6
|
import { createAppModernConfig, createBackendModuleFederationConfig, createRemoteModuleFederationConfig, createShellModuleFederationConfig } from "../../../ultramodern-workspace/module-federation.js";
|
|
7
7
|
import { additionalShellsFromToolingConfig, allWorkspaceAppsFromToolingConfig } from "../../config.js";
|
|
8
|
+
import { writeGeneratedUiSourceIfChanged } from "./generated-ui-source.js";
|
|
8
9
|
import { readJsonFile, writeTextIfChanged } from "./io.js";
|
|
9
10
|
function isGeneratedShellComposition(source) {
|
|
10
11
|
return source.includes('const createRemoteComponent =') && source.includes('export const VerticalShowcase =');
|
|
@@ -39,10 +40,10 @@ function updateGeneratedModernConfigs(io, config) {
|
|
|
39
40
|
changed = writeTextIfChanged(io, componentsPath, createShellRemoteComponents(app, shellUiRemotes)) || changed;
|
|
40
41
|
changed = writeTextIfChanged(io, workerComponentsPath, createShellWorkerRemoteComponents(app, shellUiRemotes)) || changed;
|
|
41
42
|
} else if (node_fs.existsSync(workerComponentsPath) && isGeneratedShellComposition(node_fs.readFileSync(workerComponentsPath, 'utf-8'))) changed = io.remove(workerComponentsPath) || changed;
|
|
42
|
-
} else for (const expose of distributedSsrExposes(app))changed =
|
|
43
|
+
} else for (const expose of distributedSsrExposes(app))changed = writeGeneratedUiSourceIfChanged(io, node_path.join(io.workspaceRoot, app.directory, `src/routes/[lang]/_mf/fragment/${distributedSsrFragmentSlug(expose)}/page.tsx`), createRemoteExposeFragmentPage(app, expose)) || changed;
|
|
43
44
|
if ((app.verticalRefs?.length ?? 0) > 0) {
|
|
44
|
-
changed =
|
|
45
|
-
changed =
|
|
45
|
+
changed = writeGeneratedUiSourceIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'src/federated-components.tsx'), createFederatedComponentsRegistry(config.workspace.packageScope, app, remotes)) || changed;
|
|
46
|
+
changed = writeGeneratedUiSourceIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'src/federated-components.worker.tsx'), createFederatedComponentsRegistry(config.workspace.packageScope, app, remotes, true)) || changed;
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
49
|
return changed;
|
|
@@ -5,6 +5,7 @@ import { createRemoteExposeFragmentPage, regenerateGeneratedNavigationSurface, r
|
|
|
5
5
|
import { appI18nNamespace, distributedSsrExposes, distributedSsrFragmentSlug, resolveRemoteRefs } from "../../../ultramodern-workspace/descriptors.js";
|
|
6
6
|
import { createAppMfTypesTsConfig, createAppTsConfig, createSharedPackageTsConfig, createTsConfigBase } from "../../../ultramodern-workspace/package-json.js";
|
|
7
7
|
import { allWorkspaceAppsFromToolingConfig } from "../../config.js";
|
|
8
|
+
import { writeGeneratedUiSourceIfChanged } from "./generated-ui-source.js";
|
|
8
9
|
import { writeJsonIfChanged, writeTextIfChanged } from "./io.js";
|
|
9
10
|
function jsonObject(value) {
|
|
10
11
|
return null === value || 'object' != typeof value || Array.isArray(value) ? void 0 : value;
|
|
@@ -146,7 +147,7 @@ function updateGeneratedTypeScriptSurfaces(io, config) {
|
|
|
146
147
|
const fragmentPagePath = node_path.join(io.workspaceRoot, app.directory, 'src/routes/[lang]/_mf/fragment', distributedSsrFragmentSlug(expose), 'page.tsx');
|
|
147
148
|
if (!node_fs.existsSync(fragmentPagePath)) continue;
|
|
148
149
|
const fragmentPageSource = node_fs.readFileSync(fragmentPagePath, 'utf-8');
|
|
149
|
-
if (fragmentPageSource.includes("from '@modern-js/runtime/module-federation';") && fragmentPageSource.includes('data-modern-distributed-ssr-marker="start"')) changed =
|
|
150
|
+
if (fragmentPageSource.includes("from '@modern-js/runtime/module-federation';") && fragmentPageSource.includes('data-modern-distributed-ssr-marker="start"')) changed = writeGeneratedUiSourceIfChanged(io, fragmentPagePath, createRemoteExposeFragmentPage(app, expose)) || changed;
|
|
150
151
|
}
|
|
151
152
|
}
|
|
152
153
|
changed = updateGeneratedShellRuntimeSurfaces(io, config) || changed;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import node_fs from "node:fs";
|
|
2
|
+
import { isDeepStrictEqual } from "node:util";
|
|
3
|
+
import { writeTextIfChanged } from "./io.js";
|
|
4
|
+
const multiCharacterTokens = [
|
|
5
|
+
'===',
|
|
6
|
+
'!==',
|
|
7
|
+
'**=',
|
|
8
|
+
'&&=',
|
|
9
|
+
'||=',
|
|
10
|
+
'??=',
|
|
11
|
+
'...',
|
|
12
|
+
'=>',
|
|
13
|
+
'==',
|
|
14
|
+
'!=',
|
|
15
|
+
'<=',
|
|
16
|
+
'>=',
|
|
17
|
+
'++',
|
|
18
|
+
'--',
|
|
19
|
+
'&&',
|
|
20
|
+
'||',
|
|
21
|
+
'??',
|
|
22
|
+
'?.',
|
|
23
|
+
'**',
|
|
24
|
+
'+=',
|
|
25
|
+
'-=',
|
|
26
|
+
'*=',
|
|
27
|
+
'/=',
|
|
28
|
+
'%=',
|
|
29
|
+
'&=',
|
|
30
|
+
'|=',
|
|
31
|
+
'^=',
|
|
32
|
+
'</',
|
|
33
|
+
'/>'
|
|
34
|
+
];
|
|
35
|
+
function isIdentifierPart(character) {
|
|
36
|
+
return /[$_\p{ID_Continue}\u200C\u200D]/u.test(character);
|
|
37
|
+
}
|
|
38
|
+
function generatedUiSourceTokens(source) {
|
|
39
|
+
const tokens = [];
|
|
40
|
+
let index = 0;
|
|
41
|
+
while(index < source.length){
|
|
42
|
+
const character = source[index] ?? '';
|
|
43
|
+
if (/\s/u.test(character)) {
|
|
44
|
+
index += 1;
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (source.startsWith('//', index)) {
|
|
48
|
+
const lineEnd = source.indexOf('\n', index + 2);
|
|
49
|
+
index = lineEnd < 0 ? source.length : lineEnd + 1;
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (source.startsWith('/*', index)) {
|
|
53
|
+
const commentEnd = source.indexOf('*/', index + 2);
|
|
54
|
+
index = commentEnd < 0 ? source.length : commentEnd + 2;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if ("'" === character || '"' === character || '`' === character) {
|
|
58
|
+
const quote = character;
|
|
59
|
+
const start = index;
|
|
60
|
+
index += 1;
|
|
61
|
+
let escaped = false;
|
|
62
|
+
while(index < source.length){
|
|
63
|
+
const current = source[index] ?? '';
|
|
64
|
+
index += 1;
|
|
65
|
+
if (escaped) escaped = false;
|
|
66
|
+
else if ('\\' === current) escaped = true;
|
|
67
|
+
else if (current === quote) break;
|
|
68
|
+
}
|
|
69
|
+
tokens.push(`literal:${source.slice(start, index)}`);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (isIdentifierPart(character)) {
|
|
73
|
+
const start = index;
|
|
74
|
+
index += 1;
|
|
75
|
+
while(isIdentifierPart(source[index] ?? ''))index += 1;
|
|
76
|
+
tokens.push(`word:${source.slice(start, index)}`);
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
const multiCharacterToken = multiCharacterTokens.find((token)=>source.startsWith(token, index));
|
|
80
|
+
if (multiCharacterToken) {
|
|
81
|
+
tokens.push(`punctuator:${multiCharacterToken}`);
|
|
82
|
+
index += multiCharacterToken.length;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
tokens.push(`punctuator:${character}`);
|
|
86
|
+
index += 1;
|
|
87
|
+
}
|
|
88
|
+
return tokens;
|
|
89
|
+
}
|
|
90
|
+
function generatedUiSourceRequiresRewrite(existingSource, nextSource) {
|
|
91
|
+
return !isDeepStrictEqual(generatedUiSourceTokens(existingSource), generatedUiSourceTokens(nextSource));
|
|
92
|
+
}
|
|
93
|
+
function writeGeneratedUiSourceIfChanged(io, filePath, nextSource) {
|
|
94
|
+
if (node_fs.existsSync(filePath) && !generatedUiSourceRequiresRewrite(node_fs.readFileSync(filePath, 'utf-8'), nextSource)) return false;
|
|
95
|
+
return writeTextIfChanged(io, filePath, nextSource);
|
|
96
|
+
}
|
|
97
|
+
export { generatedUiSourceRequiresRewrite, writeGeneratedUiSourceIfChanged };
|
|
@@ -276,19 +276,40 @@ function packageVersionKey(packageName, version) {
|
|
|
276
276
|
function isRegistryRecord(value) {
|
|
277
277
|
return Boolean(value) && 'object' == typeof value && !Array.isArray(value);
|
|
278
278
|
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
279
|
+
const registryFetchConcurrency = 16;
|
|
280
|
+
const registryFetchAttempts = 3;
|
|
281
|
+
const registryFetchRetryDelayMs = 250;
|
|
282
|
+
function isTransientRegistryStatus(status) {
|
|
283
|
+
return 429 === status || status >= 500;
|
|
284
|
+
}
|
|
285
|
+
async function fetchRegistryResponse(fetchImpl, url) {
|
|
286
|
+
let lastError;
|
|
287
|
+
for(let attempt = 0; attempt < registryFetchAttempts; attempt += 1){
|
|
285
288
|
try {
|
|
286
|
-
response = await
|
|
289
|
+
const response = await fetchImpl(url, {
|
|
287
290
|
headers: {
|
|
288
291
|
accept: 'application/json'
|
|
289
292
|
},
|
|
290
293
|
redirect: 'error'
|
|
291
294
|
});
|
|
295
|
+
if (response.ok || !isTransientRegistryStatus(response.status) || attempt === registryFetchAttempts - 1) return response;
|
|
296
|
+
lastError = new Error(`HTTP ${response.status}`);
|
|
297
|
+
} catch (error) {
|
|
298
|
+
lastError = error;
|
|
299
|
+
if (attempt === registryFetchAttempts - 1) throw error;
|
|
300
|
+
}
|
|
301
|
+
await new Promise((resolve)=>setTimeout(resolve, registryFetchRetryDelayMs * 2 ** attempt));
|
|
302
|
+
}
|
|
303
|
+
throw lastError;
|
|
304
|
+
}
|
|
305
|
+
async function resolveRegistryCandidates(candidates, options) {
|
|
306
|
+
const nowTimestamp = options.now.getTime();
|
|
307
|
+
if (!Number.isFinite(nowTimestamp)) throw new Error('Release-age validation requires a valid current time.');
|
|
308
|
+
async function resolveCandidate(candidate) {
|
|
309
|
+
const key = packageVersionKey(candidate.packageName, candidate.version);
|
|
310
|
+
let response;
|
|
311
|
+
try {
|
|
312
|
+
response = await fetchRegistryResponse(options.fetchImpl, packageRegistryUrl(options.registryUrl, candidate.packageName));
|
|
292
313
|
} catch (error) {
|
|
293
314
|
throw new Error(`Registry metadata is uncertain for ${key} (${candidate.path.join(' -> ')}): ${error instanceof Error ? error.message : String(error)}`);
|
|
294
315
|
}
|
|
@@ -316,7 +337,20 @@ async function resolveRegistryCandidates(candidates, options) {
|
|
|
316
337
|
publishedAt: new Date(publishedAtTimestamp).toISOString()
|
|
317
338
|
}
|
|
318
339
|
};
|
|
319
|
-
}
|
|
340
|
+
}
|
|
341
|
+
const results = new Array(candidates.length);
|
|
342
|
+
let nextIndex = 0;
|
|
343
|
+
async function worker() {
|
|
344
|
+
while(nextIndex < candidates.length){
|
|
345
|
+
const index = nextIndex;
|
|
346
|
+
nextIndex += 1;
|
|
347
|
+
results[index] = await resolveCandidate(candidates[index]);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
await Promise.all(Array.from({
|
|
351
|
+
length: Math.min(registryFetchConcurrency, candidates.length)
|
|
352
|
+
}, ()=>worker()));
|
|
353
|
+
return results;
|
|
320
354
|
}
|
|
321
355
|
async function validateGeneratedPnpmLockReleaseAgePolicy(workspaceRoot, packageSource, options = {}) {
|
|
322
356
|
const lockfilePath = node_path.join(workspaceRoot, 'pnpm-lock.yaml');
|
|
@@ -6,6 +6,7 @@ import { createFederatedComponentsRegistry, createRemoteExposeFragmentPage, crea
|
|
|
6
6
|
import { appEmitsBrowserUi, appHasApi, distributedSsrExposes, distributedSsrFragmentSlug, resolveRemoteRefs } from "../../../ultramodern-workspace/descriptors.js";
|
|
7
7
|
import { createAppModernConfig, createBackendModuleFederationConfig, createRemoteModuleFederationConfig, createShellModuleFederationConfig } from "../../../ultramodern-workspace/module-federation.js";
|
|
8
8
|
import { additionalShellsFromToolingConfig, allWorkspaceAppsFromToolingConfig } from "../../config.js";
|
|
9
|
+
import { writeGeneratedUiSourceIfChanged } from "./generated-ui-source.js";
|
|
9
10
|
import { readJsonFile, writeTextIfChanged } from "./io.js";
|
|
10
11
|
function isGeneratedShellComposition(source) {
|
|
11
12
|
return source.includes('const createRemoteComponent =') && source.includes('export const VerticalShowcase =');
|
|
@@ -40,10 +41,10 @@ function updateGeneratedModernConfigs(io, config) {
|
|
|
40
41
|
changed = writeTextIfChanged(io, componentsPath, createShellRemoteComponents(app, shellUiRemotes)) || changed;
|
|
41
42
|
changed = writeTextIfChanged(io, workerComponentsPath, createShellWorkerRemoteComponents(app, shellUiRemotes)) || changed;
|
|
42
43
|
} else if (node_fs.existsSync(workerComponentsPath) && isGeneratedShellComposition(node_fs.readFileSync(workerComponentsPath, 'utf-8'))) changed = io.remove(workerComponentsPath) || changed;
|
|
43
|
-
} else for (const expose of distributedSsrExposes(app))changed =
|
|
44
|
+
} else for (const expose of distributedSsrExposes(app))changed = writeGeneratedUiSourceIfChanged(io, node_path.join(io.workspaceRoot, app.directory, `src/routes/[lang]/_mf/fragment/${distributedSsrFragmentSlug(expose)}/page.tsx`), createRemoteExposeFragmentPage(app, expose)) || changed;
|
|
44
45
|
if ((app.verticalRefs?.length ?? 0) > 0) {
|
|
45
|
-
changed =
|
|
46
|
-
changed =
|
|
46
|
+
changed = writeGeneratedUiSourceIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'src/federated-components.tsx'), createFederatedComponentsRegistry(config.workspace.packageScope, app, remotes)) || changed;
|
|
47
|
+
changed = writeGeneratedUiSourceIfChanged(io, node_path.join(io.workspaceRoot, app.directory, 'src/federated-components.worker.tsx'), createFederatedComponentsRegistry(config.workspace.packageScope, app, remotes, true)) || changed;
|
|
47
48
|
}
|
|
48
49
|
}
|
|
49
50
|
return changed;
|
|
@@ -6,6 +6,7 @@ import { createRemoteExposeFragmentPage, regenerateGeneratedNavigationSurface, r
|
|
|
6
6
|
import { appI18nNamespace, distributedSsrExposes, distributedSsrFragmentSlug, resolveRemoteRefs } from "../../../ultramodern-workspace/descriptors.js";
|
|
7
7
|
import { createAppMfTypesTsConfig, createAppTsConfig, createSharedPackageTsConfig, createTsConfigBase } from "../../../ultramodern-workspace/package-json.js";
|
|
8
8
|
import { allWorkspaceAppsFromToolingConfig } from "../../config.js";
|
|
9
|
+
import { writeGeneratedUiSourceIfChanged } from "./generated-ui-source.js";
|
|
9
10
|
import { writeJsonIfChanged, writeTextIfChanged } from "./io.js";
|
|
10
11
|
function jsonObject(value) {
|
|
11
12
|
return null === value || 'object' != typeof value || Array.isArray(value) ? void 0 : value;
|
|
@@ -147,7 +148,7 @@ function updateGeneratedTypeScriptSurfaces(io, config) {
|
|
|
147
148
|
const fragmentPagePath = node_path.join(io.workspaceRoot, app.directory, 'src/routes/[lang]/_mf/fragment', distributedSsrFragmentSlug(expose), 'page.tsx');
|
|
148
149
|
if (!node_fs.existsSync(fragmentPagePath)) continue;
|
|
149
150
|
const fragmentPageSource = node_fs.readFileSync(fragmentPagePath, 'utf-8');
|
|
150
|
-
if (fragmentPageSource.includes("from '@modern-js/runtime/module-federation';") && fragmentPageSource.includes('data-modern-distributed-ssr-marker="start"')) changed =
|
|
151
|
+
if (fragmentPageSource.includes("from '@modern-js/runtime/module-federation';") && fragmentPageSource.includes('data-modern-distributed-ssr-marker="start"')) changed = writeGeneratedUiSourceIfChanged(io, fragmentPagePath, createRemoteExposeFragmentPage(app, expose)) || changed;
|
|
151
152
|
}
|
|
152
153
|
}
|
|
153
154
|
changed = updateGeneratedShellRuntimeSurfaces(io, config) || changed;
|
package/dist/esm-node/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import "node:module";
|
|
2
|
+
import node_fs from "node:fs";
|
|
3
|
+
import { isDeepStrictEqual } from "node:util";
|
|
4
|
+
import { writeTextIfChanged } from "./io.js";
|
|
5
|
+
const multiCharacterTokens = [
|
|
6
|
+
'===',
|
|
7
|
+
'!==',
|
|
8
|
+
'**=',
|
|
9
|
+
'&&=',
|
|
10
|
+
'||=',
|
|
11
|
+
'??=',
|
|
12
|
+
'...',
|
|
13
|
+
'=>',
|
|
14
|
+
'==',
|
|
15
|
+
'!=',
|
|
16
|
+
'<=',
|
|
17
|
+
'>=',
|
|
18
|
+
'++',
|
|
19
|
+
'--',
|
|
20
|
+
'&&',
|
|
21
|
+
'||',
|
|
22
|
+
'??',
|
|
23
|
+
'?.',
|
|
24
|
+
'**',
|
|
25
|
+
'+=',
|
|
26
|
+
'-=',
|
|
27
|
+
'*=',
|
|
28
|
+
'/=',
|
|
29
|
+
'%=',
|
|
30
|
+
'&=',
|
|
31
|
+
'|=',
|
|
32
|
+
'^=',
|
|
33
|
+
'</',
|
|
34
|
+
'/>'
|
|
35
|
+
];
|
|
36
|
+
function isIdentifierPart(character) {
|
|
37
|
+
return /[$_\p{ID_Continue}\u200C\u200D]/u.test(character);
|
|
38
|
+
}
|
|
39
|
+
function generatedUiSourceTokens(source) {
|
|
40
|
+
const tokens = [];
|
|
41
|
+
let index = 0;
|
|
42
|
+
while(index < source.length){
|
|
43
|
+
const character = source[index] ?? '';
|
|
44
|
+
if (/\s/u.test(character)) {
|
|
45
|
+
index += 1;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (source.startsWith('//', index)) {
|
|
49
|
+
const lineEnd = source.indexOf('\n', index + 2);
|
|
50
|
+
index = lineEnd < 0 ? source.length : lineEnd + 1;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (source.startsWith('/*', index)) {
|
|
54
|
+
const commentEnd = source.indexOf('*/', index + 2);
|
|
55
|
+
index = commentEnd < 0 ? source.length : commentEnd + 2;
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if ("'" === character || '"' === character || '`' === character) {
|
|
59
|
+
const quote = character;
|
|
60
|
+
const start = index;
|
|
61
|
+
index += 1;
|
|
62
|
+
let escaped = false;
|
|
63
|
+
while(index < source.length){
|
|
64
|
+
const current = source[index] ?? '';
|
|
65
|
+
index += 1;
|
|
66
|
+
if (escaped) escaped = false;
|
|
67
|
+
else if ('\\' === current) escaped = true;
|
|
68
|
+
else if (current === quote) break;
|
|
69
|
+
}
|
|
70
|
+
tokens.push(`literal:${source.slice(start, index)}`);
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (isIdentifierPart(character)) {
|
|
74
|
+
const start = index;
|
|
75
|
+
index += 1;
|
|
76
|
+
while(isIdentifierPart(source[index] ?? ''))index += 1;
|
|
77
|
+
tokens.push(`word:${source.slice(start, index)}`);
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const multiCharacterToken = multiCharacterTokens.find((token)=>source.startsWith(token, index));
|
|
81
|
+
if (multiCharacterToken) {
|
|
82
|
+
tokens.push(`punctuator:${multiCharacterToken}`);
|
|
83
|
+
index += multiCharacterToken.length;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
tokens.push(`punctuator:${character}`);
|
|
87
|
+
index += 1;
|
|
88
|
+
}
|
|
89
|
+
return tokens;
|
|
90
|
+
}
|
|
91
|
+
function generatedUiSourceRequiresRewrite(existingSource, nextSource) {
|
|
92
|
+
return !isDeepStrictEqual(generatedUiSourceTokens(existingSource), generatedUiSourceTokens(nextSource));
|
|
93
|
+
}
|
|
94
|
+
function writeGeneratedUiSourceIfChanged(io, filePath, nextSource) {
|
|
95
|
+
if (node_fs.existsSync(filePath) && !generatedUiSourceRequiresRewrite(node_fs.readFileSync(filePath, 'utf-8'), nextSource)) return false;
|
|
96
|
+
return writeTextIfChanged(io, filePath, nextSource);
|
|
97
|
+
}
|
|
98
|
+
export { generatedUiSourceRequiresRewrite, writeGeneratedUiSourceIfChanged };
|
|
@@ -277,19 +277,40 @@ function packageVersionKey(packageName, version) {
|
|
|
277
277
|
function isRegistryRecord(value) {
|
|
278
278
|
return Boolean(value) && 'object' == typeof value && !Array.isArray(value);
|
|
279
279
|
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
280
|
+
const registryFetchConcurrency = 16;
|
|
281
|
+
const registryFetchAttempts = 3;
|
|
282
|
+
const registryFetchRetryDelayMs = 250;
|
|
283
|
+
function isTransientRegistryStatus(status) {
|
|
284
|
+
return 429 === status || status >= 500;
|
|
285
|
+
}
|
|
286
|
+
async function fetchRegistryResponse(fetchImpl, url) {
|
|
287
|
+
let lastError;
|
|
288
|
+
for(let attempt = 0; attempt < registryFetchAttempts; attempt += 1){
|
|
286
289
|
try {
|
|
287
|
-
response = await
|
|
290
|
+
const response = await fetchImpl(url, {
|
|
288
291
|
headers: {
|
|
289
292
|
accept: 'application/json'
|
|
290
293
|
},
|
|
291
294
|
redirect: 'error'
|
|
292
295
|
});
|
|
296
|
+
if (response.ok || !isTransientRegistryStatus(response.status) || attempt === registryFetchAttempts - 1) return response;
|
|
297
|
+
lastError = new Error(`HTTP ${response.status}`);
|
|
298
|
+
} catch (error) {
|
|
299
|
+
lastError = error;
|
|
300
|
+
if (attempt === registryFetchAttempts - 1) throw error;
|
|
301
|
+
}
|
|
302
|
+
await new Promise((resolve)=>setTimeout(resolve, registryFetchRetryDelayMs * 2 ** attempt));
|
|
303
|
+
}
|
|
304
|
+
throw lastError;
|
|
305
|
+
}
|
|
306
|
+
async function resolveRegistryCandidates(candidates, options) {
|
|
307
|
+
const nowTimestamp = options.now.getTime();
|
|
308
|
+
if (!Number.isFinite(nowTimestamp)) throw new Error('Release-age validation requires a valid current time.');
|
|
309
|
+
async function resolveCandidate(candidate) {
|
|
310
|
+
const key = packageVersionKey(candidate.packageName, candidate.version);
|
|
311
|
+
let response;
|
|
312
|
+
try {
|
|
313
|
+
response = await fetchRegistryResponse(options.fetchImpl, packageRegistryUrl(options.registryUrl, candidate.packageName));
|
|
293
314
|
} catch (error) {
|
|
294
315
|
throw new Error(`Registry metadata is uncertain for ${key} (${candidate.path.join(' -> ')}): ${error instanceof Error ? error.message : String(error)}`);
|
|
295
316
|
}
|
|
@@ -317,7 +338,20 @@ async function resolveRegistryCandidates(candidates, options) {
|
|
|
317
338
|
publishedAt: new Date(publishedAtTimestamp).toISOString()
|
|
318
339
|
}
|
|
319
340
|
};
|
|
320
|
-
}
|
|
341
|
+
}
|
|
342
|
+
const results = new Array(candidates.length);
|
|
343
|
+
let nextIndex = 0;
|
|
344
|
+
async function worker() {
|
|
345
|
+
while(nextIndex < candidates.length){
|
|
346
|
+
const index = nextIndex;
|
|
347
|
+
nextIndex += 1;
|
|
348
|
+
results[index] = await resolveCandidate(candidates[index]);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
await Promise.all(Array.from({
|
|
352
|
+
length: Math.min(registryFetchConcurrency, candidates.length)
|
|
353
|
+
}, ()=>worker()));
|
|
354
|
+
return results;
|
|
321
355
|
}
|
|
322
356
|
async function validateGeneratedPnpmLockReleaseAgePolicy(workspaceRoot, packageSource, options = {}) {
|
|
323
357
|
const lockfilePath = node_path.join(workspaceRoot, 'pnpm-lock.yaml');
|
package/dist/types/ultramodern-tooling/commands/migrate-strict-effect/generated-ui-source.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { MigrationIo } from './io';
|
|
2
|
+
export declare function generatedUiSourceRequiresRewrite(existingSource: string, nextSource: string): boolean;
|
|
3
|
+
export declare function writeGeneratedUiSourceIfChanged(io: MigrationIo, filePath: string, nextSource: string): boolean;
|
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.81",
|
|
25
25
|
"types": "./dist/types/index.d.ts",
|
|
26
26
|
"main": "./dist/esm-node/index.js",
|
|
27
27
|
"bin": {
|
|
@@ -75,8 +75,8 @@
|
|
|
75
75
|
],
|
|
76
76
|
"dependencies": {
|
|
77
77
|
"@modern-js/codesmith": "2.6.9",
|
|
78
|
-
"@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.5.0-ultramodern.
|
|
79
|
-
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.5.0-ultramodern.
|
|
78
|
+
"@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.5.0-ultramodern.81",
|
|
79
|
+
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.5.0-ultramodern.81",
|
|
80
80
|
"esbuild": "^0.28.1",
|
|
81
81
|
"oxfmt": "0.58.0",
|
|
82
82
|
"ultracite": "7.9.3"
|
|
@@ -101,6 +101,6 @@
|
|
|
101
101
|
"type-check": "tsgo --noEmit -p tsconfig.json"
|
|
102
102
|
},
|
|
103
103
|
"ultramodern": {
|
|
104
|
-
"frameworkVersion": "3.5.0-ultramodern.
|
|
104
|
+
"frameworkVersion": "3.5.0-ultramodern.81"
|
|
105
105
|
}
|
|
106
106
|
}
|
|
@@ -37,172 +37,172 @@
|
|
|
37
37
|
{
|
|
38
38
|
"sourceName": "@modern-js/adapter-rstest",
|
|
39
39
|
"targetName": "@bleedingdev/modern-js-adapter-rstest",
|
|
40
|
-
"version": "3.5.0-ultramodern.
|
|
40
|
+
"version": "3.5.0-ultramodern.81"
|
|
41
41
|
},
|
|
42
42
|
{
|
|
43
43
|
"sourceName": "@modern-js/app-tools",
|
|
44
44
|
"targetName": "@bleedingdev/modern-js-app-tools",
|
|
45
|
-
"version": "3.5.0-ultramodern.
|
|
45
|
+
"version": "3.5.0-ultramodern.81"
|
|
46
46
|
},
|
|
47
47
|
{
|
|
48
48
|
"sourceName": "@modern-js/bff-core",
|
|
49
49
|
"targetName": "@bleedingdev/modern-js-bff-core",
|
|
50
|
-
"version": "3.5.0-ultramodern.
|
|
50
|
+
"version": "3.5.0-ultramodern.81"
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
53
|
"sourceName": "@modern-js/bff-runtime",
|
|
54
54
|
"targetName": "@bleedingdev/modern-js-bff-runtime",
|
|
55
|
-
"version": "3.5.0-ultramodern.
|
|
55
|
+
"version": "3.5.0-ultramodern.81"
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
58
|
"sourceName": "@modern-js/builder",
|
|
59
59
|
"targetName": "@bleedingdev/modern-js-builder",
|
|
60
|
-
"version": "3.5.0-ultramodern.
|
|
60
|
+
"version": "3.5.0-ultramodern.81"
|
|
61
61
|
},
|
|
62
62
|
{
|
|
63
63
|
"sourceName": "@modern-js/code-tools",
|
|
64
64
|
"targetName": "@bleedingdev/modern-js-code-tools",
|
|
65
|
-
"version": "3.5.0-ultramodern.
|
|
65
|
+
"version": "3.5.0-ultramodern.81"
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
68
|
"sourceName": "@modern-js/create",
|
|
69
69
|
"targetName": "@bleedingdev/modern-js-create",
|
|
70
|
-
"version": "3.5.0-ultramodern.
|
|
70
|
+
"version": "3.5.0-ultramodern.81"
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
73
|
"sourceName": "@modern-js/create-request",
|
|
74
74
|
"targetName": "@bleedingdev/modern-js-create-request",
|
|
75
|
-
"version": "3.5.0-ultramodern.
|
|
75
|
+
"version": "3.5.0-ultramodern.81"
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
"sourceName": "@modern-js/i18n-utils",
|
|
79
79
|
"targetName": "@bleedingdev/modern-js-i18n-utils",
|
|
80
|
-
"version": "3.5.0-ultramodern.
|
|
80
|
+
"version": "3.5.0-ultramodern.81"
|
|
81
81
|
},
|
|
82
82
|
{
|
|
83
83
|
"sourceName": "@modern-js/image",
|
|
84
84
|
"targetName": "@bleedingdev/modern-js-image",
|
|
85
|
-
"version": "3.5.0-ultramodern.
|
|
85
|
+
"version": "3.5.0-ultramodern.81"
|
|
86
86
|
},
|
|
87
87
|
{
|
|
88
88
|
"sourceName": "@modern-js/main-doc",
|
|
89
89
|
"targetName": "@bleedingdev/modern-js-main-doc",
|
|
90
|
-
"version": "3.5.0-ultramodern.
|
|
90
|
+
"version": "3.5.0-ultramodern.81"
|
|
91
91
|
},
|
|
92
92
|
{
|
|
93
93
|
"sourceName": "@modern-js/plugin",
|
|
94
94
|
"targetName": "@bleedingdev/modern-js-plugin",
|
|
95
|
-
"version": "3.5.0-ultramodern.
|
|
95
|
+
"version": "3.5.0-ultramodern.81"
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
"sourceName": "@modern-js/plugin-bff",
|
|
99
99
|
"targetName": "@bleedingdev/modern-js-plugin-bff",
|
|
100
|
-
"version": "3.5.0-ultramodern.
|
|
100
|
+
"version": "3.5.0-ultramodern.81"
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
103
|
"sourceName": "@modern-js/plugin-data-loader",
|
|
104
104
|
"targetName": "@bleedingdev/modern-js-plugin-data-loader",
|
|
105
|
-
"version": "3.5.0-ultramodern.
|
|
105
|
+
"version": "3.5.0-ultramodern.81"
|
|
106
106
|
},
|
|
107
107
|
{
|
|
108
108
|
"sourceName": "@modern-js/plugin-i18n",
|
|
109
109
|
"targetName": "@bleedingdev/modern-js-plugin-i18n",
|
|
110
|
-
"version": "3.5.0-ultramodern.
|
|
110
|
+
"version": "3.5.0-ultramodern.81"
|
|
111
111
|
},
|
|
112
112
|
{
|
|
113
113
|
"sourceName": "@modern-js/plugin-polyfill",
|
|
114
114
|
"targetName": "@bleedingdev/modern-js-plugin-polyfill",
|
|
115
|
-
"version": "3.5.0-ultramodern.
|
|
115
|
+
"version": "3.5.0-ultramodern.81"
|
|
116
116
|
},
|
|
117
117
|
{
|
|
118
118
|
"sourceName": "@modern-js/plugin-ssg",
|
|
119
119
|
"targetName": "@bleedingdev/modern-js-plugin-ssg",
|
|
120
|
-
"version": "3.5.0-ultramodern.
|
|
120
|
+
"version": "3.5.0-ultramodern.81"
|
|
121
121
|
},
|
|
122
122
|
{
|
|
123
123
|
"sourceName": "@modern-js/plugin-styled-components",
|
|
124
124
|
"targetName": "@bleedingdev/modern-js-plugin-styled-components",
|
|
125
|
-
"version": "3.5.0-ultramodern.
|
|
125
|
+
"version": "3.5.0-ultramodern.81"
|
|
126
126
|
},
|
|
127
127
|
{
|
|
128
128
|
"sourceName": "@modern-js/plugin-tanstack",
|
|
129
129
|
"targetName": "@bleedingdev/modern-js-plugin-tanstack",
|
|
130
|
-
"version": "3.5.0-ultramodern.
|
|
130
|
+
"version": "3.5.0-ultramodern.81"
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
133
|
"sourceName": "@modern-js/prod-server",
|
|
134
134
|
"targetName": "@bleedingdev/modern-js-prod-server",
|
|
135
|
-
"version": "3.5.0-ultramodern.
|
|
135
|
+
"version": "3.5.0-ultramodern.81"
|
|
136
136
|
},
|
|
137
137
|
{
|
|
138
138
|
"sourceName": "@modern-js/render",
|
|
139
139
|
"targetName": "@bleedingdev/modern-js-render",
|
|
140
|
-
"version": "3.5.0-ultramodern.
|
|
140
|
+
"version": "3.5.0-ultramodern.81"
|
|
141
141
|
},
|
|
142
142
|
{
|
|
143
143
|
"sourceName": "@modern-js/runtime",
|
|
144
144
|
"targetName": "@bleedingdev/modern-js-runtime",
|
|
145
|
-
"version": "3.5.0-ultramodern.
|
|
145
|
+
"version": "3.5.0-ultramodern.81"
|
|
146
146
|
},
|
|
147
147
|
{
|
|
148
148
|
"sourceName": "@modern-js/runtime-utils",
|
|
149
149
|
"targetName": "@bleedingdev/modern-js-runtime-utils",
|
|
150
|
-
"version": "3.5.0-ultramodern.
|
|
150
|
+
"version": "3.5.0-ultramodern.81"
|
|
151
151
|
},
|
|
152
152
|
{
|
|
153
153
|
"sourceName": "@modern-js/sandpack-react",
|
|
154
154
|
"targetName": "@bleedingdev/modern-js-sandpack-react",
|
|
155
|
-
"version": "3.5.0-ultramodern.
|
|
155
|
+
"version": "3.5.0-ultramodern.81"
|
|
156
156
|
},
|
|
157
157
|
{
|
|
158
158
|
"sourceName": "@modern-js/server",
|
|
159
159
|
"targetName": "@bleedingdev/modern-js-server",
|
|
160
|
-
"version": "3.5.0-ultramodern.
|
|
160
|
+
"version": "3.5.0-ultramodern.81"
|
|
161
161
|
},
|
|
162
162
|
{
|
|
163
163
|
"sourceName": "@modern-js/server-core",
|
|
164
164
|
"targetName": "@bleedingdev/modern-js-server-core",
|
|
165
|
-
"version": "3.5.0-ultramodern.
|
|
165
|
+
"version": "3.5.0-ultramodern.81"
|
|
166
166
|
},
|
|
167
167
|
{
|
|
168
168
|
"sourceName": "@modern-js/server-runtime",
|
|
169
169
|
"targetName": "@bleedingdev/modern-js-server-runtime",
|
|
170
|
-
"version": "3.5.0-ultramodern.
|
|
170
|
+
"version": "3.5.0-ultramodern.81"
|
|
171
171
|
},
|
|
172
172
|
{
|
|
173
173
|
"sourceName": "@modern-js/server-runtime-extensions",
|
|
174
174
|
"targetName": "@bleedingdev/modern-js-server-runtime-extensions",
|
|
175
|
-
"version": "3.5.0-ultramodern.
|
|
175
|
+
"version": "3.5.0-ultramodern.81"
|
|
176
176
|
},
|
|
177
177
|
{
|
|
178
178
|
"sourceName": "@modern-js/server-utils",
|
|
179
179
|
"targetName": "@bleedingdev/modern-js-server-utils",
|
|
180
|
-
"version": "3.5.0-ultramodern.
|
|
180
|
+
"version": "3.5.0-ultramodern.81"
|
|
181
181
|
},
|
|
182
182
|
{
|
|
183
183
|
"sourceName": "@modern-js/tsconfig",
|
|
184
184
|
"targetName": "@bleedingdev/modern-js-tsconfig",
|
|
185
|
-
"version": "3.5.0-ultramodern.
|
|
185
|
+
"version": "3.5.0-ultramodern.81"
|
|
186
186
|
},
|
|
187
187
|
{
|
|
188
188
|
"sourceName": "@modern-js/types",
|
|
189
189
|
"targetName": "@bleedingdev/modern-js-types",
|
|
190
|
-
"version": "3.5.0-ultramodern.
|
|
190
|
+
"version": "3.5.0-ultramodern.81"
|
|
191
191
|
},
|
|
192
192
|
{
|
|
193
193
|
"sourceName": "@modern-js/utils",
|
|
194
194
|
"targetName": "@bleedingdev/modern-js-utils",
|
|
195
|
-
"version": "3.5.0-ultramodern.
|
|
195
|
+
"version": "3.5.0-ultramodern.81"
|
|
196
196
|
}
|
|
197
197
|
],
|
|
198
198
|
"release": {
|
|
199
199
|
"tag": "latest",
|
|
200
|
-
"version": "3.5.0-ultramodern.
|
|
200
|
+
"version": "3.5.0-ultramodern.81"
|
|
201
201
|
},
|
|
202
202
|
"schema": "bleedingdev.ultramodern.release-cohort",
|
|
203
203
|
"schemaVersion": 1,
|
|
204
204
|
"source": {
|
|
205
|
-
"commit": "
|
|
205
|
+
"commit": "977091b2bf7cd30cb6273ee8cf6120a6750a9121",
|
|
206
206
|
"repository": "BleedingDev/ultramodern.js"
|
|
207
207
|
}
|
|
208
208
|
}
|