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,
|
|||
|
};
|
|||
|
}
|