@vitejs/devtools 0.0.0-alpha.3 → 0.0.0-alpha.30

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.
@@ -0,0 +1,18 @@
1
+ //#region src/node/cli-commands.d.ts
2
+ interface StartOptions {
3
+ root?: string;
4
+ config?: string;
5
+ host: string;
6
+ port?: string | number;
7
+ open?: boolean;
8
+ }
9
+ declare function start(options: StartOptions): Promise<void>;
10
+ interface BuildOptions {
11
+ root: string;
12
+ config?: string;
13
+ outDir: string;
14
+ base: string;
15
+ }
16
+ declare function build(options: BuildOptions): Promise<void>;
17
+ //#endregion
18
+ export { BuildOptions, StartOptions, build, start };
@@ -0,0 +1,67 @@
1
+ import { i as getPort, n as createDevToolsMiddleware, o as ansis_default, r as MARK_NODE } from "./plugins-BbzqUdpu.js";
2
+ import { dirClientStandalone } from "./dirs.js";
3
+ import { t as startStandaloneDevTools } from "./standalone-DVh1a9tu.js";
4
+ import { join, relative, resolve } from "pathe";
5
+ import { existsSync } from "node:fs";
6
+ import sirv from "sirv";
7
+ import { createApp, eventHandler, fromNodeMiddleware, sendRedirect, toNodeListener } from "h3";
8
+ import fs$1 from "node:fs/promises";
9
+ import { createServer } from "node:http";
10
+ import open from "open";
11
+
12
+ //#region src/node/cli-commands.ts
13
+ async function start(options) {
14
+ const { host } = options;
15
+ const port = await getPort({
16
+ host,
17
+ port: options.port == null ? void 0 : +options.port,
18
+ portRange: [9999, 15e3]
19
+ });
20
+ const devtools = await startStandaloneDevTools({ cwd: options.root });
21
+ const { h3 } = await createDevToolsMiddleware({
22
+ cwd: devtools.config.root,
23
+ hostWebSocket: host,
24
+ context: devtools.context
25
+ });
26
+ const app = createApp();
27
+ for (const { baseUrl, distDir } of devtools.context.views.buildStaticDirs) app.use(baseUrl, fromNodeMiddleware(sirv(distDir, {
28
+ dev: true,
29
+ single: true
30
+ })));
31
+ app.use("/.devtools/", h3.handler);
32
+ app.use("/", eventHandler(async (event) => {
33
+ if (event.node.req.url === "/") return sendRedirect(event, "/.devtools/");
34
+ }));
35
+ createServer(toNodeListener(app)).listen(port, host, async () => {
36
+ console.log(ansis_default.green`${MARK_NODE} Vite DevTools started at`, ansis_default.green(`http://${host === "127.0.0.1" ? "localhost" : host}:${port}`), "\n");
37
+ if (options.open) await open(`http://${host === "127.0.0.1" ? "localhost" : host}:${port}`);
38
+ });
39
+ }
40
+ async function build(options) {
41
+ console.log(ansis_default.cyan`${MARK_NODE} Building static Vite DevTools...`);
42
+ const devtools = await startStandaloneDevTools({
43
+ cwd: options.root,
44
+ config: options.config
45
+ });
46
+ const outDir = resolve(devtools.config.root, options.outDir);
47
+ if (existsSync(outDir)) await fs$1.rm(outDir, { recursive: true });
48
+ const devToolsRoot = join(outDir, ".devtools");
49
+ await fs$1.mkdir(devToolsRoot, { recursive: true });
50
+ await fs$1.cp(dirClientStandalone, devToolsRoot, { recursive: true });
51
+ for (const { baseUrl, distDir } of devtools.context.views.buildStaticDirs) {
52
+ console.log(ansis_default.cyan`${MARK_NODE} Copying static files from ${distDir} to ${join(outDir, baseUrl)}`);
53
+ await fs$1.mkdir(join(outDir, baseUrl), { recursive: true });
54
+ await fs$1.cp(distDir, join(outDir, baseUrl), { recursive: true });
55
+ }
56
+ await fs$1.mkdir(resolve(devToolsRoot, "api"), { recursive: true });
57
+ await fs$1.writeFile(resolve(devToolsRoot, ".vdt-connection.json"), JSON.stringify({ backend: "static" }, null, 2), "utf-8");
58
+ console.log(ansis_default.cyan`${MARK_NODE} Writing RPC dump to ${resolve(devToolsRoot, ".vdt-rpc-dump.json")}`);
59
+ const dump = {};
60
+ for (const [key, value] of Object.entries(devtools.context.rpc.functions)) if (value.type === "static") dump[key] = await value.handler?.();
61
+ await fs$1.writeFile(resolve(devToolsRoot, ".vdt-rpc-dump.json"), JSON.stringify(dump, null, 2), "utf-8");
62
+ console.log(ansis_default.green`${MARK_NODE} Built to ${relative(devtools.config.root, outDir)}`);
63
+ throw new Error("[Vite DevTools] Build mode of Vite DevTools is not yet complete");
64
+ }
65
+
66
+ //#endregion
67
+ export { build, start };
package/dist/cli.js CHANGED
@@ -1,98 +1,15 @@
1
- import { DevTools, MARK_NODE, ansis_default, createApp, createDevToolsContext, createDevToolsMiddleware, eventHandler, getPort, sendRedirect, toNodeListener } from "./plugins-DDjui9Ga.js";
2
- import { dirClientStandalone } from "./dirs-B7dOX6eI.js";
3
- import { existsSync } from "node:fs";
1
+ import "./plugins-BbzqUdpu.js";
2
+ import { build, start } from "./cli-commands.js";
4
3
  import process from "node:process";
