vue-simple-compiler
Version:
A lib to compile Vue Single-File Component into plain JavaScript & CSS.
101 lines (100 loc) • 3.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.resolveScript = void 0;
const compiler_sfc_1 = require("vue/compiler-sfc");
const constants_1 = require("./constants");
const map_1 = require("./map");
const options_1 = require("./options");
const transform_1 = require("./transform");
const resolveScript = (descriptor, context) => {
const scriptLang = (descriptor.script && descriptor.script.lang) ||
(descriptor.scriptSetup && descriptor.scriptSetup.lang) ||
'js';
if (descriptor.script || descriptor.scriptSetup) {
if (scriptLang !== 'js' && scriptLang !== 'ts') {
return {
errors: [new Error(`Unsupported script lang: ${scriptLang}`)],
};
}
if (descriptor.scriptSetup?.src) {
return {
errors: [
new Error(`Unsupported external script setup: ${descriptor.scriptSetup.src}`),
],
};
}
if (descriptor.script?.src) {
if (!(0, options_1.checkExtensionName)(descriptor.script.src, [scriptLang])) {
return {
errors: [
new Error(`The extension name doesn't match the script language "${scriptLang}": ${descriptor.script.src}.`),
],
};
}
context.externalJsList.push({
filename: descriptor.script.src,
query: {},
});
return {
result: {
code: `import ${constants_1.COMP_ID} from ${JSON.stringify(descriptor.script.src)}`,
},
};
}
const expressionPlugins = context
.features.hasTS
? ['typescript']
: undefined;
let scriptBlock;
try {
scriptBlock = (0, compiler_sfc_1.compileScript)(descriptor, {
...context.options.sfcScriptCompilerOptions,
id: context.id,
inlineTemplate: true,
templateOptions: {
...context.options.sfcScriptCompilerOptions?.templateOptions,
compilerOptions: {
expressionPlugins,
...context.options.sfcScriptCompilerOptions?.templateOptions
?.compilerOptions,
},
},
isProd: context.isProd,
});
}
catch (error) {
return { errors: [error] };
}
// basic source map
context.bindingMetadata = scriptBlock.bindings;
if (context.features.hasTS) {
try {
const transform = context.options.tsTransform || transform_1.tsTransform;
const transformed = transform(scriptBlock.content, context.options.tsCompilerOptions, context.options.tsRuntime);
const sourceMap = (0, map_1.chainSourceMap)(scriptBlock.map, transformed.sourceMap);
return {
result: {
code: (0, compiler_sfc_1.rewriteDefault)(transformed.code, constants_1.COMP_ID, expressionPlugins),
sourceMap,
},
};
}
catch (error) {
return { errors: [error] };
}
}
else {
// No source map update technically.
return {
result: {
code: (0, compiler_sfc_1.rewriteDefault)(scriptBlock.content, constants_1.COMP_ID, expressionPlugins),
sourceMap: scriptBlock.map,
},
};
}
}
else {
return { result: { code: `const ${constants_1.COMP_ID} = {}` } };
}
};
exports.resolveScript = resolveScript;