uni-ticket-system/node_modules/@dcloudio/uni-cli-shared/dist/postcss/plugins/uniapp.js
2023-12-05 10:11:10 +08:00

126 lines
3.9 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.filterPrefersColorScheme = void 0;
const shared_1 = require("@vue/shared");
const postcss_selector_parser_1 = __importDefault(require("postcss-selector-parser"));
const uni_shared_1 = require("@dcloudio/uni-shared");
const defaultUniAppCssProcessorOptions = (0, shared_1.extend)({}, uni_shared_1.defaultRpx2Unit);
const BG_PROPS = [
'background',
'background-clip',
'background-color',
'background-image',
'background-origin',
'background-position',
'background-repeat',
'background-size',
'background-attachment',
];
function transform(selector, state, { rewriteTag }) {
if (selector.type !== 'tag') {
return;
}
const { value } = selector;
selector.value = rewriteTag(value);
if (value === 'page' && selector.value === 'uni-page-body') {
state.bg = true;
}
}
function createBodyBackgroundRule(origRule) {
const bgDecls = [];
origRule.walkDecls((decl) => {
if (BG_PROPS.indexOf(decl.prop) !== -1) {
bgDecls.push(decl.clone());
}
});
if (bgDecls.length) {
const { rule } = require('postcss');
origRule.after(rule({ selector: 'body' }).append(bgDecls));
}
}
function walkRules(options) {
return (rule) => {
const state = { bg: false };
rule.selector = (0, postcss_selector_parser_1.default)((selectors) => selectors.walk((selector) => transform(selector, state, options))).processSync(rule.selector);
state.bg && createBodyBackgroundRule(rule);
};
}
function walkDecls(rpx2unit) {
return (decl) => {
const { value } = decl;
if (value.indexOf('rpx') === -1 && value.indexOf('upx') === -1) {
return;
}
decl.value = rpx2unit(decl.value);
};
}
function filterPrefersColorScheme(root, force = false) {
if (process.env.VUE_APP_DARK_MODE !== 'true') {
const filePath = root.source?.input.file;
if (force || (filePath && filePath.includes('@dcloudio'))) {
root.walkAtRules((rule) => {
if (rule.params.includes('prefers-color-scheme')) {
rule.remove();
}
});
}
}
}
exports.filterPrefersColorScheme = filterPrefersColorScheme;
const baiduTags = {
navigator: 'nav',
};
function rewriteBaiduTags(tag) {
return baiduTags[tag] || tag;
}
function rewriteUniH5Tags(tag) {
if (tag === 'page') {
return 'uni-page-body';
}
if ((0, uni_shared_1.isBuiltInComponent)(tag)) {
return uni_shared_1.COMPONENT_SELECTOR_PREFIX + tag;
}
return tag;
}
function rewriteUniAppTags(tag) {
if (tag === 'page') {
return 'body';
}
if ((0, uni_shared_1.isBuiltInComponent)(tag)) {
return uni_shared_1.COMPONENT_SELECTOR_PREFIX + tag;
}
return tag;
}
const transforms = {
h5: rewriteUniH5Tags,
app: rewriteUniAppTags,
'mp-baidu': rewriteBaiduTags,
};
const uniapp = (opts) => {
const platform = process.env.UNI_PLATFORM;
const { unit, unitRatio, unitPrecision } = (0, shared_1.extend)({}, defaultUniAppCssProcessorOptions, opts);
const rpx2unit = (0, uni_shared_1.createRpx2Unit)(unit, unitRatio, unitPrecision);
return {
postcssPlugin: 'uni-app',
prepare() {
return {
OnceExit(root) {
root.walkDecls(walkDecls(rpx2unit));
const rewriteTag = transforms[platform];
filterPrefersColorScheme(root);
if (rewriteTag) {
root.walkRules(walkRules({
rewriteTag,
}));
}
},
};
},
};
};
uniapp.postcss = true;
exports.default = uniapp;