vite-node 3.0.9 → 3.1.0-beta.2
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/chunk-hmr.cjs +193 -231
- package/dist/chunk-hmr.mjs +193 -231
- package/dist/cli.cjs +100 -113
- package/dist/cli.mjs +100 -113
- package/dist/client.cjs +387 -468
- package/dist/client.mjs +387 -468
- package/dist/constants.cjs +27 -33
- package/dist/constants.mjs +27 -33
- package/dist/server.cjs +354 -516
- package/dist/server.mjs +354 -516
- package/dist/source-map.cjs +258 -341
- package/dist/source-map.mjs +258 -341
- package/dist/utils.cjs +137 -152
- package/dist/utils.mjs +137 -152
- package/package.json +1 -1
package/dist/chunk-hmr.cjs
CHANGED
|
@@ -6,259 +6,221 @@ var browser = require('./chunk-browser.cjs');
|
|
|
6
6
|
var utils = require('./utils.cjs');
|
|
7
7
|
|
|
8
8
|
function createHmrEmitter() {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
const emitter = new node_events.EventEmitter();
|
|
10
|
+
return emitter;
|
|
11
11
|
}
|
|
12
12
|
function viteNodeHmrPlugin() {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
};
|
|
13
|
+
const emitter = createHmrEmitter();
|
|
14
|
+
return {
|
|
15
|
+
name: "vite-node:hmr",
|
|
16
|
+
config() {
|
|
17
|
+
if (process.platform === "darwin" && false);
|
|
18
|
+
},
|
|
19
|
+
configureServer(server) {
|
|
20
|
+
const _send = server.ws.send;
|
|
21
|
+
server.emitter = emitter;
|
|
22
|
+
server.ws.send = function(payload) {
|
|
23
|
+
_send(payload);
|
|
24
|
+
emitter.emit("message", payload);
|
|
25
|
+
};
|
|
26
|
+
const environments = server.environments;
|
|
27
|
+
if (environments) environments.ssr.hot.send = function(payload) {
|
|
28
|
+
_send(payload);
|
|
29
|
+
emitter.emit("message", payload);
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
};
|
|
35
33
|
}
|
|
36
34
|
|
|
37
35
|
const debugHmr = createDebug("vite-node:hmr");
|
|
38
|
-
const cache =
|
|
36
|
+
const cache = new WeakMap();
|
|
39
37
|
function getCache(runner) {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
return cache.get(runner);
|
|
38
|
+
if (!cache.has(runner)) cache.set(runner, {
|
|
39
|
+
hotModulesMap: new Map(),
|
|
40
|
+
dataMap: new Map(),
|
|
41
|
+
disposeMap: new Map(),
|
|
42
|
+
pruneMap: new Map(),
|
|
43
|
+
customListenersMap: new Map(),
|
|
44
|
+
ctxToListenersMap: new Map(),
|
|
45
|
+
messageBuffer: [],
|
|
46
|
+
isFirstUpdate: false,
|
|
47
|
+
pending: false,
|
|
48
|
+
queued: []
|
|
49
|
+
});
|
|
50
|
+
return cache.get(runner);
|
|
55
51
|
}
|
|
56
52
|
function sendMessageBuffer(runner, emitter) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
const maps = getCache(runner);
|
|
54
|
+
maps.messageBuffer.forEach((msg) => emitter.emit("custom", msg));
|
|
55
|
+
maps.messageBuffer.length = 0;
|
|
60
56
|
}
|
|
61
57
|
async function reload(runner, files) {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
});
|
|
67
|
-
return Promise.all(files.map((file) => runner.executeId(file)));
|
|
58
|
+
Array.from(runner.moduleCache.keys()).forEach((fsPath) => {
|
|
59
|
+
if (!fsPath.includes("node_modules")) runner.moduleCache.delete(fsPath);
|
|
60
|
+
});
|
|
61
|
+
return Promise.all(files.map((file) => runner.executeId(file)));
|
|
68
62
|
}
|
|
69
63
|
async function notifyListeners(runner, event, data) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
await Promise.all(cbs.map((cb) => cb(data)));
|
|
74
|
-
}
|
|
64
|
+
const maps = getCache(runner);
|
|
65
|
+
const cbs = maps.customListenersMap.get(event);
|
|
66
|
+
if (cbs) await Promise.all(cbs.map((cb) => cb(data)));
|
|
75
67
|
}
|
|
76
68
|
async function queueUpdate(runner, p) {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
69
|
+
const maps = getCache(runner);
|
|
70
|
+
maps.queued.push(p);
|
|
71
|
+
if (!maps.pending) {
|
|
72
|
+
maps.pending = true;
|
|
73
|
+
await Promise.resolve();
|
|
74
|
+
maps.pending = false;
|
|
75
|
+
const loading = [...maps.queued];
|
|
76
|
+
maps.queued = [];
|
|
77
|
+
(await Promise.all(loading)).forEach((fn) => fn && fn());
|
|
78
|
+
}
|
|
87
79
|
}
|
|
88
80
|
async function fetchUpdate(runner, { path, acceptedPath }) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
112
|
-
return () => {
|
|
113
|
-
for (const { deps, fn } of qualifiedCallbacks) {
|
|
114
|
-
fn(deps.map((dep) => dep === acceptedPath ? fetchedModule : void 0));
|
|
115
|
-
}
|
|
116
|
-
const loggedPath = isSelfUpdate ? path : `${acceptedPath} via ${path}`;
|
|
117
|
-
console.log(`${browser.s.cyan("[vite-node]")} hot updated: ${loggedPath}`);
|
|
118
|
-
};
|
|
81
|
+
path = utils.normalizeRequestId(path);
|
|
82
|
+
acceptedPath = utils.normalizeRequestId(acceptedPath);
|
|
83
|
+
const maps = getCache(runner);
|
|
84
|
+
const mod = maps.hotModulesMap.get(path);
|
|
85
|
+
if (!mod) return;
|
|
86
|
+
const isSelfUpdate = path === acceptedPath;
|
|
87
|
+
let fetchedModule;
|
|
88
|
+
const qualifiedCallbacks = mod.callbacks.filter(({ deps }) => deps.includes(acceptedPath));
|
|
89
|
+
if (isSelfUpdate || qualifiedCallbacks.length > 0) {
|
|
90
|
+
const disposer = maps.disposeMap.get(acceptedPath);
|
|
91
|
+
if (disposer) await disposer(maps.dataMap.get(acceptedPath));
|
|
92
|
+
try {
|
|
93
|
+
[fetchedModule] = await reload(runner, [acceptedPath]);
|
|
94
|
+
} catch (e) {
|
|
95
|
+
warnFailedFetch(e, acceptedPath);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return () => {
|
|
99
|
+
for (const { deps, fn } of qualifiedCallbacks) fn(deps.map((dep) => dep === acceptedPath ? fetchedModule : void 0));
|
|
100
|
+
const loggedPath = isSelfUpdate ? path : `${acceptedPath} via ${path}`;
|
|
101
|
+
console.log(`${browser.s.cyan("[vite-node]")} hot updated: ${loggedPath}`);
|
|
102
|
+
};
|
|
119
103
|
}
|
|
120
104
|
function warnFailedFetch(err, path) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
}
|
|
124
|
-
console.error(
|
|
125
|
-
`[hmr] Failed to reload ${path}. This could be due to syntax errors or importing non-existent modules. (see errors above)`
|
|
126
|
-
);
|
|
105
|
+
if (!(err instanceof Error) || !err.message.match("fetch")) console.error(err);
|
|
106
|
+
console.error(`[hmr] Failed to reload ${path}. This could be due to syntax errors or importing non-existent modules. (see errors above)`);
|
|
127
107
|
}
|
|
128
108
|
async function handleMessage(runner, emitter, files, payload) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
await notifyListeners(runner, "vite:error", payload);
|
|
166
|
-
const err = payload.err;
|
|
167
|
-
console.error(
|
|
168
|
-
`${browser.s.cyan("[vite-node]")} Internal Server Error
|
|
169
|
-
${err.message}
|
|
170
|
-
${err.stack}`
|
|
171
|
-
);
|
|
172
|
-
break;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
109
|
+
const maps = getCache(runner);
|
|
110
|
+
switch (payload.type) {
|
|
111
|
+
case "connected":
|
|
112
|
+
sendMessageBuffer(runner, emitter);
|
|
113
|
+
break;
|
|
114
|
+
case "update":
|
|
115
|
+
await notifyListeners(runner, "vite:beforeUpdate", payload);
|
|
116
|
+
await Promise.all(payload.updates.map((update) => {
|
|
117
|
+
if (update.type === "js-update") return queueUpdate(runner, fetchUpdate(runner, update));
|
|
118
|
+
console.error(`${browser.s.cyan("[vite-node]")} no support css hmr.}`);
|
|
119
|
+
return null;
|
|
120
|
+
}));
|
|
121
|
+
await notifyListeners(runner, "vite:afterUpdate", payload);
|
|
122
|
+
break;
|
|
123
|
+
case "full-reload":
|
|
124
|
+
await notifyListeners(runner, "vite:beforeFullReload", payload);
|
|
125
|
+
maps.customListenersMap.delete("vite:beforeFullReload");
|
|
126
|
+
await reload(runner, files);
|
|
127
|
+
break;
|
|
128
|
+
case "custom":
|
|
129
|
+
await notifyListeners(runner, payload.event, payload.data);
|
|
130
|
+
break;
|
|
131
|
+
case "prune":
|
|
132
|
+
await notifyListeners(runner, "vite:beforePrune", payload);
|
|
133
|
+
payload.paths.forEach((path) => {
|
|
134
|
+
const fn = maps.pruneMap.get(path);
|
|
135
|
+
if (fn) fn(maps.dataMap.get(path));
|
|
136
|
+
});
|
|
137
|
+
break;
|
|
138
|
+
case "error": {
|
|
139
|
+
await notifyListeners(runner, "vite:error", payload);
|
|
140
|
+
const err = payload.err;
|
|
141
|
+
console.error(`${browser.s.cyan("[vite-node]")} Internal Server Error\n${err.message}\n${err.stack}`);
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
175
145
|
}
|
|
176
146
|
function createHotContext(runner, emitter, files, ownerPath) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
removeFromMap(newListeners);
|
|
255
|
-
},
|
|
256
|
-
send(event, data) {
|
|
257
|
-
maps.messageBuffer.push(JSON.stringify({ type: "custom", event, data }));
|
|
258
|
-
sendMessageBuffer(runner, emitter);
|
|
259
|
-
}
|
|
260
|
-
};
|
|
261
|
-
return hot;
|
|
147
|
+
debugHmr("createHotContext", ownerPath);
|
|
148
|
+
const maps = getCache(runner);
|
|
149
|
+
if (!maps.dataMap.has(ownerPath)) maps.dataMap.set(ownerPath, {});
|
|
150
|
+
const mod = maps.hotModulesMap.get(ownerPath);
|
|
151
|
+
if (mod) mod.callbacks = [];
|
|
152
|
+
const newListeners = new Map();
|
|
153
|
+
maps.ctxToListenersMap.set(ownerPath, newListeners);
|
|
154
|
+
function acceptDeps(deps, callback = () => {}) {
|
|
155
|
+
const mod = maps.hotModulesMap.get(ownerPath) || {
|
|
156
|
+
id: ownerPath,
|
|
157
|
+
callbacks: []
|
|
158
|
+
};
|
|
159
|
+
mod.callbacks.push({
|
|
160
|
+
deps,
|
|
161
|
+
fn: callback
|
|
162
|
+
});
|
|
163
|
+
maps.hotModulesMap.set(ownerPath, mod);
|
|
164
|
+
}
|
|
165
|
+
const hot = {
|
|
166
|
+
get data() {
|
|
167
|
+
return maps.dataMap.get(ownerPath);
|
|
168
|
+
},
|
|
169
|
+
acceptExports(_, callback) {
|
|
170
|
+
acceptDeps([ownerPath], callback && (([mod]) => callback(mod)));
|
|
171
|
+
},
|
|
172
|
+
accept(deps, callback) {
|
|
173
|
+
if (typeof deps === "function" || !deps) acceptDeps([ownerPath], ([mod]) => deps && deps(mod));
|
|
174
|
+
else if (typeof deps === "string") acceptDeps([deps], ([mod]) => callback && callback(mod));
|
|
175
|
+
else if (Array.isArray(deps)) acceptDeps(deps, callback);
|
|
176
|
+
else throw new TypeError("invalid hot.accept() usage.");
|
|
177
|
+
},
|
|
178
|
+
dispose(cb) {
|
|
179
|
+
maps.disposeMap.set(ownerPath, cb);
|
|
180
|
+
},
|
|
181
|
+
prune(cb) {
|
|
182
|
+
maps.pruneMap.set(ownerPath, cb);
|
|
183
|
+
},
|
|
184
|
+
invalidate() {
|
|
185
|
+
notifyListeners(runner, "vite:invalidate", {
|
|
186
|
+
path: ownerPath,
|
|
187
|
+
message: void 0
|
|
188
|
+
});
|
|
189
|
+
return reload(runner, files);
|
|
190
|
+
},
|
|
191
|
+
on(event, cb) {
|
|
192
|
+
const addToMap = (map) => {
|
|
193
|
+
const existing = map.get(event) || [];
|
|
194
|
+
existing.push(cb);
|
|
195
|
+
map.set(event, existing);
|
|
196
|
+
};
|
|
197
|
+
addToMap(maps.customListenersMap);
|
|
198
|
+
addToMap(newListeners);
|
|
199
|
+
},
|
|
200
|
+
off(event, cb) {
|
|
201
|
+
const removeFromMap = (map) => {
|
|
202
|
+
const existing = map.get(event);
|
|
203
|
+
if (existing === void 0) return;
|
|
204
|
+
const pruned = existing.filter((l) => l !== cb);
|
|
205
|
+
if (pruned.length === 0) {
|
|
206
|
+
map.delete(event);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
map.set(event, pruned);
|
|
210
|
+
};
|
|
211
|
+
removeFromMap(maps.customListenersMap);
|
|
212
|
+
removeFromMap(newListeners);
|
|
213
|
+
},
|
|
214
|
+
send(event, data) {
|
|
215
|
+
maps.messageBuffer.push(JSON.stringify({
|
|
216
|
+
type: "custom",
|
|
217
|
+
event,
|
|
218
|
+
data
|
|
219
|
+
}));
|
|
220
|
+
sendMessageBuffer(runner, emitter);
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
return hot;
|
|
262
224
|
}
|
|
263
225
|
|
|
264
226
|
exports.createHmrEmitter = createHmrEmitter;
|