{"version":3,"sources":["jsdelivr-header.js","/npm/@ray-js/build-plugin-router@1.7.63/lib/index.js"],"names":[],"mappings":"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","file":"/npm/@ray-js/build-plugin-router@1.7.63/lib/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@ray-js/build-plugin-router@1.7.63/lib/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\";\nvar __rest = (this && this.__rest) || function (s, e) {\n    var t = {};\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n        t[p] = s[p];\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n                t[p[i]] = s[p[i]];\n        }\n    return t;\n};\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n    return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = PluginRouter;\nconst chokidar_1 = __importDefault(require(\"chokidar\"));\nconst colors_1 = __importDefault(require(\"colors\"));\nconst path_1 = __importDefault(require(\"path\"));\nconst lodash_1 = __importDefault(require(\"lodash\"));\nconst fs_extra_1 = __importDefault(require(\"fs-extra\"));\nconst ejs_1 = __importDefault(require(\"ejs\"));\nconst shared_1 = require(\"@ray-js/shared\");\nconst url_1 = __importDefault(require(\"url\"));\nconst path_to_regexp_1 = require(\"path-to-regexp\");\nconst theme_1 = __importDefault(require(\"./theme\"));\nfunction ejsRender(file, data, options) {\n    const str = fs_extra_1.default.readFileSync(file).toString();\n    return ejs_1.default.render(str, data, Object.assign(Object.assign({}, options), { async: false }));\n}\ncolors_1.default.enable();\nconst LOG_PREFIX = `build-plugin-router`;\nfunction printError(msg) {\n    shared_1.log.error(LOG_PREFIX, '');\n    console.error(msg);\n}\n// 找出重复的项\nfunction duplicates(arr, fn, key) {\n    const _arr = arr.concat().sort(fn);\n    const res = [];\n    let b = [];\n    for (let i = 1; i < _arr.length; i++) {\n        let curr = _arr[i];\n        let old = _arr[i - 1];\n        if (key) {\n            curr = curr[key];\n            old = old[key];\n        }\n        if (curr == old) {\n            if (!b.some((x) => (key ? x[key] : x) == curr)) {\n                b.unshift(_arr[i - 1]);\n            }\n            if (key) {\n                b.unshift(_arr[i]);\n            }\n        }\n        else {\n            if (key && b.length) {\n                res.push(b);\n                b = [];\n            }\n        }\n    }\n    if (key && b.length) {\n        res.push(b);\n    }\n    return key ? res : b;\n}\nconst standardAppConfigFieldMap = [\n    'custom',\n    ['textColor', 'color'],\n    'borderStyle',\n    'selectedColor',\n    'backgroundColor',\n];\nfunction normalizeTabBarConfig(config, routes, fields) {\n    if (!config) {\n        return;\n    }\n    let { list } = config, rest = __rest(config, [\"list\"]);\n    let cfg;\n    if (!lodash_1.default.isArray(list)) {\n        printError(shared_1.i18n.__('tabBarInvalidStructure').red);\n        return cfg;\n    }\n    list = list.map((tab) => {\n        if (tab.id === undefined) {\n            return tab;\n        }\n        for (const r of routes) {\n            // 兼容老项目，将老数据格式到新数据\n            if (tab.id === r.id) {\n                return Object.assign(Object.assign({}, tab), { pagePath: r.path });\n            }\n        }\n        return tab;\n    });\n    const _cfg = {};\n    // tabBar.list[number].pagePath 必须在 routes[number].page 中，即tab.pagePath === routes[number].page\n    // tabBar.list[number].route 可不配置\n    // tabBar.list[number].route 若未配置，则设置 tabBar.list[number].route = routes[number].page（非模式匹配）或tabBar.list[number].pagePath\n    // tabBar.list[number].route 不能用模式，如不能用/xxx/:id等，必须是明确的 如/xxx/123\n    // tabBar.list[number].route 必须要能命中对应routes[number].route 路由规则，规则详见 path-to-regexp 模块\n    const tabs = list\n        .map((tab, index) => {\n        var _a;\n        const m = routes.find((i) => tab.pagePath === i.path);\n        if (!m) {\n            printError(shared_1.i18n.__('tabBarPagePathNotInRoutes', {\n                index,\n                pagePath: tab.pagePath,\n                routes: JSON.stringify(routes, null, 2),\n            }).red);\n            return;\n        }\n        let pagePath = tab.pagePath.replace(/^\\//, '');\n        const urlObj = url_1.default.parse(pagePath);\n        if (urlObj.hash || urlObj.search) {\n            printError(shared_1.i18n.__('tabBarNoParams', { index, pagePath: tab.pagePath }).red);\n            return;\n        }\n        pagePath = urlObj.pathname;\n        if (!tab.route) {\n            // 判断 routes[number].route 是否为模式匹配规则\n            tab.route = m.route && (0, path_to_regexp_1.parse)(m.route).length === 1 ? m.route : m.path;\n        }\n        // 判断是否能被路由命中\n        const matched = (0, path_to_regexp_1.match)((_a = m.route) !== null && _a !== void 0 ? _a : m.path)(tab.route);\n        if (!matched) {\n            printError(shared_1.i18n.__('tabBarRouteNotMatched', {\n                index,\n                route: tab.route,\n                pagePath: tab.pagePath,\n                routeInfo: JSON.stringify(m, null, 2),\n            }).red);\n            return;\n        }\n        // 判断是否还被其他路由命中\n        const otherMatched = routes\n            .filter((r) => tab.pagePath !== r.path)\n            .filter((r) => { var _a; return (0, path_to_regexp_1.match)((_a = r.route) !== null && _a !== void 0 ? _a : r.path)(tab.route); });\n        const unusable = otherMatched.filter((r) => r.path !== tab.pagePath);\n        if (unusable.length) {\n            printError(shared_1.i18n.__('tabBarRouteMatchedMultiple', {\n                index,\n                route: tab.route,\n                pagePath: tab.pagePath,\n                matchedRoute: JSON.stringify(m, null, 2),\n                otherRoutes: JSON.stringify(unusable, null, 2),\n            }).red);\n            return;\n        }\n        // tab中配置的页面.route 匹配的页面为模式匹配，需给出告警\n        if (!lodash_1.default.isEmpty(matched.params)) {\n            console.warn(LOG_PREFIX, shared_1.i18n.__('tabBarPatternMatchWarning', {\n                index,\n                route: tab.route,\n                routeInfo: JSON.stringify(m, null, 2),\n                mRoute: m.route,\n            }).yellow);\n        }\n        return {\n            pagePath,\n            text: tab.text,\n            iconPath: tab.icon,\n            selectedIconPath: tab.activeIcon,\n        };\n    })\n        .filter((tab) => !!tab);\n    if (tabs.length < 2 || tabs.length > 5) {\n        printError(shared_1.i18n.__('tabBarCountLimit').red);\n        return cfg;\n    }\n    _cfg.list = tabs;\n    // 找出 tabBar.list[number].pagePath 重复的配置\n    const _list = duplicates(tabs, (a, b) => (a.pagePath > b.pagePath ? 1 : a.pagePath == b.pagePath ? 0 : -1), 'pagePath');\n    if (_list.length) {\n        console.error(LOG_PREFIX, shared_1.i18n.__('tabBarDuplicatePages', { duplicates: JSON.stringify(_list, null, 2) }).red);\n    }\n    cfg = fields.reduce((o, next) => {\n        const [src, t] = typeof next === 'string' ? [next] : next;\n        if (src in rest) {\n            o[t || src] = rest[src];\n        }\n        return o;\n    }, _cfg);\n    return cfg;\n}\nfunction PluginRouter(api) {\n    let cacheThemeLocation = {};\n    let timerId;\n    let themeLocation;\n    const { source } = api.options;\n    const plugin = {\n        name: '@ray-js/build-plugin-router',\n        setup() {\n            shared_1.log.verbose(LOG_PREFIX, 'setup');\n            this.buildRoutesConfig(true);\n            if (api.options.watch) {\n                chokidar_1.default\n                    .watch(['**/*.config.ts', '**/*.config.js', '!app.config.{js,ts}'], {\n                    cwd: path_1.default.join(api.options.cwd, source),\n                })\n                    .on('change', (file) => {\n                    const filePath = path_1.default.join(api.options.cwd, source, file);\n                    // 配置文件引用存在 cache\n                    delete require.cache[require.resolve(filePath)];\n                    // FIXME: 引用文件变更也需要重新构建\n                    this.buildRoutesConfig(false);\n                });\n            }\n        },\n        readConfigFromConfigFile() {\n            const routesConfigFile = api.searchJSFile(`${source}/routes.config`);\n            if (!routesConfigFile) {\n                throw new Error(shared_1.i18n.__('missingConfigFile'));\n            }\n            const globalConfigFile = api.searchJSFile(`${source}/global.config`);\n            const routesConfig = api.requireJSFile(routesConfigFile);\n            const globalConfig = globalConfigFile ? api.requireJSFile(globalConfigFile, '*') : {};\n            return { routesConfig, globalConfig };\n        },\n        buildRoutesConfig(immediate) {\n            clearTimeout(timerId);\n            const { routesConfig, globalConfig } = this.readConfigFromConfigFile();\n            // target 在入口处已经统一处理，tuya 会转成 thing\n            const { target, watch } = api.options;\n            // 不是这两端的，其他的默认为web端，tuya thing 其实为同一个端，统一成 thing\n            if (!['wechat', 'thing'].includes(target)) {\n                // web端逻辑已经移到 @ray-js/builder-web\n                return;\n            }\n            const appConfig = this.getStandardAppConfigData(routesConfig, globalConfig);\n            themeLocation = appConfig.themeLocation;\n            if (watch)\n                generateThemeConfig();\n            // FIX: 修复初始化时找不到配置文件\n            // 初始化时，需要立即生成配置文件\n            if (immediate) {\n                return this.generateAppConfig(target, appConfig);\n            }\n            // FIX: 修复间接（更新routes.config.ts）更新app.config.ts文件，无法触发重新编译，导致小程序app.json未更新\n            // 原因：/node_modules/@ray-core/cli/lib/build/watch.js 中的变量isRunning为true\n            // 在更新routes.config.ts触发的编译未完成，又因间接更新app.config.ts的触发重新编译被remax忽略导致\n            // TODO: 此为临时方案，无法确定第一次更新什么时候完成，默认延时1s\n            timerId = setTimeout(() => {\n                this.generateAppConfig(target, appConfig);\n            }, 1000);\n        },\n        /**\n         * 获取小程序的 app.config 配置\n         * @param routesConfig - routes.config 配置内容\n         * @param globalConfig - 已存在的应用配置\n         */\n        getStandardAppConfigData(routesConfig, globalConfig) {\n            var _a, _b, _c, _d;\n            const { target } = api.options;\n            const globalConfigData = target === 'thing'\n                ? (_b = (_a = globalConfig['thing']) !== null && _a !== void 0 ? _a : globalConfig['tuya']) !== null && _b !== void 0 ? _b : {} // 因历史原因，需要兼容老项目的老配置，老项目中都是 tuya\n                : (_c = globalConfig[target]) !== null && _c !== void 0 ? _c : {};\n            const { routes = [], subpackages, subPackages, tabBar: _tabBar } = routesConfig, otherConfig = __rest(routesConfig, [\"routes\", \"subpackages\", \"subPackages\", \"tabBar\"]);\n            const _routes = routes.map((item) => {\n                var _a;\n                item.route = (_a = item.route) !== null && _a !== void 0 ? _a : item.path;\n                return item;\n            });\n            const subPkgs = (_d = subPackages !== null && subPackages !== void 0 ? subPackages : subpackages) !== null && _d !== void 0 ? _d : [];\n            const pages = lodash_1.default.uniq(_routes.map((r) => r.path.replace(/^\\//, '')));\n            const tabBar = normalizeTabBarConfig(_tabBar, _routes, standardAppConfigFieldMap);\n            const { workers = [], root: workerRoot } = otherConfig.workers || {};\n            const config = Object.assign(Object.assign(Object.assign({}, globalConfigData), otherConfig), { pages, tabBar });\n            if (workerRoot) {\n                config.workers =\n                    target !== 'thing'\n                        ? workerRoot\n                        : workers.map((w) => {\n                            const ext = path_1.default.extname(w);\n                            if (ext) {\n                                w = w.replace(new RegExp(`${ext}$`), '');\n                            }\n                            return `${workerRoot}/${w}.js`;\n                        });\n            }\n            if (subPkgs && subPkgs.length) {\n                config.subpackages = subPkgs.map((pkg) => {\n                    var _a;\n                    const pages = lodash_1.default.uniq((_a = pkg.pages) === null || _a === void 0 ? void 0 : _a.map((r) => r.path.replace(/^\\//, '')));\n                    return Object.assign(Object.assign({}, pkg), { pages });\n                });\n            }\n            if (lodash_1.default.isEmpty(config.tabBar)) {\n                lodash_1.default.unset(config, 'tabBar');\n            }\n            return config;\n        },\n        /**\n         * 生成小程序app.config.{js|ts}文件\n         * @param data\n         */\n        generateAppConfig(target, data) {\n            if (themeLocation) {\n                data.themeLocation = themeLocation.replace(/(?:\\.{1,2}\\/)*/, '');\n            }\n            const templateFile = path_1.default.join(__dirname, '../templates/app.config.ejs');\n            const context = ejsRender(templateFile, { appConfig: { [target]: data } });\n            api.writeFile(`${source}/app.config.ts`, context);\n            shared_1.log.verbose(LOG_PREFIX, `generate`, `${source}/app.config.ts`.underline.green, shared_1.i18n.__('forWechatPlatform'));\n        },\n    };\n    // todo theme 逻辑不应该在这个文件\n    function generateThemeConfig() {\n        const src = checkThemeConfig(themeLocation);\n        if (cacheThemeLocation.source && cacheThemeLocation.source !== src) {\n            fs_extra_1.default.unlinkSync(cacheThemeLocation.dest);\n            fs_extra_1.default.unwatchFile(cacheThemeLocation.source);\n            cacheThemeLocation = {};\n        }\n        if (src) {\n            handle();\n            // only watch\n            if (api.options.watch) {\n                fs_extra_1.default.watchFile(src, handle);\n            }\n        }\n        function handle() {\n            // eslint-disable-next-line prefer-const\n            let { cwd, target } = api.options;\n            // TODO 这里待优化\n            if (target === 'thing') {\n                /**\n                 * 又是历史原因\n                 * 因老项目生成的产物目录是tuya，所以就干脆是tuya，不然会出现既 tuya 又 thing 的目录\n                 * 将开发整懵逼\n                 */\n                // @ts-ignore\n                target = 'tuya';\n            }\n            const themeP = themeLocation.replace(/(?:\\.{1,2}\\/)*/, '');\n            const output = path_1.default.join(cwd, 'dist', target, themeP);\n            const data = fs_extra_1.default.readFileSync(src).toString('utf-8');\n            fs_extra_1.default.outputFileSync(output, data, 'utf-8');\n            cacheThemeLocation.dest = output;\n            cacheThemeLocation.source = src;\n        }\n    }\n    function checkThemeConfig(src) {\n        if (!src) {\n            return;\n        }\n        const { cwd, source } = api.options;\n        const inputs = [path_1.default.resolve(cwd, source, src), path_1.default.resolve(cwd, src)];\n        for (const input of inputs) {\n            if (fs_extra_1.default.pathExistsSync(input)) {\n                return input;\n            }\n        }\n    }\n    if (!api.options.watch) {\n        plugin.configWebpack = (0, theme_1.default)(generateThemeConfig).configWebpack;\n    }\n    return plugin;\n}\n"]}