5
- import { loadConfigFromFile, resolveConfig } from "vite";
6
- import fs from "node:fs/promises";
7
- import { createServer } from "node:http";
8
4
  import cac from "cac";
9
- import open from "open";
10
- import { join, relative, resolve } from "pathe";
11
5
 
12
- //#region src/node/standalone.ts
13
- async function startStandaloneDevTools(options = {}) {
14
- const { cwd = process.cwd(), command = "build", mode = "production" } = options;
15
- const config = (await loadConfigFromFile({
16
- command,
17
- mode
18
- }, options.config, cwd))?.config || {};
19
- config.plugins ||= [];
20
- config.plugins.push(DevTools());
21
- dedupeVitePlugins(config.plugins, (plugin) => plugin.name?.startsWith("vite:devtools"));
22
- const resolved = await resolveConfig(config, command, mode);
23
- const context = await createDevToolsContext(resolved);
24
- return {
25
- config: resolved,
26
- context
27
- };
28
- }
29
- function dedupeVitePlugins(plugins, include) {
30
- const toDelete = [];
31
- const map = /* @__PURE__ */ new Map();
32
- for (let i = 0; i < plugins.length; i++) {
33
- const plugin = plugins[i];
34
- if (!plugin || !include(plugin)) continue;
35
- if (map.has(plugin.name)) toDelete.push(i);
36
- else map.set(plugin.name, plugin);
37
- }
38
- toDelete.sort((a, b) => b - a);
39
- for (const i of toDelete) plugins.splice(i, 1);
40
- return plugins;
41
- }
42
-
43
- //#endregion
44
6
  //#region src/node/cli.ts
45
7
  const cli = cac("vite-devtools");
46
8
  process.on("SIGINT", () => {
47
9
  process.exit(0);
48
10
  });
