148 lines
5.5 KiB
JavaScript
148 lines
5.5 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.mergeMiniProgramAppJson = exports.parseMiniProgramPagesJson = void 0;
|
||
const fs_1 = __importDefault(require("fs"));
|
||
const path_1 = __importDefault(require("path"));
|
||
const shared_1 = require("@vue/shared");
|
||
const json_1 = require("../json");
|
||
const pages_1 = require("../pages");
|
||
const utils_1 = require("./utils");
|
||
const utils_2 = require("../../utils");
|
||
const project_1 = require("./project");
|
||
const manifest_1 = require("../manifest");
|
||
const theme_1 = require("../theme");
|
||
function parseMiniProgramPagesJson(jsonStr, platform, options = { subpackages: false }) {
|
||
return parsePagesJson(jsonStr, platform, options);
|
||
}
|
||
exports.parseMiniProgramPagesJson = parseMiniProgramPagesJson;
|
||
const NON_APP_JSON_KEYS = [
|
||
'unipush',
|
||
'secureNetwork',
|
||
'usingComponents',
|
||
'optimization',
|
||
'scopedSlotsCompiler',
|
||
'usingComponents',
|
||
'uniStatistics',
|
||
'mergeVirtualHostAttributes',
|
||
];
|
||
function mergeMiniProgramAppJson(appJson, platformJson = {}) {
|
||
Object.keys(platformJson).forEach((name) => {
|
||
if (!(0, project_1.isMiniProgramProjectJsonKey)(name) &&
|
||
!NON_APP_JSON_KEYS.includes(name)) {
|
||
appJson[name] = platformJson[name];
|
||
}
|
||
});
|
||
}
|
||
exports.mergeMiniProgramAppJson = mergeMiniProgramAppJson;
|
||
function parsePagesJson(jsonStr, platform, { debug, darkmode, networkTimeout, subpackages, windowOptionsMap, tabBarOptionsMap, tabBarItemOptionsMap, } = {
|
||
subpackages: false,
|
||
}) {
|
||
let appJson = {
|
||
pages: [],
|
||
};
|
||
let pageJsons = {};
|
||
let nvuePages = [];
|
||
// preprocess
|
||
const pagesJson = (0, json_1.parseJson)(jsonStr, true);
|
||
if (!pagesJson) {
|
||
throw new Error(`[vite] Error: pages.json parse failed.\n`);
|
||
}
|
||
function addPageJson(pagePath, style) {
|
||
const filename = path_1.default.join(process.env.UNI_INPUT_DIR, pagePath);
|
||
if (fs_1.default.existsSync(filename + '.nvue') &&
|
||
!fs_1.default.existsSync(filename + '.vue')) {
|
||
nvuePages.push(pagePath);
|
||
}
|
||
const windowOptions = {};
|
||
if (platform === 'mp-baidu') {
|
||
// 仅百度小程序需要页面配置 component:true
|
||
// 快手小程序反而不能配置 component:true,故不能统一添加,目前硬编码处理
|
||
windowOptions.component = true;
|
||
}
|
||
pageJsons[pagePath] = (0, shared_1.extend)(windowOptions, (0, utils_1.parseWindowOptions)(style, platform, windowOptionsMap));
|
||
}
|
||
// pages
|
||
(0, pages_1.validatePages)(pagesJson, jsonStr);
|
||
pagesJson.pages.forEach((page) => {
|
||
appJson.pages.push(page.path);
|
||
addPageJson(page.path, page.style);
|
||
});
|
||
// subpackages
|
||
pagesJson.subPackages = pagesJson.subPackages || pagesJson.subpackages;
|
||
if (pagesJson.subPackages) {
|
||
if (subpackages) {
|
||
appJson.subPackages = pagesJson.subPackages.map(({ root, pages, ...rest }) => {
|
||
return (0, shared_1.extend)({
|
||
root,
|
||
pages: pages.map((page) => {
|
||
addPageJson((0, utils_2.normalizePath)(path_1.default.join(root, page.path)), page.style);
|
||
return page.path;
|
||
}),
|
||
}, rest);
|
||
});
|
||
}
|
||
else {
|
||
pagesJson.subPackages.forEach(({ root, pages }) => {
|
||
pages.forEach((page) => {
|
||
const pagePath = (0, utils_2.normalizePath)(path_1.default.join(root, page.path));
|
||
appJson.pages.push(pagePath);
|
||
addPageJson(pagePath, page.style);
|
||
});
|
||
});
|
||
}
|
||
}
|
||
// window
|
||
if (pagesJson.globalStyle) {
|
||
const windowOptions = (0, utils_1.parseWindowOptions)(pagesJson.globalStyle, platform, windowOptionsMap);
|
||
const { usingComponents } = windowOptions;
|
||
if (usingComponents) {
|
||
delete windowOptions.usingComponents;
|
||
appJson.usingComponents = usingComponents;
|
||
}
|
||
else {
|
||
delete appJson.usingComponents;
|
||
}
|
||
appJson.window = windowOptions;
|
||
}
|
||
// tabBar
|
||
if (pagesJson.tabBar) {
|
||
const tabBar = (0, utils_1.parseTabBar)(pagesJson.tabBar, platform, tabBarOptionsMap, tabBarItemOptionsMap);
|
||
if (tabBar) {
|
||
appJson.tabBar = tabBar;
|
||
}
|
||
}
|
||
;
|
||
['preloadRule', 'workers', 'plugins', 'entryPagePath'].forEach((name) => {
|
||
if ((0, shared_1.hasOwn)(pagesJson, name)) {
|
||
appJson[name] = pagesJson[name];
|
||
}
|
||
});
|
||
if (debug) {
|
||
appJson.debug = debug;
|
||
}
|
||
if (networkTimeout) {
|
||
appJson.networkTimeout = networkTimeout;
|
||
}
|
||
const manifestJson = (0, manifest_1.getPlatformManifestJsonOnce)();
|
||
if (!darkmode) {
|
||
const { pages, window, tabBar } = (0, theme_1.initTheme)(manifestJson, appJson);
|
||
(0, shared_1.extend)(appJson, JSON.parse(JSON.stringify({ pages, window, tabBar })));
|
||
delete appJson.darkmode;
|
||
delete appJson.themeLocation;
|
||
pageJsons = (0, theme_1.initTheme)(manifestJson, pageJsons);
|
||
}
|
||
else {
|
||
const themeLocation = manifestJson.themeLocation || 'theme.json';
|
||
if ((0, theme_1.hasThemeJson)(path_1.default.join(process.env.UNI_INPUT_DIR, themeLocation)))
|
||
appJson.themeLocation = themeLocation;
|
||
}
|
||
return {
|
||
appJson,
|
||
pageJsons,
|
||
nvuePages,
|
||
};
|
||
}
|