243 lines
8.9 KiB
JavaScript
243 lines
8.9 KiB
JavaScript
"use strict";
|
||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||
}
|
||
Object.defineProperty(o, k2, desc);
|
||
}) : (function(o, m, k, k2) {
|
||
if (k2 === undefined) k2 = k;
|
||
o[k2] = m[k];
|
||
}));
|
||
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
||
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
||
};
|
||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||
};
|
||
Object.defineProperty(exports, "__esModule", { value: true });
|
||
exports.normalizeUniAppXAppConfig = exports.normalizeUniAppXAppPagesJson = exports.checkPagesJson = void 0;
|
||
const fs_1 = __importDefault(require("fs"));
|
||
const path_1 = __importDefault(require("path"));
|
||
const shared_1 = require("@vue/shared");
|
||
const jsonc_parser_1 = require("jsonc-parser");
|
||
const json_1 = require("../json");
|
||
const pages_1 = require("../pages");
|
||
const utils_1 = require("../../utils");
|
||
const uniRoutes_1 = require("../app/pages/uniRoutes");
|
||
const uniConfig_1 = require("./uniConfig");
|
||
const utils_2 = require("../../vite/plugins/vitejs/utils");
|
||
const preprocess_1 = require("../../preprocess");
|
||
__exportStar(require("./manifest"), exports);
|
||
function checkPagesJson(jsonStr, inputDir) {
|
||
if (!inputDir) {
|
||
return false;
|
||
}
|
||
const errors = [];
|
||
const root = (0, jsonc_parser_1.parseTree)(jsonStr, errors);
|
||
if (!root) {
|
||
if (errors.length) {
|
||
for (const error of errors) {
|
||
const { line, column } = (0, utils_2.offsetToLineColumn)(jsonStr, error.offset);
|
||
throw {
|
||
name: 'SyntaxError',
|
||
code: error.error,
|
||
message: (0, jsonc_parser_1.printParseErrorCode)(error.error),
|
||
loc: {
|
||
start: { line, column },
|
||
},
|
||
offsetStart: error.offset,
|
||
offsetEnd: error.offset + error.length,
|
||
};
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
const pagePathNodes = walkNodes(findRootNode(root, ['pages']));
|
||
findRootNode(root, ['subPackages', 'subpackages']).forEach((node) => {
|
||
const subPackageRoot = findSubPackageRoot(node);
|
||
if (subPackageRoot) {
|
||
findRootNode(node, ['pages']).forEach((subNode) => {
|
||
walkNodes(subNode.children ?? []).forEach((node) => {
|
||
pagePathNodes.push({
|
||
...node,
|
||
value: (0, utils_1.normalizePath)(path_1.default.join(subPackageRoot, node.value)),
|
||
});
|
||
});
|
||
});
|
||
}
|
||
});
|
||
if (pagePathNodes.length) {
|
||
for (const node of pagePathNodes) {
|
||
const pagePath = node.value ?? '';
|
||
if (pageExistsWithCaseSync(path_1.default.join(inputDir, pagePath))) {
|
||
continue;
|
||
}
|
||
const { line, column } = (0, utils_2.offsetToLineColumn)(jsonStr, node.offset);
|
||
throw {
|
||
name: 'CompilerError',
|
||
code: 'CompilerError',
|
||
message: `The page path "${pagePath}" does not exist`,
|
||
loc: {
|
||
start: { line, column },
|
||
},
|
||
offsetStart: node.offset,
|
||
offsetEnd: node.offset + node.length,
|
||
};
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
exports.checkPagesJson = checkPagesJson;
|
||
function pageExistsWithCaseSync(pagePath) {
|
||
try {
|
||
const files = fs_1.default.readdirSync(path_1.default.dirname(pagePath));
|
||
const basename = path_1.default.basename(pagePath);
|
||
const uvuePage = basename + '.uvue';
|
||
const vuePage = basename + '.vue';
|
||
return files.some((file) => file === uvuePage || file === vuePage);
|
||
}
|
||
catch (e) {
|
||
return false;
|
||
}
|
||
}
|
||
function findSubPackageRoot(node) {
|
||
const child = node.children?.find((child) => child.type === 'property' &&
|
||
child.children &&
|
||
child.children.find((child) => child.type === 'string' && child.value === 'root'));
|
||
if (child && child.children?.length === 2) {
|
||
return child.children[1].value;
|
||
}
|
||
return '';
|
||
}
|
||
function findRootNode(node, property) {
|
||
const { type, children } = node;
|
||
if (type === 'object' && children) {
|
||
const child = children.find((child) => child.type === 'property' &&
|
||
child.children &&
|
||
child.children.find((child) => child.type === 'string' && property.includes(child.value)));
|
||
if (child) {
|
||
const node = child.children.find((child) => child.type === 'array');
|
||
return node?.children ?? [];
|
||
}
|
||
}
|
||
return [];
|
||
}
|
||
function walkNodes(node) {
|
||
const pagePathNodes = [];
|
||
node.forEach((node) => walkNode(node, pagePathNodes));
|
||
return pagePathNodes;
|
||
}
|
||
function walkNode(node, pagePathNodes) {
|
||
const { type, children } = node;
|
||
if (type === 'property' && children && children.length === 2) {
|
||
const maybePagePathNode = children[0];
|
||
const maybePagePathValueNode = children[1];
|
||
if (maybePagePathNode.type === 'string' &&
|
||
maybePagePathNode.value === 'path' &&
|
||
maybePagePathValueNode.type === 'string' &&
|
||
(0, shared_1.isString)(maybePagePathValueNode.value)) {
|
||
pagePathNodes.push(maybePagePathValueNode);
|
||
}
|
||
}
|
||
if (children) {
|
||
children.forEach((node) => walkNode(node, pagePathNodes));
|
||
}
|
||
}
|
||
function normalizeUniAppXAppPagesJson(jsonStr) {
|
||
// 先条件编译
|
||
jsonStr = (0, preprocess_1.preUVueJson)(jsonStr);
|
||
checkPagesJson(jsonStr, process.env.UNI_INPUT_DIR);
|
||
const pagesJson = {
|
||
pages: [],
|
||
globalStyle: {},
|
||
};
|
||
let userPagesJson = {
|
||
pages: [],
|
||
globalStyle: {},
|
||
};
|
||
try {
|
||
// 此处不需要条件编译了
|
||
userPagesJson = (0, json_1.parseJson)(jsonStr, false);
|
||
}
|
||
catch (e) {
|
||
console.error(`[vite] Error: pages.json parse failed.\n`, jsonStr, e);
|
||
}
|
||
// pages
|
||
(0, pages_1.validatePages)(userPagesJson, jsonStr);
|
||
userPagesJson.subPackages =
|
||
userPagesJson.subPackages || userPagesJson.subpackages;
|
||
// subPackages
|
||
if (userPagesJson.subPackages) {
|
||
userPagesJson.pages.push(...normalizeSubPackages(userPagesJson.subPackages));
|
||
}
|
||
pagesJson.pages = userPagesJson.pages;
|
||
// pageStyle
|
||
normalizePages(pagesJson.pages);
|
||
// globalStyle
|
||
pagesJson.globalStyle = normalizePageStyle(userPagesJson.globalStyle);
|
||
// tabBar
|
||
if (userPagesJson.tabBar) {
|
||
pagesJson.tabBar = userPagesJson.tabBar;
|
||
}
|
||
// condition
|
||
if (userPagesJson.condition) {
|
||
pagesJson.condition = userPagesJson.condition;
|
||
}
|
||
// uniIdRouter
|
||
if (userPagesJson.uniIdRouter) {
|
||
pagesJson.uniIdRouter = userPagesJson.uniIdRouter;
|
||
}
|
||
// 是否应该用 process.env.UNI_UTS_PLATFORM
|
||
(0, pages_1.filterPlatformPages)(process.env.UNI_PLATFORM, pagesJson);
|
||
return pagesJson;
|
||
}
|
||
exports.normalizeUniAppXAppPagesJson = normalizeUniAppXAppPagesJson;
|
||
function normalizeSubPackages(subPackages) {
|
||
const pages = [];
|
||
if ((0, shared_1.isArray)(subPackages)) {
|
||
subPackages.forEach(({ root, pages: subPages }) => {
|
||
if (root && subPages.length) {
|
||
subPages.forEach((subPage) => {
|
||
subPage.path = (0, utils_1.normalizePath)(path_1.default.join(root, subPage.path));
|
||
subPage.style = subPage.style;
|
||
pages.push(subPage);
|
||
});
|
||
}
|
||
});
|
||
}
|
||
return pages;
|
||
}
|
||
function normalizePages(pages) {
|
||
pages.forEach((page) => {
|
||
page.style = normalizePageStyle(page.style);
|
||
});
|
||
}
|
||
function normalizePageStyle(pageStyle) {
|
||
if (pageStyle) {
|
||
(0, shared_1.extend)(pageStyle, pageStyle['app']);
|
||
(0, pages_1.removePlatformStyle)(pageStyle);
|
||
return pageStyle;
|
||
}
|
||
return {};
|
||
}
|
||
/**
|
||
* TODO 应该闭包,通过globalThis赋值?
|
||
* @param pagesJson
|
||
* @param manifestJson
|
||
* @returns
|
||
*/
|
||
function normalizeUniAppXAppConfig(pagesJson, manifestJson) {
|
||
const uniConfig = (0, uniConfig_1.normalizeAppXUniConfig)(pagesJson, manifestJson);
|
||
const tabBar = uniConfig.tabBar;
|
||
delete uniConfig.tabBar;
|
||
return `const __uniConfig = ${JSON.stringify(uniConfig)};
|
||
__uniConfig.getTabBarConfig = () => {return ${tabBar ? JSON.stringify(tabBar) : 'undefined'}};
|
||
__uniConfig.tabBar = __uniConfig.getTabBarConfig();
|
||
const __uniRoutes = ${(0, uniRoutes_1.normalizeAppUniRoutes)(pagesJson)}.map(uniRoute=>(uniRoute.meta.route=uniRoute.path,__uniConfig.pages.push(uniRoute.path),uniRoute.path='/'+uniRoute.path,uniRoute));
|
||
|
||
`;
|
||
}
|
||
exports.normalizeUniAppXAppConfig = normalizeUniAppXAppConfig;
|