@bleedingdev/modern-js-app-tools 3.4.0-ultramodern.19 → 3.4.0-ultramodern.20
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/builder/generator/getBuilderEnvironments.js +8 -5
- package/dist/cjs/plugins/deploy/platforms/cloudflare.js +6 -6
- package/dist/esm/builder/generator/getBuilderEnvironments.mjs +8 -5
- package/dist/esm/plugins/deploy/platforms/cloudflare.mjs +6 -6
- package/dist/esm-node/builder/generator/getBuilderEnvironments.mjs +8 -5
- package/dist/esm-node/plugins/deploy/platforms/cloudflare.mjs +6 -6
- package/package.json +11 -11
|
@@ -137,8 +137,11 @@ function getCloudflareWorkerNodeExternals() {
|
|
|
137
137
|
function getEffectBffEntry(normalizedConfig, appContext) {
|
|
138
138
|
if (!normalizedConfig.bff || 'hono' === normalizedConfig.bff.runtimeFramework) return;
|
|
139
139
|
const configuredEntry = normalizedConfig.bff.effect?.entry;
|
|
140
|
-
|
|
141
|
-
|
|
140
|
+
if (configuredEntry) {
|
|
141
|
+
const entryWithoutOrWithExtension = external_node_path_default().isAbsolute(configuredEntry) ? configuredEntry : external_node_path_default().resolve(appContext.appDirectory, configuredEntry);
|
|
142
|
+
return resolveJsOrTsEntry(entryWithoutOrWithExtension);
|
|
143
|
+
}
|
|
144
|
+
return resolveJsOrTsEntry(external_node_path_default().resolve(appContext.apiDirectory, 'index'));
|
|
142
145
|
}
|
|
143
146
|
function isCloudflareWorkerDeploy(normalizedConfig) {
|
|
144
147
|
return normalizedConfig.deploy?.target === 'cloudflare' || 'cloudflare' === process.env.MODERNJS_DEPLOY;
|
|
@@ -227,7 +230,7 @@ function getBuilderEnvironments(normalizedConfig, appContext, tempBuilderConfig)
|
|
|
227
230
|
const useWorkerTarget = (0, utils_namespaceObject.isServiceWorker)(normalizedConfig);
|
|
228
231
|
if (useWorkerTarget) {
|
|
229
232
|
const useCloudflareModuleWorker = isCloudflareWorkerDeploy(normalizedConfig);
|
|
230
|
-
const
|
|
233
|
+
const effectApiEntry = useCloudflareModuleWorker ? getEffectBffEntry(normalizedConfig, appContext) : void 0;
|
|
231
234
|
const tanstackRouterSsrServerFile = useCloudflareModuleWorker ? resolvePackageFile('@tanstack/router-core', 'dist/esm/ssr/ssr-server.js', [
|
|
232
235
|
appContext.appDirectory,
|
|
233
236
|
process.cwd()
|
|
@@ -269,10 +272,10 @@ function getBuilderEnvironments(normalizedConfig, appContext, tempBuilderConfig)
|
|
|
269
272
|
const fsPromisesWorkerFile = useCloudflareModuleWorker ? getCloudflareWorkerCompatFile('cloudflare-worker-fs-promises.mjs') : void 0;
|
|
270
273
|
const pathWorkerFile = useCloudflareModuleWorker ? getCloudflareWorkerCompatFile('cloudflare-worker-path.mjs') : void 0;
|
|
271
274
|
const baseWorkerEntries = useCloudflareModuleWorker ? cloudflareWorkerServerEntries : serverEntries;
|
|
272
|
-
const workerEntries =
|
|
275
|
+
const workerEntries = effectApiEntry ? {
|
|
273
276
|
...baseWorkerEntries,
|
|
274
277
|
[BFF_EFFECT_WORKER_ENTRY_NAME]: [
|
|
275
|
-
`${
|
|
278
|
+
`${effectApiEntry}?${BFF_EFFECT_WORKER_RUNTIME_QUERY}`
|
|
276
279
|
]
|
|
277
280
|
} : baseWorkerEntries;
|
|
278
281
|
environments[builder_namespaceObject.SERVICE_WORKER_ENVIRONMENT_NAME] = {
|
|
@@ -61,7 +61,7 @@ const DEFAULT_SERVER_ONLY_PUBLIC_ASSET_EXCLUDES = [
|
|
|
61
61
|
'shared'
|
|
62
62
|
];
|
|
63
63
|
const BFF_EFFECT_WORKER_ENTRY = `${WORKER_BUNDLE_DIRECTORY}/__modern_bff_effect.js`;
|
|
64
|
-
const EFFECT_BFF_CLOUDFLARE_IMPORT_GUIDANCE = 'Ensure the Effect
|
|
64
|
+
const EFFECT_BFF_CLOUDFLARE_IMPORT_GUIDANCE = 'Ensure the Effect API entry exists at api/index.ts or bff.effect.entry, and import Cloudflare edge handlers from @modern-js/plugin-bff/effect-edge instead of lambda/Hono server helpers.';
|
|
65
65
|
const DEFAULT_COMPATIBILITY_DATE = '2026-06-02';
|
|
66
66
|
const COMPATIBILITY_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/u;
|
|
67
67
|
const REQUIRED_COMPATIBILITY_FLAGS = [
|
|
@@ -335,7 +335,7 @@ const readRouteSpec = async (outputDirectory)=>{
|
|
|
335
335
|
routes: Array.isArray(routeSpec.routes) ? routeSpec.routes : []
|
|
336
336
|
};
|
|
337
337
|
};
|
|
338
|
-
const createMissingEffectBffWorkerError = (outputDirectory, worker)=>new Error(`Cloudflare Effect
|
|
338
|
+
const createMissingEffectBffWorkerError = (outputDirectory, worker)=>new Error(`Cloudflare Effect API runtime is configured, but the BFF worker bundle is missing: ${external_node_path_default().join(outputDirectory, worker)}. ${EFFECT_BFF_CLOUDFLARE_IMPORT_GUIDANCE}`);
|
|
339
339
|
const createWorkerManifest = async (outputDirectory, modernConfig)=>{
|
|
340
340
|
const routeSpec = await readRouteSpec(outputDirectory);
|
|
341
341
|
const routes = await Promise.all(routeSpec.routes.map(async (route)=>{
|
|
@@ -351,9 +351,9 @@ const createWorkerManifest = async (outputDirectory, modernConfig)=>{
|
|
|
351
351
|
}));
|
|
352
352
|
const bffPrefix = modernConfig.bff?.prefix;
|
|
353
353
|
const primaryBffPrefix = Array.isArray(bffPrefix) ? bffPrefix[0] : bffPrefix;
|
|
354
|
-
const
|
|
355
|
-
const
|
|
356
|
-
if (
|
|
354
|
+
const isEffectApi = Boolean(modernConfig.bff) && modernConfig.bff?.runtimeFramework !== 'hono';
|
|
355
|
+
const effectApiWorkerExists = await utils_namespaceObject.fs.pathExists(external_node_path_default().join(outputDirectory, BFF_EFFECT_WORKER_ENTRY));
|
|
356
|
+
if (isEffectApi && primaryBffPrefix && !effectApiWorkerExists) throw createMissingEffectBffWorkerError(outputDirectory, BFF_EFFECT_WORKER_ENTRY);
|
|
357
357
|
return {
|
|
358
358
|
version: 1,
|
|
359
359
|
runtime: {
|
|
@@ -382,7 +382,7 @@ const createWorkerManifest = async (outputDirectory, modernConfig)=>{
|
|
|
382
382
|
routeManifest: ROUTE_MANIFEST_FILE
|
|
383
383
|
},
|
|
384
384
|
security: createCloudflareWorkerSecurityPolicy(modernConfig),
|
|
385
|
-
bff:
|
|
385
|
+
bff: isEffectApi && primaryBffPrefix && effectApiWorkerExists ? {
|
|
386
386
|
runtimeFramework: 'effect',
|
|
387
387
|
prefix: primaryBffPrefix,
|
|
388
388
|
worker: BFF_EFFECT_WORKER_ENTRY
|
|
@@ -94,8 +94,11 @@ function getCloudflareWorkerNodeExternals() {
|
|
|
94
94
|
function getEffectBffEntry(normalizedConfig, appContext) {
|
|
95
95
|
if (!normalizedConfig.bff || 'hono' === normalizedConfig.bff.runtimeFramework) return;
|
|
96
96
|
const configuredEntry = normalizedConfig.bff.effect?.entry;
|
|
97
|
-
|
|
98
|
-
|
|
97
|
+
if (configuredEntry) {
|
|
98
|
+
const entryWithoutOrWithExtension = node_path.isAbsolute(configuredEntry) ? configuredEntry : node_path.resolve(appContext.appDirectory, configuredEntry);
|
|
99
|
+
return resolveJsOrTsEntry(entryWithoutOrWithExtension);
|
|
100
|
+
}
|
|
101
|
+
return resolveJsOrTsEntry(node_path.resolve(appContext.apiDirectory, 'index'));
|
|
99
102
|
}
|
|
100
103
|
function isCloudflareWorkerDeploy(normalizedConfig) {
|
|
101
104
|
return normalizedConfig.deploy?.target === 'cloudflare' || 'cloudflare' === process.env.MODERNJS_DEPLOY;
|
|
@@ -184,7 +187,7 @@ function getBuilderEnvironments(normalizedConfig, appContext, tempBuilderConfig)
|
|
|
184
187
|
const useWorkerTarget = isServiceWorker(normalizedConfig);
|
|
185
188
|
if (useWorkerTarget) {
|
|
186
189
|
const useCloudflareModuleWorker = isCloudflareWorkerDeploy(normalizedConfig);
|
|
187
|
-
const
|
|
190
|
+
const effectApiEntry = useCloudflareModuleWorker ? getEffectBffEntry(normalizedConfig, appContext) : void 0;
|
|
188
191
|
const tanstackRouterSsrServerFile = useCloudflareModuleWorker ? resolvePackageFile('@tanstack/router-core', 'dist/esm/ssr/ssr-server.js', [
|
|
189
192
|
appContext.appDirectory,
|
|
190
193
|
process.cwd()
|
|
@@ -226,10 +229,10 @@ function getBuilderEnvironments(normalizedConfig, appContext, tempBuilderConfig)
|
|
|
226
229
|
const fsPromisesWorkerFile = useCloudflareModuleWorker ? getCloudflareWorkerCompatFile('cloudflare-worker-fs-promises.mjs') : void 0;
|
|
227
230
|
const pathWorkerFile = useCloudflareModuleWorker ? getCloudflareWorkerCompatFile('cloudflare-worker-path.mjs') : void 0;
|
|
228
231
|
const baseWorkerEntries = useCloudflareModuleWorker ? cloudflareWorkerServerEntries : serverEntries;
|
|
229
|
-
const workerEntries =
|
|
232
|
+
const workerEntries = effectApiEntry ? {
|
|
230
233
|
...baseWorkerEntries,
|
|
231
234
|
[BFF_EFFECT_WORKER_ENTRY_NAME]: [
|
|
232
|
-
`${
|
|
235
|
+
`${effectApiEntry}?${BFF_EFFECT_WORKER_RUNTIME_QUERY}`
|
|
233
236
|
]
|
|
234
237
|
} : baseWorkerEntries;
|
|
235
238
|
environments[SERVICE_WORKER_ENVIRONMENT_NAME] = {
|
|
@@ -19,7 +19,7 @@ const DEFAULT_SERVER_ONLY_PUBLIC_ASSET_EXCLUDES = [
|
|
|
19
19
|
'shared'
|
|
20
20
|
];
|
|
21
21
|
const BFF_EFFECT_WORKER_ENTRY = `${WORKER_BUNDLE_DIRECTORY}/__modern_bff_effect.js`;
|
|
22
|
-
const EFFECT_BFF_CLOUDFLARE_IMPORT_GUIDANCE = 'Ensure the Effect
|
|
22
|
+
const EFFECT_BFF_CLOUDFLARE_IMPORT_GUIDANCE = 'Ensure the Effect API entry exists at api/index.ts or bff.effect.entry, and import Cloudflare edge handlers from @modern-js/plugin-bff/effect-edge instead of lambda/Hono server helpers.';
|
|
23
23
|
const DEFAULT_COMPATIBILITY_DATE = '2026-06-02';
|
|
24
24
|
const COMPATIBILITY_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/u;
|
|
25
25
|
const REQUIRED_COMPATIBILITY_FLAGS = [
|
|
@@ -293,7 +293,7 @@ const readRouteSpec = async (outputDirectory)=>{
|
|
|
293
293
|
routes: Array.isArray(routeSpec.routes) ? routeSpec.routes : []
|
|
294
294
|
};
|
|
295
295
|
};
|
|
296
|
-
const createMissingEffectBffWorkerError = (outputDirectory, worker)=>new Error(`Cloudflare Effect
|
|
296
|
+
const createMissingEffectBffWorkerError = (outputDirectory, worker)=>new Error(`Cloudflare Effect API runtime is configured, but the BFF worker bundle is missing: ${node_path.join(outputDirectory, worker)}. ${EFFECT_BFF_CLOUDFLARE_IMPORT_GUIDANCE}`);
|
|
297
297
|
const createWorkerManifest = async (outputDirectory, modernConfig)=>{
|
|
298
298
|
const routeSpec = await readRouteSpec(outputDirectory);
|
|
299
299
|
const routes = await Promise.all(routeSpec.routes.map(async (route)=>{
|
|
@@ -309,9 +309,9 @@ const createWorkerManifest = async (outputDirectory, modernConfig)=>{
|
|
|
309
309
|
}));
|
|
310
310
|
const bffPrefix = modernConfig.bff?.prefix;
|
|
311
311
|
const primaryBffPrefix = Array.isArray(bffPrefix) ? bffPrefix[0] : bffPrefix;
|
|
312
|
-
const
|
|
313
|
-
const
|
|
314
|
-
if (
|
|
312
|
+
const isEffectApi = Boolean(modernConfig.bff) && modernConfig.bff?.runtimeFramework !== 'hono';
|
|
313
|
+
const effectApiWorkerExists = await fs.pathExists(node_path.join(outputDirectory, BFF_EFFECT_WORKER_ENTRY));
|
|
314
|
+
if (isEffectApi && primaryBffPrefix && !effectApiWorkerExists) throw createMissingEffectBffWorkerError(outputDirectory, BFF_EFFECT_WORKER_ENTRY);
|
|
315
315
|
return {
|
|
316
316
|
version: 1,
|
|
317
317
|
runtime: {
|
|
@@ -340,7 +340,7 @@ const createWorkerManifest = async (outputDirectory, modernConfig)=>{
|
|
|
340
340
|
routeManifest: ROUTE_MANIFEST_FILE
|
|
341
341
|
},
|
|
342
342
|
security: createCloudflareWorkerSecurityPolicy(modernConfig),
|
|
343
|
-
bff:
|
|
343
|
+
bff: isEffectApi && primaryBffPrefix && effectApiWorkerExists ? {
|
|
344
344
|
runtimeFramework: 'effect',
|
|
345
345
|
prefix: primaryBffPrefix,
|
|
346
346
|
worker: BFF_EFFECT_WORKER_ENTRY
|
|
@@ -99,8 +99,11 @@ function getCloudflareWorkerNodeExternals() {
|
|
|
99
99
|
function getEffectBffEntry(normalizedConfig, appContext) {
|
|
100
100
|
if (!normalizedConfig.bff || 'hono' === normalizedConfig.bff.runtimeFramework) return;
|
|
101
101
|
const configuredEntry = normalizedConfig.bff.effect?.entry;
|
|
102
|
-
|
|
103
|
-
|
|
102
|
+
if (configuredEntry) {
|
|
103
|
+
const entryWithoutOrWithExtension = node_path.isAbsolute(configuredEntry) ? configuredEntry : node_path.resolve(appContext.appDirectory, configuredEntry);
|
|
104
|
+
return resolveJsOrTsEntry(entryWithoutOrWithExtension);
|
|
105
|
+
}
|
|
106
|
+
return resolveJsOrTsEntry(node_path.resolve(appContext.apiDirectory, 'index'));
|
|
104
107
|
}
|
|
105
108
|
function isCloudflareWorkerDeploy(normalizedConfig) {
|
|
106
109
|
return normalizedConfig.deploy?.target === 'cloudflare' || 'cloudflare' === process.env.MODERNJS_DEPLOY;
|
|
@@ -189,7 +192,7 @@ function getBuilderEnvironments(normalizedConfig, appContext, tempBuilderConfig)
|
|
|
189
192
|
const useWorkerTarget = isServiceWorker(normalizedConfig);
|
|
190
193
|
if (useWorkerTarget) {
|
|
191
194
|
const useCloudflareModuleWorker = isCloudflareWorkerDeploy(normalizedConfig);
|
|
192
|
-
const
|
|
195
|
+
const effectApiEntry = useCloudflareModuleWorker ? getEffectBffEntry(normalizedConfig, appContext) : void 0;
|
|
193
196
|
const tanstackRouterSsrServerFile = useCloudflareModuleWorker ? resolvePackageFile('@tanstack/router-core', 'dist/esm/ssr/ssr-server.js', [
|
|
194
197
|
appContext.appDirectory,
|
|
195
198
|
process.cwd()
|
|
@@ -231,10 +234,10 @@ function getBuilderEnvironments(normalizedConfig, appContext, tempBuilderConfig)
|
|
|
231
234
|
const fsPromisesWorkerFile = useCloudflareModuleWorker ? getCloudflareWorkerCompatFile('cloudflare-worker-fs-promises.mjs') : void 0;
|
|
232
235
|
const pathWorkerFile = useCloudflareModuleWorker ? getCloudflareWorkerCompatFile('cloudflare-worker-path.mjs') : void 0;
|
|
233
236
|
const baseWorkerEntries = useCloudflareModuleWorker ? cloudflareWorkerServerEntries : serverEntries;
|
|
234
|
-
const workerEntries =
|
|
237
|
+
const workerEntries = effectApiEntry ? {
|
|
235
238
|
...baseWorkerEntries,
|
|
236
239
|
[BFF_EFFECT_WORKER_ENTRY_NAME]: [
|
|
237
|
-
`${
|
|
240
|
+
`${effectApiEntry}?${BFF_EFFECT_WORKER_RUNTIME_QUERY}`
|
|
238
241
|
]
|
|
239
242
|
} : baseWorkerEntries;
|
|
240
243
|
environments[SERVICE_WORKER_ENVIRONMENT_NAME] = {
|
|
@@ -20,7 +20,7 @@ const DEFAULT_SERVER_ONLY_PUBLIC_ASSET_EXCLUDES = [
|
|
|
20
20
|
'shared'
|
|
21
21
|
];
|
|
22
22
|
const BFF_EFFECT_WORKER_ENTRY = `${WORKER_BUNDLE_DIRECTORY}/__modern_bff_effect.js`;
|
|
23
|
-
const EFFECT_BFF_CLOUDFLARE_IMPORT_GUIDANCE = 'Ensure the Effect
|
|
23
|
+
const EFFECT_BFF_CLOUDFLARE_IMPORT_GUIDANCE = 'Ensure the Effect API entry exists at api/index.ts or bff.effect.entry, and import Cloudflare edge handlers from @modern-js/plugin-bff/effect-edge instead of lambda/Hono server helpers.';
|
|
24
24
|
const DEFAULT_COMPATIBILITY_DATE = '2026-06-02';
|
|
25
25
|
const COMPATIBILITY_DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/u;
|
|
26
26
|
const REQUIRED_COMPATIBILITY_FLAGS = [
|
|
@@ -294,7 +294,7 @@ const readRouteSpec = async (outputDirectory)=>{
|
|
|
294
294
|
routes: Array.isArray(routeSpec.routes) ? routeSpec.routes : []
|
|
295
295
|
};
|
|
296
296
|
};
|
|
297
|
-
const createMissingEffectBffWorkerError = (outputDirectory, worker)=>new Error(`Cloudflare Effect
|
|
297
|
+
const createMissingEffectBffWorkerError = (outputDirectory, worker)=>new Error(`Cloudflare Effect API runtime is configured, but the BFF worker bundle is missing: ${node_path.join(outputDirectory, worker)}. ${EFFECT_BFF_CLOUDFLARE_IMPORT_GUIDANCE}`);
|
|
298
298
|
const createWorkerManifest = async (outputDirectory, modernConfig)=>{
|
|
299
299
|
const routeSpec = await readRouteSpec(outputDirectory);
|
|
300
300
|
const routes = await Promise.all(routeSpec.routes.map(async (route)=>{
|
|
@@ -310,9 +310,9 @@ const createWorkerManifest = async (outputDirectory, modernConfig)=>{
|
|
|
310
310
|
}));
|
|
311
311
|
const bffPrefix = modernConfig.bff?.prefix;
|
|
312
312
|
const primaryBffPrefix = Array.isArray(bffPrefix) ? bffPrefix[0] : bffPrefix;
|
|
313
|
-
const
|
|
314
|
-
const
|
|
315
|
-
if (
|
|
313
|
+
const isEffectApi = Boolean(modernConfig.bff) && modernConfig.bff?.runtimeFramework !== 'hono';
|
|
314
|
+
const effectApiWorkerExists = await fs.pathExists(node_path.join(outputDirectory, BFF_EFFECT_WORKER_ENTRY));
|
|
315
|
+
if (isEffectApi && primaryBffPrefix && !effectApiWorkerExists) throw createMissingEffectBffWorkerError(outputDirectory, BFF_EFFECT_WORKER_ENTRY);
|
|
316
316
|
return {
|
|
317
317
|
version: 1,
|
|
318
318
|
runtime: {
|
|
@@ -341,7 +341,7 @@ const createWorkerManifest = async (outputDirectory, modernConfig)=>{
|
|
|
341
341
|
routeManifest: ROUTE_MANIFEST_FILE
|
|
342
342
|
},
|
|
343
343
|
security: createCloudflareWorkerSecurityPolicy(modernConfig),
|
|
344
|
-
bff:
|
|
344
|
+
bff: isEffectApi && primaryBffPrefix && effectApiWorkerExists ? {
|
|
345
345
|
runtimeFramework: 'effect',
|
|
346
346
|
prefix: primaryBffPrefix,
|
|
347
347
|
worker: BFF_EFFECT_WORKER_ENTRY
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"modern",
|
|
18
18
|
"modern.js"
|
|
19
19
|
],
|
|
20
|
-
"version": "3.4.0-ultramodern.
|
|
20
|
+
"version": "3.4.0-ultramodern.20",
|
|
21
21
|
"types": "./dist/types/index.d.ts",
|
|
22
22
|
"main": "./dist/cjs/index.js",
|
|
23
23
|
"exports": {
|
|
@@ -90,16 +90,16 @@
|
|
|
90
90
|
"ndepe": "^0.1.13",
|
|
91
91
|
"pkg-types": "^2.3.1",
|
|
92
92
|
"std-env": "4.1.0",
|
|
93
|
-
"@modern-js/
|
|
94
|
-
"@modern-js/
|
|
95
|
-
"@modern-js/
|
|
96
|
-
"@modern-js/
|
|
97
|
-
"@modern-js/
|
|
98
|
-
"@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.4.0-ultramodern.
|
|
99
|
-
"@modern-js/
|
|
100
|
-
"@modern-js/server": "npm:@bleedingdev/modern-js-server@3.4.0-ultramodern.
|
|
101
|
-
"@modern-js/
|
|
102
|
-
"@modern-js/
|
|
93
|
+
"@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.4.0-ultramodern.20",
|
|
94
|
+
"@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.4.0-ultramodern.20",
|
|
95
|
+
"@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.4.0-ultramodern.20",
|
|
96
|
+
"@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.4.0-ultramodern.20",
|
|
97
|
+
"@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.4.0-ultramodern.20",
|
|
98
|
+
"@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.4.0-ultramodern.20",
|
|
99
|
+
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.4.0-ultramodern.20",
|
|
100
|
+
"@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.4.0-ultramodern.20",
|
|
101
|
+
"@modern-js/types": "npm:@bleedingdev/modern-js-types@3.4.0-ultramodern.20",
|
|
102
|
+
"@modern-js/server": "npm:@bleedingdev/modern-js-server@3.4.0-ultramodern.20"
|
|
103
103
|
},
|
|
104
104
|
"devDependencies": {
|
|
105
105
|
"@rslib/core": "0.23.0",
|