umi-plugin-router-plus
Version:
一款 Umi 3 插件,为你带来类型友好的页面参数的定义、传递与获取。
71 lines (70 loc) • 20.8 kB
JavaScript
"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;