@withsprinkles/react-router-route-map 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +8 -3
- package/dist/index.js.map +2 -2
- package/dist/index.test.js +8 -3
- package/dist/index.test.js.map +2 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
|
+
}) : x)(function(x) {
|
|
4
|
+
if (typeof require !== "undefined")
|
|
5
|
+
return require.apply(this, arguments);
|
|
6
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
7
|
+
});
|
|
3
8
|
|
|
4
9
|
// src/index.ts
|
|
5
10
|
import { RoutePattern } from "@remix-run/route-pattern";
|
|
@@ -296,4 +301,4 @@ export {
|
|
|
296
301
|
ResourceMethods
|
|
297
302
|
};
|
|
298
303
|
|
|
299
|
-
//# debugId=
|
|
304
|
+
//# debugId=C07165F2B2A3E87664756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { RouteConfigEntry } from \"@react-router/dev/routes\";\nimport { RoutePattern, type RoutePatternOptions } from \"@remix-run/route-pattern\";\n\nexport const RouteConfig = Symbol.for(\"RouteConfig\");\n\ntype DevRoutes = typeof import(\"@react-router/dev/routes\");\n\nasync function getDevRoutes(): Promise<DevRoutes> {\n return import(\"@react-router/dev/routes\");\n}\n\n// MARK: Types\n\nexport interface RouteMap {\n [key: string]: Route<any> | RouteMap;\n}\n\ntype ParamValue = string | number | bigint | boolean;\n\n// Split search string by & to get individual param names\ntype SplitSearch<S extends string> = S extends `${infer First}&${infer Rest}`\n ? First | SplitSearch<Rest>\n : S extends \"\"\n ? never\n : S;\n\n// Extract search param names from pattern (after the ?)\ntype SearchParamNames<Pattern extends string> = Pattern extends `${string}?${infer Search}`\n ? SplitSearch<Search>\n : never;\n\n// Strict search params object - only allows keys that are in the pattern\ntype StrictSearchParams<Pattern extends string> = [SearchParamNames<Pattern>] extends [never]\n ? never // No search params in pattern, so none allowed\n : { [key in SearchParamNames<Pattern>]?: ParamValue };\n\n// Extract path parameter names from pattern\ntype ExtractPathParams<T extends string> = T extends `${string}:${infer Param}/${infer Rest}`\n ? Param | ExtractPathParams<Rest>\n : T extends `${string}:${infer Param}?${string}`\n ? Param\n : T extends `${string}:${infer Param}`\n ? Param\n : never;\n\n// Get required params (those in the path before ?)\ntype RequiredParams<T extends string> = ExtractPathParams<T extends `${infer P}?${string}` ? P : T>;\n\n// Input any ParamValue for path params type\ntype StrictPathParams<T extends string> = [RequiredParams<T>] extends [never]\n ? {}\n : { [key in RequiredParams<T>]: ParamValue };\n\n// Custom href args with strict search param validation\ntype StrictHrefBuilderArgs<T extends string> = [SearchParamNames<T>] extends [never]\n ? // No search params in pattern\n [RequiredParams<T>] extends [never]\n ? // No path params either - allow no args or null\n [] | [null | undefined]\n : // Has path params but no search params\n [StrictPathParams<T>]\n : // Has search params\n [RequiredParams<T>] extends [never]\n ? // No required path params, but has search params - allow various combinations\n | []\n | [null | undefined]\n | [null | undefined, StrictSearchParams<T>]\n | [Record<string, never>]\n | [Record<string, never>, StrictSearchParams<T>]\n : // Has both required path params and search params\n [StrictPathParams<T>] | [StrictPathParams<T>, StrictSearchParams<T>];\n\nexport interface RouteOptions extends RoutePatternOptions {\n file?: string;\n isIndex?: boolean;\n isLayout?: boolean;\n}\n\nexport class Route<Pattern extends string = string> extends RoutePattern<Pattern> {\n children?: RouteMap;\n #file?: string;\n #isIndex?: boolean;\n #isLayout?: boolean;\n\n constructor(source: Pattern | RoutePattern<Pattern>, options?: RouteOptions) {\n if (source instanceof RoutePattern) {\n super(source.source as Pattern, { ignoreCase: source.ignoreCase });\n } else {\n super(source, options);\n }\n\n if (options) {\n this.#file = options.file;\n this.#isIndex = options.isIndex;\n this.#isLayout = options.isLayout;\n }\n }\n\n get file(): string | undefined {\n return this.#file;\n }\n\n get isIndex(): boolean | undefined {\n return this.#isIndex;\n }\n\n get isLayout(): boolean | undefined {\n return this.#isLayout;\n }\n\n override href(...args: StrictHrefBuilderArgs<Pattern>): string {\n // Validate path params\n const pathParams = this.#getPathParams();\n const hasPathParams = pathParams.length > 0;\n const firstArgProvided = args.length > 0 && args[0] !== null && args[0] !== undefined;\n const pathParamsProvided = firstArgProvided && typeof args[0] === \"object\";\n\n // If no path params expected but a first argument is provided, throw\n if (!hasPathParams && firstArgProvided) {\n throw new Error(\n `Route \"${this.source}\" does not accept path parameters, but received: ${JSON.stringify(args[0])}`,\n );\n }\n\n // If path params expected but wrong ones provided\n if (hasPathParams && pathParamsProvided) {\n const provided = Object.keys(args[0] as object);\n for (const key of provided) {\n if (!pathParams.includes(key)) {\n throw new Error(\n `Invalid path parameter \"${key}\" for route \"${this.source}\". Valid parameters are: ${pathParams.join(\", \")}`,\n );\n }\n }\n }\n\n // Validate search params if provided\n if (args.length > 1 && args[1] && Object.keys(args[1]).length > 0) {\n const providedParams = args[1];\n const validParams = this.#getValidSearchParams();\n\n // Check if any provided param is not in the valid params list\n for (const key of Object.keys(providedParams)) {\n if (!validParams.includes(key)) {\n throw new Error(\n `Invalid search parameter \"${key}\" for route \"${this.source}\". Valid parameters are: ${validParams.join(\", \")}`,\n );\n }\n }\n }\n\n // Get the link from the parent class\n const link = super.href(...args);\n\n // If there are search params provided, use them; otherwise strip any empty query strings\n if (args.length > 1 && args[1] && Object.keys(args[1]).length > 0) {\n return link;\n }\n\n // Remove any trailing ? or query params that have no value\n return link.split(\"?\")[0];\n }\n\n #getPathParams(): string[] {\n const pathPart = this.source.split(\"?\")[0];\n const matches = pathPart.match(/:(\\w+)/g);\n if (!matches) return [];\n return matches.map(m => m.slice(1)); // Remove the ':' prefix\n }\n\n #getValidSearchParams(): string[] {\n const searchPart = this.source.split(\"?\")[1];\n if (!searchPart) return [];\n return searchPart.split(\"&\");\n }\n\n async toRouteConfig(): Promise<RouteConfigEntry | RouteConfigEntry[]> {\n const { index: rrIndex, layout: rrLayout, route: rrRoute } = await getDevRoutes();\n\n if (this.#isIndex && this.#file) {\n return rrIndex(this.#file);\n }\n\n if (this.#isLayout && this.#file) {\n const childConfigs = this.children\n ? (\n await Promise.all(\n Object.values(this.children).map(child =>\n child instanceof Route ? child.toRouteConfig() : [],\n ),\n )\n ).flat()\n : [];\n return rrLayout(this.#file, childConfigs as RouteConfigEntry[]);\n }\n\n if (this.#file) {\n // Extract the path part (remove search params for RR config)\n let path = this.source.split(\"?\")[0];\n // Remove leading slash for React Router config\n path = path.replace(/^\\//, \"\");\n\n // Don't recursively generate child configs here\n // They will be generated by createRoutes\n return rrRoute(path, this.#file);\n }\n\n // For prefix-only routes (no file)\n const childConfigs = this.children\n ? (\n await Promise.all(\n Object.values(this.children).map(child =>\n child instanceof Route ? child.toRouteConfig() : [],\n ),\n )\n ).flat()\n : [];\n\n return childConfigs as RouteConfigEntry[];\n }\n}\n\nexport type Routes<T> = T & {\n [RouteConfig]: RouteConfigEntry | RouteConfigEntry[];\n};\n\nexport async function createRoutes<TRouteMap>(routeMap: TRouteMap): Promise<Routes<TRouteMap>> {\n const {\n index: rrIndex,\n layout: rrLayout,\n route: rrRoute,\n prefix: rrPrefix,\n } = await getDevRoutes();\n\n const config: RouteConfigEntry[] = [];\n\n async function processRouteMap(map: any): Promise<RouteConfigEntry[]> {\n const entries: RouteConfigEntry[] = [];\n\n for (const [_key, value] of Object.entries(map)) {\n if (value instanceof Route) {\n // Simple route\n const config = await value.toRouteConfig();\n if (Array.isArray(config)) {\n entries.push(...config);\n } else {\n entries.push(config);\n }\n } else if (typeof value === \"object\" && value !== null) {\n const valueAny = value as any;\n // Check for layout\n if (valueAny.__layoutFile) {\n const layoutFile = valueAny.__layoutFile;\n const childConfigs = (\n await Promise.all(\n Object.values(value)\n .filter(v => v instanceof Route)\n .map(child => (child as Route).toRouteConfig()),\n )\n ).flat();\n entries.push(rrLayout(layoutFile, childConfigs));\n }\n // Check for prefix\n else if (valueAny.__prefix) {\n const prefixPath = valueAny.__prefix;\n // Use the original (non-prefixed) routes for config generation\n const originalRoutes = valueAny.__originalRoutes || value;\n const childConfigs = (\n await Promise.all(\n Object.values(originalRoutes)\n .filter(v => v instanceof Route)\n .map(child => (child as Route).toRouteConfig()),\n )\n ).flat();\n entries.push(...rrPrefix(prefixPath, childConfigs));\n }\n // Check for resources/resource or route with children\n else if (valueAny.__parentPath && valueAny.__parentFile) {\n const parentPath = valueAny.__parentPath;\n const parentFile = valueAny.__parentFile;\n const childRoutes = valueAny.__childRoutes || value;\n const childConfigs = (\n await Promise.all(\n Object.values(childRoutes)\n .filter(v => v instanceof Route)\n .map(child => (child as Route).toRouteConfig()),\n )\n ).flat();\n entries.push(rrRoute(parentPath, parentFile, childConfigs));\n }\n }\n }\n\n return entries;\n }\n\n config.push(...(await processRouteMap(routeMap)));\n\n const result = routeMap as Routes<TRouteMap>;\n (result as any)[RouteConfig] = config;\n\n return result;\n}\n\nexport function layout<Children extends RouteMap | undefined>(\n file: string,\n routeMap: Children,\n): Children {\n // Store layout metadata directly on the route map to avoid circular references\n if (routeMap) {\n (routeMap as any).__layoutFile = file;\n }\n\n return routeMap;\n}\n\nexport function index(file: string): Route<\"/\"> {\n return new Route(\"/\", { file, isIndex: true });\n}\n\n// Split \"path?search\" into path/search pieces\nexport type PathPart<S extends string> = S extends `${infer P}?${string}` ? P : S;\n\nexport type SearchPart<S extends string> = S extends `${string}?${infer Q}` ? Q : never;\n\n// Join two paths, avoiding \"//\" but always adding \"/\" between segments\nexport type JoinPaths<A extends string, B extends string> = A extends `${infer A2}/`\n ? B extends `/${infer B2}`\n ? `${A2}/${B2}`\n : `${A}${B}`\n : B extends `/${infer B2}`\n ? `${A}/${B2}`\n : `${A}/${B}`;\n\n// Join search params with &\nexport type JoinSearch<A extends string, B extends string> = [A, B] extends [never, never]\n ? \"\"\n : [A] extends [never]\n ? `?${B}`\n : [B] extends [never]\n ? `?${A}`\n : `?${A}&${B}`;\n\n// Compose two full patterns, joining paths and search separately\nexport type JoinPattern<\n Base extends string,\n Child extends string,\n> = `${JoinPaths<PathPart<Base>, PathPart<Child>>}${JoinSearch<SearchPart<Base>, SearchPart<Child>>}`;\n\nexport type RouteObject = Record<string, any>;\n\n// Rewrite every Route<P> inside T as Route<JoinPattern<Base, P>>\n// and recursively descend into plain objects.\nexport type WithBase<Base extends string, T> = T extends Route<infer P>\n ? Route<JoinPattern<Base, P>>\n : T extends RouteObject\n ? { [K in keyof T]: WithBase<Base, T[K]> }\n : T;\n\n// Helper to join two path patterns\nfunction joinPatterns(base: string, child: string): string {\n // Split base and child into path and search parts\n const [basePath, baseSearch] = base.split(\"?\");\n const [childPath, childSearch] = child.split(\"?\");\n\n // Join paths\n let path: string;\n if (basePath.endsWith(\"/\") && childPath.startsWith(\"/\")) {\n path = basePath.slice(0, -1) + childPath;\n } else if (!basePath.endsWith(\"/\") && !childPath.startsWith(\"/\")) {\n path = `${basePath}/${childPath}`;\n } else {\n path = basePath + childPath;\n }\n\n // Join search params\n const searchParts = [baseSearch, childSearch].filter(Boolean);\n const search = searchParts.length > 0 ? `?${searchParts.join(\"&\")}` : \"\";\n\n return path + search;\n}\n\n// Helper to apply a prefix to a route map\nfunction applyPrefixToRouteMap(base: string, routeMap: RouteMap): RouteMap {\n const result: RouteMap = {};\n\n for (const [key, value] of Object.entries(routeMap)) {\n if (value instanceof Route) {\n // Join the patterns\n const newPattern = joinPatterns(base, value.source);\n const newRoute = new Route(newPattern, {\n file: value.file,\n isIndex: value.isIndex,\n isLayout: value.isLayout,\n });\n\n if (value.children) {\n newRoute.children = value.children;\n }\n\n result[key] = newRoute;\n } else {\n // Recursively apply prefix to nested route maps\n result[key] = applyPrefixToRouteMap(base, value);\n }\n }\n\n return result;\n}\n\nexport function prefix<Prefix extends string, const Children extends RouteMap>(\n prefix: Prefix,\n routeMap: Children,\n): WithBase<Prefix, Children> {\n const result = applyPrefixToRouteMap(prefix, routeMap) as WithBase<Prefix, Children>;\n // Mark this as a prefix for createRoutes to detect\n const [prefixPath] = prefix.split(\"?\");\n (result as any).__prefix = prefixPath.replace(/^\\//, \"\");\n // Store the original (non-prefixed) routes for config generation\n (result as any).__originalRoutes = routeMap;\n return result;\n}\n\nexport function route<Pattern extends string>(prefix: Pattern, file: string): Route<Pattern>;\nexport function route<Prefix extends string, const Children extends RouteMap>(\n prefix: Prefix,\n file: string,\n routeMap: Children,\n): WithBase<Prefix, Children>;\nexport function route(pattern: string, file: string, routeMap?: RouteMap): any {\n if (routeMap) {\n // Apply prefix to all children\n const prefixedChildren = applyPrefixToRouteMap(pattern, routeMap);\n // Store metadata without creating circular references\n const [path] = pattern.split(\"?\");\n (prefixedChildren as any).__parentPath = path.replace(/^\\//, \"\");\n (prefixedChildren as any).__parentFile = file;\n return prefixedChildren;\n }\n\n return new Route(pattern, { file });\n}\n\nexport const ResourcesMethods = [\"index\", \"new\", \"show\", \"edit\"] as const;\nexport type ResourcesMethod = (typeof ResourcesMethods)[number];\n\nexport type ResourcesOptions = {\n /**\n * The resource methods to include in the route map. If not provided, all\n * methods (`index`, `show`, `new`, `edit`)\n * will be included.\n */\n only?: ResourcesMethod[];\n /**\n * The parameter name to use for the resource. Defaults to `id`.\n */\n param?: string;\n /**\n * Custom names to use for the resource routes.\n */\n names?: {\n index?: string;\n new?: string;\n show?: string;\n edit?: string;\n };\n};\n\nexport type ResourcesMethodsFor<Options extends ResourcesOptions | undefined> = Options extends {\n only: readonly (infer M)[];\n}\n ? M & ResourcesMethod\n : ResourcesMethod;\n\nexport type ResourcesKeyFor<\n M extends ResourcesMethod,\n Options extends ResourcesOptions | undefined,\n> = Options extends { names: infer N }\n ? N extends Record<string, string>\n ? M extends keyof N\n ? N[M] & string\n : M\n : M\n : M;\n\nexport type ResourcesParamFor<Options extends ResourcesOptions | undefined> = Options extends {\n param: infer P extends string;\n}\n ? P\n : \"id\";\n\nexport type ResourcesRouteFor<\n Base extends string,\n Param extends string,\n M extends ResourcesMethod,\n> = M extends \"index\"\n ? Route<Base>\n : M extends \"new\"\n ? Route<JoinPattern<Base, \"/new\">>\n : M extends \"show\"\n ? Route<JoinPattern<Base, `/:${Param}`>>\n : M extends \"edit\"\n ? Route<JoinPattern<Base, `/:${Param}/edit`>>\n : never;\n\nexport type ResourcesMap<Base extends string, Options extends ResourcesOptions | undefined> = {\n [M in ResourcesMethodsFor<Options> as ResourcesKeyFor<M, Options>]: ResourcesRouteFor<\n Base,\n ResourcesParamFor<Options>,\n M\n >;\n};\n\nexport function resources<Base extends string, const Options extends ResourcesOptions>(\n base: Base | RoutePattern<Base>,\n options?: Options,\n): ResourcesMap<Base, Options> {\n const baseStr = base instanceof RoutePattern ? base.source : base;\n const [basePath, searchParams] = baseStr.split(\"?\");\n const _search = searchParams ? `?${searchParams}` : \"\";\n\n const param = options?.param || \"id\";\n const only = options?.only || [\"index\", \"new\", \"show\", \"edit\"];\n const names = options?.names || {};\n\n // Extract the base name from the path (e.g., \"/artists\" -> \"artists\")\n const baseName = basePath.replace(/^\\//, \"\").split(\"/\").pop() || \"\";\n const layoutFile = `./${baseName}/layout.tsx`;\n\n const result: any = {};\n const childRoutes: any = {};\n\n for (const method of only) {\n const key = (names as any)[method] || method;\n\n if (method === \"index\") {\n // Index route is a child of the layout\n const childRoute = new Route(\"\", { file: `./${baseName}/index.tsx`, isIndex: true });\n childRoutes[key] = childRoute;\n // The result route has the full path for user access\n result[key] = new Route(baseStr, { file: `./${baseName}/index.tsx`, isIndex: true });\n } else if (method === \"new\") {\n // Child route is relative\n const childRoute = new Route(\"new\", { file: `./${baseName}/new.tsx` });\n childRoutes[key] = childRoute;\n result[key] = new Route(joinPatterns(baseStr, \"/new\"), {\n file: `./${baseName}/new.tsx`,\n });\n } else if (method === \"show\") {\n const childRoute = new Route(`:${param}`, { file: `./${baseName}/show.tsx` });\n childRoutes[key] = childRoute;\n result[key] = new Route(joinPatterns(baseStr, `/:${param}`), {\n file: `./${baseName}/show.tsx`,\n });\n } else if (method === \"edit\") {\n const childRoute = new Route(`:${param}/edit`, { file: `./${baseName}/edit.tsx` });\n childRoutes[key] = childRoute;\n result[key] = new Route(joinPatterns(baseStr, `/:${param}/edit`), {\n file: `./${baseName}/edit.tsx`,\n });\n }\n }\n\n // Store parent metadata and child routes separately without creating circular references\n (result as any).__parentPath = basePath.replace(/^\\//, \"\");\n (result as any).__parentFile = layoutFile;\n (result as any).__childRoutes = childRoutes;\n\n return result;\n}\n\nexport const ResourceMethods = [\"new\", \"show\", \"edit\"] as const;\nexport type ResourceMethod = (typeof ResourceMethods)[number];\n\nexport interface ResourceOptions {\n /**\n * The resource methods to include in the route map. If not provided, all\n * methods (`show`, `new`, and `edit`) will be\n * included.\n */\n only?: ResourceMethod[];\n /**\n * Custom names to use for the resource routes.\n */\n names?: {\n new?: string;\n show?: string;\n edit?: string;\n };\n}\n\nexport type ResourceMethodsFor<Options extends ResourceOptions | undefined> = Options extends {\n only: readonly (infer M)[];\n}\n ? M & ResourceMethod\n : ResourceMethod;\n\nexport type ResourceKeyFor<\n M extends ResourceMethod,\n Options extends ResourceOptions | undefined,\n> = Options extends { names: infer N }\n ? N extends Record<string, string>\n ? M extends keyof N\n ? N[M] & string\n : M\n : M\n : M;\n\nexport type ResourceRouteFor<Base extends string, M extends ResourceMethod> = M extends \"new\"\n ? Route<JoinPattern<Base, \"/new\">>\n : M extends \"show\"\n ? Route<Base>\n : M extends \"edit\"\n ? Route<JoinPattern<Base, \"/edit\">>\n : never;\n\nexport type ResourceMap<Base extends string, Options extends ResourceOptions | undefined> = {\n [M in ResourceMethodsFor<Options> as ResourceKeyFor<M, Options>]: ResourceRouteFor<Base, M>;\n};\n\nexport function resource<Base extends string, const Options extends ResourceOptions>(\n base: Base | RoutePattern<Base>,\n options?: Options,\n): ResourceMap<Base, Options> {\n const baseStr = base instanceof RoutePattern ? base.source : base;\n const [basePath, searchParams] = baseStr.split(\"?\");\n const _search = searchParams ? `?${searchParams}` : \"\";\n\n const only = options?.only || [\"new\", \"show\", \"edit\"];\n const names = options?.names || {};\n\n // Extract the base name from the path (e.g., \"/user\" -> \"user\")\n const baseName = basePath.replace(/^\\//, \"\").split(\"/\").pop() || \"\";\n const layoutFile = `./${baseName}/layout.tsx`;\n\n const result: any = {};\n const childRoutes: any = {};\n\n // Process in the order: show (index), new, edit\n // This ensures the config is generated in the correct order\n const orderedMethods = [\"show\", \"new\", \"edit\"].filter(m => only.includes(m as ResourceMethod));\n\n for (const method of orderedMethods) {\n const key = (names as any)[method] || method;\n\n if (method === \"show\") {\n // For resource, \"show\" becomes an index route (child)\n const childRoute = new Route(\"\", { file: `./${baseName}/show.tsx`, isIndex: true });\n childRoutes[key] = childRoute;\n result[key] = new Route(baseStr, { file: `./${baseName}/show.tsx` });\n } else if (method === \"new\") {\n const childRoute = new Route(\"new\", { file: `./${baseName}/new.tsx` });\n childRoutes[key] = childRoute;\n result[key] = new Route(joinPatterns(baseStr, \"/new\"), {\n file: `./${baseName}/new.tsx`,\n });\n } else if (method === \"edit\") {\n const childRoute = new Route(\"edit\", { file: `./${baseName}/edit.tsx` });\n childRoutes[key] = childRoute;\n result[key] = new Route(joinPatterns(baseStr, \"/edit\"), {\n file: `./${baseName}/edit.tsx`,\n });\n }\n }\n\n // Store parent metadata and child routes separately without creating circular references\n (result as any).__parentPath = basePath.replace(/^\\//, \"\");\n (result as any).__parentFile = layoutFile;\n (result as any).__childRoutes = childRoutes;\n\n return result;\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "C07165F2B2A3E87664756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/index.test.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
2
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
3
|
+
}) : x)(function(x) {
|
|
4
|
+
if (typeof require !== "undefined")
|
|
5
|
+
return require.apply(this, arguments);
|
|
6
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
7
|
+
});
|
|
3
8
|
|
|
4
9
|
// src/index.ts
|
|
5
10
|
import { RoutePattern } from "@remix-run/route-pattern";
|
|
@@ -396,4 +401,4 @@ describe("generates correct href values", () => {
|
|
|
396
401
|
});
|
|
397
402
|
});
|
|
398
403
|
|
|
399
|
-
//# debugId=
|
|
404
|
+
//# debugId=F593CCD4570E331864756E2164756E21
|
package/dist/index.test.js.map
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"import type { RouteConfigEntry } from \"@react-router/dev/routes\";\nimport { RoutePattern, type RoutePatternOptions } from \"@remix-run/route-pattern\";\n\nexport const RouteConfig = Symbol.for(\"RouteConfig\");\n\ntype DevRoutes = typeof import(\"@react-router/dev/routes\");\n\nasync function getDevRoutes(): Promise<DevRoutes> {\n return import(\"@react-router/dev/routes\");\n}\n\n// MARK: Types\n\nexport interface RouteMap {\n [key: string]: Route<any> | RouteMap;\n}\n\ntype ParamValue = string | number | bigint | boolean;\n\n// Split search string by & to get individual param names\ntype SplitSearch<S extends string> = S extends `${infer First}&${infer Rest}`\n ? First | SplitSearch<Rest>\n : S extends \"\"\n ? never\n : S;\n\n// Extract search param names from pattern (after the ?)\ntype SearchParamNames<Pattern extends string> = Pattern extends `${string}?${infer Search}`\n ? SplitSearch<Search>\n : never;\n\n// Strict search params object - only allows keys that are in the pattern\ntype StrictSearchParams<Pattern extends string> = [SearchParamNames<Pattern>] extends [never]\n ? never // No search params in pattern, so none allowed\n : { [key in SearchParamNames<Pattern>]?: ParamValue };\n\n// Extract path parameter names from pattern\ntype ExtractPathParams<T extends string> = T extends `${string}:${infer Param}/${infer Rest}`\n ? Param | ExtractPathParams<Rest>\n : T extends `${string}:${infer Param}?${string}`\n ? Param\n : T extends `${string}:${infer Param}`\n ? Param\n : never;\n\n// Get required params (those in the path before ?)\ntype RequiredParams<T extends string> = ExtractPathParams<T extends `${infer P}?${string}` ? P : T>;\n\n// Input any ParamValue for path params type\ntype StrictPathParams<T extends string> = [RequiredParams<T>] extends [never]\n ? {}\n : { [key in RequiredParams<T>]: ParamValue };\n\n// Custom href args with strict search param validation\ntype StrictHrefBuilderArgs<T extends string> = [SearchParamNames<T>] extends [never]\n ? // No search params in pattern\n [RequiredParams<T>] extends [never]\n ? // No path params either - allow no args or null\n [] | [null | undefined]\n : // Has path params but no search params\n [StrictPathParams<T>]\n : // Has search params\n [RequiredParams<T>] extends [never]\n ? // No required path params, but has search params - allow various combinations\n | []\n | [null | undefined]\n | [null | undefined, StrictSearchParams<T>]\n | [Record<string, never>]\n | [Record<string, never>, StrictSearchParams<T>]\n : // Has both required path params and search params\n [StrictPathParams<T>] | [StrictPathParams<T>, StrictSearchParams<T>];\n\nexport interface RouteOptions extends RoutePatternOptions {\n file?: string;\n isIndex?: boolean;\n isLayout?: boolean;\n}\n\nexport class Route<Pattern extends string = string> extends RoutePattern<Pattern> {\n children?: RouteMap;\n #file?: string;\n #isIndex?: boolean;\n #isLayout?: boolean;\n\n constructor(source: Pattern | RoutePattern<Pattern>, options?: RouteOptions) {\n if (source instanceof RoutePattern) {\n super(source.source as Pattern, { ignoreCase: source.ignoreCase });\n } else {\n super(source, options);\n }\n\n if (options) {\n this.#file = options.file;\n this.#isIndex = options.isIndex;\n this.#isLayout = options.isLayout;\n }\n }\n\n get file(): string | undefined {\n return this.#file;\n }\n\n get isIndex(): boolean | undefined {\n return this.#isIndex;\n }\n\n get isLayout(): boolean | undefined {\n return this.#isLayout;\n }\n\n override href(...args: StrictHrefBuilderArgs<Pattern>): string {\n // Validate path params\n const pathParams = this.#getPathParams();\n const hasPathParams = pathParams.length > 0;\n const firstArgProvided = args.length > 0 && args[0] !== null && args[0] !== undefined;\n const pathParamsProvided = firstArgProvided && typeof args[0] === \"object\";\n\n // If no path params expected but a first argument is provided, throw\n if (!hasPathParams && firstArgProvided) {\n throw new Error(\n `Route \"${this.source}\" does not accept path parameters, but received: ${JSON.stringify(args[0])}`,\n );\n }\n\n // If path params expected but wrong ones provided\n if (hasPathParams && pathParamsProvided) {\n const provided = Object.keys(args[0] as object);\n for (const key of provided) {\n if (!pathParams.includes(key)) {\n throw new Error(\n `Invalid path parameter \"${key}\" for route \"${this.source}\". Valid parameters are: ${pathParams.join(\", \")}`,\n );\n }\n }\n }\n\n // Validate search params if provided\n if (args.length > 1 && args[1] && Object.keys(args[1]).length > 0) {\n const providedParams = args[1];\n const validParams = this.#getValidSearchParams();\n\n // Check if any provided param is not in the valid params list\n for (const key of Object.keys(providedParams)) {\n if (!validParams.includes(key)) {\n throw new Error(\n `Invalid search parameter \"${key}\" for route \"${this.source}\". Valid parameters are: ${validParams.join(\", \")}`,\n );\n }\n }\n }\n\n // Get the link from the parent class\n const link = super.href(...args);\n\n // If there are search params provided, use them; otherwise strip any empty query strings\n if (args.length > 1 && args[1] && Object.keys(args[1]).length > 0) {\n return link;\n }\n\n // Remove any trailing ? or query params that have no value\n return link.split(\"?\")[0];\n }\n\n #getPathParams(): string[] {\n const pathPart = this.source.split(\"?\")[0];\n const matches = pathPart.match(/:(\\w+)/g);\n if (!matches) return [];\n return matches.map(m => m.slice(1)); // Remove the ':' prefix\n }\n\n #getValidSearchParams(): string[] {\n const searchPart = this.source.split(\"?\")[1];\n if (!searchPart) return [];\n return searchPart.split(\"&\");\n }\n\n async toRouteConfig(): Promise<RouteConfigEntry | RouteConfigEntry[]> {\n const { index: rrIndex, layout: rrLayout, route: rrRoute } = await getDevRoutes();\n\n if (this.#isIndex && this.#file) {\n return rrIndex(this.#file);\n }\n\n if (this.#isLayout && this.#file) {\n const childConfigs = this.children\n ? (\n await Promise.all(\n Object.values(this.children).map(child =>\n child instanceof Route ? child.toRouteConfig() : [],\n ),\n )\n ).flat()\n : [];\n return rrLayout(this.#file, childConfigs as RouteConfigEntry[]);\n }\n\n if (this.#file) {\n // Extract the path part (remove search params for RR config)\n let path = this.source.split(\"?\")[0];\n // Remove leading slash for React Router config\n path = path.replace(/^\\//, \"\");\n\n // Don't recursively generate child configs here\n // They will be generated by createRoutes\n return rrRoute(path, this.#file);\n }\n\n // For prefix-only routes (no file)\n const childConfigs = this.children\n ? (\n await Promise.all(\n Object.values(this.children).map(child =>\n child instanceof Route ? child.toRouteConfig() : [],\n ),\n )\n ).flat()\n : [];\n\n return childConfigs as RouteConfigEntry[];\n }\n}\n\nexport type Routes<T> = T & {\n [RouteConfig]: RouteConfigEntry | RouteConfigEntry[];\n};\n\nexport async function createRoutes<TRouteMap>(routeMap: TRouteMap): Promise<Routes<TRouteMap>> {\n const {\n index: rrIndex,\n layout: rrLayout,\n route: rrRoute,\n prefix: rrPrefix,\n } = await getDevRoutes();\n\n const config: RouteConfigEntry[] = [];\n\n async function processRouteMap(map: any): Promise<RouteConfigEntry[]> {\n const entries: RouteConfigEntry[] = [];\n\n for (const [_key, value] of Object.entries(map)) {\n if (value instanceof Route) {\n // Simple route\n const config = await value.toRouteConfig();\n if (Array.isArray(config)) {\n entries.push(...config);\n } else {\n entries.push(config);\n }\n } else if (typeof value === \"object\" && value !== null) {\n const valueAny = value as any;\n // Check for layout\n if (valueAny.__layoutFile) {\n const layoutFile = valueAny.__layoutFile;\n const childConfigs = (\n await Promise.all(\n Object.values(value)\n .filter(v => v instanceof Route)\n .map(child => (child as Route).toRouteConfig()),\n )\n ).flat();\n entries.push(rrLayout(layoutFile, childConfigs));\n }\n // Check for prefix\n else if (valueAny.__prefix) {\n const prefixPath = valueAny.__prefix;\n // Use the original (non-prefixed) routes for config generation\n const originalRoutes = valueAny.__originalRoutes || value;\n const childConfigs = (\n await Promise.all(\n Object.values(originalRoutes)\n .filter(v => v instanceof Route)\n .map(child => (child as Route).toRouteConfig()),\n )\n ).flat();\n entries.push(...rrPrefix(prefixPath, childConfigs));\n }\n // Check for resources/resource or route with children\n else if (valueAny.__parentPath && valueAny.__parentFile) {\n const parentPath = valueAny.__parentPath;\n const parentFile = valueAny.__parentFile;\n const childRoutes = valueAny.__childRoutes || value;\n const childConfigs = (\n await Promise.all(\n Object.values(childRoutes)\n .filter(v => v instanceof Route)\n .map(child => (child as Route).toRouteConfig()),\n )\n ).flat();\n entries.push(rrRoute(parentPath, parentFile, childConfigs));\n }\n }\n }\n\n return entries;\n }\n\n config.push(...(await processRouteMap(routeMap)));\n\n const result = routeMap as Routes<TRouteMap>;\n (result as any)[RouteConfig] = config;\n\n return result;\n}\n\nexport function layout<Children extends RouteMap | undefined>(\n file: string,\n routeMap: Children,\n): Children {\n // Store layout metadata directly on the route map to avoid circular references\n if (routeMap) {\n (routeMap as any).__layoutFile = file;\n }\n\n return routeMap;\n}\n\nexport function index(file: string): Route<\"/\"> {\n return new Route(\"/\", { file, isIndex: true });\n}\n\n// Split \"path?search\" into path/search pieces\nexport type PathPart<S extends string> = S extends `${infer P}?${string}` ? P : S;\n\nexport type SearchPart<S extends string> = S extends `${string}?${infer Q}` ? Q : never;\n\n// Join two paths, avoiding \"//\" but always adding \"/\" between segments\nexport type JoinPaths<A extends string, B extends string> = A extends `${infer A2}/`\n ? B extends `/${infer B2}`\n ? `${A2}/${B2}`\n : `${A}${B}`\n : B extends `/${infer B2}`\n ? `${A}/${B2}`\n : `${A}/${B}`;\n\n// Join search params with &\nexport type JoinSearch<A extends string, B extends string> = [A, B] extends [never, never]\n ? \"\"\n : [A] extends [never]\n ? `?${B}`\n : [B] extends [never]\n ? `?${A}`\n : `?${A}&${B}`;\n\n// Compose two full patterns, joining paths and search separately\nexport type JoinPattern<\n Base extends string,\n Child extends string,\n> = `${JoinPaths<PathPart<Base>, PathPart<Child>>}${JoinSearch<SearchPart<Base>, SearchPart<Child>>}`;\n\nexport type RouteObject = Record<string, any>;\n\n// Rewrite every Route<P> inside T as Route<JoinPattern<Base, P>>\n// and recursively descend into plain objects.\nexport type WithBase<Base extends string, T> = T extends Route<infer P>\n ? Route<JoinPattern<Base, P>>\n : T extends RouteObject\n ? { [K in keyof T]: WithBase<Base, T[K]> }\n : T;\n\n// Helper to join two path patterns\nfunction joinPatterns(base: string, child: string): string {\n // Split base and child into path and search parts\n const [basePath, baseSearch] = base.split(\"?\");\n const [childPath, childSearch] = child.split(\"?\");\n\n // Join paths\n let path: string;\n if (basePath.endsWith(\"/\") && childPath.startsWith(\"/\")) {\n path = basePath.slice(0, -1) + childPath;\n } else if (!basePath.endsWith(\"/\") && !childPath.startsWith(\"/\")) {\n path = `${basePath}/${childPath}`;\n } else {\n path = basePath + childPath;\n }\n\n // Join search params\n const searchParts = [baseSearch, childSearch].filter(Boolean);\n const search = searchParts.length > 0 ? `?${searchParts.join(\"&\")}` : \"\";\n\n return path + search;\n}\n\n// Helper to apply a prefix to a route map\nfunction applyPrefixToRouteMap(base: string, routeMap: RouteMap): RouteMap {\n const result: RouteMap = {};\n\n for (const [key, value] of Object.entries(routeMap)) {\n if (value instanceof Route) {\n // Join the patterns\n const newPattern = joinPatterns(base, value.source);\n const newRoute = new Route(newPattern, {\n file: value.file,\n isIndex: value.isIndex,\n isLayout: value.isLayout,\n });\n\n if (value.children) {\n newRoute.children = value.children;\n }\n\n result[key] = newRoute;\n } else {\n // Recursively apply prefix to nested route maps\n result[key] = applyPrefixToRouteMap(base, value);\n }\n }\n\n return result;\n}\n\nexport function prefix<Prefix extends string, const Children extends RouteMap>(\n prefix: Prefix,\n routeMap: Children,\n): WithBase<Prefix, Children> {\n const result = applyPrefixToRouteMap(prefix, routeMap) as WithBase<Prefix, Children>;\n // Mark this as a prefix for createRoutes to detect\n const [prefixPath] = prefix.split(\"?\");\n (result as any).__prefix = prefixPath.replace(/^\\//, \"\");\n // Store the original (non-prefixed) routes for config generation\n (result as any).__originalRoutes = routeMap;\n return result;\n}\n\nexport function route<Pattern extends string>(prefix: Pattern, file: string): Route<Pattern>;\nexport function route<Prefix extends string, const Children extends RouteMap>(\n prefix: Prefix,\n file: string,\n routeMap: Children,\n): WithBase<Prefix, Children>;\nexport function route(pattern: string, file: string, routeMap?: RouteMap): any {\n if (routeMap) {\n // Apply prefix to all children\n const prefixedChildren = applyPrefixToRouteMap(pattern, routeMap);\n // Store metadata without creating circular references\n const [path] = pattern.split(\"?\");\n (prefixedChildren as any).__parentPath = path.replace(/^\\//, \"\");\n (prefixedChildren as any).__parentFile = file;\n return prefixedChildren;\n }\n\n return new Route(pattern, { file });\n}\n\nexport const ResourcesMethods = [\"index\", \"new\", \"show\", \"edit\"] as const;\nexport type ResourcesMethod = (typeof ResourcesMethods)[number];\n\nexport type ResourcesOptions = {\n /**\n * The resource methods to include in the route map. If not provided, all\n * methods (`index`, `show`, `new`, `edit`)\n * will be included.\n */\n only?: ResourcesMethod[];\n /**\n * The parameter name to use for the resource. Defaults to `id`.\n */\n param?: string;\n /**\n * Custom names to use for the resource routes.\n */\n names?: {\n index?: string;\n new?: string;\n show?: string;\n edit?: string;\n };\n};\n\nexport type ResourcesMethodsFor<Options extends ResourcesOptions | undefined> = Options extends {\n only: readonly (infer M)[];\n}\n ? M & ResourcesMethod\n : ResourcesMethod;\n\nexport type ResourcesKeyFor<\n M extends ResourcesMethod,\n Options extends ResourcesOptions | undefined,\n> = Options extends { names: infer N }\n ? N extends Record<string, string>\n ? M extends keyof N\n ? N[M] & string\n : M\n : M\n : M;\n\nexport type ResourcesParamFor<Options extends ResourcesOptions | undefined> = Options extends {\n param: infer P extends string;\n}\n ? P\n : \"id\";\n\nexport type ResourcesRouteFor<\n Base extends string,\n Param extends string,\n M extends ResourcesMethod,\n> = M extends \"index\"\n ? Route<Base>\n : M extends \"new\"\n ? Route<JoinPattern<Base, \"/new\">>\n : M extends \"show\"\n ? Route<JoinPattern<Base, `/:${Param}`>>\n : M extends \"edit\"\n ? Route<JoinPattern<Base, `/:${Param}/edit`>>\n : never;\n\nexport type ResourcesMap<Base extends string, Options extends ResourcesOptions | undefined> = {\n [M in ResourcesMethodsFor<Options> as ResourcesKeyFor<M, Options>]: ResourcesRouteFor<\n Base,\n ResourcesParamFor<Options>,\n M\n >;\n};\n\nexport function resources<Base extends string, const Options extends ResourcesOptions>(\n base: Base | RoutePattern<Base>,\n options?: Options,\n): ResourcesMap<Base, Options> {\n const baseStr = base instanceof RoutePattern ? base.source : base;\n const [basePath, searchParams] = baseStr.split(\"?\");\n const _search = searchParams ? `?${searchParams}` : \"\";\n\n const param = options?.param || \"id\";\n const only = options?.only || [\"index\", \"new\", \"show\", \"edit\"];\n const names = options?.names || {};\n\n // Extract the base name from the path (e.g., \"/artists\" -> \"artists\")\n const baseName = basePath.replace(/^\\//, \"\").split(\"/\").pop() || \"\";\n const layoutFile = `./${baseName}/layout.tsx`;\n\n const result: any = {};\n const childRoutes: any = {};\n\n for (const method of only) {\n const key = (names as any)[method] || method;\n\n if (method === \"index\") {\n // Index route is a child of the layout\n const childRoute = new Route(\"\", { file: `./${baseName}/index.tsx`, isIndex: true });\n childRoutes[key] = childRoute;\n // The result route has the full path for user access\n result[key] = new Route(baseStr, { file: `./${baseName}/index.tsx`, isIndex: true });\n } else if (method === \"new\") {\n // Child route is relative\n const childRoute = new Route(\"new\", { file: `./${baseName}/new.tsx` });\n childRoutes[key] = childRoute;\n result[key] = new Route(joinPatterns(baseStr, \"/new\"), {\n file: `./${baseName}/new.tsx`,\n });\n } else if (method === \"show\") {\n const childRoute = new Route(`:${param}`, { file: `./${baseName}/show.tsx` });\n childRoutes[key] = childRoute;\n result[key] = new Route(joinPatterns(baseStr, `/:${param}`), {\n file: `./${baseName}/show.tsx`,\n });\n } else if (method === \"edit\") {\n const childRoute = new Route(`:${param}/edit`, { file: `./${baseName}/edit.tsx` });\n childRoutes[key] = childRoute;\n result[key] = new Route(joinPatterns(baseStr, `/:${param}/edit`), {\n file: `./${baseName}/edit.tsx`,\n });\n }\n }\n\n // Store parent metadata and child routes separately without creating circular references\n (result as any).__parentPath = basePath.replace(/^\\//, \"\");\n (result as any).__parentFile = layoutFile;\n (result as any).__childRoutes = childRoutes;\n\n return result;\n}\n\nexport const ResourceMethods = [\"new\", \"show\", \"edit\"] as const;\nexport type ResourceMethod = (typeof ResourceMethods)[number];\n\nexport interface ResourceOptions {\n /**\n * The resource methods to include in the route map. If not provided, all\n * methods (`show`, `new`, and `edit`) will be\n * included.\n */\n only?: ResourceMethod[];\n /**\n * Custom names to use for the resource routes.\n */\n names?: {\n new?: string;\n show?: string;\n edit?: string;\n };\n}\n\nexport type ResourceMethodsFor<Options extends ResourceOptions | undefined> = Options extends {\n only: readonly (infer M)[];\n}\n ? M & ResourceMethod\n : ResourceMethod;\n\nexport type ResourceKeyFor<\n M extends ResourceMethod,\n Options extends ResourceOptions | undefined,\n> = Options extends { names: infer N }\n ? N extends Record<string, string>\n ? M extends keyof N\n ? N[M] & string\n : M\n : M\n : M;\n\nexport type ResourceRouteFor<Base extends string, M extends ResourceMethod> = M extends \"new\"\n ? Route<JoinPattern<Base, \"/new\">>\n : M extends \"show\"\n ? Route<Base>\n : M extends \"edit\"\n ? Route<JoinPattern<Base, \"/edit\">>\n : never;\n\nexport type ResourceMap<Base extends string, Options extends ResourceOptions | undefined> = {\n [M in ResourceMethodsFor<Options> as ResourceKeyFor<M, Options>]: ResourceRouteFor<Base, M>;\n};\n\nexport function resource<Base extends string, const Options extends ResourceOptions>(\n base: Base | RoutePattern<Base>,\n options?: Options,\n): ResourceMap<Base, Options> {\n const baseStr = base instanceof RoutePattern ? base.source : base;\n const [basePath, searchParams] = baseStr.split(\"?\");\n const _search = searchParams ? `?${searchParams}` : \"\";\n\n const only = options?.only || [\"new\", \"show\", \"edit\"];\n const names = options?.names || {};\n\n // Extract the base name from the path (e.g., \"/user\" -> \"user\")\n const baseName = basePath.replace(/^\\//, \"\").split(\"/\").pop() || \"\";\n const layoutFile = `./${baseName}/layout.tsx`;\n\n const result: any = {};\n const childRoutes: any = {};\n\n // Process in the order: show (index), new, edit\n // This ensures the config is generated in the correct order\n const orderedMethods = [\"show\", \"new\", \"edit\"].filter(m => only.includes(m as ResourceMethod));\n\n for (const method of orderedMethods) {\n const key = (names as any)[method] || method;\n\n if (method === \"show\") {\n // For resource, \"show\" becomes an index route (child)\n const childRoute = new Route(\"\", { file: `./${baseName}/show.tsx`, isIndex: true });\n childRoutes[key] = childRoute;\n result[key] = new Route(baseStr, { file: `./${baseName}/show.tsx` });\n } else if (method === \"new\") {\n const childRoute = new Route(\"new\", { file: `./${baseName}/new.tsx` });\n childRoutes[key] = childRoute;\n result[key] = new Route(joinPatterns(baseStr, \"/new\"), {\n file: `./${baseName}/new.tsx`,\n });\n } else if (method === \"edit\") {\n const childRoute = new Route(\"edit\", { file: `./${baseName}/edit.tsx` });\n childRoutes[key] = childRoute;\n result[key] = new Route(joinPatterns(baseStr, \"/edit\"), {\n file: `./${baseName}/edit.tsx`,\n });\n }\n }\n\n // Store parent metadata and child routes separately without creating circular references\n (result as any).__parentPath = basePath.replace(/^\\//, \"\");\n (result as any).__parentFile = layoutFile;\n (result as any).__childRoutes = childRoutes;\n\n return result;\n}\n",
|
|
6
6
|
"import { beforeAll, describe, expect, expectTypeOf, test } from \"bun:test\";\nimport {\n index as rrIndex,\n layout as rrLayout,\n prefix as rrPrefix,\n route as rrRoute,\n} from \"@react-router/dev/routes\";\nimport {\n createRoutes,\n index,\n layout,\n prefix,\n type Route,\n RouteConfig,\n type Routes,\n resource,\n resources,\n route,\n} from \"./index.ts\";\n\nconst routeMap = {\n index: index(\"./home.tsx\"),\n about: route(\"/about\", \"./about.tsx\"),\n auth: layout(\"./auth/layout.tsx\", {\n login: route(\"/login\", \"./auth/login.tsx\"),\n register: route(\"/register\", \"./auth/register.tsx\"),\n }),\n concerts: prefix(\"/concerts?q\", {\n home: index(\"./concerts/home.tsx\"),\n show: route(\"/:city\", \"./concerts/city.tsx\"),\n trending: route(\"/trending?in-my-town\", \"./concerts/trending.tsx\"),\n }),\n artists: resources(\"/artists?q\", {\n only: [\"index\", \"show\"],\n param: \"name\",\n }),\n user: resource(\"/user\"),\n};\n\ntype RoutesType = Routes<typeof routeMap>;\nlet routes: RoutesType;\n\nbeforeAll(async () => {\n routes = await createRoutes(routeMap);\n});\n\ntest(\"generates correct React Router config\", () => {\n expect(routes[RouteConfig]).toEqual([\n rrIndex(\"./home.tsx\"),\n rrRoute(\"about\", \"./about.tsx\"),\n\n rrLayout(\"./auth/layout.tsx\", [\n rrRoute(\"login\", \"./auth/login.tsx\"),\n rrRoute(\"register\", \"./auth/register.tsx\"),\n ]),\n\n ...rrPrefix(\"concerts\", [\n rrIndex(\"./concerts/home.tsx\"),\n rrRoute(\":city\", \"./concerts/city.tsx\"),\n rrRoute(\"trending\", \"./concerts/trending.tsx\"),\n ]),\n\n rrRoute(\"artists\", \"./artists/layout.tsx\", [\n rrIndex(\"./artists/index.tsx\"),\n rrRoute(\":name\", \"./artists/show.tsx\"),\n ]),\n\n rrRoute(\"user\", \"./user/layout.tsx\", [\n rrIndex(\"./user/show.tsx\"),\n rrRoute(\"new\", \"./user/new.tsx\"),\n rrRoute(\"edit\", \"./user/edit.tsx\"),\n ]),\n ]);\n});\n\ndescribe(\"type-level tests\", () => {\n test(\"generates correct TypeScript types\", () => {\n expectTypeOf(routes.index).toExtend<Route<\"/\">>();\n expectTypeOf(routes.concerts.trending).toExtend<Route<\"/concerts/trending?q&in-my-town\">>();\n expectTypeOf(routes.concerts.show).toExtend<Route<\"/concerts/:city?q\">>();\n expectTypeOf(routes.artists.index).toExtend<Route<\"/artists?q\">>();\n expectTypeOf(routes.artists.show).toExtend<Route<\"/artists/:name?q\">>();\n expectTypeOf(routes.user.new).toExtend<Route<\"/user/new\">>();\n });\n\n test(\"rejects incorrect href path or search parameters\", () => {\n expect(() => {\n // @ts-expect-error TEST: \"b\" is not a possible search param for this route\n routes.artists.show.href({ name: \"haim\" }, { q: \"Austin\", b: \"b\" });\n }).toThrow();\n\n expect(() => {\n // @ts-expect-error TEST: `routes.concerts.trending` does not accept path params\n routes.concerts.trending.href(\"foo\", { q: \"rock\", \"in-my-town\": true });\n }).toThrow();\n\n expect(() => {\n // @ts-expect-error TEST: `routes.concerts.show` does not accept the `concert` path param\n routes.concerts.show.href({ concert: \"salt-lake-city\" });\n }).toThrow();\n\n expect(() => {\n // @ts-expect-error TEST: `routes.user.show` does not accept search params\n routes.user.show.href(null, { q: \"Mark\" });\n }).toThrow();\n });\n});\n\ndescribe(\"generates correct href values\", () => {\n test(\"index\", () => {\n const href = routes.index.href();\n expect(href).toEqual(\"/\");\n });\n\n test(\"prefix with search params\", () => {\n const href = routes.concerts.trending.href(null, { q: \"rock\", \"in-my-town\": true });\n expect(href).toEqual(\"/concerts/trending?q=rock&in-my-town=true\");\n });\n\n test(\"prefix with path params\", () => {\n const href = routes.concerts.show.href({ city: \"salt-lake-city\" });\n expect(href).toEqual(\"/concerts/salt-lake-city\");\n });\n\n test(\"resources.index with search params\", () => {\n const href = routes.artists.index.href(null, { q: \"Mark\" });\n expect(href).toEqual(\"/artists?q=Mark\");\n });\n\n test(\"resources.show with search params\", () => {\n const href = routes.artists.show.href({ name: \"haim\" }, { q: \"Austin\" });\n expect(href).toEqual(\"/artists/haim?q=Austin\");\n });\n\n test(\"resource.new\", () => {\n const href = routes.user.new.href();\n expect(href).toEqual(\"/user/new\");\n });\n\n test(\"resource.show\", () => {\n const href = routes.user.show.href();\n expect(href).toEqual(\"/user\");\n });\n\n test(\"resource.edit\", () => {\n const href = routes.user.edit.href();\n expect(href).toEqual(\"/user/edit\");\n });\n});\n"
|
|
7
7
|
],
|
|
8
|
-
"mappings": "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",
|
|
9
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "F593CCD4570E331864756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|