@evjs/manifest 0.0.25 → 0.0.27
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/README.md +1 -1
- package/esm/index.d.ts +27 -4
- package/esm/index.js +29 -3
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@ npm install @evjs/manifest
|
|
|
10
10
|
|
|
11
11
|
## Purpose
|
|
12
12
|
|
|
13
|
-
Defines the structure of the manifest files emitted by `@evjs/bundler-
|
|
13
|
+
Defines the structure of the manifest files emitted by `@evjs/bundler-utoopack` and consumed by `@evjs/client` and `@evjs/server`. Two separate manifests are emitted during the build:
|
|
14
14
|
|
|
15
15
|
## Server Manifest (`dist/server/manifest.json`)
|
|
16
16
|
|
package/esm/index.d.ts
CHANGED
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
*/
|
|
13
13
|
/** A registered server function entry. */
|
|
14
14
|
export interface ServerFnEntry {
|
|
15
|
-
/**
|
|
15
|
+
/** Bundler module identifier (hash-based, no source paths exposed). */
|
|
16
16
|
moduleId: string;
|
|
17
17
|
/** Exported function name. */
|
|
18
18
|
export: string;
|
|
19
19
|
}
|
|
20
20
|
/** A React Server Component entry (future — reserved). */
|
|
21
21
|
export interface RscEntry {
|
|
22
|
-
/**
|
|
22
|
+
/** Bundler module ID. */
|
|
23
23
|
moduleId: string;
|
|
24
24
|
/** Exported component name. */
|
|
25
25
|
export: string;
|
|
@@ -55,7 +55,7 @@ export interface ClientManifest {
|
|
|
55
55
|
version: 1;
|
|
56
56
|
/** URL prefix for all assets when deployed to CDN. Default: "/". */
|
|
57
57
|
assetPrefix?: string;
|
|
58
|
-
/** Bundle asset paths for HTML injection. */
|
|
58
|
+
/** Bundle asset paths for HTML injection (SPA mode). */
|
|
59
59
|
assets: {
|
|
60
60
|
/** JavaScript bundle paths. */
|
|
61
61
|
js: string[];
|
|
@@ -64,6 +64,24 @@ export interface ClientManifest {
|
|
|
64
64
|
};
|
|
65
65
|
/** Discovered client routes. */
|
|
66
66
|
routes?: RouteEntry[];
|
|
67
|
+
/**
|
|
68
|
+
* Per-page assets (MPA mode).
|
|
69
|
+
*
|
|
70
|
+
* When set, each key is a page name and its value contains the
|
|
71
|
+
* page-specific asset lists. The top-level `assets` will be empty
|
|
72
|
+
* in this case.
|
|
73
|
+
*/
|
|
74
|
+
pages?: Record<string, PageManifestEntry>;
|
|
75
|
+
}
|
|
76
|
+
/** Per-page manifest entry for MPA mode. */
|
|
77
|
+
export interface PageManifestEntry {
|
|
78
|
+
/** Bundle asset paths for this page. */
|
|
79
|
+
assets: {
|
|
80
|
+
js: string[];
|
|
81
|
+
css: string[];
|
|
82
|
+
};
|
|
83
|
+
/** Discovered routes for this page. */
|
|
84
|
+
routes?: RouteEntry[];
|
|
67
85
|
}
|
|
68
86
|
/** Route metadata extracted from a createRoute() call. */
|
|
69
87
|
export interface ExtractedRoute {
|
|
@@ -101,7 +119,7 @@ export declare function resolveRoutes(routes: ExtractedRoute[]): Array<{
|
|
|
101
119
|
* throughout the compilation lifecycle, then produces the final manifests.
|
|
102
120
|
*
|
|
103
121
|
* This class is bundler-agnostic — it is used by bundler adapters
|
|
104
|
-
* (e.g. `@evjs/bundler-
|
|
122
|
+
* (e.g. `@evjs/bundler-utoopack`) to accumulate build metadata.
|
|
105
123
|
*/
|
|
106
124
|
export declare class ManifestCollector {
|
|
107
125
|
fns: Record<string, ServerFnEntry>;
|
|
@@ -109,11 +127,16 @@ export declare class ManifestCollector {
|
|
|
109
127
|
entry: string | undefined;
|
|
110
128
|
private jsAssets;
|
|
111
129
|
private cssAssets;
|
|
130
|
+
private pageAssets;
|
|
112
131
|
addServerFn(id: string, meta: ServerFnEntry): void;
|
|
113
132
|
addRoutes(entries: ExtractedRoute[]): void;
|
|
114
133
|
setAssets(js: string[], css: string[]): void;
|
|
134
|
+
/** Set per-page assets for MPA mode. */
|
|
135
|
+
setPageAssets(pageName: string, js: string[], css: string[]): void;
|
|
115
136
|
getJsAssets(): string[];
|
|
116
137
|
getCssAssets(): string[];
|
|
138
|
+
/** Whether page-level assets have been collected (MPA mode). */
|
|
139
|
+
hasMpaAssets(): boolean;
|
|
117
140
|
getServerManifest(): ServerManifest;
|
|
118
141
|
getClientManifest(assetPrefix?: string): ClientManifest;
|
|
119
142
|
}
|
package/esm/index.js
CHANGED
|
@@ -94,7 +94,7 @@ function joinPaths(parent, child) {
|
|
|
94
94
|
* throughout the compilation lifecycle, then produces the final manifests.
|
|
95
95
|
*
|
|
96
96
|
* This class is bundler-agnostic — it is used by bundler adapters
|
|
97
|
-
* (e.g. `@evjs/bundler-
|
|
97
|
+
* (e.g. `@evjs/bundler-utoopack`) to accumulate build metadata.
|
|
98
98
|
*/
|
|
99
99
|
export class ManifestCollector {
|
|
100
100
|
fns = {};
|
|
@@ -102,6 +102,7 @@ export class ManifestCollector {
|
|
|
102
102
|
entry = undefined;
|
|
103
103
|
jsAssets = [];
|
|
104
104
|
cssAssets = [];
|
|
105
|
+
pageAssets = {};
|
|
105
106
|
addServerFn(id, meta) {
|
|
106
107
|
this.fns[id] = meta;
|
|
107
108
|
}
|
|
@@ -112,12 +113,20 @@ export class ManifestCollector {
|
|
|
112
113
|
this.jsAssets = js;
|
|
113
114
|
this.cssAssets = css;
|
|
114
115
|
}
|
|
116
|
+
/** Set per-page assets for MPA mode. */
|
|
117
|
+
setPageAssets(pageName, js, css) {
|
|
118
|
+
this.pageAssets[pageName] = { js, css };
|
|
119
|
+
}
|
|
115
120
|
getJsAssets() {
|
|
116
121
|
return this.jsAssets;
|
|
117
122
|
}
|
|
118
123
|
getCssAssets() {
|
|
119
124
|
return this.cssAssets;
|
|
120
125
|
}
|
|
126
|
+
/** Whether page-level assets have been collected (MPA mode). */
|
|
127
|
+
hasMpaAssets() {
|
|
128
|
+
return Object.keys(this.pageAssets).length > 0;
|
|
129
|
+
}
|
|
121
130
|
getServerManifest() {
|
|
122
131
|
return {
|
|
123
132
|
version: 1,
|
|
@@ -126,11 +135,28 @@ export class ManifestCollector {
|
|
|
126
135
|
};
|
|
127
136
|
}
|
|
128
137
|
getClientManifest(assetPrefix) {
|
|
138
|
+
const prefix = assetPrefix && assetPrefix !== "/" ? assetPrefix : undefined;
|
|
139
|
+
const routes = resolveRoutes(this.routes);
|
|
140
|
+
// MPA mode: emit per-page assets
|
|
141
|
+
if (this.hasMpaAssets()) {
|
|
142
|
+
const pages = {};
|
|
143
|
+
for (const [name, { js, css }] of Object.entries(this.pageAssets)) {
|
|
144
|
+
pages[name] = { assets: { js, css }, routes };
|
|
145
|
+
}
|
|
146
|
+
return {
|
|
147
|
+
version: 1,
|
|
148
|
+
assetPrefix: prefix,
|
|
149
|
+
assets: { js: [], css: [] },
|
|
150
|
+
routes,
|
|
151
|
+
pages,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// SPA mode
|
|
129
155
|
return {
|
|
130
156
|
version: 1,
|
|
131
|
-
assetPrefix:
|
|
157
|
+
assetPrefix: prefix,
|
|
132
158
|
assets: { js: this.jsAssets, css: this.cssAssets },
|
|
133
|
-
routes
|
|
159
|
+
routes,
|
|
134
160
|
};
|
|
135
161
|
}
|
|
136
162
|
}
|