49
- cli.command("build", "Build devtools with current config file for static hosting").option("--root <root>", "Root directory", { default: process.cwd() }).option("--config <config>", "Vite config file").option("--base <baseURL>", "Base URL for deployment", { default: "/" }).option("--outDir <dir>", "Output directory", { default: ".vite-devtools" }).action(async (options) => {
50
- console.log(ansis_default.cyan`${MARK_NODE} Building static Vite DevTools...`);
51
- const devtools = await startStandaloneDevTools({
52
- cwd: options.root,
53
- config: options.config
54
- });
55
- const outDir = resolve(devtools.config.root, options.outDir);
56
- if (existsSync(outDir)) await fs.rm(outDir, { recursive: true });
57
- const devToolsRoot = join(outDir, "__vite_devtools__");
58
- await fs.mkdir(devToolsRoot, { recursive: true });
59
- await fs.cp(dirClientStandalone, devToolsRoot, { recursive: true });
60
- for (const { baseUrl, distDir } of devtools.context.staticDirs) {
61
- console.log(ansis_default.cyan`${MARK_NODE} Copying static files from ${distDir} to ${join(outDir, baseUrl)}`);
62
- await fs.mkdir(join(outDir, baseUrl), { recursive: true });
63
- await fs.cp(distDir, join(outDir, baseUrl), { recursive: true });
64
- }
65
- await fs.mkdir(resolve(devToolsRoot, "api"), { recursive: true });
66
- await fs.writeFile(resolve(devToolsRoot, "api/connection.json"), JSON.stringify({ backend: "static" }, null, 2), "utf-8");
67
- console.log(ansis_default.cyan`${MARK_NODE} Writing RPC dump to ${resolve(devToolsRoot, "api/rpc-dump.json")}`);
68
- const dump = {};
69
- for (const [key, value] of Object.entries(devtools.context.rpc.functions)) if (value.type === "static") dump[key] = await value.handler?.();
70
- await fs.writeFile(resolve(devToolsRoot, "api/rpc-dump.json"), JSON.stringify(dump, null, 2), "utf-8");
71
- console.log(ansis_default.green`${MARK_NODE} Built to ${relative(devtools.config.root, outDir)}`);
72
- throw new Error("[Vite DevTools] Build mode of Vite DevTools is not yet complete");
73
- });
74
- cli.command("", "Start devtools").option("--root <root>", "Root directory", { default: process.cwd() }).option("--config <config>", "Vite config file").option("--host <host>", "Host", { default: process.env.HOST || "127.0.0.1" }).option("--port <port>", "Port", { default: process.env.PORT || 9999 }).option("--open", "Open browser", { default: true }).action(async (options) => {
75
- const host = options.host;
76
- const port = await getPort({
77
- port: options.port,
78
- portRange: [9999, 15e3],
79
- host
80
- });
81
- const devtools = await startStandaloneDevTools({ cwd: options.root });
82
- const { h3 } = await createDevToolsMiddleware({
83
- cwd: devtools.config.root,
84
- context: devtools.context
85
- });
86
- const app = createApp();
87
- app.use("/", eventHandler(async (event) => {
88
- if (event.node.req.url === "/") return sendRedirect(event, "/__vite_devtools__/");
89
- }));
90
- app.use("/__vite_devtools__", h3.handler);
91
- createServer(toNodeListener(app)).listen(port, host, async () => {
92
- console.log(ansis_default.green`${MARK_NODE} Vite DevTools started at`, ansis_default.green(`http://${host === "127.0.0.1" ? "localhost" : host}:${port}`), "\n");
93
- if (options.open) await open(`http://${host === "127.0.0.1" ? "localhost" : host}:${port}`);
94
- });
95
- });
11
+ cli.command("build", "Build devtools with current config file for static hosting").option("--root <root>", "Root directory", { default: process.cwd() }).option("--config <config>", "Vite config file").option("--base <baseURL>", "Base URL for deployment", { default: "/" }).option("--outDir <dir>", "Output directory", { default: ".vite-devtools" }).action(build);
12
+ cli.command("", "Start devtools").option("--root <root>", "Root directory", { default: process.cwd() }).option("--config <config>", "Vite config file").option("--host <host>", "Host", { default: process.env.HOST || "127.0.0.1" }).option("--port <port>", "Port", { default: process.env.PORT || 9999 }).option("--open", "Open browser", { default: true }).action(start);
96
13
  cli.help();
97
14
  cli.parse();
98
15
 
@@ -1,29 +1,126 @@
1
- import { useLocalStorage } from "../core-uTAXYiA1.js";
1
+ import { I as reactive, P as markRaw, R as ref, V as toRefs, k as watchEffect, s as computed } from "../vue.runtime.esm-bundler-DL0i8o0W.js";
2
+ import { i as useLocalStorage } from "../dist-BpFPAu5f.js";
3
+ import { a as docksGroupByCategories, i as useDocksEntries, n as createDockEntryState, s as BUILTIN_ENTRIES, t as DEFAULT_DOCK_PANEL_STORE } from "../docks-CYaKLVhQ.js";
4
+ import { DEFAULT_STATE_USER_SETTINGS } from "@vitejs/devtools-kit/constants";
2
5
  import { getDevToolsRpcClient } from "@vitejs/devtools-kit/client";
3
6
 
