@liip/esbuild-plugin-ast-vue
Version:
Esbuild plugin to parse Vue AST
64 lines • 2.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.scriptCache = void 0;
exports.resolveScript = resolveScript;
const compiler_sfc_1 = require("@vue/compiler-sfc");
const convert_source_map_1 = require("convert-source-map");
const cache_1 = require("./cache");
const template_1 = require("./template");
exports.scriptCache = new WeakMap();
function resolveScript({ filename, scriptOptions = {}, templateOptions = {}, isProd, sourcemap, }) {
const descriptor = (0, cache_1.getDescriptorCache)(filename);
const cached = exports.scriptCache.get(descriptor);
if (cached) {
return {
code: cached.content,
isTs: cached.lang === 'ts',
error: [],
};
}
const error = [];
const { script, scriptSetup } = descriptor;
const isTs = (script && script.lang === 'ts') ||
(scriptSetup && scriptSetup.lang === 'ts');
let code = 'export default {}';
if (!descriptor.script && !descriptor.scriptSetup) {
return {
code,
};
}
const scopeId = (0, cache_1.getId)(filename);
try {
const res = (0, compiler_sfc_1.compileScript)(descriptor, {
id: scopeId,
isProd,
sourceMap: sourcemap,
inlineTemplate: true,
babelParserPlugins: scriptOptions.babelParserPlugins,
templateOptions: descriptor.template
? (0, template_1.getTemplateOptions)({
descriptor,
options: templateOptions,
isProd,
scopeId,
})
: {},
});
code = res.content;
if (res.map) {
code += (0, convert_source_map_1.fromObject)(res.map).toComment();
}
exports.scriptCache.set(descriptor, res);
}
catch (e) {
error.push({
text: e.message,
});
}
return {
code,
error,
isTs,
};
}
//# sourceMappingURL=script.js.map