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.
113 lines
4.6 KiB
113 lines
4.6 KiB
6 months ago
|
"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 [];
|
||
|
}
|