@withsprinkles/react-router-route-map 0.1.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.d.ts CHANGED
@@ -38,12 +38,12 @@ export declare class Route<Pattern extends string = string> extends RoutePattern
38
38
  get isIndex(): boolean | undefined;
39
39
  get isLayout(): boolean | undefined;
40
40
  href(...args: StrictHrefBuilderArgs<Pattern>): string;
41
- toRouteConfig(): RouteConfigEntry | RouteConfigEntry[];
41
+ toRouteConfig(): Promise<RouteConfigEntry | RouteConfigEntry[]>;
42
42
  }
43
43
  export type Routes<T> = T & {
44
44
  [RouteConfig]: RouteConfigEntry | RouteConfigEntry[];
45
45
  };
46
- export declare function createRoutes<TRouteMap>(routeMap: TRouteMap): Routes<TRouteMap>;
46
+ export declare function createRoutes<TRouteMap>(routeMap: TRouteMap): Promise<Routes<TRouteMap>>;
47
47
  export declare function layout<Children extends RouteMap | undefined>(file: string, routeMap: Children): Children;
48
48
  export declare function index(file: string): Route<"/">;
49
49
  export type PathPart<S extends string> = S extends `${infer P}?${string}` ? P : S;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,10 +1,17 @@
1
- import { createRequire } from "node:module";
2
- var __require = /* @__PURE__ */ createRequire(import.meta.url);
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
- import { index as rrIndex, layout as rrLayout, route as rrRoute } from "@react-router/dev/routes";
6
10
  import { RoutePattern } from "@remix-run/route-pattern";
7
11
  var RouteConfig = Symbol.for("RouteConfig");
12
+ async function getDevRoutes() {
13
+ return import("@react-router/dev/routes");
14
+ }
8
15
 
