123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327 |
- var __create = Object.create;
- var __defProp = Object.defineProperty;
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
- var __getOwnPropNames = Object.getOwnPropertyNames;
- var __getProtoOf = Object.getPrototypeOf;
- var __hasOwnProp = Object.prototype.hasOwnProperty;
- var __export = (target, all) => {
- for (var name in all)
- __defProp(target, name, { get: all[name], enumerable: true });
- };
- var __copyProps = (to, from, except, desc) => {
- if (from && typeof from === "object" || typeof from === "function") {
- for (let key of __getOwnPropNames(from))
- if (!__hasOwnProp.call(to, key) && key !== except)
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
- }
- return to;
- };
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
- // If the importer is in node compatibility mode or this is not an ESM
- // file that has been converted to a CommonJS file using a Babel-
- // compatible transform (i.e. "__esModule" has not been set), then set
- // "default" to the CommonJS "module.exports" for node compatibility.
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
- mod
- ));
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
- // src/index.ts
- var src_exports = {};
- __export(src_exports, {
- DEFAULT_INSPECTOR_OPTIONS: () => DEFAULT_INSPECTOR_OPTIONS,
- default: () => src_default,
- normalizeComboKeyPrint: () => normalizeComboKeyPrint
- });
- module.exports = __toCommonJS(src_exports);
- // ../../node_modules/.pnpm/tsup@7.2.0_postcss@8.4.49_typescript@5.2.2/node_modules/tsup/assets/cjs_shims.js
- var getImportMetaUrl = () => typeof document === "undefined" ? new URL("file:" + __filename).href : document.currentScript && document.currentScript.src || new URL("main.js", document.baseURI).href;
- var importMetaUrl = /* @__PURE__ */ getImportMetaUrl();
- // src/index.ts
- var import_node_path2 = __toESM(require("path"));
- var import_node_url = require("url");
- var import_node_fs = __toESM(require("fs"));
- var import_node_process = __toESM(require("process"));
- var import_kolorist = require("kolorist");
- var import_vite2 = require("vite");
- var import_magic_string2 = __toESM(require("magic-string"));
- // src/compiler/template.ts
- var import_node_path = __toESM(require("path"));
- var import_magic_string = __toESM(require("magic-string"));
- var import_compiler_dom = require("@vue/compiler-dom");
- var import_core = require("@babel/core");
- var import_babel_plugin_jsx = __toESM(require("@vue/babel-plugin-jsx"));
- var import_plugin_transform_typescript = __toESM(require("@babel/plugin-transform-typescript"));
- var import_plugin_syntax_import_meta = __toESM(require("@babel/plugin-syntax-import-meta"));
- var import_plugin_proposal_decorators = __toESM(require("@babel/plugin-proposal-decorators"));
- var import_plugin_syntax_import_attributes = __toESM(require("@babel/plugin-syntax-import-attributes"));
- var import_vite = require("vite");
- var EXCLUDE_TAG = ["template", "script", "style"];
- var KEY_DATA = "data-v-inspector";
- async function compileSFCTemplate({ code, id, type }) {
- const s = new import_magic_string.default(code);
- const relativePath = (0, import_vite.normalizePath)(import_node_path.default.relative(process.cwd(), id));
- const result = await new Promise((resolve) => {
- switch (type) {
- case "template": {
- const ast = (0, import_compiler_dom.parse)(code, { comments: true });
- (0, import_compiler_dom.transform)(ast, {
- nodeTransforms: [
- (node) => {
- if (node.type === 1) {
- if ((node.tagType === 0 || node.tagType === 1) && !EXCLUDE_TAG.includes(node.tag)) {
- if (node.loc.source.includes(KEY_DATA))
- return;
- const insertPosition = node.props.length ? Math.max(...node.props.map((i) => i.loc.end.offset)) : node.loc.start.offset + node.tag.length + 1;
- const { line, column } = node.loc.start;
- const content = ` ${KEY_DATA}="${relativePath}:${line}:${column}"`;
- s.prependLeft(
- insertPosition,
- content
- );
- }
- }
- }
- ]
- });
- break;
- }
- case "jsx": {
- const ast = (0, import_core.parse)(code, {
- babelrc: false,
- configFile: false,
- comments: true,
- plugins: [
- import_plugin_syntax_import_meta.default,
- [import_babel_plugin_jsx.default, {}],
- [
- import_plugin_transform_typescript.default,
- { isTSX: true, allowExtensions: true }
- ],
- [
- import_plugin_proposal_decorators.default,
- { legacy: true }
- ],
- [
- import_plugin_syntax_import_attributes.default,
- { deprecatedAssertSyntax: true }
- ]
- ]
- });
- (0, import_core.traverse)(ast, {
- enter({ node }) {
- if (node.type === "JSXElement" && !EXCLUDE_TAG.includes(s.slice(node.openingElement.name.start, node.openingElement.name.end))) {
- if (node.openingElement.attributes.some(
- (attr) => attr.type !== "JSXSpreadAttribute" && attr.name.name === KEY_DATA
- ))
- return;
- const insertPosition = node.openingElement.end - (node.openingElement.selfClosing ? 2 : 1);
- const { line, column } = node.loc.start;
- const content = ` ${KEY_DATA}="${relativePath}:${line}:${column}"`;
- s.prependLeft(
- insertPosition,
- content
- );
- }
- }
- });
- break;
- }
- default:
- break;
- }
- resolve(s.toString());
- });
- return result;
- }
- // src/utils/index.ts
- function parseVueRequest(id) {
- const [filename] = id.split("?", 2);
- const url = new URL(id, "http://domain.inspector");
- const query = Object.fromEntries(url.searchParams.entries());
- if (query.vue != null)
- query.vue = true;
- if (query.src != null)
- query.src = true;
- if (query.index != null)
- query.index = Number(query.index);
- if (query.raw != null)
- query.raw = true;
- if (query.hasOwnProperty("lang.tsx") || query.hasOwnProperty("lang.jsx"))
- query.isJsx = true;
- return {
- filename,
- query
- };
- }
- var FS_PREFIX = "/@fs/";
- var IS_WINDOWS = process.platform === "win32";
- var queryRE = /\?.*$/s;
- var hashRE = /#.*$/s;
- function idToFile(id) {
- if (id.startsWith(FS_PREFIX))
- id = id = id.slice(IS_WINDOWS ? FS_PREFIX.length : FS_PREFIX.length - 1);
- return id.replace(hashRE, "").replace(queryRE, "");
- }
- // src/index.ts
- var toggleComboKeysMap = {
- control: import_node_process.default.platform === "darwin" ? "Control(^)" : "Ctrl(^)",
- meta: "Command(\u2318)",
- shift: "Shift(\u21E7)"
- };
- function getInspectorPath() {
- const pluginPath = (0, import_vite2.normalizePath)(import_node_path2.default.dirname((0, import_node_url.fileURLToPath)(importMetaUrl)));
- return pluginPath.replace(/\/dist$/, "/src");
- }
- function normalizeComboKeyPrint(toggleComboKey) {
- return toggleComboKey.split("-").map((key) => toggleComboKeysMap[key] || key[0].toUpperCase() + key.slice(1)).join((0, import_kolorist.dim)("+"));
- }
- var DEFAULT_INSPECTOR_OPTIONS = {
- vue: 3,
- enabled: false,
- toggleComboKey: import_node_process.default.platform === "darwin" ? "meta-shift" : "control-shift",
- toggleButtonVisibility: "active",
- toggleButtonPos: "top-right",
- appendTo: "",
- lazyLoad: false,
- launchEditor: import_node_process.default.env.LAUNCH_EDITOR ?? "code",
- reduceMotion: false
- };
- function VitePluginInspector(options = DEFAULT_INSPECTOR_OPTIONS) {
- const inspectorPath = getInspectorPath();
- const normalizedOptions = {
- ...DEFAULT_INSPECTOR_OPTIONS,
- ...options
- };
- let config;
- const {
- vue,
- appendTo,
- cleanHtml = vue === 3
- // Only enabled for Vue 3 by default
- } = normalizedOptions;
- if (normalizedOptions.launchEditor)
- import_node_process.default.env.LAUNCH_EDITOR = normalizedOptions.launchEditor;
- return [
- {
- name: "vite-plugin-vue-inspector",
- enforce: "pre",
- apply(_, { command }) {
- return command === "serve" && import_node_process.default.env.NODE_ENV !== "test";
- },
- async resolveId(importee) {
- if (importee.startsWith("virtual:vue-inspector-options")) {
- return importee;
- } else if (importee.startsWith("virtual:vue-inspector-path:")) {
- const resolved = importee.replace("virtual:vue-inspector-path:", `${inspectorPath}/`);
- return resolved;
- }
- },
- async load(id) {
- if (id === "virtual:vue-inspector-options") {
- return `export default ${JSON.stringify({ ...normalizedOptions, base: config.base })}`;
- } else if (id.startsWith(inspectorPath)) {
- const { query } = parseVueRequest(id);
- if (query.type)
- return;
- const file = idToFile(id);
- if (import_node_fs.default.existsSync(file))
- return await import_node_fs.default.promises.readFile(file, "utf-8");
- else
- console.error(`failed to find file for vue-inspector: ${file}, referenced by id ${id}.`);
- }
- },
- transform(code, id) {
- const { filename, query } = parseVueRequest(id);
- const isJsx = filename.endsWith(".jsx") || filename.endsWith(".tsx") || filename.endsWith(".vue") && query.isJsx;
- const isTpl = filename.endsWith(".vue") && query.type !== "style" && !query.raw;
- if (isJsx || isTpl)
- return compileSFCTemplate({ code, id: filename, type: isJsx ? "jsx" : "template" });
- if (!appendTo)
- return;
- if (typeof appendTo === "string" && filename.endsWith(appendTo) || appendTo instanceof RegExp && appendTo.test(filename))
- return { code: `${code}
- import 'virtual:vue-inspector-path:load.js'` };
- },
- configureServer(server) {
- const _printUrls = server.printUrls;
- const { toggleComboKey } = normalizedOptions;
- toggleComboKey && (server.printUrls = () => {
- const keys = normalizeComboKeyPrint(toggleComboKey);
- _printUrls();
- console.log(` ${(0, import_kolorist.green)("\u279C")} ${(0, import_kolorist.bold)("Vue Inspector")}: ${(0, import_kolorist.green)(`Press ${(0, import_kolorist.yellow)(keys)} in App to toggle the Inspector`)}
- `);
- });
- },
- transformIndexHtml(html) {
- if (appendTo)
- return;
- return {
- html,
- tags: [
- {
- tag: "script",
- injectTo: "head",
- attrs: {
- type: "module",
- src: `${config.base || "/"}@id/virtual:vue-inspector-path:load.js`
- }
- }
- ]
- };
- },
- configResolved(resolvedConfig) {
- config = resolvedConfig;
- }
- },
- {
- name: "vite-plugin-vue-inspector:post",
- enforce: "post",
- apply(_, { command }) {
- return cleanHtml && vue === 3 && command === "serve" && import_node_process.default.env.NODE_ENV !== "test";
- },
- transform(code) {
- if (code.includes("_interopVNode"))
- return;
- if (!code.includes("data-v-inspector"))
- return;
- const fn = /* @__PURE__ */ new Set();
- const s = new import_magic_string2.default(code);
- s.replace(/(createElementVNode|createVNode|createElementBlock|createBlock) as _\1,?/g, (_, name) => {
- fn.add(name);
- return "";
- });
- if (!fn.size)
- return;
- s.appendLeft(0, `/* Injection by vite-plugin-vue-inspector Start */
- import { ${Array.from(fn.values()).map((i) => `${i} as __${i}`).join(",")} } from 'vue'
- function _interopVNode(vnode) {
- if (vnode && vnode.props && 'data-v-inspector' in vnode.props) {
- const data = vnode.props['data-v-inspector']
- delete vnode.props['data-v-inspector']
- Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false })
- }
- return vnode
- }
- ${Array.from(fn.values()).map((i) => `function _${i}(...args) { return _interopVNode(__${i}(...args)) }`).join("\n")}
- /* Injection by vite-plugin-vue-inspector End */
- `);
- return {
- code: s.toString(),
- map: s.generateMap({ hires: "boundary" })
- };
- }
- }
- ];
- }
- var src_default = VitePluginInspector;
- // Annotate the CommonJS export names for ESM import in node:
- 0 && (module.exports = {
- DEFAULT_INSPECTOR_OPTIONS,
- normalizeComboKeyPrint
- });
|