@evjs/bundler-utoopack 0.1.10 → 0.2.0
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/esm/adapter/component-page-loader.cjs +22 -0
- package/esm/adapter/create-config.d.ts +5 -5
- package/esm/adapter/create-config.d.ts.map +1 -1
- package/esm/adapter/create-config.js +201 -28
- package/esm/adapter/create-config.js.map +1 -1
- package/esm/adapter/index.d.ts +1 -1
- package/esm/adapter/index.d.ts.map +1 -1
- package/esm/adapter/index.js +106 -87
- package/esm/adapter/index.js.map +1 -1
- package/esm/adapter/output-paths.d.ts +1 -1
- package/esm/adapter/output-paths.d.ts.map +1 -1
- package/esm/adapter/output-paths.js +2 -2
- package/esm/adapter/output-paths.js.map +1 -1
- package/esm/adapter/pages-entry-anchor.js +3 -0
- package/esm/adapter/pages-entry-loader.cjs +57 -0
- package/esm/manifest-generator.d.ts +10 -39
- package/esm/manifest-generator.d.ts.map +1 -1
- package/esm/manifest-generator.js +68 -274
- package/esm/manifest-generator.js.map +1 -1
- package/esm/plugin-helper.d.ts +4 -3
- package/esm/plugin-helper.d.ts.map +1 -1
- package/esm/plugin-helper.js +2 -2
- package/esm/plugin-helper.js.map +1 -1
- package/package.json +4 -5
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const path = require("node:path");
|
|
2
|
+
|
|
3
|
+
module.exports = function componentPageLoader() {
|
|
4
|
+
this.cacheable?.();
|
|
5
|
+
|
|
6
|
+
const options = this.getOptions ? this.getOptions() : {};
|
|
7
|
+
const entryOptions = {
|
|
8
|
+
mount: options.mount ?? "#app",
|
|
9
|
+
hydrate: options.hydrate ?? "load",
|
|
10
|
+
render: options.render ?? "csr",
|
|
11
|
+
...(options.route ? { route: options.route } : {}),
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
return [
|
|
15
|
+
`import Component from ${JSON.stringify(`./${path.basename(this.resourcePath)}?evjs-component-page-source`)};`,
|
|
16
|
+
`import { createGeneratedReactPageEntry } from "@evjs/client/internal/react-page";`,
|
|
17
|
+
``,
|
|
18
|
+
`const mod = createGeneratedReactPageEntry(Component, ${JSON.stringify(entryOptions)}, import.meta.url);`,
|
|
19
|
+
`export default mod;`,
|
|
20
|
+
``,
|
|
21
|
+
].join("\n");
|
|
22
|
+
};
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Map
|
|
2
|
+
* Map ResolvedConfig to a utoopack configuration object.
|
|
3
3
|
*
|
|
4
4
|
* Utoopack uses a JSON-based config with `build()` / `dev()` programmatic API.
|
|
5
5
|
* It handles "use server" directives natively via the
|
|
6
|
-
*
|
|
6
|
+
* server-function runtime module config fields.
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
8
|
+
import type { BuildPlan, PluginHooks, ResolvedConfig } from "@evjs/ev";
|
|
9
9
|
import type { ConfigComplete } from "@utoo/pack";
|
|
10
10
|
/**
|
|
11
|
-
* Create a utoopack configuration object from
|
|
11
|
+
* Create a utoopack configuration object from Config.
|
|
12
12
|
*
|
|
13
13
|
* @param config - Resolved evjs config
|
|
14
14
|
* @param cwd - Project root directory
|
|
15
15
|
* @param hooks - Plugin lifecycle hooks
|
|
16
16
|
* @returns A config object suitable for `@utoo/pack`'s `build()` / `dev()` API
|
|
17
17
|
*/
|
|
18
|
-
export declare function createUtoopackConfig(config:
|
|
18
|
+
export declare function createUtoopackConfig(config: ResolvedConfig<ConfigComplete>, plan: BuildPlan, cwd: string, hooks: PluginHooks<ConfigComplete>[]): Promise<ConfigComplete>;
|
|
19
19
|
//# sourceMappingURL=create-config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-config.d.ts","sourceRoot":"","sources":["../../src/adapter/create-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"create-config.d.ts","sourceRoot":"","sources":["../../src/adapter/create-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH,OAAO,KAAK,EACV,SAAS,EAGT,WAAW,EAEX,cAAc,EACf,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EACV,cAAc,EAKf,MAAM,YAAY,CAAC;AA4DpB;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,cAAc,CAAC,cAAc,CAAC,EACtC,IAAI,EAAE,SAAS,EACf,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,WAAW,CAAC,cAAc,CAAC,EAAE,GACnC,OAAO,CAAC,cAAc,CAAC,CAoHzB"}
|
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Map
|
|
2
|
+
* Map ResolvedConfig to a utoopack configuration object.
|
|
3
3
|
*
|
|
4
4
|
* Utoopack uses a JSON-based config with `build()` / `dev()` programmatic API.
|
|
5
5
|
* It handles "use server" directives natively via the
|
|
6
|
-
*
|
|
6
|
+
* server-function runtime module config fields.
|
|
7
7
|
*/
|
|
8
8
|
import { createRequire } from "node:module";
|
|
9
|
+
import path from "node:path";
|
|
10
|
+
import { fileURLToPath } from "node:url";
|
|
9
11
|
const require = createRequire(import.meta.url);
|
|
10
|
-
|
|
12
|
+
const componentPageLoader = fileURLToPath(new URL("./component-page-loader.cjs", import.meta.url));
|
|
13
|
+
const pagesEntryLoader = fileURLToPath(new URL("./pages-entry-loader.cjs", import.meta.url));
|
|
14
|
+
const pagesEntryAnchor = fileURLToPath(new URL("./pages-entry-anchor.js", import.meta.url));
|
|
15
|
+
import { getLogger } from "@logtape/logtape";
|
|
11
16
|
import { getOutputPaths } from "./output-paths.js";
|
|
17
|
+
const logger = getLogger(["evjs", "bundler-utoopack", "config"]);
|
|
12
18
|
function createSpaHistoryFallbackRule(config) {
|
|
13
19
|
const target = new URL(config.dev.https ? "https://localhost" : "http://localhost");
|
|
14
20
|
target.port = String(config.dev.port);
|
|
15
21
|
return {
|
|
16
|
-
context: [
|
|
22
|
+
context: [createSpaHistoryFallbackContext(config)],
|
|
17
23
|
target: target.origin,
|
|
18
24
|
changeOrigin: true,
|
|
19
25
|
secure: false,
|
|
@@ -22,63 +28,95 @@ function createSpaHistoryFallbackRule(config) {
|
|
|
22
28
|
},
|
|
23
29
|
};
|
|
24
30
|
}
|
|
31
|
+
function createSpaHistoryFallbackContext(config) {
|
|
32
|
+
const exclusions = createSpaHistoryFallbackExclusions(config)
|
|
33
|
+
.map(normalizeRoutePrefix)
|
|
34
|
+
.filter((prefix) => prefix !== "/")
|
|
35
|
+
.map((prefix) => `(?!${escapeRegExp(prefix.slice(1))}(?:/|$))`)
|
|
36
|
+
.join("");
|
|
37
|
+
return `^/${exclusions}(?!turbopack-hmr$)(?!.*\\.[^/]+$).+`;
|
|
38
|
+
}
|
|
39
|
+
function createSpaHistoryFallbackExclusions(config) {
|
|
40
|
+
const exclusions = new Set(["/api"]);
|
|
41
|
+
if (config.serverEnabled) {
|
|
42
|
+
exclusions.add(config.server.runtime.basePath);
|
|
43
|
+
exclusions.add(config.server.runtime.fn);
|
|
44
|
+
exclusions.add(config.server.runtime.ppr);
|
|
45
|
+
if (config.server.runtime.rsc) {
|
|
46
|
+
exclusions.add(config.server.runtime.rsc);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return [...exclusions];
|
|
50
|
+
}
|
|
51
|
+
function normalizeRoutePrefix(prefix) {
|
|
52
|
+
const withLeadingSlash = prefix.startsWith("/") ? prefix : `/${prefix}`;
|
|
53
|
+
return withLeadingSlash.length > 1
|
|
54
|
+
? withLeadingSlash.replace(/\/+$/, "")
|
|
55
|
+
: withLeadingSlash;
|
|
56
|
+
}
|
|
25
57
|
/**
|
|
26
|
-
* Create a utoopack configuration object from
|
|
58
|
+
* Create a utoopack configuration object from Config.
|
|
27
59
|
*
|
|
28
60
|
* @param config - Resolved evjs config
|
|
29
61
|
* @param cwd - Project root directory
|
|
30
62
|
* @param hooks - Plugin lifecycle hooks
|
|
31
63
|
* @returns A config object suitable for `@utoo/pack`'s `build()` / `dev()` API
|
|
32
64
|
*/
|
|
33
|
-
export async function createUtoopackConfig(config, cwd, hooks) {
|
|
34
|
-
|
|
35
|
-
const mode =
|
|
65
|
+
export async function createUtoopackConfig(config, plan, cwd, hooks) {
|
|
66
|
+
validateUtoopackPlanSupport(plan);
|
|
67
|
+
const mode = plan.mode;
|
|
68
|
+
const isProduction = mode === "production";
|
|
36
69
|
const serverEnabled = config.serverEnabled;
|
|
70
|
+
const frameworkRules = createFrameworkModuleRules(plan);
|
|
37
71
|
const devProxy = [
|
|
38
72
|
...config.dev.proxy,
|
|
39
|
-
...(
|
|
73
|
+
...(hasAppClientEntry(plan) ? [createSpaHistoryFallbackRule(config)] : []),
|
|
40
74
|
];
|
|
41
75
|
let finalServerEntry;
|
|
42
76
|
if (serverEnabled) {
|
|
43
|
-
finalServerEntry =
|
|
44
|
-
config.server.entry || require.resolve("@evjs/server/fetch");
|
|
77
|
+
finalServerEntry = resolveServerEntry(plan.server.entry);
|
|
45
78
|
}
|
|
46
79
|
if (serverEnabled && !finalServerEntry) {
|
|
47
80
|
throw new Error("Failed to resolve a server entry for the server bundle.");
|
|
48
81
|
}
|
|
49
|
-
const outputPaths = getOutputPaths(cwd, serverEnabled);
|
|
82
|
+
const outputPaths = getOutputPaths(cwd, serverEnabled, plan.distDir);
|
|
50
83
|
const utoopackConfig = {
|
|
51
84
|
mode,
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
: [
|
|
59
|
-
{
|
|
60
|
-
import: config.entry,
|
|
61
|
-
},
|
|
62
|
-
],
|
|
85
|
+
entry: plan.entries
|
|
86
|
+
.filter((entry) => entry.environment === "client")
|
|
87
|
+
.map((entry) => ({
|
|
88
|
+
import: resolveClientEntry(entry),
|
|
89
|
+
name: entry.name,
|
|
90
|
+
})),
|
|
63
91
|
output: {
|
|
64
92
|
path: outputPaths.clientDir,
|
|
65
93
|
filename: isProduction ? "[name].[contenthash:8].js" : "[name].js",
|
|
66
94
|
chunkFilename: isProduction ? "[name].[contenthash:8].js" : "[name].js",
|
|
67
|
-
publicPath:
|
|
95
|
+
publicPath: toUtoopackPublicPath(plan.runtime.publicPath),
|
|
96
|
+
crossOriginLoading: config.output.crossOriginLoading,
|
|
68
97
|
clean: true,
|
|
69
98
|
},
|
|
70
99
|
resolve: {
|
|
71
100
|
extensions: [".tsx", ".ts", ".jsx", ".js", ".mjs", ".cjs"],
|
|
72
101
|
},
|
|
102
|
+
...(frameworkRules.length > 0
|
|
103
|
+
? {
|
|
104
|
+
module: {
|
|
105
|
+
rules: {
|
|
106
|
+
"**/*": frameworkRules,
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
}
|
|
110
|
+
: {}),
|
|
73
111
|
sourceMaps: !isProduction,
|
|
74
112
|
stats: true,
|
|
75
113
|
react: {
|
|
76
114
|
runtime: "automatic",
|
|
77
115
|
},
|
|
78
116
|
define: {
|
|
79
|
-
"process.env.EVJS_FUNCTION_ENDPOINT": JSON.stringify(config.server.
|
|
117
|
+
"process.env.EVJS_FUNCTION_ENDPOINT": JSON.stringify(config.server.functionRuntime.endpoint),
|
|
80
118
|
"process.env.NODE_ENV": JSON.stringify(mode),
|
|
81
|
-
__EVJS_FUNCTION_ENDPOINT__: JSON.stringify(config.server.
|
|
119
|
+
__EVJS_FUNCTION_ENDPOINT__: JSON.stringify(config.server.functionRuntime.endpoint),
|
|
82
120
|
},
|
|
83
121
|
// Server functions config — utoopack handles "use server" natively
|
|
84
122
|
...(serverEnabled
|
|
@@ -95,8 +133,8 @@ export async function createUtoopackConfig(config, cwd, hooks) {
|
|
|
95
133
|
: "[name].js",
|
|
96
134
|
},
|
|
97
135
|
function: {
|
|
98
|
-
clientProxy: config.server.
|
|
99
|
-
serverRegister: config.server.
|
|
136
|
+
clientProxy: config.server.functionRuntime.clientProxy,
|
|
137
|
+
serverRegister: config.server.functionRuntime.serverRegister,
|
|
100
138
|
},
|
|
101
139
|
},
|
|
102
140
|
}
|
|
@@ -112,8 +150,13 @@ export async function createUtoopackConfig(config, cwd, hooks) {
|
|
|
112
150
|
// Run plugin bundler hooks
|
|
113
151
|
const ctx = {
|
|
114
152
|
mode: isProduction ? "production" : "development",
|
|
153
|
+
command: isProduction ? "build" : "dev",
|
|
115
154
|
cwd,
|
|
116
155
|
config,
|
|
156
|
+
bundlerName: "utoopack",
|
|
157
|
+
environment: "mixed",
|
|
158
|
+
logger,
|
|
159
|
+
addWatchFile() { },
|
|
117
160
|
};
|
|
118
161
|
for (const h of hooks) {
|
|
119
162
|
if (h.bundlerConfig) {
|
|
@@ -122,4 +165,134 @@ export async function createUtoopackConfig(config, cwd, hooks) {
|
|
|
122
165
|
}
|
|
123
166
|
return utoopackConfig;
|
|
124
167
|
}
|
|
168
|
+
function createPagesEntryRule(entry) {
|
|
169
|
+
return {
|
|
170
|
+
condition: createPagesEntryCondition(),
|
|
171
|
+
loaders: [
|
|
172
|
+
{
|
|
173
|
+
loader: pagesEntryLoader,
|
|
174
|
+
options: createPagesLoaderOptions(entry.metadata),
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
type: "ecmascript",
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
function createPagesEntryCondition() {
|
|
181
|
+
const normalizedAnchor = normalizeRulePath(pagesEntryAnchor);
|
|
182
|
+
const frameworkAnchorSuffix = "(?:packages/bundler-utoopack|node_modules/@evjs/bundler-utoopack)/(?:src|esm)/adapter/pages-entry-anchor\\.js";
|
|
183
|
+
return {
|
|
184
|
+
path: new RegExp(`(?:${escapeRegExp(normalizedAnchor)}|(?:^|/)${frameworkAnchorSuffix})$`),
|
|
185
|
+
query: "",
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
function createComponentPageRule(metadata) {
|
|
189
|
+
return {
|
|
190
|
+
condition: {
|
|
191
|
+
path: new RegExp(`${escapeRegExp(normalizeRulePath(metadata.component))}$`),
|
|
192
|
+
query: "",
|
|
193
|
+
},
|
|
194
|
+
loaders: [
|
|
195
|
+
{
|
|
196
|
+
loader: componentPageLoader,
|
|
197
|
+
options: createComponentPageLoaderOptions(metadata),
|
|
198
|
+
},
|
|
199
|
+
],
|
|
200
|
+
type: "ecmascript",
|
|
201
|
+
};
|
|
202
|
+
}
|
|
203
|
+
function normalizeRulePath(value) {
|
|
204
|
+
return value.replace(/^\.\//, "").replaceAll("\\", "/");
|
|
205
|
+
}
|
|
206
|
+
function escapeRegExp(value) {
|
|
207
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
208
|
+
}
|
|
209
|
+
function resolveClientEntry(entry) {
|
|
210
|
+
if (entry.metadata?.type !== "pages-app")
|
|
211
|
+
return entry.import;
|
|
212
|
+
return pagesEntryAnchor;
|
|
213
|
+
}
|
|
214
|
+
function getPagesAppEntry(plan) {
|
|
215
|
+
return plan.entries.find((entry) => entry.metadata?.type === "pages-app");
|
|
216
|
+
}
|
|
217
|
+
function getComponentPageMetadata(plan) {
|
|
218
|
+
return plan.entries
|
|
219
|
+
.map((entry) => entry.metadata)
|
|
220
|
+
.filter((metadata) => metadata?.type === "react-component-page");
|
|
221
|
+
}
|
|
222
|
+
function createFrameworkModuleRules(plan) {
|
|
223
|
+
const pagesApp = getPagesAppEntry(plan);
|
|
224
|
+
return [
|
|
225
|
+
...(pagesApp ? [createPagesEntryRule(pagesApp)] : []),
|
|
226
|
+
...getComponentPageMetadata(plan).map(createComponentPageRule),
|
|
227
|
+
];
|
|
228
|
+
}
|
|
229
|
+
function createPagesLoaderOptions(metadata) {
|
|
230
|
+
return {
|
|
231
|
+
type: "pages-app",
|
|
232
|
+
mount: metadata.mount,
|
|
233
|
+
routes: metadata.routes.map((route) => ({
|
|
234
|
+
id: route.id,
|
|
235
|
+
path: route.path,
|
|
236
|
+
module: route.module,
|
|
237
|
+
...(route.parentId ? { parentId: route.parentId } : {}),
|
|
238
|
+
...(route.kind ? { kind: route.kind } : {}),
|
|
239
|
+
})),
|
|
240
|
+
...(metadata.rootModule ? { rootModule: metadata.rootModule } : {}),
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
function createComponentPageLoaderOptions(metadata) {
|
|
244
|
+
return {
|
|
245
|
+
type: "react-component-page",
|
|
246
|
+
mount: metadata.mount,
|
|
247
|
+
hydrate: metadata.hydrate,
|
|
248
|
+
render: metadata.render,
|
|
249
|
+
...(metadata.route ? { route: metadata.route } : {}),
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
function hasAppClientEntry(plan) {
|
|
253
|
+
return plan.entries.some((entry) => entry.kind === "app-client");
|
|
254
|
+
}
|
|
255
|
+
function validateUtoopackPlanSupport(plan) {
|
|
256
|
+
const unsupportedServerEntries = plan.entries.filter((entry) => entry.kind === "page-server" ||
|
|
257
|
+
entry.kind === "rsc-page" ||
|
|
258
|
+
entry.kind === "ppr-shell" ||
|
|
259
|
+
entry.kind === "ppr-region");
|
|
260
|
+
if (unsupportedServerEntries.length === 0)
|
|
261
|
+
return;
|
|
262
|
+
const details = unsupportedServerEntries
|
|
263
|
+
.map(formatUnsupportedServerEntry)
|
|
264
|
+
.join("; ");
|
|
265
|
+
const kinds = [
|
|
266
|
+
...new Set(unsupportedServerEntries.map((entry) => entry.kind)),
|
|
267
|
+
].join(", ");
|
|
268
|
+
throw new Error(`[evjs] The current Utoopack adapter cannot build framework server page entries yet (${details}). Unsupported entry kinds: ${kinds}. Utoopack needs multi server entry support; use another bundler adapter for SSR/PPR/RSC validation until that lower-layer API is available.`);
|
|
269
|
+
}
|
|
270
|
+
function formatUnsupportedServerEntry(entry) {
|
|
271
|
+
const owner = formatBuildEntryOwner(entry.owner);
|
|
272
|
+
return `${entry.name} (${entry.kind}${owner ? `, ${owner}` : ""})`;
|
|
273
|
+
}
|
|
274
|
+
function formatBuildEntryOwner(owner) {
|
|
275
|
+
if (!owner)
|
|
276
|
+
return undefined;
|
|
277
|
+
const parts = [];
|
|
278
|
+
if (owner.pageId)
|
|
279
|
+
parts.push(`page "${owner.pageId}"`);
|
|
280
|
+
if (owner.routeId)
|
|
281
|
+
parts.push(`route "${owner.routeId}"`);
|
|
282
|
+
if (owner.regionId)
|
|
283
|
+
parts.push(`region "${owner.regionId}"`);
|
|
284
|
+
if (owner.appId)
|
|
285
|
+
parts.push(`app "${owner.appId}"`);
|
|
286
|
+
return parts.join(", ") || undefined;
|
|
287
|
+
}
|
|
288
|
+
function resolveServerEntry(entry) {
|
|
289
|
+
if (!entry)
|
|
290
|
+
return undefined;
|
|
291
|
+
if (entry.startsWith(".") || path.isAbsolute(entry))
|
|
292
|
+
return entry;
|
|
293
|
+
return require.resolve(entry);
|
|
294
|
+
}
|
|
295
|
+
function toUtoopackPublicPath(publicPath) {
|
|
296
|
+
return typeof publicPath === "string" ? publicPath : "auto";
|
|
297
|
+
}
|
|
125
298
|
//# sourceMappingURL=create-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-config.js","sourceRoot":"","sources":["../../src/adapter/create-config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"create-config.js","sourceRoot":"","sources":["../../src/adapter/create-config.ts"],"names":[],"mappings":"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"}
|
package/esm/adapter/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* "use server" directives natively — no custom loader or child
|
|
7
7
|
* compiler is needed.
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import type { BundlerAdapter } from "@evjs/ev";
|
|
10
10
|
import type { ConfigComplete } from "@utoo/pack";
|
|
11
11
|
export declare const utoopackAdapter: BundlerAdapter<ConfigComplete>;
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapter/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAGV,cAAc,EAMf,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA4CjD,eAAO,MAAM,eAAe,EAAE,cAAc,CAAC,cAAc,CAsG1D,CAAC"}
|
package/esm/adapter/index.js
CHANGED
|
@@ -8,118 +8,68 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import fs from "node:fs";
|
|
10
10
|
import path from "node:path";
|
|
11
|
-
import { isMpa, } from "@evjs/ev";
|
|
12
11
|
import { getLogger } from "@logtape/logtape";
|
|
13
12
|
import { UtoopackManifestGenerator } from "../manifest-generator.js";
|
|
14
13
|
import { getOutputPaths } from "./output-paths.js";
|
|
15
14
|
const logger = getLogger(["evjs", "bundler-utoopack"]);
|
|
16
|
-
async function
|
|
17
|
-
const isServerEnabled = config.serverEnabled;
|
|
18
|
-
const outputPaths = getOutputPaths(cwd, isServerEnabled);
|
|
19
|
-
const clientManifestPath = path.join(outputPaths.clientDir, "manifest.json");
|
|
20
|
-
if (!fs.existsSync(clientManifestPath))
|
|
21
|
-
return;
|
|
22
|
-
const clientManifest = JSON.parse(await fs.promises.readFile(clientManifestPath, "utf-8"));
|
|
23
|
-
// biome-ignore lint/suspicious/noExplicitAny: match @evjs/manifest type
|
|
24
|
-
let serverManifest;
|
|
25
|
-
if (isServerEnabled) {
|
|
26
|
-
const serverManifestPath = path.join(outputPaths.serverDir, "manifest.json");
|
|
27
|
-
if (fs.existsSync(serverManifestPath)) {
|
|
28
|
-
serverManifest = JSON.parse(await fs.promises.readFile(serverManifestPath, "utf-8"));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
const { generateHtml } = await import("@evjs/build-tools");
|
|
32
|
-
const { buildHtml } = await import("@evjs/ev");
|
|
33
|
-
// MPA mode: generate one HTML file per page
|
|
34
|
-
if (isMpa(config) && clientManifest.pages) {
|
|
35
|
-
for (const [pageName, pageManifest] of Object.entries(clientManifest.pages)) {
|
|
36
|
-
const pageConfig = config.pages?.[pageName];
|
|
37
|
-
if (!pageConfig)
|
|
38
|
-
continue;
|
|
39
|
-
const doc = generateHtml({
|
|
40
|
-
template: path.resolve(cwd, pageConfig.html),
|
|
41
|
-
js: pageManifest.assets.js,
|
|
42
|
-
css: pageManifest.assets.css,
|
|
43
|
-
});
|
|
44
|
-
const finalHtml = await buildHtml({
|
|
45
|
-
// biome-ignore lint/suspicious/noExplicitAny: DOM interfaces
|
|
46
|
-
doc: doc,
|
|
47
|
-
// biome-ignore lint/suspicious/noExplicitAny: Bundler-agnostic hook generic
|
|
48
|
-
hooks: hooks,
|
|
49
|
-
clientManifest,
|
|
50
|
-
serverManifest,
|
|
51
|
-
});
|
|
52
|
-
const outPath = path.join(outputPaths.clientDir, `${pageName}.html`);
|
|
53
|
-
await fs.promises.mkdir(path.dirname(outPath), { recursive: true });
|
|
54
|
-
await fs.promises.writeFile(outPath, finalHtml, "utf-8");
|
|
55
|
-
}
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
// SPA mode: single index.html
|
|
59
|
-
const doc = generateHtml({
|
|
60
|
-
template: path.resolve(cwd, config.html),
|
|
61
|
-
js: clientManifest.assets.js,
|
|
62
|
-
css: clientManifest.assets.css,
|
|
63
|
-
});
|
|
64
|
-
const finalHtml = await buildHtml({
|
|
65
|
-
// biome-ignore lint/suspicious/noExplicitAny: DOM interfaces
|
|
66
|
-
doc: doc,
|
|
67
|
-
// biome-ignore lint/suspicious/noExplicitAny: Bundler-agnostic hook generic
|
|
68
|
-
hooks: hooks,
|
|
69
|
-
clientManifest,
|
|
70
|
-
serverManifest,
|
|
71
|
-
});
|
|
72
|
-
const outPath = path.join(outputPaths.clientDir, "index.html");
|
|
73
|
-
await fs.promises.mkdir(path.dirname(outPath), { recursive: true });
|
|
74
|
-
await fs.promises.writeFile(outPath, finalHtml, "utf-8");
|
|
75
|
-
}
|
|
76
|
-
async function cleanServerOutput(cwd, serverEnabled) {
|
|
15
|
+
async function cleanServerOutput(cwd, serverEnabled, distDir) {
|
|
77
16
|
if (!serverEnabled)
|
|
78
17
|
return;
|
|
79
|
-
const outputPaths = getOutputPaths(cwd, serverEnabled);
|
|
18
|
+
const outputPaths = getOutputPaths(cwd, serverEnabled, distDir);
|
|
80
19
|
await fs.promises.rm(outputPaths.serverDir, {
|
|
81
20
|
recursive: true,
|
|
82
21
|
force: true,
|
|
83
22
|
});
|
|
84
23
|
}
|
|
85
|
-
async function generateDevArtifacts(config, cwd,
|
|
86
|
-
const outputPaths = getOutputPaths(cwd, config.serverEnabled);
|
|
24
|
+
async function generateDevArtifacts(config, cwd, plan, onBuildFacts, options = {}) {
|
|
25
|
+
const outputPaths = getOutputPaths(cwd, config.serverEnabled, plan.distDir);
|
|
87
26
|
const clientStatsPath = path.join(outputPaths.clientDir, "stats.json");
|
|
88
27
|
if (!fs.existsSync(clientStatsPath))
|
|
89
|
-
return;
|
|
28
|
+
return false;
|
|
90
29
|
logger.info `Generating development manifest and HTML...`;
|
|
91
|
-
const generator = new UtoopackManifestGenerator(cwd, config.serverEnabled);
|
|
92
|
-
await generator.
|
|
93
|
-
await
|
|
30
|
+
const generator = new UtoopackManifestGenerator(cwd, config.serverEnabled, plan);
|
|
31
|
+
const facts = await generator.collectBuildFacts();
|
|
32
|
+
await onBuildFacts(facts, options);
|
|
33
|
+
return true;
|
|
94
34
|
}
|
|
95
35
|
export const utoopackAdapter = {
|
|
96
36
|
name: "utoopack",
|
|
97
|
-
async build(
|
|
37
|
+
async build(ctx) {
|
|
38
|
+
const { config, cwd, hooks, plan } = ctx;
|
|
98
39
|
const { createUtoopackConfig } = await import("./create-config.js");
|
|
99
|
-
const utoopackConfig = await createUtoopackConfig(config, cwd, hooks);
|
|
40
|
+
const utoopackConfig = await createUtoopackConfig(config, plan, cwd, hooks);
|
|
100
41
|
logger.info `Building for production with utoopack...`;
|
|
101
|
-
await cleanServerOutput(cwd, config.serverEnabled);
|
|
42
|
+
await cleanServerOutput(cwd, config.serverEnabled, plan.distDir);
|
|
102
43
|
const { build } = await import("@utoo/pack");
|
|
103
44
|
await build({ config: utoopackConfig });
|
|
104
|
-
logger.info `
|
|
105
|
-
const generator = new UtoopackManifestGenerator(cwd, config.serverEnabled);
|
|
106
|
-
await generator.build();
|
|
107
|
-
logger.info `Generating and emitting HTML...`;
|
|
108
|
-
await generateAndEmitHtml(config, cwd, hooks);
|
|
45
|
+
logger.info `Collecting utoopack build facts...`;
|
|
46
|
+
const generator = new UtoopackManifestGenerator(cwd, config.serverEnabled, plan);
|
|
109
47
|
logger.info `Build complete!`;
|
|
48
|
+
return generator.collectBuildFacts();
|
|
110
49
|
},
|
|
111
|
-
async dev(
|
|
50
|
+
async dev(ctx) {
|
|
51
|
+
const { config, cwd, callbacks, hooks, plan } = ctx;
|
|
112
52
|
const { createUtoopackConfig } = await import("./create-config.js");
|
|
113
|
-
const utoopackConfig = await createUtoopackConfig(config, cwd, hooks);
|
|
53
|
+
const utoopackConfig = await createUtoopackConfig(config, plan, cwd, hooks);
|
|
54
|
+
let serverReadyWatcher;
|
|
114
55
|
logger.info `Starting development server with utoopack...`;
|
|
115
56
|
const { serve } = await import("@utoo/pack");
|
|
116
57
|
await serve({ config: utoopackConfig });
|
|
117
|
-
await generateDevArtifacts(config, cwd,
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
58
|
+
await generateDevArtifacts(config, cwd, plan, callbacks.onBuildFacts, {
|
|
59
|
+
isRebuild: false,
|
|
60
|
+
});
|
|
61
|
+
// Watch for server bundle readiness when "use server" modules are emitted.
|
|
62
|
+
if (!config.serverEnabled) {
|
|
63
|
+
return new UtoopackDevController({
|
|
64
|
+
config,
|
|
65
|
+
cwd,
|
|
66
|
+
onBuildFacts: callbacks.onBuildFacts,
|
|
67
|
+
closeWatcher() {
|
|
68
|
+
serverReadyWatcher?.close();
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
const outDir = getOutputPaths(cwd, config.serverEnabled, plan.distDir).serverDir;
|
|
123
73
|
if (!fs.existsSync(outDir)) {
|
|
124
74
|
fs.mkdirSync(outDir, { recursive: true });
|
|
125
75
|
}
|
|
@@ -134,7 +84,7 @@ export const utoopackAdapter = {
|
|
|
134
84
|
ready = true;
|
|
135
85
|
try {
|
|
136
86
|
await callbacks.onServerBundleReady();
|
|
137
|
-
|
|
87
|
+
serverReadyWatcher?.close();
|
|
138
88
|
}
|
|
139
89
|
catch (err) {
|
|
140
90
|
logger.error `Server bundle ready callback failed: ${err}`;
|
|
@@ -142,12 +92,81 @@ export const utoopackAdapter = {
|
|
|
142
92
|
}
|
|
143
93
|
}
|
|
144
94
|
};
|
|
145
|
-
|
|
95
|
+
serverReadyWatcher = fs.watch(outDir, (_eventType, filename) => {
|
|
146
96
|
if (filename)
|
|
147
97
|
void checkReady(filename);
|
|
148
98
|
});
|
|
149
99
|
// Initial check in case it was written before the watcher attached
|
|
150
100
|
await checkReady();
|
|
101
|
+
return new UtoopackDevController({
|
|
102
|
+
config,
|
|
103
|
+
cwd,
|
|
104
|
+
onBuildFacts: callbacks.onBuildFacts,
|
|
105
|
+
closeWatcher() {
|
|
106
|
+
serverReadyWatcher?.close();
|
|
107
|
+
},
|
|
108
|
+
});
|
|
151
109
|
},
|
|
152
110
|
};
|
|
111
|
+
class UtoopackDevController {
|
|
112
|
+
options;
|
|
113
|
+
constructor(options) {
|
|
114
|
+
this.options = options;
|
|
115
|
+
}
|
|
116
|
+
close() {
|
|
117
|
+
this.options.closeWatcher();
|
|
118
|
+
}
|
|
119
|
+
async updatePlan(update) {
|
|
120
|
+
if (isEmptyPlanUpdate(update))
|
|
121
|
+
return;
|
|
122
|
+
if (!isHtmlOnlyUpdate(update)) {
|
|
123
|
+
throw new Error(`[evjs] Utoopack dev cannot apply framework plan changes without restarting ev dev (${formatUnsupportedPlanUpdate(update)}). HTML-only framework plan updates are supported; entry additions, removals, server changes, and route metadata changes still require a lower-layer Utoopack update API.`);
|
|
124
|
+
}
|
|
125
|
+
const emitted = await generateDevArtifacts(this.options.config, this.options.cwd, update.next, this.options.onBuildFacts, { isRebuild: true });
|
|
126
|
+
if (!emitted) {
|
|
127
|
+
throw new Error("[evjs] Utoopack dev cannot regenerate framework artifacts before client build stats are available.");
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
function isEmptyPlanUpdate(update) {
|
|
132
|
+
return (!update.serverChanged &&
|
|
133
|
+
update.entries.added.length === 0 &&
|
|
134
|
+
update.entries.removed.length === 0 &&
|
|
135
|
+
update.entries.changed.length === 0 &&
|
|
136
|
+
update.html.added.length === 0 &&
|
|
137
|
+
update.html.removed.length === 0 &&
|
|
138
|
+
update.html.changed.length === 0);
|
|
139
|
+
}
|
|
140
|
+
function isHtmlOnlyUpdate(update) {
|
|
141
|
+
return (!update.serverChanged &&
|
|
142
|
+
update.entries.added.length === 0 &&
|
|
143
|
+
update.entries.removed.length === 0 &&
|
|
144
|
+
update.entries.changed.length === 0 &&
|
|
145
|
+
(update.html.added.length > 0 ||
|
|
146
|
+
update.html.removed.length > 0 ||
|
|
147
|
+
update.html.changed.length > 0));
|
|
148
|
+
}
|
|
149
|
+
function formatUnsupportedPlanUpdate(update) {
|
|
150
|
+
const changes = [
|
|
151
|
+
formatPlanItems("entry additions", update.entries.added, formatBuildEntry),
|
|
152
|
+
formatPlanItems("entry removals", update.entries.removed, formatBuildEntry),
|
|
153
|
+
formatPlanItems("entry changes", update.entries.changed, formatBuildEntry),
|
|
154
|
+
formatPlanItems("HTML additions", update.html.added, formatHtmlPlan),
|
|
155
|
+
formatPlanItems("HTML removals", update.html.removed, formatHtmlPlan),
|
|
156
|
+
formatPlanItems("HTML changes", update.html.changed, formatHtmlPlan),
|
|
157
|
+
update.serverChanged ? "server output changed" : undefined,
|
|
158
|
+
].filter((change) => Boolean(change));
|
|
159
|
+
return changes.length > 0 ? changes.join("; ") : "unknown plan change";
|
|
160
|
+
}
|
|
161
|
+
function formatPlanItems(label, items, formatItem) {
|
|
162
|
+
if (items.length === 0)
|
|
163
|
+
return undefined;
|
|
164
|
+
return `${label}: ${items.map(formatItem).join(", ")}`;
|
|
165
|
+
}
|
|
166
|
+
function formatBuildEntry(entry) {
|
|
167
|
+
return `${entry.name} (${entry.kind})`;
|
|
168
|
+
}
|
|
169
|
+
function formatHtmlPlan(html) {
|
|
170
|
+
return `${html.id} -> ${html.fileName}`;
|
|
171
|
+
}
|
|
153
172
|
//# sourceMappingURL=index.js.map
|