9
16
  class Route extends RoutePattern {
10
17
  children;
@@ -76,12 +83,13 @@ class Route extends RoutePattern {
76
83
  return [];
77
84
  return searchPart.split("&");
78
85
  }
79
- toRouteConfig() {
86
+ async toRouteConfig() {
87
+ const { index: rrIndex, layout: rrLayout, route: rrRoute } = await getDevRoutes();
80
88
  if (this.#isIndex && this.#file) {
81
89
  return rrIndex(this.#file);
82
90
  }
83
91
  if (this.#isLayout && this.#file) {
84
- const childConfigs2 = this.children ? Object.values(this.children).flatMap((child) => child instanceof Route ? child.toRouteConfig() : []) : [];
92
+ const childConfigs2 = this.children ? (await Promise.all(Object.values(this.children).map((child) => child instanceof Route ? child.toRouteConfig() : []))).flat() : [];
85
93
  return rrLayout(this.#file, childConfigs2);
86
94
  }
87
95
  if (this.#file) {
@@ -89,23 +97,23 @@ class Route extends RoutePattern {
89
97
  path = path.replace(/^\//, "");
90
98
  return rrRoute(path, this.#file);
91
99
  }
92
- const childConfigs = this.children ? Object.values(this.children).flatMap((child) => child instanceof Route ? child.toRouteConfig() : []) : [];
100
+ const childConfigs = this.children ? (await Promise.all(Object.values(this.children).map((child) => child instanceof Route ? child.toRouteConfig() : []))).flat() : [];
93
101
  return childConfigs;
94
102
  }
95
103
  }
96
- function createRoutes(routeMap) {
104
+ async function createRoutes(routeMap) {
97
105
  const {
98
- index: rrIndex2,
99
- layout: rrLayout2,
100
- route: rrRoute2,
106
+ index: rrIndex,
107
+ layout: rrLayout,
108
+ route: rrRoute,
101
109
  prefix: rrPrefix
102
- } = __require("@react-router/dev/routes");
110
+ } = await getDevRoutes();
103
111
  const config = [];
104
- function processRouteMap(map) {
112
+ async function processRouteMap(map) {
105
113
  const entries = [];
106
114
  for (const [_key, value] of Object.entries(map)) {
107
115
  if (value instanceof Route) {
108
- const config2 = value.toRouteConfig();
116
+ const config2 = await value.toRouteConfig();
109
117
  if (Array.isArray(config2)) {
110
118
  entries.push(...config2);
111
119
  } else {
@@ -115,25 +123,25 @@ function createRoutes(routeMap) {
115
123
  const valueAny = value;
116
124
  if (valueAny.__layoutFile) {
117
125
  const layoutFile = valueAny.__layoutFile;
118
- const childConfigs = Object.values(value).filter((v) => v instanceof Route).flatMap((child) => child.toRouteConfig());
119
- entries.push(rrLayout2(layoutFile, childConfigs));
126
+ const childConfigs = (await Promise.all(Object.values(value).filter((v) => v instanceof Route).map((child) => child.toRouteConfig()))).flat();
127
+ entries.push(rrLayout(layoutFile, childConfigs));
120
128
  } else if (valueAny.__prefix) {
121
129
  const prefixPath = valueAny.__prefix;
122
130
  const originalRoutes = valueAny.__originalRoutes || value;
123
- const childConfigs = Object.values(originalRoutes).filter((v) => v instanceof Route).flatMap((child) => child.toRouteConfig());
131
+ const childConfigs = (await Promise.all(Object.values(originalRoutes).filter((v) => v instanceof Route).map((child) => child.toRouteConfig()))).flat();
124
132
  entries.push(...rrPrefix(prefixPath, childConfigs));
125
133
  } else if (valueAny.__parentPath && valueAny.__parentFile) {
126
134
  const parentPath = valueAny.__parentPath;
127
135
  const parentFile = valueAny.__parentFile;
128
136
  const childRoutes = valueAny.__childRoutes || value;
129
- const childConfigs = Object.values(childRoutes).filter((v) => v instanceof Route).flatMap((child) => child.toRouteConfig());
130
- entries.push(rrRoute2(parentPath, parentFile, childConfigs));
137
+ const childConfigs = (await Promise.all(Object.values(childRoutes).filter((v) => v instanceof Route).map((child) => child.toRouteConfig()))).flat();
138
+ entries.push(rrRoute(parentPath, parentFile, childConfigs));
131
139
  }
132
140
  }
133
141
  }
134
142
  return entries;
135
143
  }
136
- config.push(...processRouteMap(routeMap));
144
+ config.push(...await processRouteMap(routeMap));
137
145
  const result = routeMap;
138
146
  result[RouteConfig] = config;
139
147
  return result;
@@ -293,4 +301,4 @@ export {
293
301
  ResourceMethods
294
302
  };
295
303
 
296
- //# debugId=4361173163616F8E64756E2164756E21
304
+ //# debugId=C07165F2B2A3E87664756E2164756E21
package/dist/index.js.map CHANGED
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
4
  "sourcesContent": [
5
- "import type { RouteConfigEntry } from \"@react-router/dev/routes\";\nimport { index as rrIndex, layout as rrLayout, route as rrRoute } from \"@react-router/dev/routes\";\nimport { RoutePattern, type RoutePatternOptions } from \"@remix-run/route-pattern\";\n\nexport const RouteConfig = Symbol.for(\"RouteConfig\");\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 toRouteConfig(): RouteConfigEntry | RouteConfigEntry[] {\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 ? Object.values(this.children).flatMap(child =>\n child instanceof Route ? child.toRouteConfig() : [],\n )\n : [];\n return rrLayout(this.#file, childConfigs);\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 ? Object.values(this.children).flatMap(child =>\n child instanceof Route ? child.toRouteConfig() : [],\n )\n : [];\n\n return childConfigs;\n }\n}\n\nexport type Routes<T> = T & {\n [RouteConfig]: RouteConfigEntry | RouteConfigEntry[];\n};\n\nexport function createRoutes<TRouteMap>(routeMap: TRouteMap): Routes<TRouteMap> {\n const {\n index: rrIndex,\n layout: rrLayout,\n route: rrRoute,\n prefix: rrPrefix,\n } = require(\"@react-router/dev/routes\");\n\n const config: RouteConfigEntry[] = [];\n\n function processRouteMap(map: any): 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 = 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 = Object.values(value)\n .filter(v => v instanceof Route)\n .flatMap(child => (child as Route).toRouteConfig());\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 = Object.values(originalRoutes)\n .filter(v => v instanceof Route)\n .flatMap(child => (child as Route).toRouteConfig());\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 = Object.values(childRoutes)\n .filter(v => v instanceof Route)\n .flatMap(child => (child as Route).toRouteConfig());\n entries.push(rrRoute(parentPath, parentFile, childConfigs));\n }\n }\n }\n\n return entries;\n }\n\n config.push(...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"
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": "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",
8
- "debugId": "4361173163616F8E64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "C07165F2B2A3E87664756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,20 +1,2 @@
1
- import { type Route } from "./index.ts";
2
- export declare const routes: import("./index.ts").Routes<{
3
- index: Route<"/">;
4
- about: Route<"/about">;
5
- auth: {
6
- login: Route<"/login">;
7
- register: Route<"/register">;
8
- };
9
- concerts: {
10
- readonly home: Route<"/concerts/?q">;
11
- readonly show: Route<"/concerts/:city?q">;
12
- readonly trending: Route<"/concerts/trending?q&in-my-town">;
13
- };
14
- artists: import("./index.ts").ResourcesMap<"/artists?q", {
15
- readonly only: ["index", "show"];
16
- readonly param: "name";
17
- }>;
18
- user: import("./index.ts").ResourceMap<"/user", import("./index.ts").ResourceOptions>;
19
- }>;
1
+ export {};
20
2
  //# sourceMappingURL=index.test.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAOA,OAAO,EAKH,KAAK,KAAK,EAKb,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;EAiBjB,CAAC"}
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
@@ -1,10 +1,17 @@
1
- import { createRequire } from "node:module";
2
- var __require = /* @__PURE__ */ createRequire(import.meta.url);
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
- import { index as rrIndex, layout as rrLayout, route as rrRoute } from "@react-router/dev/routes";
6
10
  import { RoutePattern } from "@remix-run/route-pattern";
7
11
  var RouteConfig = Symbol.for("RouteConfig");
12
+ async function getDevRoutes() {
13
+ return import("@react-router/dev/routes");
14
+ }
8
15
 
9
16
  class Route extends RoutePattern {
10
17
  children;
@@ -76,12 +83,13 @@ class Route extends RoutePattern {
76
83
  return [];
77
84
  return searchPart.split("&");
78
85
  }
79
- toRouteConfig() {
86
+ async toRouteConfig() {
87
+ const { index: rrIndex, layout: rrLayout, route: rrRoute } = await getDevRoutes();
80
88
  if (this.#isIndex && this.#file) {
81
89
  return rrIndex(this.#file);
82
90
  }
83
91
  if (this.#isLayout && this.#file) {
84
- const childConfigs2 = this.children ? Object.values(this.children).flatMap((child) => child instanceof Route ? child.toRouteConfig() : []) : [];
92
+ const childConfigs2 = this.children ? (await Promise.all(Object.values(this.children).map((child) => child instanceof Route ? child.toRouteConfig() : []))).flat() : [];
85
93
  return rrLayout(this.#file, childConfigs2);
86
94
  }
87
95
  if (this.#file) {
@@ -89,23 +97,23 @@ class Route extends RoutePattern {
89
97
  path = path.replace(/^\//, "");
90
98
  return rrRoute(path, this.#file);
91
99
  }
92
- const childConfigs = this.children ? Object.values(this.children).flatMap((child) => child instanceof Route ? child.toRouteConfig() : []) : [];
100
+ const childConfigs = this.children ? (await Promise.all(Object.values(this.children).map((child) => child instanceof Route ? child.toRouteConfig() : []))).flat() : [];
93
101
  return childConfigs;
94
102
  }
95
103
  }
96
- function createRoutes(routeMap) {
104
+ async function createRoutes(routeMap) {
97
105
  const {
98
- index: rrIndex2,
99
- layout: rrLayout2,
100
- route: rrRoute2,
106
+ index: rrIndex,
107
+ layout: rrLayout,
108
+ route: rrRoute,
101
109
  prefix: rrPrefix
102
- } = __require("@react-router/dev/routes");
110
+ } = await getDevRoutes();
103
111
  const config = [];
104
- function processRouteMap(map) {
112
+ async function processRouteMap(map) {
105
113
  const entries = [];
106
114
  for (const [_key, value] of Object.entries(map)) {
107
115
  if (value instanceof Route) {
108
- const config2 = value.toRouteConfig();
116
+ const config2 = await value.toRouteConfig();
109
117
  if (Array.isArray(config2)) {
110
118
  entries.push(...config2);
111
119
  } else {
@@ -115,25 +123,25 @@ function createRoutes(routeMap) {
115
123
  const valueAny = value;
116
124
  if (valueAny.__layoutFile) {
117
125
  const layoutFile = valueAny.__layoutFile;
118
- const childConfigs = Object.values(value).filter((v) => v instanceof Route).flatMap((child) => child.toRouteConfig());
119
- entries.push(rrLayout2(layoutFile, childConfigs));
126
+ const childConfigs = (await Promise.all(Object.values(value).filter((v) => v instanceof Route).map((child) => child.toRouteConfig()))).flat();
127
+ entries.push(rrLayout(layoutFile, childConfigs));
120
128
  } else if (valueAny.__prefix) {
121
129
  const prefixPath = valueAny.__prefix;
122
130
  const originalRoutes = valueAny.__originalRoutes || value;
123
- const childConfigs = Object.values(originalRoutes).filter((v) => v instanceof Route).flatMap((child) => child.toRouteConfig());
131
+ const childConfigs = (await Promise.all(Object.values(originalRoutes).filter((v) => v instanceof Route).map((child) => child.toRouteConfig()))).flat();
124
132
  entries.push(...rrPrefix(prefixPath, childConfigs));
125
133
  } else if (valueAny.__parentPath && valueAny.__parentFile) {
126
134
  const parentPath = valueAny.__parentPath;
127
135
  const parentFile = valueAny.__parentFile;
128
136
  const childRoutes = valueAny.__childRoutes || value;
129
- const childConfigs = Object.values(childRoutes).filter((v) => v instanceof Route).flatMap((child) => child.toRouteConfig());
130
- entries.push(rrRoute2(parentPath, parentFile, childConfigs));
137
+ const childConfigs = (await Promise.all(Object.values(childRoutes).filter((v) => v instanceof Route).map((child) => child.toRouteConfig()))).flat();
138
+ entries.push(rrRoute(parentPath, parentFile, childConfigs));
131
139
  }
132
140
  }
133
141
  }
134
142
  return entries;
135
143
  }
136
- config.push(...processRouteMap(routeMap));
144
+ config.push(...await processRouteMap(routeMap));
137
145
  const result = routeMap;
138
146
  result[RouteConfig] = config;
139
147
  return result;
@@ -281,14 +289,14 @@ function resource(base, options) {
281
289
  }
282
290
 
283
291
  // src/index.test.ts
284
- import { describe, expect, expectTypeOf, test } from "bun:test";
292
+ import { beforeAll, describe, expect, expectTypeOf, test } from "bun:test";
285
293
  import {
286
- index as rrIndex2,
287
- layout as rrLayout2,
294
+ index as rrIndex,
295
+ layout as rrLayout,
288
296
  prefix as rrPrefix,
289
- route as rrRoute2
297
+ route as rrRoute
290
298
  } from "@react-router/dev/routes";
291
- var routes = createRoutes({
299
+ var routeMap = {
292
300
  index: index("./home.tsx"),
293
301
  about: route("/about", "./about.tsx"),
294
302
  auth: layout("./auth/layout.tsx", {
@@ -305,28 +313,32 @@ var routes = createRoutes({
305
313
  param: "name"
306
314
  }),
307
315
  user: resource("/user")
316
+ };
317
+ var routes;
318
+ beforeAll(async () => {
319
+ routes = await createRoutes(routeMap);
308
320
  });
309
321
  test("generates correct React Router config", () => {
310
322
  expect(routes[RouteConfig]).toEqual([
311
- rrIndex2("./home.tsx"),
312
- rrRoute2("about", "./about.tsx"),
313
- rrLayout2("./auth/layout.tsx", [
314
- rrRoute2("login", "./auth/login.tsx"),
315
- rrRoute2("register", "./auth/register.tsx")
323
+ rrIndex("./home.tsx"),
324
+ rrRoute("about", "./about.tsx"),
325
+ rrLayout("./auth/layout.tsx", [
326
+ rrRoute("login", "./auth/login.tsx"),
327
+ rrRoute("register", "./auth/register.tsx")
316
328
  ]),
317
329
  ...rrPrefix("concerts", [
318
- rrIndex2("./concerts/home.tsx"),
319
- rrRoute2(":city", "./concerts/city.tsx"),
320
- rrRoute2("trending", "./concerts/trending.tsx")
330
+ rrIndex("./concerts/home.tsx"),
331
+ rrRoute(":city", "./concerts/city.tsx"),
332
+ rrRoute("trending", "./concerts/trending.tsx")
321
333
  ]),
322
- rrRoute2("artists", "./artists/layout.tsx", [
323
- rrIndex2("./artists/index.tsx"),
324
- rrRoute2(":name", "./artists/show.tsx")
334
+ rrRoute("artists", "./artists/layout.tsx", [
335
+ rrIndex("./artists/index.tsx"),
336
+ rrRoute(":name", "./artists/show.tsx")
325
337
  ]),
326
- rrRoute2("user", "./user/layout.tsx", [
327
- rrIndex2("./user/show.tsx"),
328
- rrRoute2("new", "./user/new.tsx"),
329
- rrRoute2("edit", "./user/edit.tsx")
338
+ rrRoute("user", "./user/layout.tsx", [
339
+ rrIndex("./user/show.tsx"),
340
+ rrRoute("new", "./user/new.tsx"),
341
+ rrRoute("edit", "./user/edit.tsx")
330
342
  ])
331
343
  ]);
332
344
  });
@@ -388,8 +400,5 @@ describe("generates correct href values", () => {
388
400
  expect(href).toEqual("/user/edit");
389
401
  });
390
402
  });
391
- export {
392
- routes
393
- };
394
403
 
395
- //# debugId=AEA9D0E73C686F2764756E2164756E21
404
+ //# debugId=F593CCD4570E331864756E2164756E21
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/index.test.ts"],
4
4
  "sourcesContent": [
5
- "import type { RouteConfigEntry } from \"@react-router/dev/routes\";\nimport { index as rrIndex, layout as rrLayout, route as rrRoute } from \"@react-router/dev/routes\";\nimport { RoutePattern, type RoutePatternOptions } from \"@remix-run/route-pattern\";\n\nexport const RouteConfig = Symbol.for(\"RouteConfig\");\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 toRouteConfig(): RouteConfigEntry | RouteConfigEntry[] {\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 ? Object.values(this.children).flatMap(child =>\n child instanceof Route ? child.toRouteConfig() : [],\n )\n : [];\n return rrLayout(this.#file, childConfigs);\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 ? Object.values(this.children).flatMap(child =>\n child instanceof Route ? child.toRouteConfig() : [],\n )\n : [];\n\n return childConfigs;\n }\n}\n\nexport type Routes<T> = T & {\n [RouteConfig]: RouteConfigEntry | RouteConfigEntry[];\n};\n\nexport function createRoutes<TRouteMap>(routeMap: TRouteMap): Routes<TRouteMap> {\n const {\n index: rrIndex,\n layout: rrLayout,\n route: rrRoute,\n prefix: rrPrefix,\n } = require(\"@react-router/dev/routes\");\n\n const config: RouteConfigEntry[] = [];\n\n function processRouteMap(map: any): 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 = 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 = Object.values(value)\n .filter(v => v instanceof Route)\n .flatMap(child => (child as Route).toRouteConfig());\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 = Object.values(originalRoutes)\n .filter(v => v instanceof Route)\n .flatMap(child => (child as Route).toRouteConfig());\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 = Object.values(childRoutes)\n .filter(v => v instanceof Route)\n .flatMap(child => (child as Route).toRouteConfig());\n entries.push(rrRoute(parentPath, parentFile, childConfigs));\n }\n }\n }\n\n return entries;\n }\n\n config.push(...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
- "import { 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 resource,\n resources,\n route,\n} from \"./index.ts\";\n\nexport const routes = createRoutes({\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\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"
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
+ "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": ";;;;AACA,kBAAS,mBAAkB,mBAAoB;AAC/C;AAEO,IAAM,cAAc,OAAO,IAAI,aAAa;AAAA;AAqE5C,MAAM,cAA+C,aAAsB;AAAA,EAC9E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,WAAW,CAAC,QAAyC,SAAwB;AAAA,IACzE,IAAI,kBAAkB,cAAc;AAAA,MAChC,MAAM,OAAO,QAAmB,EAAE,YAAY,OAAO,WAAW,CAAC;AAAA,IACrE,EAAO;AAAA,MACH,MAAM,QAAQ,OAAO;AAAA;AAAA,IAGzB,IAAI,SAAS;AAAA,MACT,KAAK,QAAQ,QAAQ;AAAA,MACrB,KAAK,WAAW,QAAQ;AAAA,MACxB,KAAK,YAAY,QAAQ;AAAA,IAC7B;AAAA;AAAA,MAGA,IAAI,GAAuB;AAAA,IAC3B,OAAO,KAAK;AAAA;AAAA,MAGZ,OAAO,GAAwB;AAAA,IAC/B,OAAO,KAAK;AAAA;AAAA,MAGZ,QAAQ,GAAwB;AAAA,IAChC,OAAO,KAAK;AAAA;AAAA,EAGP,IAAI,IAAI,MAA8C;AAAA,IAE3D,MAAM,aAAa,KAAK,eAAe;AAAA,IACvC,MAAM,gBAAgB,WAAW,SAAS;AAAA,IAC1C,MAAM,mBAAmB,KAAK,SAAS,KAAK,KAAK,OAAO,QAAQ,KAAK,OAAO;AAAA,IAC5E,MAAM,qBAAqB,oBAAoB,OAAO,KAAK,OAAO;AAAA,IAGlE,IAAI,CAAC,iBAAiB,kBAAkB;AAAA,MACpC,MAAM,IAAI,MACN,UAAU,KAAK,0DAA0D,KAAK,UAAU,KAAK,EAAE,GACnG;AAAA,IACJ;AAAA,IAGA,IAAI,iBAAiB,oBAAoB;AAAA,MACrC,MAAM,WAAW,OAAO,KAAK,KAAK,EAAY;AAAA,MAC9C,WAAW,OAAO,UAAU;AAAA,QACxB,IAAI,CAAC,WAAW,SAAS,GAAG,GAAG;AAAA,UAC3B,MAAM,IAAI,MACN,2BAA2B,mBAAmB,KAAK,kCAAkC,WAAW,KAAK,IAAI,GAC7G;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IAGA,IAAI,KAAK,SAAS,KAAK,KAAK,MAAM,OAAO,KAAK,KAAK,EAAE,EAAE,SAAS,GAAG;AAAA,MAC/D,MAAM,iBAAiB,KAAK;AAAA,MAC5B,MAAM,cAAc,KAAK,sBAAsB;AAAA,MAG/C,WAAW,OAAO,OAAO,KAAK,cAAc,GAAG;AAAA,QAC3C,IAAI,CAAC,YAAY,SAAS,GAAG,GAAG;AAAA,UAC5B,MAAM,IAAI,MACN,6BAA6B,mBAAmB,KAAK,kCAAkC,YAAY,KAAK,IAAI,GAChH;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,IAGA,MAAM,OAAO,MAAM,KAAK,GAAG,IAAI;AAAA,IAG/B,IAAI,KAAK,SAAS,KAAK,KAAK,MAAM,OAAO,KAAK,KAAK,EAAE,EAAE,SAAS,GAAG;AAAA,MAC/D,OAAO;AAAA,IACX;AAAA,IAGA,OAAO,KAAK,MAAM,GAAG,EAAE;AAAA;AAAA,EAG3B,cAAc,GAAa;AAAA,IACvB,MAAM,WAAW,KAAK,OAAO,MAAM,GAAG,EAAE;AAAA,IACxC,MAAM,UAAU,SAAS,MAAM,SAAS;AAAA,IACxC,IAAI,CAAC;AAAA,MAAS,OAAO,CAAC;AAAA,IACtB,OAAO,QAAQ,IAAI,OAAK,EAAE,MAAM,CAAC,CAAC;AAAA;AAAA,EAGtC,qBAAqB,GAAa;AAAA,IAC9B,MAAM,aAAa,KAAK,OAAO,MAAM,GAAG,EAAE;AAAA,IAC1C,IAAI,CAAC;AAAA,MAAY,OAAO,CAAC;AAAA,IACzB,OAAO,WAAW,MAAM,GAAG;AAAA;AAAA,EAG/B,aAAa,GAA0C;AAAA,IACnD,IAAI,KAAK,YAAY,KAAK,OAAO;AAAA,MAC7B,OAAO,QAAQ,KAAK,KAAK;AAAA,IAC7B;AAAA,IAEA,IAAI,KAAK,aAAa,KAAK,OAAO;AAAA,MAC9B,MAAM,gBAAe,KAAK,WACpB,OAAO,OAAO,KAAK,QAAQ,EAAE,QAAQ,WACjC,iBAAiB,QAAQ,MAAM,cAAc,IAAI,CAAC,CACtD,IACA,CAAC;AAAA,MACP,OAAO,SAAS,KAAK,OAAO,aAAY;AAAA,IAC5C;AAAA,IAEA,IAAI,KAAK,OAAO;AAAA,MAEZ,IAAI,OAAO,KAAK,OAAO,MAAM,GAAG,EAAE;AAAA,MAElC,OAAO,KAAK,QAAQ,OAAO,EAAE;AAAA,MAI7B,OAAO,QAAQ,MAAM,KAAK,KAAK;AAAA,IACnC;AAAA,IAGA,MAAM,eAAe,KAAK,WACpB,OAAO,OAAO,KAAK,QAAQ,EAAE,QAAQ,WACjC,iBAAiB,QAAQ,MAAM,cAAc,IAAI,CAAC,CACtD,IACA,CAAC;AAAA,IAEP,OAAO;AAAA;AAEf;AAMO,SAAS,YAAuB,CAAC,UAAwC;AAAA,EAC5E;AAAA,IACI,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,QAAQ;AAAA;AAAA,EAGZ,MAAM,SAA6B,CAAC;AAAA,EAEpC,SAAS,eAAe,CAAC,KAA8B;AAAA,IACnD,MAAM,UAA8B,CAAC;AAAA,IAErC,YAAY,MAAM,UAAU,OAAO,QAAQ,GAAG,GAAG;AAAA,MAC7C,IAAI,iBAAiB,OAAO;AAAA,QAExB,MAAM,UAAS,MAAM,cAAc;AAAA,QACnC,IAAI,MAAM,QAAQ,OAAM,GAAG;AAAA,UACvB,QAAQ,KAAK,GAAG,OAAM;AAAA,QAC1B,EAAO;AAAA,UACH,QAAQ,KAAK,OAAM;AAAA;AAAA,MAE3B,EAAO,SAAI,OAAO,UAAU,YAAY,UAAU,MAAM;AAAA,QACpD,MAAM,WAAW;AAAA,QAEjB,IAAI,SAAS,cAAc;AAAA,UACvB,MAAM,aAAa,SAAS;AAAA,UAC5B,MAAM,eAAe,OAAO,OAAO,KAAK,EACnC,OAAO,OAAK,aAAa,KAAK,EAC9B,QAAQ,WAAU,MAAgB,cAAc,CAAC;AAAA,UACtD,QAAQ,KAAK,UAAS,YAAY,YAAY,CAAC;AAAA,QACnD,EAEK,SAAI,SAAS,UAAU;AAAA,UACxB,MAAM,aAAa,SAAS;AAAA,UAE5B,MAAM,iBAAiB,SAAS,oBAAoB;AAAA,UACpD,MAAM,eAAe,OAAO,OAAO,cAAc,EAC5C,OAAO,OAAK,aAAa,KAAK,EAC9B,QAAQ,WAAU,MAAgB,cAAc,CAAC;AAAA,UACtD,QAAQ,KAAK,GAAG,SAAS,YAAY,YAAY,CAAC;AAAA,QACtD,EAEK,SAAI,SAAS,gBAAgB,SAAS,cAAc;AAAA,UACrD,MAAM,aAAa,SAAS;AAAA,UAC5B,MAAM,aAAa,SAAS;AAAA,UAC5B,MAAM,cAAc,SAAS,iBAAiB;AAAA,UAC9C,MAAM,eAAe,OAAO,OAAO,WAAW,EACzC,OAAO,OAAK,aAAa,KAAK,EAC9B,QAAQ,WAAU,MAAgB,cAAc,CAAC;AAAA,UACtD,QAAQ,KAAK,SAAQ,YAAY,YAAY,YAAY,CAAC;AAAA,QAC9D;AAAA,MACJ;AAAA,IACJ;AAAA,IAEA,OAAO;AAAA;AAAA,EAGX,OAAO,KAAK,GAAG,gBAAgB,QAAQ,CAAC;AAAA,EAExC,MAAM,SAAS;AAAA,EACd,OAAe,eAAe;AAAA,EAE/B,OAAO;AAAA;AAGJ,SAAS,MAA6C,CACzD,MACA,UACQ;AAAA,EAER,IAAI,UAAU;AAAA,IACT,SAAiB,eAAe;AAAA,EACrC;AAAA,EAEA,OAAO;AAAA;AAGJ,SAAS,KAAK,CAAC,MAA0B;AAAA,EAC5C,OAAO,IAAI,MAAM,KAAK,EAAE,MAAM,SAAS,KAAK,CAAC;AAAA;AA2CjD,SAAS,YAAY,CAAC,MAAc,OAAuB;AAAA,EAEvD,OAAO,UAAU,cAAc,KAAK,MAAM,GAAG;AAAA,EAC7C,OAAO,WAAW,eAAe,MAAM,MAAM,GAAG;AAAA,EAGhD,IAAI;AAAA,EACJ,IAAI,SAAS,SAAS,GAAG,KAAK,UAAU,WAAW,GAAG,GAAG;AAAA,IACrD,OAAO,SAAS,MAAM,GAAG,EAAE,IAAI;AAAA,EACnC,EAAO,SAAI,CAAC,SAAS,SAAS,GAAG,KAAK,CAAC,UAAU,WAAW,GAAG,GAAG;AAAA,IAC9D,OAAO,GAAG,YAAY;AAAA,EAC1B,EAAO;AAAA,IACH,OAAO,WAAW;AAAA;AAAA,EAItB,MAAM,cAAc,CAAC,YAAY,WAAW,EAAE,OAAO,OAAO;AAAA,EAC5D,MAAM,SAAS,YAAY,SAAS,IAAI,IAAI,YAAY,KAAK,GAAG,MAAM;AAAA,EAEtE,OAAO,OAAO;AAAA;AAIlB,SAAS,qBAAqB,CAAC,MAAc,UAA8B;AAAA,EACvE,MAAM,SAAmB,CAAC;AAAA,EAE1B,YAAY,KAAK,UAAU,OAAO,QAAQ,QAAQ,GAAG;AAAA,IACjD,IAAI,iBAAiB,OAAO;AAAA,MAExB,MAAM,aAAa,aAAa,MAAM,MAAM,MAAM;AAAA,MAClD,MAAM,WAAW,IAAI,MAAM,YAAY;AAAA,QACnC,MAAM,MAAM;AAAA,QACZ,SAAS,MAAM;AAAA,QACf,UAAU,MAAM;AAAA,MACpB,CAAC;AAAA,MAED,IAAI,MAAM,UAAU;AAAA,QAChB,SAAS,WAAW,MAAM;AAAA,MAC9B;AAAA,MAEA,OAAO,OAAO;AAAA,IAClB,EAAO;AAAA,MAEH,OAAO,OAAO,sBAAsB,MAAM,KAAK;AAAA;AAAA,EAEvD;AAAA,EAEA,OAAO;AAAA;AAGJ,SAAS,MAA8D,CAC1E,SACA,UAC0B;AAAA,EAC1B,MAAM,SAAS,sBAAsB,SAAQ,QAAQ;AAAA,EAErD,OAAO,cAAc,QAAO,MAAM,GAAG;AAAA,EACpC,OAAe,WAAW,WAAW,QAAQ,OAAO,EAAE;AAAA,EAEtD,OAAe,mBAAmB;AAAA,EACnC,OAAO;AAAA;AASJ,SAAS,KAAK,CAAC,SAAiB,MAAc,UAA0B;AAAA,EAC3E,IAAI,UAAU;AAAA,IAEV,MAAM,mBAAmB,sBAAsB,SAAS,QAAQ;AAAA,IAEhE,OAAO,QAAQ,QAAQ,MAAM,GAAG;AAAA,IAC/B,iBAAyB,eAAe,KAAK,QAAQ,OAAO,EAAE;AAAA,IAC9D,iBAAyB,eAAe;AAAA,IACzC,OAAO;AAAA,EACX;AAAA,EAEA,OAAO,IAAI,MAAM,SAAS,EAAE,KAAK,CAAC;AAAA;AAG/B,IAAM,mBAAmB,CAAC,SAAS,OAAO,QAAQ,MAAM;AAsExD,SAAS,SAAsE,CAClF,MACA,SAC2B;AAAA,EAC3B,MAAM,UAAU,gBAAgB,eAAe,KAAK,SAAS;AAAA,EAC7D,OAAO,UAAU,gBAAgB,QAAQ,MAAM,GAAG;AAAA,EAClD,MAAM,UAAU,eAAe,IAAI,iBAAiB;AAAA,EAEpD,MAAM,QAAQ,SAAS,SAAS;AAAA,EAChC,MAAM,OAAO,SAAS,QAAQ,CAAC,SAAS,OAAO,QAAQ,MAAM;AAAA,EAC7D,MAAM,QAAQ,SAAS,SAAS,CAAC;AAAA,EAGjC,MAAM,WAAW,SAAS,QAAQ,OAAO,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,KAAK;AAAA,EACjE,MAAM,aAAa,KAAK;AAAA,EAExB,MAAM,SAAc,CAAC;AAAA,EACrB,MAAM,cAAmB,CAAC;AAAA,EAE1B,WAAW,UAAU,MAAM;AAAA,IACvB,MAAM,MAAO,MAAc,WAAW;AAAA,IAEtC,IAAI,WAAW,SAAS;AAAA,MAEpB,MAAM,aAAa,IAAI,MAAM,IAAI,EAAE,MAAM,KAAK,sBAAsB,SAAS,KAAK,CAAC;AAAA,MACnF,YAAY,OAAO;AAAA,MAEnB,OAAO,OAAO,IAAI,MAAM,SAAS,EAAE,MAAM,KAAK,sBAAsB,SAAS,KAAK,CAAC;AAAA,IACvF,EAAO,SAAI,WAAW,OAAO;AAAA,MAEzB,MAAM,aAAa,IAAI,MAAM,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAC;AAAA,MACrE,YAAY,OAAO;AAAA,MACnB,OAAO,OAAO,IAAI,MAAM,aAAa,SAAS,MAAM,GAAG;AAAA,QACnD,MAAM,KAAK;AAAA,MACf,CAAC;AAAA,IACL,EAAO,SAAI,WAAW,QAAQ;AAAA,MAC1B,MAAM,aAAa,IAAI,MAAM,IAAI,SAAS,EAAE,MAAM,KAAK,oBAAoB,CAAC;AAAA,MAC5E,YAAY,OAAO;AAAA,MACnB,OAAO,OAAO,IAAI,MAAM,aAAa,SAAS,KAAK,OAAO,GAAG;AAAA,QACzD,MAAM,KAAK;AAAA,MACf,CAAC;AAAA,IACL,EAAO,SAAI,WAAW,QAAQ;AAAA,MAC1B,MAAM,aAAa,IAAI,MAAM,IAAI,cAAc,EAAE,MAAM,KAAK,oBAAoB,CAAC;AAAA,MACjF,YAAY,OAAO;AAAA,MACnB,OAAO,OAAO,IAAI,MAAM,aAAa,SAAS,KAAK,YAAY,GAAG;AAAA,QAC9D,MAAM,KAAK;AAAA,MACf,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAGC,OAAe,eAAe,SAAS,QAAQ,OAAO,EAAE;AAAA,EACxD,OAAe,eAAe;AAAA,EAC9B,OAAe,gBAAgB;AAAA,EAEhC,OAAO;AAAA;AAGJ,IAAM,kBAAkB,CAAC,OAAO,QAAQ,MAAM;AAiD9C,SAAS,QAAoE,CAChF,MACA,SAC0B;AAAA,EAC1B,MAAM,UAAU,gBAAgB,eAAe,KAAK,SAAS;AAAA,EAC7D,OAAO,UAAU,gBAAgB,QAAQ,MAAM,GAAG;AAAA,EAClD,MAAM,UAAU,eAAe,IAAI,iBAAiB;AAAA,EAEpD,MAAM,OAAO,SAAS,QAAQ,CAAC,OAAO,QAAQ,MAAM;AAAA,EACpD,MAAM,QAAQ,SAAS,SAAS,CAAC;AAAA,EAGjC,MAAM,WAAW,SAAS,QAAQ,OAAO,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,KAAK;AAAA,EACjE,MAAM,aAAa,KAAK;AAAA,EAExB,MAAM,SAAc,CAAC;AAAA,EACrB,MAAM,cAAmB,CAAC;AAAA,EAI1B,MAAM,iBAAiB,CAAC,QAAQ,OAAO,MAAM,EAAE,OAAO,OAAK,KAAK,SAAS,CAAmB,CAAC;AAAA,EAE7F,WAAW,UAAU,gBAAgB;AAAA,IACjC,MAAM,MAAO,MAAc,WAAW;AAAA,IAEtC,IAAI,WAAW,QAAQ;AAAA,MAEnB,MAAM,aAAa,IAAI,MAAM,IAAI,EAAE,MAAM,KAAK,qBAAqB,SAAS,KAAK,CAAC;AAAA,MAClF,YAAY,OAAO;AAAA,MACnB,OAAO,OAAO,IAAI,MAAM,SAAS,EAAE,MAAM,KAAK,oBAAoB,CAAC;AAAA,IACvE,EAAO,SAAI,WAAW,OAAO;AAAA,MACzB,MAAM,aAAa,IAAI,MAAM,OAAO,EAAE,MAAM,KAAK,mBAAmB,CAAC;AAAA,MACrE,YAAY,OAAO;AAAA,MACnB,OAAO,OAAO,IAAI,MAAM,aAAa,SAAS,MAAM,GAAG;AAAA,QACnD,MAAM,KAAK;AAAA,MACf,CAAC;AAAA,IACL,EAAO,SAAI,WAAW,QAAQ;AAAA,MAC1B,MAAM,aAAa,IAAI,MAAM,QAAQ,EAAE,MAAM,KAAK,oBAAoB,CAAC;AAAA,MACvE,YAAY,OAAO;AAAA,MACnB,OAAO,OAAO,IAAI,MAAM,aAAa,SAAS,OAAO,GAAG;AAAA,QACpD,MAAM,KAAK;AAAA,MACf,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EAGC,OAAe,eAAe,SAAS,QAAQ,OAAO,EAAE;AAAA,EACxD,OAAe,eAAe;AAAA,EAC9B,OAAe,gBAAgB;AAAA,EAEhC,OAAO;AAAA;;;ACnoBX;AACA;AAAA,WACI;AAAA,YACA;AAAA,YACA;AAAA,WACA;AAAA;AAcG,IAAM,SAAS,aAAa;AAAA,EAC/B,OAAO,MAAM,YAAY;AAAA,EACzB,OAAO,MAAM,UAAU,aAAa;AAAA,EACpC,MAAM,OAAO,qBAAqB;AAAA,IAC9B,OAAO,MAAM,UAAU,kBAAkB;AAAA,IACzC,UAAU,MAAM,aAAa,qBAAqB;AAAA,EACtD,CAAC;AAAA,EACD,UAAU,OAAO,eAAe;AAAA,IAC5B,MAAM,MAAM,qBAAqB;AAAA,IACjC,MAAM,MAAM,UAAU,qBAAqB;AAAA,IAC3C,UAAU,MAAM,wBAAwB,yBAAyB;AAAA,EACrE,CAAC;AAAA,EACD,SAAS,UAAU,cAAc;AAAA,IAC7B,MAAM,CAAC,SAAS,MAAM;AAAA,IACtB,OAAO;AAAA,EACX,CAAC;AAAA,EACD,MAAM,SAAS,OAAO;AAC1B,CAAC;AAED,KAAK,yCAAyC,MAAM;AAAA,EAChD,OAAO,OAAO,YAAY,EAAE,QAAQ;AAAA,IAChC,SAAQ,YAAY;AAAA,IACpB,SAAQ,SAAS,aAAa;AAAA,IAE9B,UAAS,qBAAqB;AAAA,MAC1B,SAAQ,SAAS,kBAAkB;AAAA,MACnC,SAAQ,YAAY,qBAAqB;AAAA,IAC7C,CAAC;AAAA,IAED,GAAG,SAAS,YAAY;AAAA,MACpB,SAAQ,qBAAqB;AAAA,MAC7B,SAAQ,SAAS,qBAAqB;AAAA,MACtC,SAAQ,YAAY,yBAAyB;AAAA,IACjD,CAAC;AAAA,IAED,SAAQ,WAAW,wBAAwB;AAAA,MACvC,SAAQ,qBAAqB;AAAA,MAC7B,SAAQ,SAAS,oBAAoB;AAAA,IACzC,CAAC;AAAA,IAED,SAAQ,QAAQ,qBAAqB;AAAA,MACjC,SAAQ,iBAAiB;AAAA,MACzB,SAAQ,OAAO,gBAAgB;AAAA,MAC/B,SAAQ,QAAQ,iBAAiB;AAAA,IACrC,CAAC;AAAA,EACL,CAAC;AAAA,CACJ;AAED,SAAS,oBAAoB,MAAM;AAAA,EAC/B,KAAK,sCAAsC,MAAM;AAAA,IAC7C,aAAa,OAAO,KAAK,EAAE,SAAqB;AAAA,IAChD,aAAa,OAAO,SAAS,QAAQ,EAAE,SAAmD;AAAA,IAC1F,aAAa,OAAO,SAAS,IAAI,EAAE,SAAqC;AAAA,IACxE,aAAa,OAAO,QAAQ,KAAK,EAAE,SAA8B;AAAA,IACjE,aAAa,OAAO,QAAQ,IAAI,EAAE,SAAoC;AAAA,IACtE,aAAa,OAAO,KAAK,GAAG,EAAE,SAA6B;AAAA,GAC9D;AAAA,EAED,KAAK,oDAAoD,MAAM;AAAA,IAC3D,OAAO,MAAM;AAAA,MAET,OAAO,QAAQ,KAAK,KAAK,EAAE,MAAM,OAAO,GAAG,EAAE,GAAG,UAAU,GAAG,IAAI,CAAC;AAAA,KACrE,EAAE,QAAQ;AAAA,IAEX,OAAO,MAAM;AAAA,MAET,OAAO,SAAS,SAAS,KAAK,OAAO,EAAE,GAAG,QAAQ,cAAc,KAAK,CAAC;AAAA,KACzE,EAAE,QAAQ;AAAA,IAEX,OAAO,MAAM;AAAA,MAET,OAAO,SAAS,KAAK,KAAK,EAAE,SAAS,iBAAiB,CAAC;AAAA,KAC1D,EAAE,QAAQ;AAAA,IAEX,OAAO,MAAM;AAAA,MAET,OAAO,KAAK,KAAK,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC;AAAA,KAC5C,EAAE,QAAQ;AAAA,GACd;AAAA,CACJ;AAED,SAAS,iCAAiC,MAAM;AAAA,EAC5C,KAAK,SAAS,MAAM;AAAA,IAChB,MAAM,OAAO,OAAO,MAAM,KAAK;AAAA,IAC/B,OAAO,IAAI,EAAE,QAAQ,GAAG;AAAA,GAC3B;AAAA,EAED,KAAK,6BAA6B,MAAM;AAAA,IACpC,MAAM,OAAO,OAAO,SAAS,SAAS,KAAK,MAAM,EAAE,GAAG,QAAQ,cAAc,KAAK,CAAC;AAAA,IAClF,OAAO,IAAI,EAAE,QAAQ,2CAA2C;AAAA,GACnE;AAAA,EAED,KAAK,2BAA2B,MAAM;AAAA,IAClC,MAAM,OAAO,OAAO,SAAS,KAAK,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAAA,IACjE,OAAO,IAAI,EAAE,QAAQ,0BAA0B;AAAA,GAClD;AAAA,EAED,KAAK,sCAAsC,MAAM;AAAA,IAC7C,MAAM,OAAO,OAAO,QAAQ,MAAM,KAAK,MAAM,EAAE,GAAG,OAAO,CAAC;AAAA,IAC1D,OAAO,IAAI,EAAE,QAAQ,iBAAiB;AAAA,GACzC;AAAA,EAED,KAAK,qCAAqC,MAAM;AAAA,IAC5C,MAAM,OAAO,OAAO,QAAQ,KAAK,KAAK,EAAE,MAAM,OAAO,GAAG,EAAE,GAAG,SAAS,CAAC;AAAA,IACvE,OAAO,IAAI,EAAE,QAAQ,wBAAwB;AAAA,GAChD;AAAA,EAED,KAAK,gBAAgB,MAAM;AAAA,IACvB,MAAM,OAAO,OAAO,KAAK,IAAI,KAAK;AAAA,IAClC,OAAO,IAAI,EAAE,QAAQ,WAAW;AAAA,GACnC;AAAA,EAED,KAAK,iBAAiB,MAAM;AAAA,IACxB,MAAM,OAAO,OAAO,KAAK,KAAK,KAAK;AAAA,IACnC,OAAO,IAAI,EAAE,QAAQ,OAAO;AAAA,GAC/B;AAAA,EAED,KAAK,iBAAiB,MAAM;AAAA,IACxB,MAAM,OAAO,OAAO,KAAK,KAAK,KAAK;AAAA,IACnC,OAAO,IAAI,EAAE,QAAQ,YAAY;AAAA,GACpC;AAAA,CACJ;",
9
- "debugId": "AEA9D0E73C686F2764756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "F593CCD4570E331864756E2164756E21",
10
10
  "names": []
11
11
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@withsprinkles/react-router-route-map",
3
- "version": "0.1.0",
3
+ "version": "0.2.2",
4
4
  "type": "module",
5
5
  "description": "",
6
6
  "repository": {