You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

112 lines
4.6 KiB

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.baseCompile = exports.getBaseTransformPreset = void 0;
const fs_1 = __importDefault(require("fs"));
const compiler_core_1 = require("@vue/compiler-core");
const shared_1 = require("@vue/shared");
const uni_cli_shared_1 = require("@dcloudio/uni-cli-shared");
const codegen_1 = require("./codegen");
const transform_1 = require("./transform");
const transformExpression_1 = require("./transforms/transformExpression");
const transformIdentifier_1 = require("./transforms/transformIdentifier");
const vIf_1 = require("./transforms/vIf");
const vFor_1 = require("./transforms/vFor");
const codegen_2 = require("./template/codegen");
const vOn_1 = require("./transforms/vOn");
const transformElement_1 = require("./transforms/transformElement");
const vBind_1 = require("./transforms/vBind");
const transformComponent_1 = require("./transforms/transformComponent");
const vSlot_1 = require("./transforms/vSlot");
const transformRoot_1 = require("./transforms/transformRoot");
const transformTag_1 = require("./transforms/transformTag");
const vHtml_1 = require("./transforms/vHtml");
const vText_1 = require("./transforms/vText");
const transformAttr_1 = require("./transforms/transformAttr");
function getBaseTransformPreset({ prefixIdentifiers, skipTransformIdentifier, }) {
// order is important
const nodeTransforms = [
transformRoot_1.transformRoot,
transformAttr_1.transformAttr,
transformTag_1.transformTag,
vHtml_1.transformHtml,
vText_1.transformText,
vIf_1.transformIf,
vFor_1.transformFor,
vSlot_1.transformSlot,
];
if (!skipTransformIdentifier) {
nodeTransforms.push(transformIdentifier_1.transformIdentifier);
}
nodeTransforms.push(transformElement_1.transformElement);
nodeTransforms.push(transformComponent_1.transformComponent);
if (prefixIdentifiers) {
nodeTransforms.push(transformExpression_1.transformExpression);
}
return [
nodeTransforms,
{ on: vOn_1.transformOn, bind: vBind_1.transformBind },
];
}
exports.getBaseTransformPreset = getBaseTransformPreset;
function baseCompile(template, options = {}) {
const prefixIdentifiers = options.prefixIdentifiers === true || options.mode === 'module';
const ast = ((0, shared_1.isString)(template) ? (0, compiler_core_1.baseParse)(template, options) : template);
const [nodeTransforms, directiveTransforms] = getBaseTransformPreset({
prefixIdentifiers,
skipTransformIdentifier: options.skipTransformIdentifier === true,
});
options.hashId = genHashId(options);
if (options.filename) {
if (!options.filters && options.miniProgram?.filter) {
options.filters = parseFilters(options.miniProgram.filter.lang, options.filename);
}
}
const context = (0, transform_1.transform)(ast, (0, shared_1.extend)({}, options, {
prefixIdentifiers,
nodeTransforms: [...nodeTransforms, ...(options.nodeTransforms || [])],
directiveTransforms: (0, shared_1.extend)({}, directiveTransforms, options.directiveTransforms || {}),
}));
const result = (0, shared_1.extend)((0, codegen_1.generate)((0, shared_1.extend)(ast, {
bindingComponents: context.bindingComponents,
}), options), { ast });
if (options.filename && options.miniProgram?.emitFile) {
const { class: clazz, directive, emitFile, event, slot, lazyElement, component, } = options.miniProgram;
(0, codegen_2.generate)(ast, {
class: clazz,
scopeId: options.scopeId,
filename: options.filename,
directive,
emitFile,
event,
slot,
lazyElement,
component,
isBuiltInComponent: context.isBuiltInComponent,
isMiniProgramComponent: context.isMiniProgramComponent,
});
}
return result;
}
exports.baseCompile = baseCompile;
function genHashId(options) {
if (options.hashId) {
return options.hashId;
}
if (options.scopeId) {
return options.scopeId.replace('data-v-', '');
}
if (options.filename) {
return (0, uni_cli_shared_1.hash)(options.filename);
}
return '';
}
function parseFilters(lang, filename) {
filename = filename.split('?')[0];
if (fs_1.default.existsSync(filename)) {
return (0, uni_cli_shared_1.parseFilterNames)(lang, fs_1.default.readFileSync(filename, 'utf8'));
}
return [];
}