uni-ticket-system/node_modules/@dcloudio/uni-cli-shared/dist/vite/features.js

192 lines
7.2 KiB
JavaScript
Raw Normal View History

2023-12-05 02:11:10 +00:00
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.initFeatures = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const shared_1 = require("@vue/shared");
function initProjectFeature({ inputDir }) {
const features = {
i18nLocale: false,
i18nEn: true,
i18nEs: true,
i18nFr: true,
i18nZhHans: true,
i18nZhHant: true,
uniCloud: false,
};
const localesDir = path_1.default.resolve(inputDir, 'locale');
if (fs_1.default.existsSync(localesDir)) {
if (fs_1.default.readdirSync(localesDir).find((file) => path_1.default.extname(file) === '.json')) {
features.i18nLocale = true;
}
}
if (process.env.UNI_CLOUD_PROVIDER) {
try {
const providers = JSON.parse(process.env.UNI_CLOUD_PROVIDER);
if (providers.length) {
features.uniCloud = true;
}
}
catch (e) { }
}
return features;
}
function initPagesFeature({ pagesJson, command, inputDir, ssr, }) {
const features = {
nvue: true,
pages: true,
tabBar: true,
tabBarMidButton: true,
topWindow: false,
leftWindow: false,
rightWindow: false,
navigationBar: true,
pullDownRefresh: false,
navigationBarButtons: true,
navigationBarSearchInput: true,
navigationBarTransparent: true,
};
const { tabBar, pages, topWindow, leftWindow, rightWindow, globalStyle } = pagesJson;
// ssr 时强制启用多页面需要用到router
if (!ssr && pages && pages.length === 1) {
features.pages = false;
}
if (!(tabBar && tabBar.list && tabBar.list.length)) {
features.tabBar = false;
features.tabBarMidButton = false;
}
if (features.tabBar && !tabBar.midButton) {
features.tabBarMidButton = false;
}
if (topWindow && topWindow.path) {
features.topWindow = true;
}
if (leftWindow && leftWindow.path) {
features.leftWindow = true;
}
if (rightWindow && rightWindow.path) {
features.rightWindow = true;
}
if (globalStyle.enablePullDownRefresh) {
features.pullDownRefresh = true;
}
else {
if (pages.find((page) => page.style && page.style.enablePullDownRefresh)) {
features.pullDownRefresh = true;
}
}
if (command === 'build') {
if (!pages.find((page) => fs_1.default.existsSync(path_1.default.resolve(inputDir, page.path + '.nvue')))) {
features.nvue = false;
}
let isNavigationCustom = false;
if (globalStyle.navigationBar.style === 'custom') {
isNavigationCustom = true; // 全局custom
if (pages.find((page) => page.style.navigationBar.style === 'default')) {
isNavigationCustom = false;
}
}
else {
// 所有页面均custom
if (pages.every((page) => page.style.navigationBar.style === 'custom')) {
isNavigationCustom = true;
}
}
if (isNavigationCustom) {
features.navigationBar = false;
features.navigationBarButtons = false;
features.navigationBarSearchInput = false;
features.navigationBarTransparent = false;
}
else {
if (!pages.find((page) => (0, shared_1.isArray)(page.style.navigationBar.buttons) &&
page.style.navigationBar.buttons.length)) {
features.navigationBarButtons = false;
}
if (!globalStyle.navigationBar.searchInput &&
!pages.find((page) => page.style.navigationBar.searchInput)) {
features.navigationBarSearchInput = false;
}
if (globalStyle.navigationBar.type !== 'transparent' &&
!pages.find((page) => page.style.navigationBar.type === 'transparent')) {
features.navigationBarTransparent = false;
}
}
}
return features;
}
function initManifestFeature({ manifestJson, command, platform, }) {
const features = {
wx: false,
wxs: true,
rpx: true,
promise: false,
longpress: true,
routerMode: '"hash"',
vueOptionsApi: true,
vueProdDevTools: false,
};
if (command === 'build') {
// TODO 需要预编译一遍?
// features.wxs = false
// features.longpress = false
}
if (manifestJson.h5 &&
manifestJson.h5.router &&
manifestJson.h5.router.mode === 'history') {
features.routerMode = '"history"';
}
// TODO other features
return features;
}
function initFeatures(options) {
const { wx, wxs, rpx, nvue, uniCloud, i18nEn, i18nEs, i18nFr, i18nZhHans, i18nZhHant, i18nLocale, vueOptionsApi, vueProdDevTools, pages, tabBar, tabBarMidButton, promise, longpress, routerMode, topWindow, leftWindow, rightWindow, navigationBar, pullDownRefresh, navigationBarButtons, navigationBarSearchInput, navigationBarTransparent, } = (0, shared_1.extend)(initManifestFeature(options), initPagesFeature(options), initProjectFeature(options));
const features = {
// vue
__VUE_OPTIONS_API__: vueOptionsApi,
__VUE_PROD_DEVTOOLS__: vueProdDevTools,
// uni
__UNI_FEATURE_WX__: wx,
__UNI_FEATURE_WXS__: wxs,
__UNI_FEATURE_RPX__: rpx,
__UNI_FEATURE_PROMISE__: promise,
__UNI_FEATURE_LONGPRESS__: longpress,
__UNI_FEATURE_I18N_EN__: i18nEn,
__UNI_FEATURE_I18N_ES__: i18nEs,
__UNI_FEATURE_I18N_FR__: i18nFr,
__UNI_FEATURE_I18N_ZH_HANS__: i18nZhHans,
__UNI_FEATURE_I18N_ZH_HANT__: i18nZhHant,
// 以下特性,编译器已自动识别是否需要启用
__UNI_FEATURE_UNI_CLOUD__: uniCloud,
__UNI_FEATURE_I18N_LOCALE__: i18nLocale,
__UNI_FEATURE_NVUE__: nvue,
__UNI_FEATURE_ROUTER_MODE__: routerMode,
__UNI_FEATURE_PAGES__: pages,
__UNI_FEATURE_TABBAR__: tabBar,
__UNI_FEATURE_TABBAR_MIDBUTTON__: tabBarMidButton,
__UNI_FEATURE_TOPWINDOW__: topWindow,
__UNI_FEATURE_LEFTWINDOW__: leftWindow,
__UNI_FEATURE_RIGHTWINDOW__: rightWindow,
__UNI_FEATURE_RESPONSIVE__: topWindow || leftWindow || rightWindow,
__UNI_FEATURE_NAVIGATIONBAR__: navigationBar,
__UNI_FEATURE_PULL_DOWN_REFRESH__: pullDownRefresh,
__UNI_FEATURE_NAVIGATIONBAR_BUTTONS__: navigationBarButtons,
__UNI_FEATURE_NAVIGATIONBAR_SEARCHINPUT__: navigationBarSearchInput,
__UNI_FEATURE_NAVIGATIONBAR_TRANSPARENT__: navigationBarTransparent, // 是否启用透明标题栏
};
// ssr nodejs features
if (options.ssr) {
Object.keys(features).forEach((name) => {
const value = features[name];
(0, shared_1.extend)(globalThis, {
[name]: (0, shared_1.isString)(value) ? JSON.parse(value) : value,
});
});
}
return features;
}
exports.initFeatures = initFeatures;