UNPKG

@liip/esbuild-plugin-ast-vue

Version:

Esbuild plugin to parse Vue AST

63 lines 2.62 kB
"use strict"; 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