H5-contact/node_modules/@dcloudio/uni-cli-shared/dist/mp/externalClasses.js

129 lines
5.2 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createDefaultSFCStyleBlock = exports.findMiniProgramComponentStyleIsolation = exports.updateMiniProgramComponentStyleIsolation = exports.parseStyleIsolation = exports.parseExternalClasses = exports.updateMiniProgramComponentExternalClasses = exports.findMiniProgramComponentExternalClasses = exports.hasExternalClasses = exports.clearPageExternalClasses = exports.addPageExternalClasses = exports.updatePageExternalClasses = exports.findPageExternalClasses = void 0;
const types_1 = require("@babel/types");
const estree_walker_1 = require("estree-walker");
const utils_1 = require("../utils");
const externalClassesCache = new Map();
const pageStyleIsolationCache = new Map();
const pageExternalClassesCache = new Map();
function findPageExternalClasses(filename) {
return pageExternalClassesCache.get((0, utils_1.normalizePath)(filename));
}
exports.findPageExternalClasses = findPageExternalClasses;
function updatePageExternalClasses(filename, info) {
pageExternalClassesCache.set((0, utils_1.normalizePath)(filename), info);
}
exports.updatePageExternalClasses = updatePageExternalClasses;
function addPageExternalClasses(filename, staticClasses, hasDynamic, hasAppAndPageStyle) {
const normalizedFilename = (0, utils_1.normalizePath)(filename);
let info = pageExternalClassesCache.get(normalizedFilename);
if (!info) {
info = { staticClasses: new Set(), hasDynamic: false };
pageExternalClassesCache.set(normalizedFilename, info);
}
staticClasses.forEach((cls) => info.staticClasses.add(cls));
if (hasDynamic) {
info.hasDynamic = true;
}
if (hasAppAndPageStyle) {
info.hasAppAndPageStyle = true;
}
}
exports.addPageExternalClasses = addPageExternalClasses;
function clearPageExternalClasses(filename) {
pageExternalClassesCache.delete((0, utils_1.normalizePath)(filename));
}
exports.clearPageExternalClasses = clearPageExternalClasses;
function hasExternalClasses(code) {
return code.includes('externalClasses');
}
exports.hasExternalClasses = hasExternalClasses;
function findMiniProgramComponentExternalClasses(filename) {
return externalClassesCache.get((0, utils_1.normalizePath)(filename));
}
exports.findMiniProgramComponentExternalClasses = findMiniProgramComponentExternalClasses;
function updateMiniProgramComponentExternalClasses(filename, value) {
externalClassesCache.set((0, utils_1.normalizePath)(filename), value);
}
exports.updateMiniProgramComponentExternalClasses = updateMiniProgramComponentExternalClasses;
function parseExternalClasses(ast) {
const classes = [];
estree_walker_1.walk(ast, {
enter(child, parent) {
if (!(0, types_1.isIdentifier)(child) || child.name !== 'externalClasses') {
return;
}
// export default { externalClasses: ['my-class'] }
if (!(0, types_1.isObjectProperty)(parent)) {
return;
}
if (!(0, types_1.isArrayExpression)(parent.value)) {
return;
}
parent.value.elements.forEach((element) => {
if ((0, types_1.isStringLiteral)(element)) {
classes.push(element.value);
}
});
},
});
return classes;
}
exports.parseExternalClasses = parseExternalClasses;
function parseStyleIsolation(ast) {
let styleIsolationValue = '';
estree_walker_1.walk(ast, {
enter(child, parent) {
if (!(0, types_1.isIdentifier)(child) || child.name !== 'styleIsolation') {
return;
}
if (!(0, types_1.isObjectProperty)(parent)) {
return;
}
if (!(0, types_1.isStringLiteral)(parent.value)) {
return;
}
if (parent.value.value === 'app' ||
parent.value.value === 'app-and-page' ||
parent.value.value === 'isolated') {
styleIsolationValue = parent.value.value;
}
return parent.value.value;
},
});
return styleIsolationValue;
}
exports.parseStyleIsolation = parseStyleIsolation;
/**
* 目前只有小程序平台才会走这个逻辑
* @param pagePahth
* @param value
* @param isPage
*/
function updateMiniProgramComponentStyleIsolation(pagePahth, value, isPage = false) {
pageStyleIsolationCache.set((0, utils_1.normalizePath)(pagePahth), {
styleIsolation: value,
isPage,
});
}
exports.updateMiniProgramComponentStyleIsolation = updateMiniProgramComponentStyleIsolation;
function findMiniProgramComponentStyleIsolation(pagePahth) {
return pageStyleIsolationCache.get((0, utils_1.normalizePath)(pagePahth));
}
exports.findMiniProgramComponentStyleIsolation = findMiniProgramComponentStyleIsolation;
function createDefaultSFCStyleBlock(source) {
const offset = source.length;
return {
type: 'style',
content: '',
attrs: {},
loc: {
source: '',
start: { line: 1, column: 1, offset },
end: { line: 1, column: 1, offset },
},
};
}
exports.createDefaultSFCStyleBlock = createDefaultSFCStyleBlock;