esbuild-plugin-vue-iii
Version:
a esbuild plugin for vue 3 SFC files.
156 lines • 6.03 kB
JavaScript
;
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