UNPKG

esbuild-plugin-vue-iii

Version:
156 lines 6.03 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseVueRequest = void 0; try { require.resolve('@vue/compiler-sfc'); } catch (e) { throw new Error('@vitejs/plugin-vue requires @vue/compiler-sfc to be present in the dependency ' + 'tree.'); } const fs_1 = __importDefault(require("fs")); // import { createFilter } from '@rollup/pluginutils' const compiler_sfc_1 = require("@vue/compiler-sfc"); const query_1 = require("./utils/query"); const descriptorCache_1 = require("./utils/descriptorCache"); const script_1 = require("./script"); const main_1 = require("./main"); // import { handleHotUpdate } from './handleHotUpdate' const template_1 = require("./template"); const style_1 = require("./style"); const handleHotUpdate = () => { }; const createFilter = () => { }; var query_2 = require("./utils/query"); Object.defineProperty(exports, "parseVueRequest", { enumerable: true, get: function () { return query_2.parseVueRequest; } }); function vuePlugin(rawOptions = {}) { const { include = /\.vue$/, exclude, customElement = /\.ce\.vue$/, refTransform = false } = rawOptions; const filter = createFilter(include, exclude); const customElementFilter = typeof customElement === 'boolean' ? () => customElement : createFilter(customElement); const refTransformFilter = refTransform === false ? () => false : refTransform === true ? createFilter(/\.(j|t)sx?$/, /node_modules/) : createFilter(refTransform); // compat for older verisons const canUseRefTransform = typeof compiler_sfc_1.shouldTransformRef === 'function'; let options = { isProduction: process.env.NODE_ENV === 'production', ...rawOptions, include, exclude, customElement, refTransform, root: process.cwd() }; return { name: 'vite:vue', handleHotUpdate(ctx) { if (!filter(ctx.file)) { return; } return handleHotUpdate(ctx); }, config(config) { return { define: { __VUE_OPTIONS_API__: true, __VUE_PROD_DEVTOOLS__: false, ...config.define }, ssr: { external: ['vue', '@vue/server-renderer'] } }; }, configResolved(config) { options = { ...options, root: config.root, isProduction: config.isProduction }; }, configureServer(server) { options.devServer = server; }, async resolveId(id, importer) { // serve sub-part requests (*?vue) as virtual modules if (query_1.parseVueRequest(id).query.vue) { return id; } }, load(id, ssr = !!options.ssr) { const { filename, query } = query_1.parseVueRequest(id); // select corresponding block for sub-part virtual modules if (query.vue) { if (query.src) { return fs_1.default.readFileSync(filename, 'utf-8'); } const descriptor = descriptorCache_1.getDescriptor(filename, options.root, options.isProduction); let block; if (query.type === 'script') { // handle <scrip> + <script setup> merge via compileScript() block = script_1.getResolvedScript(descriptor, ssr); } else if (query.type === 'template') { block = descriptor.template; } else if (query.type === 'style') { block = descriptor.styles[query.index]; } else if (query.index != null) { block = descriptor.customBlocks[query.index]; } if (block) { return { code: block.content, map: block.map }; } } }, transform(code, id, ssr = !!options.ssr) { const { filename, query } = query_1.parseVueRequest(id); if (query.raw) { return; } if (!filter(filename) && !query.vue) { if (!query.vue && refTransformFilter(filename)) { if (!canUseRefTransform) { this.warn('refTransform requires @vue/compiler-sfc@^3.2.5.'); } else if (compiler_sfc_1.shouldTransformRef(code)) { return compiler_sfc_1.transformRef(code, { filename, sourceMap: true }); } } return; } if (!query.vue) { // main request return main_1.transformMain(code, filename, options, this, ssr, customElementFilter(filename)); } else { // sub block request const descriptor = descriptorCache_1.getDescriptor(filename, options.root, options.isProduction); if (query.type === 'template') { return template_1.transformTemplateAsModule(code, descriptor, options, this, ssr); } else if (query.type === 'style') { return style_1.transformStyle(code, descriptor, Number(query.index), options, this); } } } }; } exports.default = vuePlugin; // overwrite for cjs require('...')() usage module.exports = vuePlugin; vuePlugin['default'] = vuePlugin; //# sourceMappingURL=index.js.map