@liip/esbuild-plugin-ast-vue
Version:
Esbuild plugin to parse Vue AST
63 lines • 2.62 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.loadEntry = loadEntry;
const compiler_sfc_1 = require("@vue/compiler-sfc");
const cache_1 = require("./cache");
const utils_1 = require("./utils");
function loadEntry({ source, filename, sourcemap, }) {
const { descriptor, errors } = (0, compiler_sfc_1.parse)(source, {
sourceMap: sourcemap,
filename,
});
(0, cache_1.setDescriptorCache)(filename, descriptor);
const scopeId = (0, cache_1.setId)(filename);
const scriptPath = JSON.stringify(`${filename}?type=script`);
const scriptImportCode = `import script from ${scriptPath}\nexport * from ${scriptPath}`;
const scriptExportCode = 'export default script';
let templateImportCode = '';
let templateBindCode = '';
let styleImportCode = '';
let hasModuleInject = false;
let scopeIdInject = '';
if (!descriptor.scriptSetup && descriptor.template) {
const templatePath = JSON.stringify(`${filename}?type=template`);
templateImportCode += `import { render } from ${templatePath}`;
templateBindCode += `\nscript.render = render`;
}
descriptor.styles.forEach((styleBlock, i) => {
const stringIndex = String(i);
const stylePath = `${filename}?type=style&index=${stringIndex}`;
if (styleBlock.module) {
const moduleName = typeof styleBlock.module === 'string' ? styleBlock.module : '$style';
const importVarName = `__style${stringIndex}`;
if (!hasModuleInject) {
styleImportCode += `\nscript.__cssModules = cssModules = {}`;
hasModuleInject = true;
}
styleImportCode += `\nimport ${importVarName} from ${JSON.stringify(`${stylePath}&isModule=true&isNameImport=true`)}`;
styleImportCode += `\ncssModules[${JSON.stringify(moduleName)}] = ${importVarName}`;
styleImportCode += `\nimport ${JSON.stringify(`${stylePath}&isModule=true`)}`;
}
else {
styleImportCode += `\nimport ${JSON.stringify(stylePath)}`;
}
});
if (descriptor.styles.some((styleBlock) => styleBlock.scoped)) {
scopeIdInject += `script.__scopeId = ${JSON.stringify(scopeId)}`;
}
const code = [
scriptImportCode,
templateImportCode,
templateBindCode,
styleImportCode,
scriptExportCode,
scopeIdInject,
]
.filter(Boolean)
.join('\n');
return {
code,
errors: (0, utils_1.convertErrors)(errors, filename),
};
}
//# sourceMappingURL=entry.js.map