| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- "use strict";
- 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 = exports.parseUniXSplashScreen = exports.parseUniXFlexDirection = 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");
- var manifest_1 = require("./manifest");
- Object.defineProperty(exports, "parseUniXFlexDirection", { enumerable: true, get: function () { return manifest_1.parseUniXFlexDirection; } });
- Object.defineProperty(exports, "parseUniXSplashScreen", { enumerable: true, get: function () { return manifest_1.parseUniXSplashScreen; } });
- 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) {
- return `const __uniConfig = ${(0, uniConfig_1.normalizeAppXUniConfig)(pagesJson, manifestJson)};
- 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;
|