UNPKG

umi-plugin-router-plus

Version:

一款 Umi 3 插件,为你带来类型友好的页面参数的定义、传递与获取。

71 lines (70 loc) 20.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.makeExports = void 0; var tslib_1 = require("tslib"); var vtils_1 = require("vtils"); var utils_1 = require("./utils"); function makeExports(syntheticRoutes) { var flatSyntheticRoutes = utils_1.flattenRoutes(syntheticRoutes).filter(function (route) { return !!route.component; }); var pageNamesTree = new vtils_1.TreeData(syntheticRoutes, { childrenPropName: 'routes', }).pickNodeProps(['pageName', 'routes']); var pageNameToChildrenPageNames = flatSyntheticRoutes.reduce(function (res, item) { var childrenPageNames = []; var pageNameDepth = -1; pageNamesTree.traverseDFS(function (_) { if (_.node.pageName === item.pageName) { pageNameDepth = _.depth; } else if (pageNameDepth !== -1) { if (_.depth <= pageNameDepth) { _.exit(); } else { childrenPageNames.push(_.node.pageName); } } }); res[item.pageName] = childrenPageNames; return res; }, {}); return vtils_1.dedent(templateObject_6 || (templateObject_6 = tslib_1.__makeTemplateObject(["\n /* eslint-disable */\n // @ts-nocheck\n\n import { useMemo } from 'react'\n import { history, useLocation } from 'umi'\n\n\n // =============== \u8F85\u52A9\u7C7B\u578B ===============\n /**\n * \u68C0\u6D4B\u4E00\u4E2A\u7C7B\u578B\u662F\u5426\u662F `any`\u3002\n *\n * @see https://stackoverflow.com/questions/55541275/typescript-check-for-the-any-type\n */\n type IfAny<T, Y, N> = 0 extends (1 & T) ? Y : N\n\n /**\n * \u68C0\u6D4B\u4E00\u4E2A\u7C7B\u578B\u662F\u5426\u662F `never`\u3002\n */\n type IfNever<T, Y, N> = [T] extends [never] ? Y : N\n\n /**\n * \u8FD4\u56DE T \u4E2D\u5FC5\u9700\u7684\u952E\u3002\n */\n type RequiredKeys<T> = { [K in keyof T]-?: {} extends Pick<T, K> ? never : K }[keyof T]\n\n /**\n * \u5408\u5E76 M \u548C N\u3002\n */\n type Merge<M, N> = [M, N] extends [never, never]\n ? never\n : [M] extends [never]\n ? N\n : [N] extends [never]\n ? M\n : Omit<M, Extract<keyof M, keyof N>> & N\n\n\n // =============== \u9875\u9762\u540D\u79F0 ===============\n /**\n * \u666E\u901A\u9875\u9762\u7684\u540D\u79F0\uFF0C\u5373\u4E0D\u662F layout \u7684\u9875\u9762\u3002\n */\n export type INormalPageName = ", "\n\n /**\n * layout \u9875\u9762\u7684\u540D\u79F0\u3002\n */\n export type ILayoutPageName = ", "\n\n /**\n * \u9875\u9762\u7684\u540D\u79F0\uFF0C\u5305\u62EC\u666E\u901A\u9875\u9762\u548C layout \u9875\u9762\u3002\n */\n export type IPageName = INormalPageName | ILayoutPageName\n\n /**\n * \u666E\u901A\u9875\u9762\u7684\u540D\u79F0\u5217\u8868\u3002\n */\n export const normalPageNames: INormalPageName[] = [\n ", "\n ]\n\n /**\n * layout \u9875\u9762\u7684\u540D\u79F0\u5217\u8868\u3002\n */\n export const layoutPageNames: ILayoutPageName[] = [\n ", "\n ]\n\n /**\n * \u9875\u9762\u7684\u540D\u79F0\u5217\u8868\u3002\n */\n export const pageNames: IPageName[] = [\n ", "\n ]\n\n\n // =============== \u9875\u9762\u81EA\u8EAB\u53C2\u6570 ===============\n ", "\n\n\n // =============== \u9875\u9762\u540D\u79F0 -> \u9875\u9762\u53C2\u6570 ===============\n /**\n * \u9875\u9762\u540D\u79F0\u5230\u9875\u9762\u81EA\u8EAB\u53C2\u6570\u7684\u6620\u5C04\u3002\n *\n * \u9875\u9762\u81EA\u8EAB\u53C2\u6570\u6307\u9875\u9762\u81EA\u8EAB\u5B9A\u4E49\u7684\u53C2\u6570\uFF0C\u4E0D\u5305\u62EC\u4ECE layout \u7EE7\u627F\u7684\u53C2\u6570\u3002\n */\n export interface IPageNameToPageOwnParams {\n ", "\n }\n\n /**\n * \u9875\u9762\u540D\u79F0\u5230\u9875\u9762\u53C2\u6570\u7684\u6620\u5C04\u3002\n *\n * \u9875\u9762\u53C2\u6570\u5305\u62EC\u9875\u9762\u81EA\u8EAB\u5B9A\u4E49\u7684\u53C2\u6570\uFF0C\u8FD8\u5305\u62EC\u4ECE layout \u7EE7\u627F\u7684\u53C2\u6570\u3002\n */\n export interface IPageNameToPageParams {\n ", "\n }\n\n\n // =============== \u9875\u9762\u540D\u79F0 -> \u9875\u9762\u8DEF\u5F84 ===============\n /**\n * \u9875\u9762\u540D\u79F0\u5230\u9875\u9762\u8DEF\u5F84\u7684\u6620\u5C04\u3002\n */\n export const pageNameToPagePath: Record<IPageName, string> = {\n ", "\n }\n\n // =============== \u9875\u9762\u8DEF\u5F84 -> \u9875\u9762\u540D\u79F0 ===============\n /**\n * \u9875\u9762\u8DEF\u5F84\u5230\u9875\u9762\u540D\u79F0\u7684\u6620\u5C04\u3002\n */\n export const pagePathToPageName: Record<string, IPageName> = {\n ", "\n }\n\n // =============== \u9875\u9762\u540D\u79F0 -> \u5B50\u9875\u9762\u540D\u79F0\u5217\u8868 ===============\n /**\n * \u9875\u9762\u540D\u79F0\u5230\u5B50\u9875\u9762\u540D\u79F0\u5217\u8868\u7684\u6620\u5C04\u3002\n */\n export const pageNameToChildrenPageNames: Record<IPageName, IPageName[]> = ", "\n\n\n // =============== \u8DEF\u7531\u8F85\u52A9\u51FD\u6570 ===============\n /**\n * \u4FDD\u7559\u5F53\u524D\u9875\u9762\uFF0C\u8DF3\u8F6C\u81F3\u67D0\u4E2A\u9875\u9762\uFF0C\u548C `history.push` \u6548\u679C\u4E00\u81F4\u3002\n *\n * @param pageName \u8981\u8DF3\u8F6C\u5230\u7684\u9875\u9762\u540D\u79F0\n * @param params \u8981\u4F20\u9012\u7684\u9875\u9762\u53C2\u6570\n */\n export function navigateTo<TPageName extends INormalPageName>(\n pageName: TPageName,\n ...params: IfNever<\n IPageNameToPageParams[TPageName],\n [],\n IfNever<\n RequiredKeys<IPageNameToPageParams[TPageName]>,\n [IPageNameToPageParams[TPageName]?],\n [IPageNameToPageParams[TPageName]]\n >\n >\n ) {\n // @ts-ignore\n history.push({\n pathname: pageNameToPagePath[pageName],\n query: {\n __params__: JSON.stringify(params[0]),\n },\n })\n }\n\n /**\n * \u5173\u95ED\u5F53\u524D\u9875\u9762\uFF0C\u8DF3\u8F6C\u81F3\u67D0\u4E2A\u9875\u9762\uFF0C\u548C `history.replace` \u6548\u679C\u4E00\u81F4\u3002\n *\n * @param pageName \u8981\u8DF3\u8F6C\u5230\u7684\u9875\u9762\u540D\u79F0\n * @param params \u8981\u4F20\u9012\u7684\u9875\u9762\u53C2\u6570\n */\n export function redirectTo<TPageName extends INormalPageName>(\n pageName: TPageName,\n ...params: IfNever<\n IPageNameToPageParams[TPageName],\n [],\n IfNever<\n RequiredKeys<IPageNameToPageParams[TPageName]>,\n [IPageNameToPageParams[TPageName]?],\n [IPageNameToPageParams[TPageName]]\n >\n >\n ) {\n // @ts-ignore\n history.replace({\n pathname: pageNameToPagePath[pageName],\n query: {\n __params__: JSON.stringify(params[0]),\n },\n })\n }\n\n /**\n * \u5173\u95ED\u5F53\u524D\u9875\u9762\uFF0C\u8FD4\u56DE\u4E0A\u4E00\u9875\u9762\u6216\u591A\u7EA7\u9875\u9762\uFF0C\u548C `history.goBack` \u6548\u679C\u4E00\u81F4\u3002\n *\n * @param delta \u8981\u8FD4\u56DE\u7684\u9875\u9762\u5C42\u6570\uFF0C\u9ED8\u8BA4\u4E3A `1`\n */\n export function navigateBack(delta: number = 1) {\n history.go(-delta)\n }\n\n /**\n * \u4FDD\u7559\u5F53\u524D\u9875\u9762\uFF0C\u524D\u8FDB\u5230\u4E0B\u4E00\u9875\u9762\u6216\u591A\u7EA7\u9875\u9762\uFF0C\u548C `history.goForward` \u6548\u679C\u4E00\u81F4\u3002\n *\n * @param delta \u8981\u524D\u8FDB\u7684\u9875\u9762\u5C42\u6570\uFF0C\u9ED8\u8BA4\u4E3A `1`\n */\n export function navigateForward(delta: number = 1) {\n history.go(delta)\n }\n\n\n // =============== Hooks ===============\n /**\n * \u83B7\u53D6\u4F20\u7ED9\u9875\u9762\u7684\u53C2\u6570\u3002\n */\n export function usePageParams(): Record<string, any>\n /**\n * \u83B7\u53D6\u4F20\u7ED9\u9875\u9762\u7684\u53C2\u6570\u3002\n *\n * @param pageName \u5F53\u524D\u9875\u9762\u7684\u540D\u79F0\n */\n export function usePageParams<TPageName extends IPageName>(pageName: TPageName): IPageNameToPageParams[TPageName]\n export function usePageParams<TPageName extends IPageName>(pageName?: TPageName): IPageNameToPageParams[TPageName] {\n // @ts-ignore\n const { query } = useLocation()\n const params = useMemo(\n () => {\n try {\n return query.__params__\n ? JSON.parse(query.__params__)\n : {}\n } catch (err) {\n return {}\n }\n },\n [query.__params__],\n )\n return params\n }\n\n /**\n * \u83B7\u53D6\u4F20\u7ED9\u9875\u9762\u7684 query\u3002\n */\n export function usePageQuery<T extends Record<string, string> = Record<string, string>>(): T {\n // @ts-ignore\n const { query } = useLocation()\n return query\n }\n\n /**\n * \u83B7\u53D6\u4F20\u7ED9\u9875\u9762\u7684 query\u3002\n *\n * @deprecated \u4F7F\u7528 usePageQuery \u4EE3\u66FF\n */\n export const useQuery = usePageQuery\n\n /**\n * \u83B7\u53D6\u5F53\u524D\u9875\u9762\u540D\u79F0\u3002\n */\n export function usePageName(): INormalPageName {\n // @ts-ignore\n const { pathname } = useLocation()\n return pagePathToPageName[pathname]\n }\n "], ["\n /* eslint-disable */\n // @ts-nocheck\n\n import { useMemo } from 'react'\n import { history, useLocation } from 'umi'\n\n\n // =============== \u8F85\u52A9\u7C7B\u578B ===============\n /**\n * \u68C0\u6D4B\u4E00\u4E2A\u7C7B\u578B\u662F\u5426\u662F \\`any\\`\u3002\n *\n * @see https://stackoverflow.com/questions/55541275/typescript-check-for-the-any-type\n */\n type IfAny<T, Y, N> = 0 extends (1 & T) ? Y : N\n\n /**\n * \u68C0\u6D4B\u4E00\u4E2A\u7C7B\u578B\u662F\u5426\u662F \\`never\\`\u3002\n */\n type IfNever<T, Y, N> = [T] extends [never] ? Y : N\n\n /**\n * \u8FD4\u56DE T \u4E2D\u5FC5\u9700\u7684\u952E\u3002\n */\n type RequiredKeys<T> = { [K in keyof T]-?: {} extends Pick<T, K> ? never : K }[keyof T]\n\n /**\n * \u5408\u5E76 M \u548C N\u3002\n */\n type Merge<M, N> = [M, N] extends [never, never]\n ? never\n : [M] extends [never]\n ? N\n : [N] extends [never]\n ? M\n : Omit<M, Extract<keyof M, keyof N>> & N\n\n\n // =============== \u9875\u9762\u540D\u79F0 ===============\n /**\n * \u666E\u901A\u9875\u9762\u7684\u540D\u79F0\uFF0C\u5373\u4E0D\u662F layout \u7684\u9875\u9762\u3002\n */\n export type INormalPageName = ", "\n\n /**\n * layout \u9875\u9762\u7684\u540D\u79F0\u3002\n */\n export type ILayoutPageName = ", "\n\n /**\n * \u9875\u9762\u7684\u540D\u79F0\uFF0C\u5305\u62EC\u666E\u901A\u9875\u9762\u548C layout \u9875\u9762\u3002\n */\n export type IPageName = INormalPageName | ILayoutPageName\n\n /**\n * \u666E\u901A\u9875\u9762\u7684\u540D\u79F0\u5217\u8868\u3002\n */\n export const normalPageNames: INormalPageName[] = [\n ", "\n ]\n\n /**\n * layout \u9875\u9762\u7684\u540D\u79F0\u5217\u8868\u3002\n */\n export const layoutPageNames: ILayoutPageName[] = [\n ", "\n ]\n\n /**\n * \u9875\u9762\u7684\u540D\u79F0\u5217\u8868\u3002\n */\n export const pageNames: IPageName[] = [\n ", "\n ]\n\n\n // =============== \u9875\u9762\u81EA\u8EAB\u53C2\u6570 ===============\n ", "\n\n\n // =============== \u9875\u9762\u540D\u79F0 -> \u9875\u9762\u53C2\u6570 ===============\n /**\n * \u9875\u9762\u540D\u79F0\u5230\u9875\u9762\u81EA\u8EAB\u53C2\u6570\u7684\u6620\u5C04\u3002\n *\n * \u9875\u9762\u81EA\u8EAB\u53C2\u6570\u6307\u9875\u9762\u81EA\u8EAB\u5B9A\u4E49\u7684\u53C2\u6570\uFF0C\u4E0D\u5305\u62EC\u4ECE layout \u7EE7\u627F\u7684\u53C2\u6570\u3002\n */\n export interface IPageNameToPageOwnParams {\n ", "\n }\n\n /**\n * \u9875\u9762\u540D\u79F0\u5230\u9875\u9762\u53C2\u6570\u7684\u6620\u5C04\u3002\n *\n * \u9875\u9762\u53C2\u6570\u5305\u62EC\u9875\u9762\u81EA\u8EAB\u5B9A\u4E49\u7684\u53C2\u6570\uFF0C\u8FD8\u5305\u62EC\u4ECE layout \u7EE7\u627F\u7684\u53C2\u6570\u3002\n */\n export interface IPageNameToPageParams {\n ", "\n }\n\n\n // =============== \u9875\u9762\u540D\u79F0 -> \u9875\u9762\u8DEF\u5F84 ===============\n /**\n * \u9875\u9762\u540D\u79F0\u5230\u9875\u9762\u8DEF\u5F84\u7684\u6620\u5C04\u3002\n */\n export const pageNameToPagePath: Record<IPageName, string> = {\n ", "\n }\n\n // =============== \u9875\u9762\u8DEF\u5F84 -> \u9875\u9762\u540D\u79F0 ===============\n /**\n * \u9875\u9762\u8DEF\u5F84\u5230\u9875\u9762\u540D\u79F0\u7684\u6620\u5C04\u3002\n */\n export const pagePathToPageName: Record<string, IPageName> = {\n ", "\n }\n\n // =============== \u9875\u9762\u540D\u79F0 -> \u5B50\u9875\u9762\u540D\u79F0\u5217\u8868 ===============\n /**\n * \u9875\u9762\u540D\u79F0\u5230\u5B50\u9875\u9762\u540D\u79F0\u5217\u8868\u7684\u6620\u5C04\u3002\n */\n export const pageNameToChildrenPageNames: Record<IPageName, IPageName[]> = ", "\n\n\n // =============== \u8DEF\u7531\u8F85\u52A9\u51FD\u6570 ===============\n /**\n * \u4FDD\u7559\u5F53\u524D\u9875\u9762\uFF0C\u8DF3\u8F6C\u81F3\u67D0\u4E2A\u9875\u9762\uFF0C\u548C \\`history.push\\` \u6548\u679C\u4E00\u81F4\u3002\n *\n * @param pageName \u8981\u8DF3\u8F6C\u5230\u7684\u9875\u9762\u540D\u79F0\n * @param params \u8981\u4F20\u9012\u7684\u9875\u9762\u53C2\u6570\n */\n export function navigateTo<TPageName extends INormalPageName>(\n pageName: TPageName,\n ...params: IfNever<\n IPageNameToPageParams[TPageName],\n [],\n IfNever<\n RequiredKeys<IPageNameToPageParams[TPageName]>,\n [IPageNameToPageParams[TPageName]?],\n [IPageNameToPageParams[TPageName]]\n >\n >\n ) {\n // @ts-ignore\n history.push({\n pathname: pageNameToPagePath[pageName],\n query: {\n __params__: JSON.stringify(params[0]),\n },\n })\n }\n\n /**\n * \u5173\u95ED\u5F53\u524D\u9875\u9762\uFF0C\u8DF3\u8F6C\u81F3\u67D0\u4E2A\u9875\u9762\uFF0C\u548C \\`history.replace\\` \u6548\u679C\u4E00\u81F4\u3002\n *\n * @param pageName \u8981\u8DF3\u8F6C\u5230\u7684\u9875\u9762\u540D\u79F0\n * @param params \u8981\u4F20\u9012\u7684\u9875\u9762\u53C2\u6570\n */\n export function redirectTo<TPageName extends INormalPageName>(\n pageName: TPageName,\n ...params: IfNever<\n IPageNameToPageParams[TPageName],\n [],\n IfNever<\n RequiredKeys<IPageNameToPageParams[TPageName]>,\n [IPageNameToPageParams[TPageName]?],\n [IPageNameToPageParams[TPageName]]\n >\n >\n ) {\n // @ts-ignore\n history.replace({\n pathname: pageNameToPagePath[pageName],\n query: {\n __params__: JSON.stringify(params[0]),\n },\n })\n }\n\n /**\n * \u5173\u95ED\u5F53\u524D\u9875\u9762\uFF0C\u8FD4\u56DE\u4E0A\u4E00\u9875\u9762\u6216\u591A\u7EA7\u9875\u9762\uFF0C\u548C \\`history.goBack\\` \u6548\u679C\u4E00\u81F4\u3002\n *\n * @param delta \u8981\u8FD4\u56DE\u7684\u9875\u9762\u5C42\u6570\uFF0C\u9ED8\u8BA4\u4E3A \\`1\\`\n */\n export function navigateBack(delta: number = 1) {\n history.go(-delta)\n }\n\n /**\n * \u4FDD\u7559\u5F53\u524D\u9875\u9762\uFF0C\u524D\u8FDB\u5230\u4E0B\u4E00\u9875\u9762\u6216\u591A\u7EA7\u9875\u9762\uFF0C\u548C \\`history.goForward\\` \u6548\u679C\u4E00\u81F4\u3002\n *\n * @param delta \u8981\u524D\u8FDB\u7684\u9875\u9762\u5C42\u6570\uFF0C\u9ED8\u8BA4\u4E3A \\`1\\`\n */\n export function navigateForward(delta: number = 1) {\n history.go(delta)\n }\n\n\n // =============== Hooks ===============\n /**\n * \u83B7\u53D6\u4F20\u7ED9\u9875\u9762\u7684\u53C2\u6570\u3002\n */\n export function usePageParams(): Record<string, any>\n /**\n * \u83B7\u53D6\u4F20\u7ED9\u9875\u9762\u7684\u53C2\u6570\u3002\n *\n * @param pageName \u5F53\u524D\u9875\u9762\u7684\u540D\u79F0\n */\n export function usePageParams<TPageName extends IPageName>(pageName: TPageName): IPageNameToPageParams[TPageName]\n export function usePageParams<TPageName extends IPageName>(pageName?: TPageName): IPageNameToPageParams[TPageName] {\n // @ts-ignore\n const { query } = useLocation()\n const params = useMemo(\n () => {\n try {\n return query.__params__\n ? JSON.parse(query.__params__)\n : {}\n } catch (err) {\n return {}\n }\n },\n [query.__params__],\n )\n return params\n }\n\n /**\n * \u83B7\u53D6\u4F20\u7ED9\u9875\u9762\u7684 query\u3002\n */\n export function usePageQuery<T extends Record<string, string> = Record<string, string>>(): T {\n // @ts-ignore\n const { query } = useLocation()\n return query\n }\n\n /**\n * \u83B7\u53D6\u4F20\u7ED9\u9875\u9762\u7684 query\u3002\n *\n * @deprecated \u4F7F\u7528 usePageQuery \u4EE3\u66FF\n */\n export const useQuery = usePageQuery\n\n /**\n * \u83B7\u53D6\u5F53\u524D\u9875\u9762\u540D\u79F0\u3002\n */\n export function usePageName(): INormalPageName {\n // @ts-ignore\n const { pathname } = useLocation()\n return pagePathToPageName[pathname]\n }\n "])), flatSyntheticRoutes .filter(function (route) { return !route.isLayout; }) .map(function (route) { return "'" + route.pageName + "'"; }) .join(' | ') || /* istanbul ignore next */ 'never', flatSyntheticRoutes .filter(function (route) { return route.isLayout; }) .map(function (route) { return "'" + route.pageName + "'"; }) .join(' | ') || /* istanbul ignore next */ 'never', flatSyntheticRoutes .filter(function (route) { return !route.isLayout; }) .map(function (route) { return "'" + route.pageName + "',"; }) .join('\n'), flatSyntheticRoutes .filter(function (route) { return route.isLayout; }) .map(function (route) { return "'" + route.pageName + "',"; }) .join('\n'), flatSyntheticRoutes.map(function (route) { return "'" + route.pageName + "',"; }).join('\n'), flatSyntheticRoutes .map(function (route) { return vtils_1.dedent(templateObject_1 || (templateObject_1 = tslib_1.__makeTemplateObject(["\n // @ts-ignore\n import { Params as ", " } from ", "\n "], ["\n // @ts-ignore\n import { Params as ", " } from ", "\n "])), route.pageOwnParamsTypesName, JSON.stringify(route.component.replace(/\.tsx?$/, ''))); }) .join('\n'), flatSyntheticRoutes .map(function (route) { return vtils_1.dedent(templateObject_2 || (templateObject_2 = tslib_1.__makeTemplateObject(["\n ", ": IfAny<", ", never, ", ">,\n "], ["\n ", ": IfAny<", ", never, ", ">,\n "])), route.pageName, route.pageOwnParamsTypesName, route.pageOwnParamsTypesName); }) .join('\n'), flatSyntheticRoutes .map(function (route) { return vtils_1.dedent(templateObject_3 || (templateObject_3 = tslib_1.__makeTemplateObject(["\n ", ": ", ",\n "], ["\n ", ": ", ",\n "])), route.pageName, !route.parentPageName ? "IPageNameToPageOwnParams['" + route.pageName + "']" : "Merge<IPageNameToPageParams['" + route.parentPageName + "'], IPageNameToPageOwnParams['" + route.pageName + "']>"); }) .join('\n'), flatSyntheticRoutes .map(function (route) { return vtils_1.dedent(templateObject_4 || (templateObject_4 = tslib_1.__makeTemplateObject(["\n ", ": ", ",\n "], ["\n ", ": ", ",\n "])), route.pageName, JSON.stringify(route.path)); }) .join('\n'), flatSyntheticRoutes .map(function (route) { return vtils_1.dedent(templateObject_5 || (templateObject_5 = tslib_1.__makeTemplateObject(["\n ", ": ", ",\n "], ["\n ", ": ", ",\n "])), JSON.stringify(route.path), JSON.stringify(route.pageName)); }) .join('\n'), JSON.stringify(pageNameToChildrenPageNames)); } exports.makeExports = makeExports; var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6;