jsv-compiler
Version:
use vue3 template in .js
67 lines • 2.55 kB
JavaScript
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
var compiler = require('./vue-pkg/compiler-sfc.cjs');
var helperNameMap = require('./vue-pkg/compiler-core.cjs').helperNameMap;
var parse = compiler.parse, compileTemplate = compiler.compileTemplate;
function compileJsv(source) {
var target = '';
var parsed = parse(source);
var astAll = parsed.ast, descriptor = parsed.descriptor, errors = parsed.errors;
var templates = descriptor.templates;
for (var i_1 = 0; i_1 < templates.length; i_1++) {
var template = templates[i_1];
var _a = compileTemplate({
source: template.content,
filename: 'App.jsfv',
inMap: template.map,
compilerOptions: {
mode: 'function'
}
}), code = _a.code, map = _a.map, errors2 = _a.errors, astTempl = _a.ast;
var result = "(()=> {\n " + code + " \n})()\n";
// console.log(result)
template.code = result;
astAll.helpers = new Set(__spreadArrays(astAll.helpers, astTempl.helpers));
}
var i = 0;
astAll.children.forEach(function (node, index) {
if (node.tag !== 'template') {
// 去掉 ` `
var source_1 = node.loc.source;
if (index === 0) {
source_1 = source_1.replace(/`\s*?$/, '');
}
else if (index === astAll.children.length - 1) {
source_1 = source_1.replace(/^\s*?`/, '');
}
else {
source_1 = source_1.replace(/`\s*?$/, '');
source_1 = source_1.replace(/^\s*?`/, '');
}
target += source_1;
}
else {
target += templates[i++].code;
}
});
function genModulePreamble(ast) {
// generate import statements for helpers
if (ast.helpers.size) {
return "import { " + __spreadArrays(ast.helpers).map(function (s) { return helperNameMap[s] + " as _" + helperNameMap[s]; })
.join(', ') + " } from 'vue'\n";
}
return '';
}
target = genModulePreamble(astAll) + target;
return {
code: target,
map: {}
};
}
exports.compileJsv = compileJsv;
//# sourceMappingURL=compileJsv.js.map