@evjs/manifest 0.0.26 → 0.0.28

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 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-webpack` and consumed by `@evjs/client` and `@evjs/server`. Two separate manifests are emitted during the build:
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
- /** Webpack module identifier (hash-based, no source paths exposed). */
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
- /** Webpack module ID. */
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-webpack`) to accumulate build metadata.
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-webpack`) to accumulate build metadata.
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: assetPrefix && assetPrefix !== "/" ? assetPrefix : undefined,
157
+ assetPrefix: prefix,
132
158
  assets: { js: this.jsAssets, css: this.cssAssets },
133
- routes: resolveRoutes(this.routes),
159
+ routes,
134
160
  };
135
161
  }
136
162
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evjs/manifest",
3
- "version": "0.0.26",
3
+ "version": "0.0.28",
4
4
  "description": "Shared manifest types for the ev framework",
5
5
  "type": "module",
6
6
  "publishConfig": {