| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- "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;
|