@vitejs/devtools 0.0.0-alpha.20 → 0.0.0-alpha.21

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.
@@ -1,1570 +0,0 @@
1
- import { n as dirDist, t as dirClientStandalone } from "./dirs-C0s1Ghvy.js";
2
- import Debug from "debug";
3
- import { debounce } from "perfect-debounce";
4
- import { toDataURL } from "mlly";
5
- import { createEventEmitter } from "@vitejs/devtools-kit/utils/events";
6
- import { RpcFunctionsCollectorBase } from "birpc-x";
7
- import process$1 from "node:process";
8
- import { existsSync } from "node:fs";
9
- import sirv from "sirv";
10
- import { defineRpcFunction } from "@vitejs/devtools-kit";
11
- import { join } from "node:path";
12
- import { normalizePath } from "vite";
13
- import { createRpcServer } from "@vitejs/devtools-rpc";
14
- import { createWsRpcPreset } from "@vitejs/devtools-rpc/presets/ws/server";
15
- import { createServer } from "node:net";
16
- import { networkInterfaces } from "node:os";
17
- import "node:fs/promises";
18
-
19
- //#region rolldown:runtime
20
- var __create = Object.create;
21
- var __defProp = Object.defineProperty;
22
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
23
- var __getOwnPropNames = Object.getOwnPropertyNames;
24
- var __getProtoOf = Object.getPrototypeOf;
25
- var __hasOwnProp = Object.prototype.hasOwnProperty;
26
- var __commonJSMin = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);
27
- var __copyProps = (to, from, except, desc) => {
28
- if (from && typeof from === "object" || typeof from === "function") {
29
- for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
30
- key = keys[i];
31
- if (!__hasOwnProp.call(to, key) && key !== except) {
32
- __defProp(to, key, {
33
- get: ((k) => from[k]).bind(null, key),
34
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
35
- });
36
- }
37
- }
38
- }
39
- return to;
40
- };
41
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
42
- value: mod,
43
- enumerable: true
44
- }) : target, mod));
45
-
46
- //#endregion
47
- //#region src/node/context-utils.ts
48
- const ContextUtils = { createSimpleClientScript(fn) {
49
- return {
50
- importFrom: toDataURL(`const fn = ${fn.toString()}; export default fn`),
51
- importName: "default"
52
- };
53
- } };
54
-
55
- //#endregion
56
- //#region src/node/host-docks.ts
57
- var DevToolsDockHost = class {
58
- views = /* @__PURE__ */ new Map();
59
- events = createEventEmitter();
60
- constructor(context) {
61
- this.context = context;
62
- }
63
- values() {
64
- return Array.from(this.views.values());
65
- }
66
- register(view, force) {
67
- if (this.views.has(view.id) && !force) throw new Error(`Dock with id "${view.id}" is already registered`);
68
- this.views.set(view.id, view);
69
- this.events.emit("dock:entry:updated", view);
70
- return { update: (patch) => {
71
- if (patch.id && patch.id !== view.id) throw new Error(`Cannot change the id of a dock. Use register() to add new docks.`);
72
- this.update(Object.assign(this.views.get(view.id), patch));
73
- } };
74
- }
75
- update(view) {
76
- if (!this.views.has(view.id)) throw new Error(`Dock with id "${view.id}" is not registered. Use register() to add new docks.`);
77
- this.views.set(view.id, view);
78
- this.events.emit("dock:entry:updated", view);
79
- }
80
- };
81
-
82
- //#endregion
83
- //#region src/node/host-functions.ts
84
- var RpcFunctionsHost = class extends RpcFunctionsCollectorBase {
85
- /**
86
- * @internal
87
- */
88
- rpcGroup = void 0;
89
- constructor(context) {
90
- super(context);
91
- }
92
- boardcast(name, ...args) {
93
- if (!this.rpcGroup) throw new Error("RpcFunctionsHost.rpcGroup is not set, it likely to be an internal bug of Vite DevTools");
94
- return this.rpcGroup.broadcast.$callOptional(name, ...args);
95
- }
96
- };
97
-
98
- //#endregion
99
- //#region src/node/host-terminals.ts
100
- var DevToolsTerminalHost = class {
101
- sessions = /* @__PURE__ */ new Map();
102
- events = createEventEmitter();
103
- _boundStreams = /* @__PURE__ */ new Map();
104
- constructor(context) {
105
- this.context = context;
106
- }
107
- register(session) {
108
- if (this.sessions.has(session.id)) throw new Error(`Terminal session with id "${session.id}" already registered`);
109
- this.sessions.set(session.id, session);
110
- this.bindStream(session);
111
- this.events.emit("terminal:session:updated", session);
112
- return session;
113
- }
114
- update(patch) {
115
- if (!this.sessions.has(patch.id)) throw new Error(`Terminal session with id "${patch.id}" not registered`);
116
- const session = this.sessions.get(patch.id);
117
- Object.assign(session, patch);
118
- this.sessions.set(patch.id, session);
119
- this.bindStream(session);
120
- this.events.emit("terminal:session:updated", session);
121
- }
122
- remove(session) {
123
- this.sessions.delete(session.id);
124
- this.events.emit("terminal:session:updated", session);
125
- this._boundStreams.delete(session.id);
126
- }
127
- bindStream(session) {
128
- if (this._boundStreams.has(session.id) && this._boundStreams.get(session.id)?.stream === session.stream) return;
129
- this._boundStreams.get(session.id)?.dispose();
130
- this._boundStreams.delete(session.id);
131
- if (!session.stream) return;
132
- session.buffer ||= [];
133
- const events = this.events;
134
- const writer = new WritableStream({ write(chunk) {
135
- session.buffer.push(chunk);
136
- events.emit("terminal:session:stream-chunk", {
137
- id: session.id,
138
- chunks: [chunk],
139
- ts: Date.now()
140
- });
141
- } });
142
- session.stream.pipeTo(writer);
143
- this._boundStreams.set(session.id, {
144
- dispose: () => {
145
- writer.close();
146
- },
147
- stream: session.stream
148
- });
149
- }
150
- async startChildProcess(executeOptions, terminal) {
151
- if (this.sessions.has(terminal.id)) throw new Error(`Terminal session with id "${terminal.id}" already registered`);
152
- const { exec } = await import("tinyexec");
153
- let controller;
154
- const stream = new ReadableStream({ start(_controller) {
155
- controller = _controller;
156
- } });
157
- function createChildProcess() {
158
- const cp$1 = exec(executeOptions.command, executeOptions.args || [], { nodeOptions: {
159
- env: {
160
- COLORS: "true",
161
- FORCE_COLOR: "true",
162
- ...executeOptions.env || {}
163
- },
164
- cwd: executeOptions.cwd ?? process$1.cwd(),
165
- stdio: "pipe"
166
- } });
167
- (async () => {
168
- for await (const chunk of cp$1) controller?.enqueue(chunk);
169
- })();
170
- return cp$1;
171
- }
172
- let cp = createChildProcess();
173
- const restart = async () => {
174
- cp?.kill();
175
- cp = createChildProcess();
176
- };
177
- const terminate = async () => {
178
- cp?.kill();
179
- cp = void 0;
180
- };
181
- const session = {
182
- ...terminal,
183
- status: "running",
184
- stream,
185
- type: "child-process",
186
- executeOptions,
187
- getChildProcess: () => cp?.process,
188
- terminate,
189
- restart
190
- };
191
- this.register(session);
192
- return Promise.resolve(session);
193
- }
194
- };
195
-
196
- //#endregion
197
- //#region src/node/host-views.ts
198
- var DevToolsViewHost = class {
199
- /**
200
- * @internal
201
- */
202
- buildStaticDirs = [];
203
- constructor(context) {
204
- this.context = context;
205
- }
206
- hostStatic(baseUrl, distDir) {
207
- if (!existsSync(distDir)) throw new Error(`[Vite DevTools] distDir ${distDir} does not exist`);
208
- this.buildStaticDirs.push({
209
- baseUrl,
210
- distDir
211
- });
212
- if (this.context.viteConfig.command === "serve") {
213
- if (!this.context.viteServer) throw new Error("[Vite DevTools] viteServer is required in dev mode");
214
- this.context.viteServer.middlewares.use(baseUrl, sirv(distDir, {
215
- dev: true,
216
- single: true
217
- }));
218
- }
219
- }
220
- };
221
-
222
- //#endregion
223
- //#region src/node/rpc/internal/docks-list.ts
224
- const docksList = defineRpcFunction({
225
- name: "vite:internal:docks:list",
226
- type: "static",
227
- setup: (context) => {
228
- const builtinDocksEntries = [{
229
- type: "~builtin",
230
- id: "~terminals",
231
- title: "Terminals",
232
- icon: "ph:terminal-duotone",
233
- get isHidden() {
234
- return context.terminals.sessions.size === 0;
235
- }
236
- }];
237
- return { handler: () => [...Array.from(context.docks.values()), ...builtinDocksEntries] };
238
- }
239
- });
240
-
241
- //#endregion
242
- //#region src/node/rpc/internal/docks-on-launch.ts
243
- const docksOnLaunch = defineRpcFunction({
244
- name: "vite:internal:docks:on-launch",
245
- type: "action",
246
- setup: (context) => {
247
- const launchMap = /* @__PURE__ */ new Map();
248
- return { handler: async (entryId) => {
249
- if (launchMap.has(entryId)) return launchMap.get(entryId);
250
- const entry = context.docks.values().find((entry$1) => entry$1.id === entryId);
251
- if (!entry) throw new Error(`Dock entry with id "${entryId}" not found`);
252
- if (entry.type !== "launcher") throw new Error(`Dock entry with id "${entryId}" is not a launcher`);
253
- try {
254
- context.docks.update({
255
- ...entry,
256
- launcher: {
257
- ...entry.launcher,
258
- status: "loading"
259
- }
260
- });
261
- const promise = entry.launcher.onLaunch();
262
- launchMap.set(entryId, promise);
263
- const result = await promise;
264
- const newEntry = context.docks.values().find((entry$1) => entry$1.id === entryId) || entry;
265
- if (newEntry.type === "launcher") context.docks.update({
266
- ...newEntry,
267
- launcher: {
268
- ...newEntry.launcher,
269
- status: "success"
270
- }
271
- });
272
- return result;
273
- } catch (error) {
274
- console.error(`[VITE DEVTOOLS] Error launching dock entry "${entryId}"`, error);
275
- context.docks.update({
276
- ...entry,
277
- launcher: {
278
- ...entry.launcher,
279
- status: "error",
280
- error: error instanceof Error ? error.message : String(error)
281
- }
282
- });
283
- }
284
- } };
285
- }
286
- });
287
-
288
- //#endregion
289
- //#region src/node/rpc/internal/rpc-server-list.ts
290
- const rpcServerList = defineRpcFunction({
291
- name: "vite:internal:rpc:server:list",
292
- type: "static",
293
- setup: (context) => {
294
- return { async handler() {
295
- return Object.fromEntries(Array.from(context.rpc.definitions.entries()).map(([name, fn]) => [name, { type: fn.type }]));
296
- } };
297
- }
298
- });
299
-
300
- //#endregion
301
- //#region src/node/rpc/internal/terminals-list.ts
302
- const terminalsList = defineRpcFunction({
303
- name: "vite:internal:terminals:list",
304
- type: "static",
305
- setup: (context) => {
306
- return { async handler() {
307
- return Array.from(context.terminals.sessions.values()).map((i) => {
308
- return {
309
- id: i.id,
310
- title: i.title,
311
- description: i.description,
312
- status: i.status
313
- };
314
- });
315
- } };
316
- }
317
- });
318
-
319
- //#endregion
320
- //#region src/node/rpc/internal/terminals-read.ts
321
- const terminalsRead = defineRpcFunction({
322
- name: "vite:internal:terminals:read",
323
- type: "query",
324
- setup: (context) => {
325
- return { async handler(id) {
326
- const seesion = context.terminals.sessions.get(id);
327
- if (!seesion) throw new Error(`Terminal session with id "${id}" not found`);
328
- return {
329
- buffer: seesion.buffer ?? [],
330
- ts: Date.now()
331
- };
332
- } };
333
- }
334
- });
335
-
336
- //#endregion
337
- //#region src/node/rpc/public/open-in-editor.ts
338
- const openInEditor = defineRpcFunction({
339
- name: "vite:core:open-in-editor",
340
- type: "action",
341
- setup: () => {
342
- return { handler: async (path) => {
343
- await import("launch-editor").then((r$1) => r$1.default(path));
344
- } };
345
- }
346
- });
347
-
348
- //#endregion
349
- //#region src/node/rpc/public/open-in-finder.ts
350
- const openInFinder = defineRpcFunction({
351
- name: "vite:core:open-in-finder",
352
- type: "action",
353
- setup: () => {
354
- return { handler: async (path) => {
355
- await import("open").then((r$1) => r$1.default(path));
356
- } };
357
- }
358
- });
359
-
360
- //#endregion
361
- //#region src/node/rpc/index.ts
362
- const builtinPublicRpcDecalrations = [openInEditor, openInFinder];
363
- const builtinInternalRpcDecalrations = [
364
- docksList,
365
- docksOnLaunch,
366
- rpcServerList,
367
- terminalsList,
368
- terminalsRead
369
- ];
370
- const builtinRpcDecalrations = [...builtinPublicRpcDecalrations, ...builtinInternalRpcDecalrations];
371
-
372
- //#endregion
373
- //#region src/node/context.ts
374
- const debug = Debug("vite:devtools:context");
375
- async function createDevToolsContext(viteConfig, viteServer) {
376
- const context = {
377
- cwd: viteConfig.root,
378
- viteConfig,
379
- viteServer,
380
- mode: viteConfig.command === "serve" ? "dev" : "build",
381
- rpc: void 0,
382
- docks: void 0,
383
- views: void 0,
384
- utils: ContextUtils,
385
- terminals: void 0
386
- };
387
- const rpcHost = new RpcFunctionsHost(context);
388
- const docksHost = new DevToolsDockHost(context);
389
- const viewsHost = new DevToolsViewHost(context);
390
- const terminalsHost = new DevToolsTerminalHost(context);
391
- context.rpc = rpcHost;
392
- context.docks = docksHost;
393
- context.views = viewsHost;
394
- context.terminals = terminalsHost;
395
- for (const fn of builtinRpcDecalrations) rpcHost.register(fn);
396
- docksHost.events.on("dock:entry:updated", debounce(() => {
397
- rpcHost.boardcast("vite:internal:docks:updated");
398
- }, 10));
399
- terminalsHost.events.on("terminal:session:updated", debounce(() => {
400
- rpcHost.boardcast("vite:internal:terminals:updated");
401
- rpcHost.boardcast("vite:internal:docks:updated");
402
- }, 10));
403
- terminalsHost.events.on("terminal:session:stream-chunk", (data) => {
404
- rpcHost.boardcast("vite:internal:terminals:stream-chunk", data);
405
- });
406
- const plugins = viteConfig.plugins.filter((plugin) => "devtools" in plugin);
407
- for (const plugin of plugins) {
408
- if (!plugin.devtools?.setup) continue;
409
- try {
410
- debug(`Setting up plugin ${plugin.name}`);
411
- await plugin.devtools?.setup?.(context);
412
- } catch (error) {
413
- console.error(`[Vite DevTools] Error setting up plugin ${plugin.name}:`, error);
414
- throw error;
415
- }
416
- }
417
- return context;
418
- }
419
-
420
- //#endregion
421
- //#region src/node/plugins/injection.ts
422
- function DevToolsInjection() {
423
- return {
424
- name: "vite:devtools:injection",
425
- enforce: "post",
426
- transformIndexHtml() {
427
- return [{
428
- tag: "script",
429
- attrs: {
430
- src: `/@fs/${process$1.env.VITE_DEVTOOLS_LOCAL_DEV ? normalizePath(join(dirDist, "..", "src/client/inject/index.ts")) : normalizePath(join(dirDist, "client/inject.js"))}`,
431
- type: "module"
432
- },
433
- injectTo: "body"
434
- }];
435
- }
436
- };
437
- }
438
-
439
- //#endregion
440
- //#region ../../node_modules/.pnpm/ufo@1.6.1/node_modules/ufo/dist/index.mjs
441
- const r = String.fromCharCode;
442
- const PROTOCOL_STRICT_REGEX = /^[\s\w\0+.-]{2,}:([/\\]{1,2})/;
443
- const PROTOCOL_REGEX = /^[\s\w\0+.-]{2,}:([/\\]{2})?/;
444
- const PROTOCOL_RELATIVE_REGEX = /^([/\\]\s*){2,}[^/\\]/;
445
- const TRAILING_SLASH_RE = /\/$|\/\?|\/#/;
446
- const JOIN_LEADING_SLASH_RE = /^\.?\//;
447
- function hasProtocol(inputString, opts = {}) {
448
- if (typeof opts === "boolean") opts = { acceptRelative: opts };
449
- if (opts.strict) return PROTOCOL_STRICT_REGEX.test(inputString);
450
- return PROTOCOL_REGEX.test(inputString) || (opts.acceptRelative ? PROTOCOL_RELATIVE_REGEX.test(inputString) : false);
451
- }
452
- function hasTrailingSlash(input = "", respectQueryAndFragment) {
453
- if (!respectQueryAndFragment) return input.endsWith("/");
454
- return TRAILING_SLASH_RE.test(input);
455
- }
456
- function withoutTrailingSlash(input = "", respectQueryAndFragment) {
457
- if (!respectQueryAndFragment) return (hasTrailingSlash(input) ? input.slice(0, -1) : input) || "/";
458
- if (!hasTrailingSlash(input, true)) return input || "/";
459
- let path = input;
460
- let fragment = "";
461
- const fragmentIndex = input.indexOf("#");
462
- if (fragmentIndex !== -1) {
463
- path = input.slice(0, fragmentIndex);
464
- fragment = input.slice(fragmentIndex);
465
- }
466
- const [s0, ...s] = path.split("?");
467
- return ((s0.endsWith("/") ? s0.slice(0, -1) : s0) || "/") + (s.length > 0 ? `?${s.join("?")}` : "") + fragment;
468
- }
469
- function withTrailingSlash(input = "", respectQueryAndFragment) {
470
- if (!respectQueryAndFragment) return input.endsWith("/") ? input : input + "/";
471
- if (hasTrailingSlash(input, true)) return input || "/";
472
- let path = input;
473
- let fragment = "";
474
- const fragmentIndex = input.indexOf("#");
475
- if (fragmentIndex !== -1) {
476
- path = input.slice(0, fragmentIndex);
477
- fragment = input.slice(fragmentIndex);
478
- if (!path) return fragment;
479
- }
480
- const [s0, ...s] = path.split("?");
481
- return s0 + "/" + (s.length > 0 ? `?${s.join("?")}` : "") + fragment;
482
- }
483
- function isNonEmptyURL(url) {
484
- return url && url !== "/";
485
- }
486
- function joinURL(base, ...input) {
487
- let url = base || "";
488
- for (const segment of input.filter((url2) => isNonEmptyURL(url2))) if (url) {
489
- const _segment = segment.replace(JOIN_LEADING_SLASH_RE, "");
490
- url = withTrailingSlash(url) + _segment;
491
- } else url = segment;
492
- return url;
493
- }
494
- const protocolRelative = Symbol.for("ufo:protocolRelative");
495
- function parseURL(input = "", defaultProto) {
496
- const _specialProtoMatch = input.match(/^[\s\0]*(blob:|data:|javascript:|vbscript:)(.*)/i);
497
- if (_specialProtoMatch) {
498
- const [, _proto, _pathname = ""] = _specialProtoMatch;
499
- return {
500
- protocol: _proto.toLowerCase(),
501
- pathname: _pathname,
502
- href: _proto + _pathname,
503
- auth: "",
504
- host: "",
505
- search: "",
506
- hash: ""
507
- };
508
- }
509
- if (!hasProtocol(input, { acceptRelative: true })) return defaultProto ? parseURL(defaultProto + input) : parsePath(input);
510
- const [, protocol = "", auth, hostAndPath = ""] = input.replace(/\\/g, "/").match(/^[\s\0]*([\w+.-]{2,}:)?\/\/([^/@]+@)?(.*)/) || [];
511
- let [, host = "", path = ""] = hostAndPath.match(/([^#/?]*)(.*)?/) || [];
512
- if (protocol === "file:") path = path.replace(/\/(?=[A-Za-z]:)/, "");
513
- const { pathname, search, hash } = parsePath(path);
514
- return {
515
- protocol: protocol.toLowerCase(),
516
- auth: auth ? auth.slice(0, Math.max(0, auth.length - 1)) : "",
517
- host,
518
- pathname,
519
- search,
520
- hash,
521
- [protocolRelative]: !protocol
522
- };
523
- }
524
- function parsePath(input = "") {
525
- const [pathname = "", search = "", hash = ""] = (input.match(/([^#?]*)(\?[^#]*)?(#.*)?/) || []).splice(1);
526
- return {
527
- pathname,
528
- search,
529
- hash
530
- };
531
- }
532
-
533
- //#endregion
534
- //#region ../../node_modules/.pnpm/defu@6.1.4/node_modules/defu/dist/defu.mjs
535
- function isPlainObject(value) {
536
- if (value === null || typeof value !== "object") return false;
537
- const prototype = Object.getPrototypeOf(value);
538
- if (prototype !== null && prototype !== Object.prototype && Object.getPrototypeOf(prototype) !== null) return false;
539
- if (Symbol.iterator in value) return false;
540
- if (Symbol.toStringTag in value) return Object.prototype.toString.call(value) === "[object Module]";
541
- return true;
542
- }
543
- function _defu(baseObject, defaults, namespace = ".", merger) {
544
- if (!isPlainObject(defaults)) return _defu(baseObject, {}, namespace, merger);
545
- const object = Object.assign({}, defaults);
546
- for (const key in baseObject) {
547
- if (key === "__proto__" || key === "constructor") continue;
548
- const value = baseObject[key];
549
- if (value === null || value === void 0) continue;
550
- if (merger && merger(object, key, value, namespace)) continue;
551
- if (Array.isArray(value) && Array.isArray(object[key])) object[key] = [...value, ...object[key]];
552
- else if (isPlainObject(value) && isPlainObject(object[key])) object[key] = _defu(value, object[key], (namespace ? `${namespace}.` : "") + key.toString(), merger);
553
- else object[key] = value;
554
- }
555
- return object;
556
- }
557
- function createDefu(merger) {
558
- return (...arguments_) => arguments_.reduce((p, c) => _defu(p, c, "", merger), {});
559
- }
560
- const defu = createDefu();
561
- const defuFn = createDefu((object, key, currentValue) => {
562
- if (object[key] !== void 0 && typeof currentValue === "function") {
563
- object[key] = currentValue(object[key]);
564
- return true;
565
- }
566
- });
567
- const defuArrayFn = createDefu((object, key, currentValue) => {
568
- if (Array.isArray(object[key]) && typeof currentValue === "function") {
569
- object[key] = currentValue(object[key]);
570
- return true;
571
- }
572
- });
573
-
574
- //#endregion
575
- //#region ../../node_modules/.pnpm/h3@1.15.4/node_modules/h3/dist/index.mjs
576
- function hasProp(obj, prop) {
577
- try {
578
- return prop in obj;
579
- } catch {
580
- return false;
581
- }
582
- }
583
- var H3Error = class extends Error {
584
- static __h3_error__ = true;
585
- statusCode = 500;
586
- fatal = false;
587
- unhandled = false;
588
- statusMessage;
589
- data;
590
- cause;
591
- constructor(message, opts = {}) {
592
- super(message, opts);
593
- if (opts.cause && !this.cause) this.cause = opts.cause;
594
- }
595
- toJSON() {
596
- const obj = {
597
- message: this.message,
598
- statusCode: sanitizeStatusCode(this.statusCode, 500)
599
- };
600
- if (this.statusMessage) obj.statusMessage = sanitizeStatusMessage(this.statusMessage);
601
- if (this.data !== void 0) obj.data = this.data;
602
- return obj;
603
- }
604
- };
605
- function createError(input) {
606
- if (typeof input === "string") return new H3Error(input);
607
- if (isError(input)) return input;
608
- const err = new H3Error(input.message ?? input.statusMessage ?? "", { cause: input.cause || input });
609
- if (hasProp(input, "stack")) try {
610
- Object.defineProperty(err, "stack", { get() {
611
- return input.stack;
612
- } });
613
- } catch {
614
- try {
615
- err.stack = input.stack;
616
- } catch {}
617
- }
618
- if (input.data) err.data = input.data;
619
- if (input.statusCode) err.statusCode = sanitizeStatusCode(input.statusCode, err.statusCode);
620
- else if (input.status) err.statusCode = sanitizeStatusCode(input.status, err.statusCode);
621
- if (input.statusMessage) err.statusMessage = input.statusMessage;
622
- else if (input.statusText) err.statusMessage = input.statusText;
623
- if (err.statusMessage) {
624
- const originalMessage = err.statusMessage;
625
- if (sanitizeStatusMessage(err.statusMessage) !== originalMessage) console.warn("[h3] Please prefer using `message` for longer error messages instead of `statusMessage`. In the future, `statusMessage` will be sanitized by default.");
626
- }
627
- if (input.fatal !== void 0) err.fatal = input.fatal;
628
- if (input.unhandled !== void 0) err.unhandled = input.unhandled;
629
- return err;
630
- }
631
- function sendError(event, error, debug$1) {
632
- if (event.handled) return;
633
- const h3Error = isError(error) ? error : createError(error);
634
- const responseBody = {
635
- statusCode: h3Error.statusCode,
636
- statusMessage: h3Error.statusMessage,
637
- stack: [],
638
- data: h3Error.data
639
- };
640
- if (debug$1) responseBody.stack = (h3Error.stack || "").split("\n").map((l) => l.trim());
641
- if (event.handled) return;
642
- setResponseStatus(event, Number.parseInt(h3Error.statusCode), h3Error.statusMessage);
643
- event.node.res.setHeader("content-type", MIMES.json);
644
- event.node.res.end(JSON.stringify(responseBody, void 0, 2));
645
- }
646
- function isError(input) {
647
- return input?.constructor?.__h3_error__ === true;
648
- }
649
- const RawBodySymbol = Symbol.for("h3RawBody");
650
- const ParsedBodySymbol = Symbol.for("h3ParsedBody");
651
- const MIMES = {
652
- html: "text/html",
653
- json: "application/json"
654
- };
655
- const DISALLOWED_STATUS_CHARS = /[^\u0009\u0020-\u007E]/g;
656
- function sanitizeStatusMessage(statusMessage = "") {
657
- return statusMessage.replace(DISALLOWED_STATUS_CHARS, "");
658
- }
659
- function sanitizeStatusCode(statusCode, defaultStatusCode = 200) {
660
- if (!statusCode) return defaultStatusCode;
661
- if (typeof statusCode === "string") statusCode = Number.parseInt(statusCode, 10);
662
- if (statusCode < 100 || statusCode > 999) return defaultStatusCode;
663
- return statusCode;
664
- }
665
- function splitCookiesString(cookiesString) {
666
- if (Array.isArray(cookiesString)) return cookiesString.flatMap((c) => splitCookiesString(c));
667
- if (typeof cookiesString !== "string") return [];
668
- const cookiesStrings = [];
669
- let pos = 0;
670
- let start;
671
- let ch;
672
- let lastComma;
673
- let nextStart;
674
- let cookiesSeparatorFound;
675
- const skipWhitespace = () => {
676
- while (pos < cookiesString.length && /\s/.test(cookiesString.charAt(pos))) pos += 1;
677
- return pos < cookiesString.length;
678
- };
679
- const notSpecialChar = () => {
680
- ch = cookiesString.charAt(pos);
681
- return ch !== "=" && ch !== ";" && ch !== ",";
682
- };
683
- while (pos < cookiesString.length) {
684
- start = pos;
685
- cookiesSeparatorFound = false;
686
- while (skipWhitespace()) {
687
- ch = cookiesString.charAt(pos);
688
- if (ch === ",") {
689
- lastComma = pos;
690
- pos += 1;
691
- skipWhitespace();
692
- nextStart = pos;
693
- while (pos < cookiesString.length && notSpecialChar()) pos += 1;
694
- if (pos < cookiesString.length && cookiesString.charAt(pos) === "=") {
695
- cookiesSeparatorFound = true;
696
- pos = nextStart;
697
- cookiesStrings.push(cookiesString.slice(start, lastComma));
698
- start = pos;
699
- } else pos = lastComma + 1;
700
- } else pos += 1;
701
- }
702
- if (!cookiesSeparatorFound || pos >= cookiesString.length) cookiesStrings.push(cookiesString.slice(start));
703
- }
704
- return cookiesStrings;
705
- }
706
- const defer = typeof setImmediate === "undefined" ? (fn) => fn() : setImmediate;
707
- function send(event, data, type) {
708
- if (type) defaultContentType(event, type);
709
- return new Promise((resolve) => {
710
- defer(() => {
711
- if (!event.handled) event.node.res.end(data);
712
- resolve();
713
- });
714
- });
715
- }
716
- function sendNoContent(event, code) {
717
- if (event.handled) return;
718
- if (!code && event.node.res.statusCode !== 200) code = event.node.res.statusCode;
719
- const _code = sanitizeStatusCode(code, 204);
720
- if (_code === 204) event.node.res.removeHeader("content-length");
721
- event.node.res.writeHead(_code);
722
- event.node.res.end();
723
- }
724
- function setResponseStatus(event, code, text) {
725
- if (code) event.node.res.statusCode = sanitizeStatusCode(code, event.node.res.statusCode);
726
- if (text) event.node.res.statusMessage = sanitizeStatusMessage(text);
727
- }
728
- function defaultContentType(event, type) {
729
- if (type && event.node.res.statusCode !== 304 && !event.node.res.getHeader("content-type")) event.node.res.setHeader("content-type", type);
730
- }
731
- function sendRedirect(event, location, code = 302) {
732
- event.node.res.statusCode = sanitizeStatusCode(code, event.node.res.statusCode);
733
- event.node.res.setHeader("location", location);
734
- return send(event, `<!DOCTYPE html><html><head><meta http-equiv="refresh" content="0; url=${location.replace(/"/g, "%22")}"></head></html>`, MIMES.html);
735
- }
736
- function isStream(data) {
737
- if (!data || typeof data !== "object") return false;
738
- if (typeof data.pipe === "function") {
739
- if (typeof data._read === "function") return true;
740
- if (typeof data.abort === "function") return true;
741
- }
742
- if (typeof data.pipeTo === "function") return true;
743
- return false;
744
- }
745
- function isWebResponse(data) {
746
- return typeof Response !== "undefined" && data instanceof Response;
747
- }
748
- function sendStream(event, stream) {
749
- if (!stream || typeof stream !== "object") throw new Error("[h3] Invalid stream provided.");
750
- event.node.res._data = stream;
751
- if (!event.node.res.socket) {
752
- event._handled = true;
753
- return Promise.resolve();
754
- }
755
- if (hasProp(stream, "pipeTo") && typeof stream.pipeTo === "function") return stream.pipeTo(new WritableStream({ write(chunk) {
756
- event.node.res.write(chunk);
757
- } })).then(() => {
758
- event.node.res.end();
759
- });
760
- if (hasProp(stream, "pipe") && typeof stream.pipe === "function") return new Promise((resolve, reject) => {
761
- stream.pipe(event.node.res);
762
- if (stream.on) {
763
- stream.on("end", () => {
764
- event.node.res.end();
765
- resolve();
766
- });
767
- stream.on("error", (error) => {
768
- reject(error);
769
- });
770
- }
771
- event.node.res.on("close", () => {
772
- if (stream.abort) stream.abort();
773
- });
774
- });
775
- throw new Error("[h3] Invalid or incompatible stream provided.");
776
- }
777
- function sendWebResponse(event, response) {
778
- for (const [key, value] of response.headers) if (key === "set-cookie") event.node.res.appendHeader(key, splitCookiesString(value));
779
- else event.node.res.setHeader(key, value);
780
- if (response.status) event.node.res.statusCode = sanitizeStatusCode(response.status, event.node.res.statusCode);
781
- if (response.statusText) event.node.res.statusMessage = sanitizeStatusMessage(response.statusText);
782
- if (response.redirected) event.node.res.setHeader("location", response.url);
783
- if (!response.body) {
784
- event.node.res.end();
785
- return;
786
- }
787
- return sendStream(event, response.body);
788
- }
789
- var H3Event = class {
790
- "__is_event__" = true;
791
- node;
792
- web;
793
- context = {};
794
- _method;
795
- _path;
796
- _headers;
797
- _requestBody;
798
- _handled = false;
799
- _onBeforeResponseCalled;
800
- _onAfterResponseCalled;
801
- constructor(req, res) {
802
- this.node = {
803
- req,
804
- res
805
- };
806
- }
807
- get method() {
808
- if (!this._method) this._method = (this.node.req.method || "GET").toUpperCase();
809
- return this._method;
810
- }
811
- get path() {
812
- return this._path || this.node.req.url || "/";
813
- }
814
- get headers() {
815
- if (!this._headers) this._headers = _normalizeNodeHeaders(this.node.req.headers);
816
- return this._headers;
817
- }
818
- get handled() {
819
- return this._handled || this.node.res.writableEnded || this.node.res.headersSent;
820
- }
821
- respondWith(response) {
822
- return Promise.resolve(response).then((_response) => sendWebResponse(this, _response));
823
- }
824
- toString() {
825
- return `[${this.method}] ${this.path}`;
826
- }
827
- toJSON() {
828
- return this.toString();
829
- }
830
- /** @deprecated Please use `event.node.req` instead. */
831
- get req() {
832
- return this.node.req;
833
- }
834
- /** @deprecated Please use `event.node.res` instead. */
835
- get res() {
836
- return this.node.res;
837
- }
838
- };
839
- function createEvent(req, res) {
840
- return new H3Event(req, res);
841
- }
842
- function _normalizeNodeHeaders(nodeHeaders) {
843
- const headers = new Headers();
844
- for (const [name, value] of Object.entries(nodeHeaders)) if (Array.isArray(value)) for (const item of value) headers.append(name, item);
845
- else if (value) headers.set(name, value);
846
- return headers;
847
- }
848
- function defineEventHandler(handler) {
849
- if (typeof handler === "function") {
850
- handler.__is_handler__ = true;
851
- return handler;
852
- }
853
- const _hooks = {
854
- onRequest: _normalizeArray(handler.onRequest),
855
- onBeforeResponse: _normalizeArray(handler.onBeforeResponse)
856
- };
857
- const _handler = (event) => {
858
- return _callHandler(event, handler.handler, _hooks);
859
- };
860
- _handler.__is_handler__ = true;
861
- _handler.__resolve__ = handler.handler.__resolve__;
862
- _handler.__websocket__ = handler.websocket;
863
- return _handler;
864
- }
865
- function _normalizeArray(input) {
866
- return input ? Array.isArray(input) ? input : [input] : void 0;
867
- }
868
- async function _callHandler(event, handler, hooks) {
869
- if (hooks.onRequest) for (const hook of hooks.onRequest) {
870
- await hook(event);
871
- if (event.handled) return;
872
- }
873
- const response = { body: await handler(event) };
874
- if (hooks.onBeforeResponse) for (const hook of hooks.onBeforeResponse) await hook(event, response);
875
- return response.body;
876
- }
877
- const eventHandler = defineEventHandler;
878
- function isEventHandler(input) {
879
- return hasProp(input, "__is_handler__");
880
- }
881
- function toEventHandler(input, _, _route) {
882
- if (!isEventHandler(input)) console.warn("[h3] Implicit event handler conversion is deprecated. Use `eventHandler()` or `fromNodeMiddleware()` to define event handlers.", _route && _route !== "/" ? `
883
- Route: ${_route}` : "", `
884
- Handler: ${input}`);
885
- return input;
886
- }
887
- function defineLazyEventHandler(factory) {
888
- let _promise;
889
- let _resolved;
890
- const resolveHandler = () => {
891
- if (_resolved) return Promise.resolve(_resolved);
892
- if (!_promise) _promise = Promise.resolve(factory()).then((r$1) => {
893
- const handler2 = r$1.default || r$1;
894
- if (typeof handler2 !== "function") throw new TypeError("Invalid lazy handler result. It should be a function:", handler2);
895
- _resolved = { handler: toEventHandler(r$1.default || r$1) };
896
- return _resolved;
897
- });
898
- return _promise;
899
- };
900
- const handler = eventHandler((event) => {
901
- if (_resolved) return _resolved.handler(event);
902
- return resolveHandler().then((r$1) => r$1.handler(event));
903
- });
904
- handler.__resolve__ = resolveHandler;
905
- return handler;
906
- }
907
- const lazyEventHandler = defineLazyEventHandler;
908
- const H3Headers = globalThis.Headers;
909
- const H3Response = globalThis.Response;
910
- function createApp(options = {}) {
911
- const stack = [];
912
- const handler = createAppEventHandler(stack, options);
913
- const resolve = createResolver(stack);
914
- handler.__resolve__ = resolve;
915
- const getWebsocket = cachedFn(() => websocketOptions(resolve, options));
916
- const app = {
917
- use: (arg1, arg2, arg3) => use(app, arg1, arg2, arg3),
918
- resolve,
919
- handler,
920
- stack,
921
- options,
922
- get websocket() {
923
- return getWebsocket();
924
- }
925
- };
926
- return app;
927
- }
928
- function use(app, arg1, arg2, arg3) {
929
- if (Array.isArray(arg1)) for (const i of arg1) use(app, i, arg2, arg3);
930
- else if (Array.isArray(arg2)) for (const i of arg2) use(app, arg1, i, arg3);
931
- else if (typeof arg1 === "string") app.stack.push(normalizeLayer({
932
- ...arg3,
933
- route: arg1,
934
- handler: arg2
935
- }));
936
- else if (typeof arg1 === "function") app.stack.push(normalizeLayer({
937
- ...arg2,
938
- handler: arg1
939
- }));
940
- else app.stack.push(normalizeLayer({ ...arg1 }));
941
- return app;
942
- }
943
- function createAppEventHandler(stack, options) {
944
- const spacing = options.debug ? 2 : void 0;
945
- return eventHandler(async (event) => {
946
- event.node.req.originalUrl = event.node.req.originalUrl || event.node.req.url || "/";
947
- const _reqPath = event._path || event.node.req.url || "/";
948
- let _layerPath;
949
- if (options.onRequest) await options.onRequest(event);
950
- for (const layer of stack) {
951
- if (layer.route.length > 1) {
952
- if (!_reqPath.startsWith(layer.route)) continue;
953
- _layerPath = _reqPath.slice(layer.route.length) || "/";
954
- } else _layerPath = _reqPath;
955
- if (layer.match && !layer.match(_layerPath, event)) continue;
956
- event._path = _layerPath;
957
- event.node.req.url = _layerPath;
958
- const val = await layer.handler(event);
959
- const _body = val === void 0 ? void 0 : await val;
960
- if (_body !== void 0) {
961
- const _response = { body: _body };
962
- if (options.onBeforeResponse) {
963
- event._onBeforeResponseCalled = true;
964
- await options.onBeforeResponse(event, _response);
965
- }
966
- await handleHandlerResponse(event, _response.body, spacing);
967
- if (options.onAfterResponse) {
968
- event._onAfterResponseCalled = true;
969
- await options.onAfterResponse(event, _response);
970
- }
971
- return;
972
- }
973
- if (event.handled) {
974
- if (options.onAfterResponse) {
975
- event._onAfterResponseCalled = true;
976
- await options.onAfterResponse(event, void 0);
977
- }
978
- return;
979
- }
980
- }
981
- if (!event.handled) throw createError({
982
- statusCode: 404,
983
- statusMessage: `Cannot find any path matching ${event.path || "/"}.`
984
- });
985
- if (options.onAfterResponse) {
986
- event._onAfterResponseCalled = true;
987
- await options.onAfterResponse(event, void 0);
988
- }
989
- });
990
- }
991
- function createResolver(stack) {
992
- return async (path) => {
993
- let _layerPath;
994
- for (const layer of stack) {
995
- if (layer.route === "/" && !layer.handler.__resolve__) continue;
996
- if (!path.startsWith(layer.route)) continue;
997
- _layerPath = path.slice(layer.route.length) || "/";
998
- if (layer.match && !layer.match(_layerPath, void 0)) continue;
999
- let res = {
1000
- route: layer.route,
1001
- handler: layer.handler
1002
- };
1003
- if (res.handler.__resolve__) {
1004
- const _res = await res.handler.__resolve__(_layerPath);
1005
- if (!_res) continue;
1006
- res = {
1007
- ...res,
1008
- ..._res,
1009
- route: joinURL(res.route || "/", _res.route || "/")
1010
- };
1011
- }
1012
- return res;
1013
- }
1014
- };
1015
- }
1016
- function normalizeLayer(input) {
1017
- let handler = input.handler;
1018
- if (handler.handler) handler = handler.handler;
1019
- if (input.lazy) handler = lazyEventHandler(handler);
1020
- else if (!isEventHandler(handler)) handler = toEventHandler(handler, void 0, input.route);
1021
- return {
1022
- route: withoutTrailingSlash(input.route),
1023
- match: input.match,
1024
- handler
1025
- };
1026
- }
1027
- function handleHandlerResponse(event, val, jsonSpace) {
1028
- if (val === null) return sendNoContent(event);
1029
- if (val) {
1030
- if (isWebResponse(val)) return sendWebResponse(event, val);
1031
- if (isStream(val)) return sendStream(event, val);
1032
- if (val.buffer) return send(event, val);
1033
- if (val.arrayBuffer && typeof val.arrayBuffer === "function") return val.arrayBuffer().then((arrayBuffer) => {
1034
- return send(event, Buffer.from(arrayBuffer), val.type);
1035
- });
1036
- if (val instanceof Error) throw createError(val);
1037
- if (typeof val.end === "function") return true;
1038
- }
1039
- const valType = typeof val;
1040
- if (valType === "string") return send(event, val, MIMES.html);
1041
- if (valType === "object" || valType === "boolean" || valType === "number") return send(event, JSON.stringify(val, void 0, jsonSpace), MIMES.json);
1042
- if (valType === "bigint") return send(event, val.toString(), MIMES.json);
1043
- throw createError({
1044
- statusCode: 500,
1045
- statusMessage: `[h3] Cannot send ${valType} as response.`
1046
- });
1047
- }
1048
- function cachedFn(fn) {
1049
- let cache;
1050
- return () => {
1051
- if (!cache) cache = fn();
1052
- return cache;
1053
- };
1054
- }
1055
- function websocketOptions(evResolver, appOptions) {
1056
- return {
1057
- ...appOptions.websocket,
1058
- async resolve(info) {
1059
- const url = info.request?.url || info.url || "/";
1060
- const { pathname } = typeof url === "string" ? parseURL(url) : url;
1061
- return (await evResolver(pathname))?.handler?.__websocket__ || {};
1062
- }
1063
- };
1064
- }
1065
- function fromNodeMiddleware(handler) {
1066
- if (isEventHandler(handler)) return handler;
1067
- if (typeof handler !== "function") throw new TypeError("Invalid handler. It should be a function:", handler);
1068
- return eventHandler((event) => {
1069
- return callNodeListener(handler, event.node.req, event.node.res);
1070
- });
1071
- }
1072
- function toNodeListener(app) {
1073
- const toNodeHandle = async function(req, res) {
1074
- const event = createEvent(req, res);
1075
- try {
1076
- await app.handler(event);
1077
- } catch (_error) {
1078
- const error = createError(_error);
1079
- if (!isError(_error)) error.unhandled = true;
1080
- setResponseStatus(event, error.statusCode, error.statusMessage);
1081
- if (app.options.onError) await app.options.onError(error, event);
1082
- if (event.handled) return;
1083
- if (error.unhandled || error.fatal) console.error("[h3]", error.fatal ? "[fatal]" : "[unhandled]", error);
1084
- if (app.options.onBeforeResponse && !event._onBeforeResponseCalled) await app.options.onBeforeResponse(event, { body: error });
1085
- await sendError(event, error, !!app.options.debug);
1086
- if (app.options.onAfterResponse && !event._onAfterResponseCalled) await app.options.onAfterResponse(event, { body: error });
1087
- }
1088
- };
1089
- return toNodeHandle;
1090
- }
1091
- function callNodeListener(handler, req, res) {
1092
- const isMiddleware = handler.length > 2;
1093
- return new Promise((resolve, reject) => {
1094
- const next = (err) => {
1095
- if (isMiddleware) {
1096
- res.off("close", next);
1097
- res.off("error", next);
1098
- }
1099
- return err ? reject(createError(err)) : resolve(void 0);
1100
- };
1101
- try {
1102
- const returned = handler(req, res, next);
1103
- if (isMiddleware && returned === void 0) {
1104
- res.once("close", next);
1105
- res.once("error", next);
1106
- } else resolve(returned);
1107
- } catch (error) {
1108
- next(error);
1109
- }
1110
- });
1111
- }
1112
-
1113
- //#endregion
1114
- //#region ../../node_modules/.pnpm/ansis@4.2.0/node_modules/ansis/index.cjs
1115
- var require_ansis = /* @__PURE__ */ __commonJSMin(((exports, module) => {
1116
- let e, t, r, { defineProperty: l, setPrototypeOf: n, create: o, keys: s } = Object, i = "", { round: c, max: a } = Math, p = (e) => {
1117
- let t = /([a-f\d]{3,6})/i.exec(e)?.[1], r$1 = t?.length, l = parseInt(6 ^ r$1 ? 3 ^ r$1 ? "0" : t[0] + t[0] + t[1] + t[1] + t[2] + t[2] : t, 16);
1118
- return [
1119
- l >> 16 & 255,
1120
- l >> 8 & 255,
1121
- 255 & l
1122
- ];
1123
- }, u = (e, t, r$1) => e ^ t || t ^ r$1 ? 16 + 36 * c(e / 51) + 6 * c(t / 51) + c(r$1 / 51) : 8 > e ? 16 : e > 248 ? 231 : c(24 * (e - 8) / 247) + 232, d = (e) => {
1124
- let t, r$1, l, n, o;
1125
- return 8 > e ? 30 + e : 16 > e ? e - 8 + 90 : (232 > e ? (o = (e -= 16) % 36, t = (e / 36 | 0) / 5, r$1 = (o / 6 | 0) / 5, l = o % 6 / 5) : t = r$1 = l = (10 * (e - 232) + 8) / 255, n = 2 * a(t, r$1, l), n ? 30 + (c(l) << 2 | c(r$1) << 1 | c(t)) + (2 ^ n ? 0 : 60) : 30);
1126
- }, f = (() => {
1127
- let r$1 = (e) => o.some(((t) => e.test(t))), l = globalThis, n = l.process ?? {}, o = n.argv ?? [], i = n.env ?? {}, c = -1;
1128
- try {
1129
- e = "," + s(i).join(",");
1130
- } catch (e) {
1131
- i = {}, c = 0;
1132
- }
1133
- let a$1 = "FORCE_COLOR", p = {
1134
- false: 0,
1135
- 0: 0,
1136
- 1: 1,
1137
- 2: 2,
1138
- 3: 3
1139
- }[i[a$1]] ?? -1, u = a$1 in i && p || r$1(/^--color=?(true|always)?$/);
1140
- return u && (c = p), ~c || (c = ((r$2, l$1, n$1) => (t = r$2.TERM, {
1141
- "24bit": 3,
1142
- truecolor: 3,
1143
- ansi256: 2,
1144
- ansi: 1
1145
- }[r$2.COLORTERM] || (r$2.CI ? /,GITHUB/.test(e) ? 3 : 1 : l$1 && "dumb" !== t ? n$1 ? 3 : /-256/.test(t) ? 2 : 1 : 0)))(i, !!i.PM2_HOME || i.NEXT_RUNTIME?.includes("edge") || !!n.stdout?.isTTY, "win32" === n.platform)), !p || i.NO_COLOR || r$1(/^--(no-color|color=(false|never))$/) ? 0 : l.window?.chrome || u && !c ? 3 : c;
1146
- })(), g = {
1147
- open: i,
1148
- close: i
1149
- }, h = 39, b = 49, O = {}, m = ({ p: e }, { open: t, close: l }) => {
1150
- let o = (e$1, ...r$1) => {
1151
- if (!e$1) {
1152
- if (t && t === l) return t;
1153
- if ((e$1 ?? i) === i) return i;
1154
- }
1155
- let n, s$1 = e$1.raw ? String.raw({ raw: e$1 }, ...r$1) : i + e$1, c$1 = o.p, a$1 = c$1.o, p = c$1.c;
1156
- if (s$1.includes("\x1B")) for (; c$1; c$1 = c$1.p) {
1157
- let { open: e$2, close: t$1 } = c$1, r$2 = t$1.length, l$1 = i, o$1 = 0;
1158
- if (r$2) for (; ~(n = s$1.indexOf(t$1, o$1)); o$1 = n + r$2) l$1 += s$1.slice(o$1, n) + e$2;
1159
- s$1 = l$1 + s$1.slice(o$1);
1160
- }
1161
- return a$1 + (s$1.includes("\n") ? s$1.replace(/(\r?\n)/g, p + "$1" + a$1) : s$1) + p;
1162
- }, s = t, c = l;
1163
- return e && (s = e.o + t, c = l + e.c), n(o, r), o.p = {
1164
- open: t,
1165
- close: l,
1166
- o: s,
1167
- c,
1168
- p: e
1169
- }, o.open = s, o.close = c, o;
1170
- };
1171
- const w = new function e(t = f) {
1172
- let s = {
1173
- Ansis: e,
1174
- level: t,
1175
- isSupported: () => a$1,
1176
- strip: (e$1) => e$1.replace(/[›][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, i),
1177
- extend(e$1) {
1178
- for (let t$1 in e$1) {
1179
- let r$1 = e$1[t$1], l = (typeof r$1)[0];
1180
- "s" === l ? (c(t$1, T(...p(r$1))), c(_(t$1), v(...p(r$1)))) : c(t$1, r$1, "f" === l);
1181
- }
1182
- return r = o({}, O), n(s, r), s;
1183
- }
1184
- }, c = (e$1, t$1, r$1) => {
1185
- O[e$1] = { get() {
1186
- let n = r$1 ? (...e$2) => m(this, t$1(...e$2)) : m(this, t$1);
1187
- return l(this, e$1, { value: n }), n;
1188
- } };
1189
- }, a$1 = t > 0, w = (e$1, t$1) => a$1 ? {
1190
- open: `[${e$1}m`,
1191
- close: `[${t$1}m`
1192
- } : g, y = (e$1) => (t$1) => e$1(...p(t$1)), R = (e$1, t$1) => (r$1, l, n) => w(`${e$1}8;2;${r$1};${l};${n}`, t$1), $ = (e$1, t$1) => (r$1, l, n) => w(((e$2, t$2, r$2) => d(u(e$2, t$2, r$2)))(r$1, l, n) + e$1, t$1), x = (e$1) => (t$1, r$1, l) => e$1(u(t$1, r$1, l)), T = R(3, h), v = R(4, b), C = (e$1) => w("38;5;" + e$1, h), E = (e$1) => w("48;5;" + e$1, b);
1193
- 2 === t ? (T = x(C), v = x(E)) : 1 === t && (T = $(0, h), v = $(10, b), C = (e$1) => w(d(e$1), h), E = (e$1) => w(d(e$1) + 10, b));
1194
- let M, I = {
1195
- fg: C,
1196
- bg: E,
1197
- rgb: T,
1198
- bgRgb: v,
1199
- hex: y(T),
1200
- bgHex: y(v),
1201
- visible: g,
1202
- reset: w(0, 0),
1203
- bold: w(1, 22),
1204
- dim: w(2, 22),
1205
- italic: w(3, 23),
1206
- underline: w(4, 24),
1207
- inverse: w(7, 27),
1208
- hidden: w(8, 28),
1209
- strikethrough: w(9, 29)
1210
- }, _ = (e$1) => "bg" + e$1[0].toUpperCase() + e$1.slice(1), k = "Bright";
1211
- return "black,red,green,yellow,blue,magenta,cyan,white,gray".split(",").map(((e$1, t$1) => {
1212
- M = _(e$1), 8 > t$1 ? (I[e$1 + k] = w(90 + t$1, h), I[M + k] = w(100 + t$1, b)) : t$1 = 60, I[e$1] = w(30 + t$1, h), I[M] = w(40 + t$1, b);
1213
- })), s.extend(I);
1214
- }();
1215
- module.exports = w, w.default = w;
1216
- }));
1217
-
1218
- //#endregion
1219
- //#region ../../node_modules/.pnpm/ansis@4.2.0/node_modules/ansis/index.mjs
1220
- var import_ansis = /* @__PURE__ */ __toESM(require_ansis(), 1);
1221
- var ansis_default = import_ansis.default;
1222
- const { Ansis, fg, bg, rgb, bgRgb, hex, bgHex, reset, inverse, hidden, visible, bold, dim, italic, underline, strikethrough, black, red, green, yellow, blue, magenta, cyan, white, gray, redBright, greenBright, yellowBright, blueBright, magentaBright, cyanBright, whiteBright, bgBlack, bgRed, bgGreen, bgYellow, bgBlue, bgMagenta, bgCyan, bgWhite, bgGray, bgRedBright, bgGreenBright, bgYellowBright, bgBlueBright, bgMagentaBright, bgCyanBright, bgWhiteBright } = import_ansis.default;
1223
-
1224
- //#endregion
1225
- //#region ../../node_modules/.pnpm/get-port-please@3.2.0/node_modules/get-port-please/dist/index.mjs
1226
- const unsafePorts = /* @__PURE__ */ new Set([
1227
- 1,
1228
- 7,
1229
- 9,
1230
- 11,
1231
- 13,
1232
- 15,
1233
- 17,
1234
- 19,
1235
- 20,
1236
- 21,
1237
- 22,
1238
- 23,
1239
- 25,
1240
- 37,
1241
- 42,
1242
- 43,
1243
- 53,
1244
- 69,
1245
- 77,
1246
- 79,
1247
- 87,
1248
- 95,
1249
- 101,
1250
- 102,
1251
- 103,
1252
- 104,
1253
- 109,
1254
- 110,
1255
- 111,
1256
- 113,
1257
- 115,
1258
- 117,
1259
- 119,
1260
- 123,
1261
- 135,
1262
- 137,
1263
- 139,
1264
- 143,
1265
- 161,
1266
- 179,
1267
- 389,
1268
- 427,
1269
- 465,
1270
- 512,
1271
- 513,
1272
- 514,
1273
- 515,
1274
- 526,
1275
- 530,
1276
- 531,
1277
- 532,
1278
- 540,
1279
- 548,
1280
- 554,
1281
- 556,
1282
- 563,
1283
- 587,
1284
- 601,
1285
- 636,
1286
- 989,
1287
- 990,
1288
- 993,
1289
- 995,
1290
- 1719,
1291
- 1720,
1292
- 1723,
1293
- 2049,
1294
- 3659,
1295
- 4045,
1296
- 5060,
1297
- 5061,
1298
- 6e3,
1299
- 6566,
1300
- 6665,
1301
- 6666,
1302
- 6667,
1303
- 6668,
1304
- 6669,
1305
- 6697,
1306
- 10080
1307
- ]);
1308
- function isUnsafePort(port) {
1309
- return unsafePorts.has(port);
1310
- }
1311
- function isSafePort(port) {
1312
- return !isUnsafePort(port);
1313
- }
1314
- var GetPortError = class extends Error {
1315
- constructor(message, opts) {
1316
- super(message, opts);
1317
- this.message = message;
1318
- }
1319
- name = "GetPortError";
1320
- };
1321
- function _log(verbose, message) {
1322
- if (verbose) console.log(`[get-port] ${message}`);
1323
- }
1324
- function _generateRange(from, to) {
1325
- if (to < from) return [];
1326
- const r$1 = [];
1327
- for (let index = from; index <= to; index++) r$1.push(index);
1328
- return r$1;
1329
- }
1330
- function _tryPort(port, host) {
1331
- return new Promise((resolve) => {
1332
- const server = createServer();
1333
- server.unref();
1334
- server.on("error", () => {
1335
- resolve(false);
1336
- });
1337
- server.listen({
1338
- port,
1339
- host
1340
- }, () => {
1341
- const { port: port2 } = server.address();
1342
- server.close(() => {
1343
- resolve(isSafePort(port2) && port2);
1344
- });
1345
- });
1346
- });
1347
- }
1348
- function _getLocalHosts(additional) {
1349
- const hosts = new Set(additional);
1350
- for (const _interface of Object.values(networkInterfaces())) for (const config of _interface || []) if (config.address && !config.internal && !config.address.startsWith("fe80::") && !config.address.startsWith("169.254")) hosts.add(config.address);
1351
- return [...hosts];
1352
- }
1353
- async function _findPort(ports, host) {
1354
- for (const port of ports) {
1355
- const r$1 = await _tryPort(port, host);
1356
- if (r$1) return r$1;
1357
- }
1358
- }
1359
- function _fmtOnHost(hostname) {
1360
- return hostname ? `on host ${JSON.stringify(hostname)}` : "on any host";
1361
- }
1362
- const HOSTNAME_RE = /^(?!-)[\d.:A-Za-z-]{1,63}(?<!-)$/;
1363
- function _validateHostname(hostname, _public, verbose) {
1364
- if (hostname && !HOSTNAME_RE.test(hostname)) {
1365
- const fallbackHost = _public ? "0.0.0.0" : "127.0.0.1";
1366
- _log(verbose, `Invalid hostname: ${JSON.stringify(hostname)}. Using ${JSON.stringify(fallbackHost)} as fallback.`);
1367
- return fallbackHost;
1368
- }
1369
- return hostname;
1370
- }
1371
- async function getPort(_userOptions = {}) {
1372
- if (typeof _userOptions === "number" || typeof _userOptions === "string") _userOptions = { port: Number.parseInt(_userOptions + "") || 0 };
1373
- const _port = Number(_userOptions.port ?? process.env.PORT);
1374
- const _userSpecifiedAnyPort = Boolean(_userOptions.port || _userOptions.ports?.length || _userOptions.portRange?.length);
1375
- const options = {
1376
- random: _port === 0,
1377
- ports: [],
1378
- portRange: [],
1379
- alternativePortRange: _userSpecifiedAnyPort ? [] : [3e3, 3100],
1380
- verbose: false,
1381
- ..._userOptions,
1382
- port: _port,
1383
- host: _validateHostname(_userOptions.host ?? process.env.HOST, _userOptions.public, _userOptions.verbose)
1384
- };
1385
- if (options.random && !_userSpecifiedAnyPort) return getRandomPort(options.host);
1386
- const portsToCheck = [
1387
- options.port,
1388
- ...options.ports,
1389
- ..._generateRange(...options.portRange)
1390
- ].filter((port) => {
1391
- if (!port) return false;
1392
- if (!isSafePort(port)) {
1393
- _log(options.verbose, `Ignoring unsafe port: ${port}`);
1394
- return false;
1395
- }
1396
- return true;
1397
- });
1398
- if (portsToCheck.length === 0) portsToCheck.push(3e3);
1399
- let availablePort = await _findPort(portsToCheck, options.host);
1400
- if (!availablePort && options.alternativePortRange.length > 0) {
1401
- availablePort = await _findPort(_generateRange(...options.alternativePortRange), options.host);
1402
- if (portsToCheck.length > 0) {
1403
- let message = `Unable to find an available port (tried ${portsToCheck.join("-")} ${_fmtOnHost(options.host)}).`;
1404
- if (availablePort) message += ` Using alternative port ${availablePort}.`;
1405
- _log(options.verbose, message);
1406
- }
1407
- }
1408
- if (!availablePort && _userOptions.random !== false) {
1409
- availablePort = await getRandomPort(options.host);
1410
- if (availablePort) _log(options.verbose, `Using random port ${availablePort}`);
1411
- }
1412
- if (!availablePort) {
1413
- const triedRanges = [
1414
- options.port,
1415
- options.portRange.join("-"),
1416
- options.alternativePortRange.join("-")
1417
- ].filter(Boolean).join(", ");
1418
- throw new GetPortError(`Unable to find an available port ${_fmtOnHost(options.host)} (tried ${triedRanges})`);
1419
- }
1420
- return availablePort;
1421
- }
1422
- async function getRandomPort(host) {
1423
- const port = await checkPort(0, host);
1424
- if (port === false) throw new GetPortError(`Unable to find a random port ${_fmtOnHost(host)}`);
1425
- return port;
1426
- }
1427
- async function checkPort(port, host = process.env.HOST, verbose) {
1428
- if (!host) host = _getLocalHosts([void 0, "0.0.0.0"]);
1429
- if (!Array.isArray(host)) return _tryPort(port, host);
1430
- for (const _host of host) {
1431
- const _port = await _tryPort(port, _host);
1432
- if (_port === false) {
1433
- if (port < 1024 && verbose) _log(verbose, `Unable to listen to the privileged port ${port} ${_fmtOnHost(_host)}`);
1434
- return false;
1435
- }
1436
- if (port === 0 && _port !== 0) port = _port;
1437
- }
1438
- return port;
1439
- }
1440
-
1441
- //#endregion
1442
- //#region src/node/constants.ts
1443
- const MARK_CHECK = ansis_default.green("✔");
1444
- const MARK_INFO = ansis_default.blue("ℹ");
1445
- const MARK_ERROR = ansis_default.red("✖");
1446
- const MARK_NODE = "⬢";
1447
-
1448
- //#endregion
1449
- //#region src/node/ws.ts
1450
- async function createWsServer(options) {
1451
- const rpcHost = options.context.rpc;
1452
- const port = options.portWebSocket ?? await getPort({
1453
- port: 7812,
1454
- random: true
1455
- });
1456
- const wsClients = /* @__PURE__ */ new Set();
1457
- const preset = createWsRpcPreset({
1458
- port,
1459
- onConnected: (ws) => {
1460
- wsClients.add(ws);
1461
- console.log(ansis_default.green`${MARK_CHECK} Websocket client connected`);
1462
- },
1463
- onDisconnected: (ws) => {
1464
- wsClients.delete(ws);
1465
- console.log(ansis_default.red`${MARK_CHECK} Websocket client disconnected`);
1466
- }
1467
- });
1468
- const rpcGroup = createRpcServer(rpcHost.functions, {
1469
- preset,
1470
- rpcOptions: {
1471
- onFunctionError(error, name) {
1472
- console.error(ansis_default.red`⬢ RPC error on executing "${ansis_default.bold(name)}":`);
1473
- console.error(error);
1474
- },
1475
- onGeneralError(error) {
1476
- console.error(ansis_default.red`⬢ RPC error on executing rpc`);
1477
- console.error(error);
1478
- }
1479
- }
1480
- });
1481
- rpcHost.rpcGroup = rpcGroup;
1482
- const getConnectionMeta = async () => {
1483
- return {
1484
- backend: "websocket",
1485
- websocket: port
1486
- };
1487
- };
1488
- return {
1489
- port,
1490
- rpc: rpcGroup,
1491
- rpcHost,
1492
- getConnectionMeta
1493
- };
1494
- }
1495
-
1496
- //#endregion
1497
- //#region src/node/server.ts
1498
- async function createDevToolsMiddleware(options) {
1499
- const h3 = createApp();
1500
- const { rpc, getConnectionMeta } = await createWsServer(options);
1501
- h3.use("/.vdt-connection.json", eventHandler(async (event) => {
1502
- event.node.res.setHeader("Content-Type", "application/json");
1503
- return event.node.res.end(JSON.stringify(await getConnectionMeta()));
1504
- }));
1505
- h3.use(fromNodeMiddleware(sirv(dirClientStandalone, {
1506
- dev: true,
1507
- single: true
1508
- })));
1509
- return {
1510
- h3,
1511
- rpc,
1512
- middleware: toNodeListener(h3),
1513
- getConnectionMeta
1514
- };
1515
- }
1516
-
1517
- //#endregion
1518
- //#region src/node/plugins/server.ts
1519
- /**
1520
- * Core plugin for enabling Vite DevTools
1521
- */
1522
- function DevToolsServer() {
1523
- let context;
1524
- return {
1525
- name: "vite:devtools:server",
1526
- enforce: "post",
1527
- apply: "serve",
1528
- async configureServer(viteDevServer) {
1529
- context = await createDevToolsContext(viteDevServer.config, viteDevServer);
1530
- const { middleware } = await createDevToolsMiddleware({
1531
- cwd: viteDevServer.config.root,
1532
- context
1533
- });
1534
- viteDevServer.middlewares.use("/.devtools/", middleware);
1535
- },
1536
- resolveId(id) {
1537
- if (id === "/.devtools-imports") return id;
1538
- },
1539
- load(id) {
1540
- if (id === "/.devtools-imports") {
1541
- if (!context) throw new Error("DevTools context is not initialized");
1542
- const docks = Array.from(context.docks.values());
1543
- const map = /* @__PURE__ */ new Map();
1544
- for (const dock of docks) {
1545
- const id$1 = `${dock.type}:${dock.id}`;
1546
- if (dock.type === "action") map.set(id$1, dock.action);
1547
- else if (dock.type === "custom-render") map.set(id$1, dock.renderer);
1548
- else if (dock.type === "iframe" && dock.clientScript) map.set(id$1, dock.clientScript);
1549
- }
1550
- return [
1551
- `export const importsMap = {`,
1552
- ...[...map.entries()].filter(([, entry]) => entry != null).map(([id$1, { importFrom, importName }]) => ` [${JSON.stringify(id$1)}]: () => import(${JSON.stringify(importFrom)}).then(r => r[${JSON.stringify(importName)}]),`),
1553
- "}"
1554
- ].join("\n");
1555
- }
1556
- }
1557
- };
1558
- }
1559
-
1560
- //#endregion
1561
- //#region src/node/plugins/index.ts
1562
- async function DevTools(options = {}) {
1563
- const { builtinDevTools = true } = options;
1564
- const plugins = [DevToolsInjection(), DevToolsServer()];
1565
- if (builtinDevTools) plugins.push(await import("@vitejs/devtools-vite").then((m) => m.DevToolsViteUI()));
1566
- return plugins;
1567
- }
1568
-
1569
- //#endregion
1570
- export { ansis_default as a, fromNodeMiddleware as c, createDevToolsContext as d, getPort as i, sendRedirect as l, createDevToolsMiddleware as n, createApp as o, MARK_NODE as r, eventHandler as s, DevTools as t, toNodeListener as u };