7
+ //#region src/client/webcomponents/state/setup-script.ts
8
+ function _executeSetupScript(entry, context) {
9
+ const id = `${entry.type}:${entry.id}`;
10
+ return import(
11
+ /* @vite-ignore */
12
+ ["/.devtools", "imports"].join("-")
13
+ ).then((module) => {
14
+ const importFn = module.importsMap[id];
15
+ if (!importFn) return Promise.reject(/* @__PURE__ */ new Error(`[VITE DEVTOOLS] No import found for id: ${id}`));
16
+ return importFn().then((fn) => fn(context));
17
+ }).catch((error) => {
18
+ console.error("[VITE DEVTOOLS] Error executing import action", error);
19
+ return Promise.reject(error);
20
+ });
21
+ }
22
+ const _setupPromises = /* @__PURE__ */ new Map();
23
+ function executeSetupScript(entry, context) {
24
+ if (_setupPromises.has(entry.id)) return _setupPromises.get(entry.id);
25
+ const promise = _executeSetupScript(entry, context);
26
+ _setupPromises.set(entry.id, promise);
27
+ return promise;
28
+ }
29
+
30
+ //#endregion
31
+ //#region src/client/webcomponents/state/context.ts
32
+ let _docksContext;
33
+ async function createDocksContext(clientType, rpc, panelStore) {
34
+ if (_docksContext) return _docksContext;
35
+ const dockEntries = await useDocksEntries(rpc);
36
+ const selectedId = ref(null);
37
+ const selected = computed(() => dockEntries.value.find((entry) => entry.id === selectedId.value) ?? BUILTIN_ENTRIES.find((entry) => entry.id === selectedId.value) ?? null);
38
+ const dockEntryStateMap = reactive(/* @__PURE__ */ new Map());
39
+ watchEffect(() => {
40
+ for (const entry of dockEntries.value) {
41
+ if (dockEntryStateMap.has(entry.id)) {
42
+ dockEntryStateMap.get(entry.id).entryMeta = entry;
43
+ continue;
44
+ }
45
+ dockEntryStateMap.set(entry.id, createDockEntryState(entry, selected));
46
+ }
47
+ });
48
+ panelStore ||= ref(DEFAULT_DOCK_PANEL_STORE());
49
+ const switchEntry = async (id = null) => {
50
+ if (id == null) {
51
+ selectedId.value = null;
52
+ return true;
53
+ }
54
+ if (id === "~client-auth-notice") {
55
+ selectedId.value = id;
56
+ panelStore.value.open = true;
57
+ return true;
58
+ }
59
+ const entry = dockEntries.value.find((e) => e.id === id);
60
+ if (!entry) return false;
61
+ if (entry.type === "action" || entry.type === "custom-render" || entry.type === "iframe" && entry.clientScript) {
62
+ const current = dockEntryStateMap.get(id);
63
+ await executeSetupScript(entry, reactive({
64
+ ...toRefs(_docksContext),
65
+ current
66
+ }));
67
+ }
68
+ selectedId.value = entry.id;
69
+ panelStore.value.open = true;
70
+ return true;
71
+ };
72
+ const toggleEntry = async (id) => {
73
+ if (selectedId.value === id) return switchEntry(null);
74
+ return switchEntry(id);
75
+ };
76
+ let _settingsStorePromise;
77
+ const getSettingsStore = async () => {
78
+ if (!_settingsStorePromise) _settingsStorePromise = rpc.sharedState.get("devtoolskit:internal:user-settings", { initialValue: DEFAULT_STATE_USER_SETTINGS() });
79
+ return _settingsStorePromise;
80
+ };
81
+ const settingsStore = markRaw(await getSettingsStore());
82
+ const groupedEntries = computed(() => {
83
+ return docksGroupByCategories(dockEntries.value, settingsStore.value());
84
+ });
85
+ _docksContext = reactive({
86
+ panel: {
87
+ store: panelStore,
88
+ isDragging: false,
89
+ isResizing: false,
90
+ isVertical: computed(() => panelStore.value.position === "left" || panelStore.value.position === "right")
91
+ },
92
+ docks: {
93
+ selectedId,
94
+ selected,
95
+ entries: dockEntries,
96
+ entryToStateMap: markRaw(dockEntryStateMap),
97
+ groupedEntries,
98
+ settings: settingsStore,
99
+ getStateById: (id) => dockEntryStateMap.get(id),
100
+ switchEntry,
101
+ toggleEntry
102
+ },
103
+ rpc,
104
+ clientType
105
+ });
106
+ return _docksContext;
107
+ }
108
+
109
+ //#endregion
4
110
  //#region src/client/inject/index.ts
5
111
  async function init() {
6
112
  console.log("[VITE DEVTOOLS] Client injected");
7
- const { rpc } = await getDevToolsRpcClient();
8
- console.log("[VITE DEVTOOLS] RPC", rpc);
9
- const docks = await rpc["vite:core:list-dock-entries"]();
10
- console.log("[VITE DEVTOOLS] Docks", docks);
11
- const rpcFunctions = await rpc["vite:core:list-rpc-functions"]();
12
- console.log("[VITE DEVTOOLS] RPC Functions", rpcFunctions);
13
- const state = useLocalStorage("vite-devtools-dock-state", {
113
+ const context = await createDocksContext("embedded", await getDevToolsRpcClient(), useLocalStorage("vite-devtools-dock-state", {
14
114
  width: 80,
15
115
  height: 80,
16
116
  top: 0,
17
117
  left: 0,
18
118
  position: "left",
19
119
  open: false,
20
- minimizePanelInactive: 3e3
21
- }, { mergeDefaults: true });
120
+ inactiveTimeout: 3e3
121
+ }, { mergeDefaults: true }));
22
122
  const { DockEmbedded } = await import("@vitejs/devtools/client/webcomponents");
23
- const dockEl = new DockEmbedded({
24
- state,
25
- docks
26
- });
123
+ const dockEl = new DockEmbedded({ context });
27
124
  document.body.appendChild(dockEl);
28
125
  }
29
126
  if (window.parent !== window) console.log("[VITE DEVTOOLS] Skipping in iframe");
@@ -0,0 +1 @@
1
+ import{c as e,m as t,n}from"./index-DWC0UjCz.js";var r={};function i(n,r){return t(),e(`div`,null,` Logs // TODO: `)}var a=n(r,[[`render`,i]]);export{a as default};