@zappdev/vite 0.5.0-alpha.4 → 0.6.0-alpha.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/dist/index.js +26 -28
- package/package.json +1 -1
- package/src/index.ts +38 -38
package/dist/index.js
CHANGED
|
@@ -73,15 +73,33 @@ async function bundleWorker(entry, outDir, aliases) {
|
|
|
73
73
|
return false;
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
|
+
function resolveHeadlessEntries(root, headless) {
|
|
77
|
+
if (!headless)
|
|
78
|
+
return [];
|
|
79
|
+
const entries = [];
|
|
80
|
+
for (const [id, srcPath] of Object.entries(headless)) {
|
|
81
|
+
const abs = path.resolve(root, srcPath);
|
|
82
|
+
if (!existsSync(abs)) {
|
|
83
|
+
console.warn(`[zapp] headless worker "${id}" not found at ${srcPath}`);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
entries.push({
|
|
87
|
+
specifier: srcPath,
|
|
88
|
+
sourcePath: abs,
|
|
89
|
+
outputName: `_headless_${id}.mjs`,
|
|
90
|
+
outputUrl: `/_workers/_headless_${id}.mjs`
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return entries;
|
|
94
|
+
}
|
|
76
95
|
function zappWorkers(options) {
|
|
77
96
|
let root = "";
|
|
78
97
|
let srcDir = "";
|
|
79
98
|
let workers = [];
|
|
80
|
-
let
|
|
99
|
+
let headlessEntries = [];
|
|
81
100
|
let aliases = {};
|
|
82
101
|
let isDev = false;
|
|
83
102
|
let outDir = "";
|
|
84
|
-
let backendFromConfig = options?.backend;
|
|
85
103
|
return {
|
|
86
104
|
name: "zapp-workers",
|
|
87
105
|
enforce: "pre",
|
|
@@ -97,20 +115,12 @@ function zappWorkers(options) {
|
|
|
97
115
|
},
|
|
98
116
|
async buildStart() {
|
|
99
117
|
workers = await discoverWorkers(srcDir);
|
|
100
|
-
|
|
101
|
-
if (existsSync(backendSrc)) {
|
|
102
|
-
backendEntry = {
|
|
103
|
-
specifier: path.relative(srcDir, backendSrc),
|
|
104
|
-
sourcePath: backendSrc,
|
|
105
|
-
outputName: "backend.mjs",
|
|
106
|
-
outputUrl: "/_workers/backend.mjs"
|
|
107
|
-
};
|
|
108
|
-
}
|
|
118
|
+
headlessEntries = resolveHeadlessEntries(root, options?.headless);
|
|
109
119
|
if (workers.length > 0) {
|
|
110
120
|
console.log(`[zapp] discovered ${workers.length} worker(s)`);
|
|
111
121
|
}
|
|
112
|
-
|
|
113
|
-
console.log(`[zapp]
|
|
122
|
+
for (const entry of headlessEntries) {
|
|
123
|
+
console.log(`[zapp] headless worker: ${path.relative(root, entry.sourcePath)}`);
|
|
114
124
|
}
|
|
115
125
|
},
|
|
116
126
|
transform(code, id) {
|
|
@@ -135,18 +145,8 @@ function zappWorkers(options) {
|
|
|
135
145
|
const devOutDir = path.join(root, ".zapp", "workers");
|
|
136
146
|
await mkdir(devOutDir, { recursive: true });
|
|
137
147
|
workers = await discoverWorkers(srcDir);
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
backendEntry = {
|
|
141
|
-
specifier: path.relative(srcDir, backendSrc),
|
|
142
|
-
sourcePath: backendSrc,
|
|
143
|
-
outputName: "backend.mjs",
|
|
144
|
-
outputUrl: "/_workers/backend.mjs"
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
const allEntries = [...workers];
|
|
148
|
-
if (backendEntry)
|
|
149
|
-
allEntries.push(backendEntry);
|
|
148
|
+
headlessEntries = resolveHeadlessEntries(root, options?.headless);
|
|
149
|
+
const allEntries = [...workers, ...headlessEntries];
|
|
150
150
|
for (const entry of allEntries) {
|
|
151
151
|
const ok = await bundleWorker(entry, devOutDir, aliases);
|
|
152
152
|
if (ok)
|
|
@@ -171,9 +171,7 @@ function zappWorkers(options) {
|
|
|
171
171
|
if (isDev)
|
|
172
172
|
return;
|
|
173
173
|
await mkdir(outDir, { recursive: true });
|
|
174
|
-
const allEntries = [...workers];
|
|
175
|
-
if (backendEntry)
|
|
176
|
-
allEntries.push(backendEntry);
|
|
174
|
+
const allEntries = [...workers, ...headlessEntries];
|
|
177
175
|
for (const entry of allEntries) {
|
|
178
176
|
const ok = await bundleWorker(entry, outDir, aliases);
|
|
179
177
|
if (ok) {
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
|
@@ -105,19 +105,41 @@ async function bundleWorker(entry: WorkerEntry, outDir: string, aliases: Record<
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
interface ZappWorkersOptions {
|
|
108
|
-
/**
|
|
109
|
-
|
|
108
|
+
/**
|
|
109
|
+
* Headless workers to bundle, keyed by ID. Values are source paths relative
|
|
110
|
+
* to project root. Output URL is `/_workers/_headless_<id>.mjs` — the native
|
|
111
|
+
* runtime loads these at app startup via generated Zen-C code.
|
|
112
|
+
*/
|
|
113
|
+
headless?: Record<string, string>;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function resolveHeadlessEntries(root: string, headless?: Record<string, string>): WorkerEntry[] {
|
|
117
|
+
if (!headless) return [];
|
|
118
|
+
const entries: WorkerEntry[] = [];
|
|
119
|
+
for (const [id, srcPath] of Object.entries(headless)) {
|
|
120
|
+
const abs = path.resolve(root, srcPath);
|
|
121
|
+
if (!existsSync(abs)) {
|
|
122
|
+
console.warn(`[zapp] headless worker "${id}" not found at ${srcPath}`);
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
entries.push({
|
|
126
|
+
specifier: srcPath,
|
|
127
|
+
sourcePath: abs,
|
|
128
|
+
outputName: `_headless_${id}.mjs`,
|
|
129
|
+
outputUrl: `/_workers/_headless_${id}.mjs`,
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return entries;
|
|
110
133
|
}
|
|
111
134
|
|
|
112
135
|
export function zappWorkers(options?: ZappWorkersOptions): Plugin {
|
|
113
136
|
let root = "";
|
|
114
137
|
let srcDir = "";
|
|
115
138
|
let workers: WorkerEntry[] = [];
|
|
116
|
-
let
|
|
139
|
+
let headlessEntries: WorkerEntry[] = [];
|
|
117
140
|
let aliases: Record<string, string> = {};
|
|
118
141
|
let isDev = false;
|
|
119
142
|
let outDir = "";
|
|
120
|
-
let backendFromConfig = options?.backend;
|
|
121
143
|
|
|
122
144
|
return {
|
|
123
145
|
name: "zapp-workers",
|
|
@@ -137,27 +159,17 @@ export function zappWorkers(options?: ZappWorkersOptions): Plugin {
|
|
|
137
159
|
},
|
|
138
160
|
|
|
139
161
|
async buildStart() {
|
|
140
|
-
//
|
|
162
|
+
// Webview-spawned workers: discovered by scanning source.
|
|
141
163
|
workers = await discoverWorkers(srcDir);
|
|
142
164
|
|
|
143
|
-
//
|
|
144
|
-
|
|
145
|
-
? path.resolve(root, backendFromConfig)
|
|
146
|
-
: path.join(srcDir, "backend.ts");
|
|
147
|
-
if (existsSync(backendSrc)) {
|
|
148
|
-
backendEntry = {
|
|
149
|
-
specifier: path.relative(srcDir, backendSrc),
|
|
150
|
-
sourcePath: backendSrc,
|
|
151
|
-
outputName: "backend.mjs",
|
|
152
|
-
outputUrl: "/_workers/backend.mjs",
|
|
153
|
-
};
|
|
154
|
-
}
|
|
165
|
+
// Headless workers: declared in zapp.config.ts.
|
|
166
|
+
headlessEntries = resolveHeadlessEntries(root, options?.headless);
|
|
155
167
|
|
|
156
168
|
if (workers.length > 0) {
|
|
157
169
|
console.log(`[zapp] discovered ${workers.length} worker(s)`);
|
|
158
170
|
}
|
|
159
|
-
|
|
160
|
-
console.log(`[zapp]
|
|
171
|
+
for (const entry of headlessEntries) {
|
|
172
|
+
console.log(`[zapp] headless worker: ${path.relative(root, entry.sourcePath)}`);
|
|
161
173
|
}
|
|
162
174
|
},
|
|
163
175
|
|
|
@@ -184,9 +196,10 @@ export function zappWorkers(options?: ZappWorkersOptions): Plugin {
|
|
|
184
196
|
},
|
|
185
197
|
|
|
186
198
|
// Dev: bundle workers eagerly so they exist on disk before the native
|
|
187
|
-
// binary launches.
|
|
188
|
-
//
|
|
189
|
-
// bundle
|
|
199
|
+
// binary launches. Headless workers are loaded directly by native code
|
|
200
|
+
// via the generated .zapp/zapp_headless_workers.zc, so a lazy-on-request
|
|
201
|
+
// middleware would never bundle them. Eager bundling also lets native
|
|
202
|
+
// fall back to filesystem.
|
|
190
203
|
//
|
|
191
204
|
// configureServer runs before buildStart, so we re-discover workers here
|
|
192
205
|
// (buildStart's results aren't yet available).
|
|
@@ -195,21 +208,9 @@ export function zappWorkers(options?: ZappWorkersOptions): Plugin {
|
|
|
195
208
|
await mkdir(devOutDir, { recursive: true });
|
|
196
209
|
|
|
197
210
|
workers = await discoverWorkers(srcDir);
|
|
198
|
-
|
|
199
|
-
? path.resolve(root, backendFromConfig)
|
|
200
|
-
: path.join(srcDir, "backend.ts");
|
|
201
|
-
if (existsSync(backendSrc)) {
|
|
202
|
-
backendEntry = {
|
|
203
|
-
specifier: path.relative(srcDir, backendSrc),
|
|
204
|
-
sourcePath: backendSrc,
|
|
205
|
-
outputName: "backend.mjs",
|
|
206
|
-
outputUrl: "/_workers/backend.mjs",
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
const allEntries = [...workers];
|
|
211
|
-
if (backendEntry) allEntries.push(backendEntry);
|
|
211
|
+
headlessEntries = resolveHeadlessEntries(root, options?.headless);
|
|
212
212
|
|
|
213
|
+
const allEntries = [...workers, ...headlessEntries];
|
|
213
214
|
for (const entry of allEntries) {
|
|
214
215
|
const ok = await bundleWorker(entry, devOutDir, aliases);
|
|
215
216
|
if (ok) console.log(`[zapp] dev-bundled worker: ${entry.outputName}`);
|
|
@@ -240,8 +241,7 @@ export function zappWorkers(options?: ZappWorkersOptions): Plugin {
|
|
|
240
241
|
|
|
241
242
|
await mkdir(outDir, { recursive: true });
|
|
242
243
|
|
|
243
|
-
const allEntries = [...workers];
|
|
244
|
-
if (backendEntry) allEntries.push(backendEntry);
|
|
244
|
+
const allEntries = [...workers, ...headlessEntries];
|
|
245
245
|
|
|
246
246
|
for (const entry of allEntries) {
|
|
247
247
|
const ok = await bundleWorker(entry, outDir, aliases);
|