@bleedingdev/modern-js-app-tools 3.2.0-ultramodern.64 → 3.2.0-ultramodern.66
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/plugins/deploy/platforms/cloudflare.js +2 -2
- package/dist/cjs/plugins/deploy/platforms/templates/cloudflare-entry.mjs +54 -8
- package/dist/esm/plugins/deploy/platforms/cloudflare.mjs +2 -2
- package/dist/esm/plugins/deploy/platforms/templates/cloudflare-entry.mjs +54 -8
- package/dist/esm-node/plugins/deploy/platforms/cloudflare.mjs +2 -2
- package/dist/esm-node/plugins/deploy/platforms/templates/cloudflare-entry.mjs +54 -8
- package/package.json +11 -11
|
@@ -106,7 +106,7 @@ const createWorkerManifest = async (outputDirectory, modernConfig)=>{
|
|
|
106
106
|
},
|
|
107
107
|
workerBundles: {
|
|
108
108
|
directory: WORKER_BUNDLE_DIRECTORY,
|
|
109
|
-
format: '
|
|
109
|
+
format: 'commonjs',
|
|
110
110
|
importableFromModuleWorker: true,
|
|
111
111
|
requestHandlerExport: 'requestHandler'
|
|
112
112
|
},
|
|
@@ -201,7 +201,7 @@ const createCloudflarePreset = ({ appContext, modernConfig })=>{
|
|
|
201
201
|
spaces: 2
|
|
202
202
|
});
|
|
203
203
|
await utils_namespaceObject.fs.writeJSON(external_node_path_default().join(outputDirectory, 'package.json'), {
|
|
204
|
-
type: '
|
|
204
|
+
type: 'commonjs'
|
|
205
205
|
});
|
|
206
206
|
},
|
|
207
207
|
async genEntry () {
|
|
@@ -121,6 +121,45 @@ function createRequestHandlerOptions({ route, htmlTemplate, routeManifest, loada
|
|
|
121
121
|
}
|
|
122
122
|
};
|
|
123
123
|
}
|
|
124
|
+
function collectRouteCssAssets(route, routeManifest) {
|
|
125
|
+
const routeAssets = routeManifest?.routeAssets || {};
|
|
126
|
+
const candidateKeys = [
|
|
127
|
+
route.entryName,
|
|
128
|
+
`async-${route.entryName}`
|
|
129
|
+
].filter(Boolean);
|
|
130
|
+
const assets = new Set();
|
|
131
|
+
for (const key of candidateKeys){
|
|
132
|
+
const routeAsset = routeAssets[key];
|
|
133
|
+
const cssAssets = [
|
|
134
|
+
...Array.isArray(routeAsset?.referenceCssAssets) ? routeAsset.referenceCssAssets : [],
|
|
135
|
+
...Array.isArray(routeAsset?.assets) ? routeAsset.assets : []
|
|
136
|
+
];
|
|
137
|
+
for (const asset of cssAssets)if ('string' == typeof asset && asset.endsWith('.css')) assets.add(asset);
|
|
138
|
+
}
|
|
139
|
+
return [
|
|
140
|
+
...assets
|
|
141
|
+
];
|
|
142
|
+
}
|
|
143
|
+
function escapeAttribute(value) {
|
|
144
|
+
return String(value).replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>');
|
|
145
|
+
}
|
|
146
|
+
async function withRouteCssLinks(response, route, routeManifest, request) {
|
|
147
|
+
const contentType = response.headers.get('content-type') || '';
|
|
148
|
+
if (!contentType.includes('text/html')) return response;
|
|
149
|
+
const cssAssets = collectRouteCssAssets(route, routeManifest);
|
|
150
|
+
if (0 === cssAssets.length) return response;
|
|
151
|
+
const html = await response.text();
|
|
152
|
+
const links = cssAssets.filter((asset)=>!html.includes(asset)).map((asset)=>{
|
|
153
|
+
const href = new URL(asset, request.url).toString();
|
|
154
|
+
return `<link rel="stylesheet" href="${escapeAttribute(href)}">`;
|
|
155
|
+
});
|
|
156
|
+
if (0 === links.length || !html.includes('</head>')) return new Response(html, response);
|
|
157
|
+
return new Response(html.replace('</head>', `${links.join('')}</head>`), {
|
|
158
|
+
headers: response.headers,
|
|
159
|
+
status: response.status,
|
|
160
|
+
statusText: response.statusText
|
|
161
|
+
});
|
|
162
|
+
}
|
|
124
163
|
async function getRequestHandlerOptions(route, request, env) {
|
|
125
164
|
const [htmlTemplate, routeManifest, loadableStats] = await Promise.all([
|
|
126
165
|
readAssetText(route.entryPath, request, env),
|
|
@@ -140,14 +179,24 @@ async function loadWorkerModule(workerPath) {
|
|
|
140
179
|
if (!workerModulePromises.has(workerPath)) workerModulePromises.set(workerPath, loader());
|
|
141
180
|
return workerModulePromises.get(workerPath);
|
|
142
181
|
}
|
|
182
|
+
function getRuntimeModule(workerModule) {
|
|
183
|
+
const defaultExport = workerModule.default;
|
|
184
|
+
const nestedDefaultExport = defaultExport && 'object' == typeof defaultExport ? defaultExport.default : void 0;
|
|
185
|
+
return defaultExport && 'object' == typeof defaultExport ? {
|
|
186
|
+
...workerModule,
|
|
187
|
+
...defaultExport,
|
|
188
|
+
...nestedDefaultExport && 'object' == typeof nestedDefaultExport ? nestedDefaultExport : {}
|
|
189
|
+
} : workerModule;
|
|
190
|
+
}
|
|
143
191
|
function getFetchHandler(workerModule) {
|
|
144
192
|
const defaultExport = workerModule.default;
|
|
145
|
-
|
|
193
|
+
const runtime = getRuntimeModule(workerModule);
|
|
194
|
+
return 'function' == typeof runtime.fetch && runtime.fetch.bind(runtime) || 'function' == typeof defaultExport && defaultExport.fetch?.bind?.(defaultExport);
|
|
146
195
|
}
|
|
147
196
|
async function getRequestHandler(workerModule) {
|
|
148
197
|
const defaultExport = workerModule.default;
|
|
149
|
-
const
|
|
150
|
-
return await workerModule.requestHandler || await
|
|
198
|
+
const runtime = getRuntimeModule(workerModule);
|
|
199
|
+
return await workerModule.requestHandler || await runtime.requestHandler || ('function' == typeof defaultExport ? defaultExport : void 0);
|
|
151
200
|
}
|
|
152
201
|
async function dispatchRouteWorker(route, request, env, ctx) {
|
|
153
202
|
const workerPath = route.worker;
|
|
@@ -170,7 +219,7 @@ async function dispatchRouteWorker(route, request, env, ctx) {
|
|
|
170
219
|
const requestHandler = await getRequestHandler(workerModule);
|
|
171
220
|
if ('function' == typeof requestHandler) {
|
|
172
221
|
const requestHandlerOptions = await getRequestHandlerOptions(route, request, env);
|
|
173
|
-
return requestHandler(request, requestHandlerOptions);
|
|
222
|
+
return withRouteCssLinks(await requestHandler(request, requestHandlerOptions), route, requestHandlerOptions.resource.routeManifest, request);
|
|
174
223
|
}
|
|
175
224
|
return new Response(`Worker bundle has no fetch or requestHandler export: ${workerPath}`, {
|
|
176
225
|
status: 500,
|
|
@@ -223,10 +272,7 @@ async function dispatchBffRequest(request, env) {
|
|
|
223
272
|
const mountedRequest = createRequestForMountedPrefix(request, bff.prefix);
|
|
224
273
|
const effectContext = createEffectContext(request, mountedRequest, env);
|
|
225
274
|
const defaultExport = workerModule.default;
|
|
226
|
-
const runtime =
|
|
227
|
-
...workerModule,
|
|
228
|
-
...defaultExport
|
|
229
|
-
} : workerModule;
|
|
275
|
+
const runtime = getRuntimeModule(workerModule);
|
|
230
276
|
const directHandler = 'function' == typeof runtime.handler && runtime.handler || 'function' == typeof defaultExport && defaultExport;
|
|
231
277
|
const createdHandler = 'function' == typeof runtime.createHandler ? runtime.createHandler().handler : void 0;
|
|
232
278
|
const handler = directHandler || createdHandler;
|
|
@@ -68,7 +68,7 @@ const createWorkerManifest = async (outputDirectory, modernConfig)=>{
|
|
|
68
68
|
},
|
|
69
69
|
workerBundles: {
|
|
70
70
|
directory: WORKER_BUNDLE_DIRECTORY,
|
|
71
|
-
format: '
|
|
71
|
+
format: 'commonjs',
|
|
72
72
|
importableFromModuleWorker: true,
|
|
73
73
|
requestHandlerExport: 'requestHandler'
|
|
74
74
|
},
|
|
@@ -163,7 +163,7 @@ const createCloudflarePreset = ({ appContext, modernConfig })=>{
|
|
|
163
163
|
spaces: 2
|
|
164
164
|
});
|
|
165
165
|
await fs.writeJSON(node_path.join(outputDirectory, 'package.json'), {
|
|
166
|
-
type: '
|
|
166
|
+
type: 'commonjs'
|
|
167
167
|
});
|
|
168
168
|
},
|
|
169
169
|
async genEntry () {
|
|
@@ -121,6 +121,45 @@ function createRequestHandlerOptions({ route, htmlTemplate, routeManifest, loada
|
|
|
121
121
|
}
|
|
122
122
|
};
|
|
123
123
|
}
|
|
124
|
+
function collectRouteCssAssets(route, routeManifest) {
|
|
125
|
+
const routeAssets = routeManifest?.routeAssets || {};
|
|
126
|
+
const candidateKeys = [
|
|
127
|
+
route.entryName,
|
|
128
|
+
`async-${route.entryName}`
|
|
129
|
+
].filter(Boolean);
|
|
130
|
+
const assets = new Set();
|
|
131
|
+
for (const key of candidateKeys){
|
|
132
|
+
const routeAsset = routeAssets[key];
|
|
133
|
+
const cssAssets = [
|
|
134
|
+
...Array.isArray(routeAsset?.referenceCssAssets) ? routeAsset.referenceCssAssets : [],
|
|
135
|
+
...Array.isArray(routeAsset?.assets) ? routeAsset.assets : []
|
|
136
|
+
];
|
|
137
|
+
for (const asset of cssAssets)if ('string' == typeof asset && asset.endsWith('.css')) assets.add(asset);
|
|
138
|
+
}
|
|
139
|
+
return [
|
|
140
|
+
...assets
|
|
141
|
+
];
|
|
142
|
+
}
|
|
143
|
+
function escapeAttribute(value) {
|
|
144
|
+
return String(value).replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>');
|
|
145
|
+
}
|
|
146
|
+
async function withRouteCssLinks(response, route, routeManifest, request) {
|
|
147
|
+
const contentType = response.headers.get('content-type') || '';
|
|
148
|
+
if (!contentType.includes('text/html')) return response;
|
|
149
|
+
const cssAssets = collectRouteCssAssets(route, routeManifest);
|
|
150
|
+
if (0 === cssAssets.length) return response;
|
|
151
|
+
const html = await response.text();
|
|
152
|
+
const links = cssAssets.filter((asset)=>!html.includes(asset)).map((asset)=>{
|
|
153
|
+
const href = new URL(asset, request.url).toString();
|
|
154
|
+
return `<link rel="stylesheet" href="${escapeAttribute(href)}">`;
|
|
155
|
+
});
|
|
156
|
+
if (0 === links.length || !html.includes('</head>')) return new Response(html, response);
|
|
157
|
+
return new Response(html.replace('</head>', `${links.join('')}</head>`), {
|
|
158
|
+
headers: response.headers,
|
|
159
|
+
status: response.status,
|
|
160
|
+
statusText: response.statusText
|
|
161
|
+
});
|
|
162
|
+
}
|
|
124
163
|
async function getRequestHandlerOptions(route, request, env) {
|
|
125
164
|
const [htmlTemplate, routeManifest, loadableStats] = await Promise.all([
|
|
126
165
|
readAssetText(route.entryPath, request, env),
|
|
@@ -140,14 +179,24 @@ async function loadWorkerModule(workerPath) {
|
|
|
140
179
|
if (!workerModulePromises.has(workerPath)) workerModulePromises.set(workerPath, loader());
|
|
141
180
|
return workerModulePromises.get(workerPath);
|
|
142
181
|
}
|
|
182
|
+
function getRuntimeModule(workerModule) {
|
|
183
|
+
const defaultExport = workerModule.default;
|
|
184
|
+
const nestedDefaultExport = defaultExport && 'object' == typeof defaultExport ? defaultExport.default : void 0;
|
|
185
|
+
return defaultExport && 'object' == typeof defaultExport ? {
|
|
186
|
+
...workerModule,
|
|
187
|
+
...defaultExport,
|
|
188
|
+
...nestedDefaultExport && 'object' == typeof nestedDefaultExport ? nestedDefaultExport : {}
|
|
189
|
+
} : workerModule;
|
|
190
|
+
}
|
|
143
191
|
function getFetchHandler(workerModule) {
|
|
144
192
|
const defaultExport = workerModule.default;
|
|
145
|
-
|
|
193
|
+
const runtime = getRuntimeModule(workerModule);
|
|
194
|
+
return 'function' == typeof runtime.fetch && runtime.fetch.bind(runtime) || 'function' == typeof defaultExport && defaultExport.fetch?.bind?.(defaultExport);
|
|
146
195
|
}
|
|
147
196
|
async function getRequestHandler(workerModule) {
|
|
148
197
|
const defaultExport = workerModule.default;
|
|
149
|
-
const
|
|
150
|
-
return await workerModule.requestHandler || await
|
|
198
|
+
const runtime = getRuntimeModule(workerModule);
|
|
199
|
+
return await workerModule.requestHandler || await runtime.requestHandler || ('function' == typeof defaultExport ? defaultExport : void 0);
|
|
151
200
|
}
|
|
152
201
|
async function dispatchRouteWorker(route, request, env, ctx) {
|
|
153
202
|
const workerPath = route.worker;
|
|
@@ -170,7 +219,7 @@ async function dispatchRouteWorker(route, request, env, ctx) {
|
|
|
170
219
|
const requestHandler = await getRequestHandler(workerModule);
|
|
171
220
|
if ('function' == typeof requestHandler) {
|
|
172
221
|
const requestHandlerOptions = await getRequestHandlerOptions(route, request, env);
|
|
173
|
-
return requestHandler(request, requestHandlerOptions);
|
|
222
|
+
return withRouteCssLinks(await requestHandler(request, requestHandlerOptions), route, requestHandlerOptions.resource.routeManifest, request);
|
|
174
223
|
}
|
|
175
224
|
return new Response(`Worker bundle has no fetch or requestHandler export: ${workerPath}`, {
|
|
176
225
|
status: 500,
|
|
@@ -223,10 +272,7 @@ async function dispatchBffRequest(request, env) {
|
|
|
223
272
|
const mountedRequest = createRequestForMountedPrefix(request, bff.prefix);
|
|
224
273
|
const effectContext = createEffectContext(request, mountedRequest, env);
|
|
225
274
|
const defaultExport = workerModule.default;
|
|
226
|
-
const runtime =
|
|
227
|
-
...workerModule,
|
|
228
|
-
...defaultExport
|
|
229
|
-
} : workerModule;
|
|
275
|
+
const runtime = getRuntimeModule(workerModule);
|
|
230
276
|
const directHandler = 'function' == typeof runtime.handler && runtime.handler || 'function' == typeof defaultExport && defaultExport;
|
|
231
277
|
const createdHandler = 'function' == typeof runtime.createHandler ? runtime.createHandler().handler : void 0;
|
|
232
278
|
const handler = directHandler || createdHandler;
|
|
@@ -69,7 +69,7 @@ const createWorkerManifest = async (outputDirectory, modernConfig)=>{
|
|
|
69
69
|
},
|
|
70
70
|
workerBundles: {
|
|
71
71
|
directory: WORKER_BUNDLE_DIRECTORY,
|
|
72
|
-
format: '
|
|
72
|
+
format: 'commonjs',
|
|
73
73
|
importableFromModuleWorker: true,
|
|
74
74
|
requestHandlerExport: 'requestHandler'
|
|
75
75
|
},
|
|
@@ -164,7 +164,7 @@ const createCloudflarePreset = ({ appContext, modernConfig })=>{
|
|
|
164
164
|
spaces: 2
|
|
165
165
|
});
|
|
166
166
|
await fs.writeJSON(node_path.join(outputDirectory, 'package.json'), {
|
|
167
|
-
type: '
|
|
167
|
+
type: 'commonjs'
|
|
168
168
|
});
|
|
169
169
|
},
|
|
170
170
|
async genEntry () {
|
|
@@ -121,6 +121,45 @@ function createRequestHandlerOptions({ route, htmlTemplate, routeManifest, loada
|
|
|
121
121
|
}
|
|
122
122
|
};
|
|
123
123
|
}
|
|
124
|
+
function collectRouteCssAssets(route, routeManifest) {
|
|
125
|
+
const routeAssets = routeManifest?.routeAssets || {};
|
|
126
|
+
const candidateKeys = [
|
|
127
|
+
route.entryName,
|
|
128
|
+
`async-${route.entryName}`
|
|
129
|
+
].filter(Boolean);
|
|
130
|
+
const assets = new Set();
|
|
131
|
+
for (const key of candidateKeys){
|
|
132
|
+
const routeAsset = routeAssets[key];
|
|
133
|
+
const cssAssets = [
|
|
134
|
+
...Array.isArray(routeAsset?.referenceCssAssets) ? routeAsset.referenceCssAssets : [],
|
|
135
|
+
...Array.isArray(routeAsset?.assets) ? routeAsset.assets : []
|
|
136
|
+
];
|
|
137
|
+
for (const asset of cssAssets)if ('string' == typeof asset && asset.endsWith('.css')) assets.add(asset);
|
|
138
|
+
}
|
|
139
|
+
return [
|
|
140
|
+
...assets
|
|
141
|
+
];
|
|
142
|
+
}
|
|
143
|
+
function escapeAttribute(value) {
|
|
144
|
+
return String(value).replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>');
|
|
145
|
+
}
|
|
146
|
+
async function withRouteCssLinks(response, route, routeManifest, request) {
|
|
147
|
+
const contentType = response.headers.get('content-type') || '';
|
|
148
|
+
if (!contentType.includes('text/html')) return response;
|
|
149
|
+
const cssAssets = collectRouteCssAssets(route, routeManifest);
|
|
150
|
+
if (0 === cssAssets.length) return response;
|
|
151
|
+
const html = await response.text();
|
|
152
|
+
const links = cssAssets.filter((asset)=>!html.includes(asset)).map((asset)=>{
|
|
153
|
+
const href = new URL(asset, request.url).toString();
|
|
154
|
+
return `<link rel="stylesheet" href="${escapeAttribute(href)}">`;
|
|
155
|
+
});
|
|
156
|
+
if (0 === links.length || !html.includes('</head>')) return new Response(html, response);
|
|
157
|
+
return new Response(html.replace('</head>', `${links.join('')}</head>`), {
|
|
158
|
+
headers: response.headers,
|
|
159
|
+
status: response.status,
|
|
160
|
+
statusText: response.statusText
|
|
161
|
+
});
|
|
162
|
+
}
|
|
124
163
|
async function getRequestHandlerOptions(route, request, env) {
|
|
125
164
|
const [htmlTemplate, routeManifest, loadableStats] = await Promise.all([
|
|
126
165
|
readAssetText(route.entryPath, request, env),
|
|
@@ -140,14 +179,24 @@ async function loadWorkerModule(workerPath) {
|
|
|
140
179
|
if (!workerModulePromises.has(workerPath)) workerModulePromises.set(workerPath, loader());
|
|
141
180
|
return workerModulePromises.get(workerPath);
|
|
142
181
|
}
|
|
182
|
+
function getRuntimeModule(workerModule) {
|
|
183
|
+
const defaultExport = workerModule.default;
|
|
184
|
+
const nestedDefaultExport = defaultExport && 'object' == typeof defaultExport ? defaultExport.default : void 0;
|
|
185
|
+
return defaultExport && 'object' == typeof defaultExport ? {
|
|
186
|
+
...workerModule,
|
|
187
|
+
...defaultExport,
|
|
188
|
+
...nestedDefaultExport && 'object' == typeof nestedDefaultExport ? nestedDefaultExport : {}
|
|
189
|
+
} : workerModule;
|
|
190
|
+
}
|
|
143
191
|
function getFetchHandler(workerModule) {
|
|
144
192
|
const defaultExport = workerModule.default;
|
|
145
|
-
|
|
193
|
+
const runtime = getRuntimeModule(workerModule);
|
|
194
|
+
return 'function' == typeof runtime.fetch && runtime.fetch.bind(runtime) || 'function' == typeof defaultExport && defaultExport.fetch?.bind?.(defaultExport);
|
|
146
195
|
}
|
|
147
196
|
async function getRequestHandler(workerModule) {
|
|
148
197
|
const defaultExport = workerModule.default;
|
|
149
|
-
const
|
|
150
|
-
return await workerModule.requestHandler || await
|
|
198
|
+
const runtime = getRuntimeModule(workerModule);
|
|
199
|
+
return await workerModule.requestHandler || await runtime.requestHandler || ('function' == typeof defaultExport ? defaultExport : void 0);
|
|
151
200
|
}
|
|
152
201
|
async function dispatchRouteWorker(route, request, env, ctx) {
|
|
153
202
|
const workerPath = route.worker;
|
|
@@ -170,7 +219,7 @@ async function dispatchRouteWorker(route, request, env, ctx) {
|
|
|
170
219
|
const requestHandler = await getRequestHandler(workerModule);
|
|
171
220
|
if ('function' == typeof requestHandler) {
|
|
172
221
|
const requestHandlerOptions = await getRequestHandlerOptions(route, request, env);
|
|
173
|
-
return requestHandler(request, requestHandlerOptions);
|
|
222
|
+
return withRouteCssLinks(await requestHandler(request, requestHandlerOptions), route, requestHandlerOptions.resource.routeManifest, request);
|
|
174
223
|
}
|
|
175
224
|
return new Response(`Worker bundle has no fetch or requestHandler export: ${workerPath}`, {
|
|
176
225
|
status: 500,
|
|
@@ -223,10 +272,7 @@ async function dispatchBffRequest(request, env) {
|
|
|
223
272
|
const mountedRequest = createRequestForMountedPrefix(request, bff.prefix);
|
|
224
273
|
const effectContext = createEffectContext(request, mountedRequest, env);
|
|
225
274
|
const defaultExport = workerModule.default;
|
|
226
|
-
const runtime =
|
|
227
|
-
...workerModule,
|
|
228
|
-
...defaultExport
|
|
229
|
-
} : workerModule;
|
|
275
|
+
const runtime = getRuntimeModule(workerModule);
|
|
230
276
|
const directHandler = 'function' == typeof runtime.handler && runtime.handler || 'function' == typeof defaultExport && defaultExport;
|
|
231
277
|
const createdHandler = 'function' == typeof runtime.createHandler ? runtime.createHandler().handler : void 0;
|
|
232
278
|
const handler = directHandler || createdHandler;
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"modern",
|
|
18
18
|
"modern.js"
|
|
19
19
|
],
|
|
20
|
-
"version": "3.2.0-ultramodern.
|
|
20
|
+
"version": "3.2.0-ultramodern.66",
|
|
21
21
|
"types": "./dist/types/index.d.ts",
|
|
22
22
|
"main": "./dist/cjs/index.js",
|
|
23
23
|
"exports": {
|
|
@@ -99,16 +99,16 @@
|
|
|
99
99
|
"ndepe": "^0.1.13",
|
|
100
100
|
"pkg-types": "^2.3.1",
|
|
101
101
|
"std-env": "4.1.0",
|
|
102
|
-
"@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.2.0-ultramodern.
|
|
103
|
-
"@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.2.0-ultramodern.
|
|
104
|
-
"@modern-js/plugin
|
|
105
|
-
"@modern-js/
|
|
106
|
-
"@modern-js/
|
|
107
|
-
"@modern-js/
|
|
108
|
-
"@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.2.0-ultramodern.
|
|
109
|
-
"@modern-js/
|
|
110
|
-
"@modern-js/
|
|
111
|
-
"@modern-js/
|
|
102
|
+
"@modern-js/i18n-utils": "npm:@bleedingdev/modern-js-i18n-utils@3.2.0-ultramodern.66",
|
|
103
|
+
"@modern-js/builder": "npm:@bleedingdev/modern-js-builder@3.2.0-ultramodern.66",
|
|
104
|
+
"@modern-js/plugin": "npm:@bleedingdev/modern-js-plugin@3.2.0-ultramodern.66",
|
|
105
|
+
"@modern-js/server-core": "npm:@bleedingdev/modern-js-server-core@3.2.0-ultramodern.66",
|
|
106
|
+
"@modern-js/plugin-data-loader": "npm:@bleedingdev/modern-js-plugin-data-loader@3.2.0-ultramodern.66",
|
|
107
|
+
"@modern-js/server": "npm:@bleedingdev/modern-js-server@3.2.0-ultramodern.66",
|
|
108
|
+
"@modern-js/server-utils": "npm:@bleedingdev/modern-js-server-utils@3.2.0-ultramodern.66",
|
|
109
|
+
"@modern-js/prod-server": "npm:@bleedingdev/modern-js-prod-server@3.2.0-ultramodern.66",
|
|
110
|
+
"@modern-js/utils": "npm:@bleedingdev/modern-js-utils@3.2.0-ultramodern.66",
|
|
111
|
+
"@modern-js/types": "npm:@bleedingdev/modern-js-types@3.2.0-ultramodern.66"
|
|
112
112
|
},
|
|
113
113
|
"devDependencies": {
|
|
114
114
|
"@rslib/core": "0.21.5",
|