@teyik0/furin 0.1.0-alpha.6 → 0.1.0-alpha.7

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.
@@ -1,11 +1,12 @@
1
1
  // @bun
2
2
  // src/build/index.ts
3
3
  import { existsSync as existsSync8, writeFileSync as writeFileSync7 } from "fs";
4
- import { join as join9, relative as relative3, resolve as resolve4 } from "path";
4
+ import { join as join9, relative as relative3, resolve as resolve2 } from "path";
5
5
 
6
6
  // src/adapter/bun.ts
7
7
  import { existsSync as existsSync6, rmSync as rmSync2, writeFileSync as writeFileSync6 } from "fs";
8
- import { join as join7, resolve as resolve3 } from "path";
8
+ import { dirname as dirname2, join as join7, resolve } from "path";
9
+ import { fileURLToPath } from "url";
9
10
 
10
11
  // src/build/client.ts
11
12
  import { existsSync as existsSync4, mkdirSync as mkdirSync3, writeFileSync as writeFileSync3 } from "fs";
@@ -1547,7 +1548,9 @@ const _match = routes.find((r) => r.regex.test(pathname));
1547
1548
  } else {
1548
1549
  log.error({ action: "hydrate_no_match", pathname });
1549
1550
  }
1550
- })();
1551
+ })().catch((err: unknown) => {
1552
+ log.error({ action: "hydrate_failed", pathname, error: String(err) });
1553
+ });
1551
1554
  `;
1552
1555
  }
1553
1556
  function writeDevFiles(routes, { outDir, rootLayout }, projectRoot) {
@@ -1572,9 +1575,9 @@ function writeDevFiles(routes, { outDir, rootLayout }, projectRoot) {
1572
1575
 
1573
1576
  // src/build/shared.ts
1574
1577
  import { cpSync, existsSync as existsSync3, mkdirSync as mkdirSync2, readdirSync, rmSync } from "fs";
1575
- import { join as join3, relative, resolve } from "path";
1576
- var CLIENT_MODULE_PATH = resolve(import.meta.dir, "../client.ts").replace(/\\/g, "/");
1577
- var LINK_MODULE_PATH = resolve(import.meta.dir, "../link.tsx").replace(/\\/g, "/");
1578
+ import { join as join3, relative } from "path";
1579
+ var CLIENT_MODULE_PATH = new URL(import.meta.resolve("@teyik0/furin/client")).pathname;
1580
+ var LINK_MODULE_PATH = new URL(import.meta.resolve("@teyik0/furin/link")).pathname;
1578
1581
  function ensureDir(path) {
1579
1582
  if (!existsSync3(path)) {
1580
1583
  mkdirSync2(path, { recursive: true });
@@ -1676,6 +1679,10 @@ ${transformed}`;
1676
1679
  splitting: true,
1677
1680
  minify: true,
1678
1681
  sourcemap: "linked",
1682
+ naming: {
1683
+ entry: "[dir]/[name]-[hash].[ext]",
1684
+ chunk: "[name]-[hash].[ext]"
1685
+ },
1679
1686
  publicPath: "/_client/",
1680
1687
  plugins: plugins ? [...plugins, transformPlugin] : [transformPlugin],
1681
1688
  alias: {
@@ -1706,9 +1713,10 @@ import { existsSync as existsSync5, writeFileSync as writeFileSync4 } from "fs";
1706
1713
  import { join as join5, relative as relative2 } from "path";
1707
1714
 
1708
1715
  // src/build/entry-template.ts
1709
- import { resolve as resolve2 } from "path";
1710
- var INTERNAL_MODULE_PATH = resolve2(import.meta.dir, "../internal.ts").replace(/\\/g, "/");
1711
- var RUNTIME_ENV_MODULE_PATH = resolve2(import.meta.dir, "../runtime-env.ts").replace(/\\/g, "/");
1716
+ import { dirname } from "path";
1717
+ var _pkgSrcDir = dirname(new URL(import.meta.resolve("@teyik0/furin")).pathname);
1718
+ var INTERNAL_MODULE_PATH = `${_pkgSrcDir}/internal.ts`;
1719
+ var RUNTIME_ENV_MODULE_PATH = `${_pkgSrcDir}/runtime-env.ts`;
1712
1720
  function buildEntrySource(options) {
1713
1721
  const { buildId, headerComment, rootPath, routes, serverEntry } = options;
1714
1722
  let { extraImports, extraContext } = options;
@@ -1840,13 +1848,14 @@ function generateServerRoutesEntry(options) {
1840
1848
  }
1841
1849
 
1842
1850
  // src/adapter/bun.ts
1851
+ var _pkgSrcDir2 = dirname2(fileURLToPath(import.meta.resolve("@teyik0/furin")));
1843
1852
  var BUILD_ID_INPUT_PATHS = [
1844
- resolve3(import.meta.dir, "../build/compile-entry.ts"),
1845
- resolve3(import.meta.dir, "../build/entry-template.ts"),
1846
- resolve3(import.meta.dir, "../build/server-routes-entry.ts"),
1847
- resolve3(import.meta.dir, "../render/index.ts"),
1848
- resolve3(import.meta.dir, "../render/shell.ts"),
1849
- resolve3(import.meta.dir, "../router.ts")
1853
+ `${_pkgSrcDir2}/build/compile-entry.ts`,
1854
+ `${_pkgSrcDir2}/build/entry-template.ts`,
1855
+ `${_pkgSrcDir2}/build/server-routes-entry.ts`,
1856
+ `${_pkgSrcDir2}/render/index.ts`,
1857
+ `${_pkgSrcDir2}/render/shell.ts`,
1858
+ `${_pkgSrcDir2}/router.ts`
1850
1859
  ];
1851
1860
  async function createBuildFingerprint(entryChunk, cssChunks, routes, rootPath, serverEntry) {
1852
1861
  const fingerprintPaths = new Set([rootPath, ...routes.map((route) => route.path)]);
@@ -1873,7 +1882,7 @@ async function buildBunTarget(routes, rootDir, buildRoot, rootPath, serverEntry,
1873
1882
  }
1874
1883
  const target = "bun";
1875
1884
  const targetManifest = buildTargetManifest(rootDir, buildRoot, target, serverEntry);
1876
- const targetDir = resolve3(rootDir, targetManifest.targetDir);
1885
+ const targetDir = resolve(rootDir, targetManifest.targetDir);
1877
1886
  rmSync2(targetDir, { force: true, recursive: true });
1878
1887
  ensureDir(targetDir);
1879
1888
  const { entryChunk, cssChunks } = await buildClient(routes, {
@@ -2237,25 +2246,25 @@ function resolvePagesDirFromServer(serverEntry, rootDir) {
2237
2246
  const detected = scanFurinInstances(serverEntry);
2238
2247
  if (detected.length === 0)
2239
2248
  return null;
2240
- return resolve4(rootDir, detected[0]);
2249
+ return resolve2(rootDir, detected[0]);
2241
2250
  }
2242
2251
  async function buildApp(options) {
2243
- const rootDir = resolve4(options.rootDir ?? process.cwd());
2252
+ const rootDir = resolve2(options.rootDir ?? process.cwd());
2244
2253
  const buildRoot = join9(rootDir, BUILD_OUTPUT_DIR);
2245
2254
  const serverEntry = (() => {
2246
2255
  if (options.serverEntry) {
2247
- const resolved = resolve4(rootDir, options.serverEntry);
2256
+ const resolved = resolve2(rootDir, options.serverEntry);
2248
2257
  if (existsSync8(resolved))
2249
2258
  return resolved;
2250
2259
  }
2251
- const serverEntry2 = resolve4(rootDir, "src/server.ts");
2260
+ const serverEntry2 = resolve2(rootDir, "src/server.ts");
2252
2261
  if (!existsSync8(serverEntry2)) {
2253
2262
  throw new Error("[furin] Entrypoint server.ts not found");
2254
2263
  }
2255
2264
  return serverEntry2;
2256
2265
  })();
2257
2266
  const rawPagesDir = options.pagesDir ?? resolvePagesDirFromServer(serverEntry, rootDir) ?? "src/pages";
2258
- const pagesDir = resolve4(rootDir, rawPagesDir);
2267
+ const pagesDir = resolve2(rootDir, rawPagesDir);
2259
2268
  const requestedTargets = options.target === "all" ? [...IMPLEMENTED_TARGETS] : [options.target].map((target) => {
2260
2269
  if (!BUILD_TARGETS.includes(target)) {
2261
2270
  throw new Error(`[furin] Unsupported build target "${target}"`);
@@ -1 +1,2 @@
1
+ #!/usr/bin/env bun
1
2
  export {};
package/dist/cli/index.js CHANGED
@@ -1,16 +1,19 @@
1
+ #!/usr/bin/env bun
1
2
  // @bun
3
+
2
4
  // src/cli/index.ts
3
5
  import { existsSync as existsSync8 } from "fs";
4
- import { resolve as resolve6 } from "path";
6
+ import { resolve as resolve4 } from "path";
5
7
  import { parseArgs } from "util";
6
8
 
7
9
  // src/build/index.ts
8
10
  import { existsSync as existsSync6, writeFileSync as writeFileSync5 } from "fs";
9
- import { join as join7, relative as relative3, resolve as resolve4 } from "path";
11
+ import { join as join7, relative as relative3, resolve as resolve2 } from "path";
10
12
 
11
13
  // src/adapter/bun.ts
12
14
  import { existsSync as existsSync4, rmSync as rmSync2, writeFileSync as writeFileSync4 } from "fs";
13
- import { join as join5, resolve as resolve3 } from "path";
15
+ import { dirname as dirname2, join as join5, resolve } from "path";
16
+ import { fileURLToPath } from "url";
14
17
 
15
18
  // src/build/client.ts
16
19
  import { existsSync as existsSync2, mkdirSync as mkdirSync2, writeFileSync } from "fs";
@@ -1468,15 +1471,17 @@ const _match = routes.find((r) => r.regex.test(pathname));
1468
1471
  } else {
1469
1472
  log.error({ action: "hydrate_no_match", pathname });
1470
1473
  }
1471
- })();
1474
+ })().catch((err: unknown) => {
1475
+ log.error({ action: "hydrate_failed", pathname, error: String(err) });
1476
+ });
1472
1477
  `;
1473
1478
  }
1474
1479
 
1475
1480
  // src/build/shared.ts
1476
1481
  import { cpSync, existsSync, mkdirSync, readdirSync, rmSync } from "fs";
1477
- import { join, relative, resolve } from "path";
1478
- var CLIENT_MODULE_PATH = resolve(import.meta.dir, "../client.ts").replace(/\\/g, "/");
1479
- var LINK_MODULE_PATH = resolve(import.meta.dir, "../link.tsx").replace(/\\/g, "/");
1482
+ import { join, relative } from "path";
1483
+ var CLIENT_MODULE_PATH = new URL(import.meta.resolve("@teyik0/furin/client")).pathname;
1484
+ var LINK_MODULE_PATH = new URL(import.meta.resolve("@teyik0/furin/link")).pathname;
1480
1485
  function ensureDir(path) {
1481
1486
  if (!existsSync(path)) {
1482
1487
  mkdirSync(path, { recursive: true });
@@ -1578,6 +1583,10 @@ ${transformed}`;
1578
1583
  splitting: true,
1579
1584
  minify: true,
1580
1585
  sourcemap: "linked",
1586
+ naming: {
1587
+ entry: "[dir]/[name]-[hash].[ext]",
1588
+ chunk: "[name]-[hash].[ext]"
1589
+ },
1581
1590
  publicPath: "/_client/",
1582
1591
  plugins: plugins ? [...plugins, transformPlugin] : [transformPlugin],
1583
1592
  alias: {
@@ -1608,9 +1617,10 @@ import { existsSync as existsSync3, writeFileSync as writeFileSync2 } from "fs";
1608
1617
  import { join as join3, relative as relative2 } from "path";
1609
1618
 
1610
1619
  // src/build/entry-template.ts
1611
- import { resolve as resolve2 } from "path";
1612
- var INTERNAL_MODULE_PATH = resolve2(import.meta.dir, "../internal.ts").replace(/\\/g, "/");
1613
- var RUNTIME_ENV_MODULE_PATH = resolve2(import.meta.dir, "../runtime-env.ts").replace(/\\/g, "/");
1620
+ import { dirname } from "path";
1621
+ var _pkgSrcDir = dirname(new URL(import.meta.resolve("@teyik0/furin")).pathname);
1622
+ var INTERNAL_MODULE_PATH = `${_pkgSrcDir}/internal.ts`;
1623
+ var RUNTIME_ENV_MODULE_PATH = `${_pkgSrcDir}/runtime-env.ts`;
1614
1624
  function buildEntrySource(options) {
1615
1625
  const { buildId, headerComment, rootPath, routes, serverEntry } = options;
1616
1626
  let { extraImports, extraContext } = options;
@@ -1742,13 +1752,14 @@ function generateServerRoutesEntry(options) {
1742
1752
  }
1743
1753
 
1744
1754
  // src/adapter/bun.ts
1755
+ var _pkgSrcDir2 = dirname2(fileURLToPath(import.meta.resolve("@teyik0/furin")));
1745
1756
  var BUILD_ID_INPUT_PATHS = [
1746
- resolve3(import.meta.dir, "../build/compile-entry.ts"),
1747
- resolve3(import.meta.dir, "../build/entry-template.ts"),
1748
- resolve3(import.meta.dir, "../build/server-routes-entry.ts"),
1749
- resolve3(import.meta.dir, "../render/index.ts"),
1750
- resolve3(import.meta.dir, "../render/shell.ts"),
1751
- resolve3(import.meta.dir, "../router.ts")
1757
+ `${_pkgSrcDir2}/build/compile-entry.ts`,
1758
+ `${_pkgSrcDir2}/build/entry-template.ts`,
1759
+ `${_pkgSrcDir2}/build/server-routes-entry.ts`,
1760
+ `${_pkgSrcDir2}/render/index.ts`,
1761
+ `${_pkgSrcDir2}/render/shell.ts`,
1762
+ `${_pkgSrcDir2}/router.ts`
1752
1763
  ];
1753
1764
  async function createBuildFingerprint(entryChunk, cssChunks, routes, rootPath, serverEntry) {
1754
1765
  const fingerprintPaths = new Set([rootPath, ...routes.map((route) => route.path)]);
@@ -1775,7 +1786,7 @@ async function buildBunTarget(routes, rootDir, buildRoot, rootPath, serverEntry,
1775
1786
  }
1776
1787
  const target = "bun";
1777
1788
  const targetManifest = buildTargetManifest(rootDir, buildRoot, target, serverEntry);
1778
- const targetDir = resolve3(rootDir, targetManifest.targetDir);
1789
+ const targetDir = resolve(rootDir, targetManifest.targetDir);
1779
1790
  rmSync2(targetDir, { force: true, recursive: true });
1780
1791
  ensureDir(targetDir);
1781
1792
  const { entryChunk, cssChunks } = await buildClient(routes, {
@@ -2139,25 +2150,25 @@ function resolvePagesDirFromServer(serverEntry, rootDir) {
2139
2150
  const detected = scanFurinInstances(serverEntry);
2140
2151
  if (detected.length === 0)
2141
2152
  return null;
2142
- return resolve4(rootDir, detected[0]);
2153
+ return resolve2(rootDir, detected[0]);
2143
2154
  }
2144
2155
  async function buildApp(options) {
2145
- const rootDir = resolve4(options.rootDir ?? process.cwd());
2156
+ const rootDir = resolve2(options.rootDir ?? process.cwd());
2146
2157
  const buildRoot = join7(rootDir, BUILD_OUTPUT_DIR);
2147
2158
  const serverEntry = (() => {
2148
2159
  if (options.serverEntry) {
2149
- const resolved = resolve4(rootDir, options.serverEntry);
2160
+ const resolved = resolve2(rootDir, options.serverEntry);
2150
2161
  if (existsSync6(resolved))
2151
2162
  return resolved;
2152
2163
  }
2153
- const serverEntry2 = resolve4(rootDir, "src/server.ts");
2164
+ const serverEntry2 = resolve2(rootDir, "src/server.ts");
2154
2165
  if (!existsSync6(serverEntry2)) {
2155
2166
  throw new Error("[furin] Entrypoint server.ts not found");
2156
2167
  }
2157
2168
  return serverEntry2;
2158
2169
  })();
2159
2170
  const rawPagesDir = options.pagesDir ?? resolvePagesDirFromServer(serverEntry, rootDir) ?? "src/pages";
2160
- const pagesDir = resolve4(rootDir, rawPagesDir);
2171
+ const pagesDir = resolve2(rootDir, rawPagesDir);
2161
2172
  const requestedTargets = options.target === "all" ? [...IMPLEMENTED_TARGETS] : [options.target].map((target) => {
2162
2173
  if (!BUILD_TARGETS.includes(target)) {
2163
2174
  throw new Error(`[furin] Unsupported build target "${target}"`);
@@ -2199,7 +2210,7 @@ async function buildApp(options) {
2199
2210
 
2200
2211
  // src/cli/config.ts
2201
2212
  import { existsSync as existsSync7 } from "fs";
2202
- import { resolve as resolve5 } from "path";
2213
+ import { resolve as resolve3 } from "path";
2203
2214
  import { pathToFileURL } from "url";
2204
2215
  import { TypeCompiler } from "elysia/type-system";
2205
2216
  var compiledConfigSchema = TypeCompiler.Compile(configSchema);
@@ -2209,13 +2220,13 @@ var DEFAULT_CONFIG_FILENAMES = [
2209
2220
  "furin.config.mjs"
2210
2221
  ];
2211
2222
  async function loadCliConfig(cwd, explicitConfigPath) {
2212
- const rootDir = resolve5(cwd);
2213
- const configPath = explicitConfigPath ? resolve5(rootDir, explicitConfigPath) : DEFAULT_CONFIG_FILENAMES.map((filename) => resolve5(rootDir, filename)).find((path) => existsSync7(path));
2223
+ const rootDir = resolve3(cwd);
2224
+ const configPath = explicitConfigPath ? resolve3(rootDir, explicitConfigPath) : DEFAULT_CONFIG_FILENAMES.map((filename) => resolve3(rootDir, filename)).find((path) => existsSync7(path));
2214
2225
  if (!configPath) {
2215
2226
  return {
2216
2227
  configPath: null,
2217
2228
  rootDir,
2218
- pagesDir: resolve5(rootDir, "src/pages")
2229
+ pagesDir: resolve3(rootDir, "src/pages")
2219
2230
  };
2220
2231
  }
2221
2232
  const imported = await import(pathToFileURL(configPath).href);
@@ -2228,13 +2239,13 @@ async function loadCliConfig(cwd, explicitConfigPath) {
2228
2239
  const [firstError] = compiledConfigSchema.Errors(configToValidate);
2229
2240
  throw new Error(`[furin] Invalid config at ${configPath}: ${firstError?.message ?? "unknown error"} (path: ${firstError?.path ?? "/"})`);
2230
2241
  }
2231
- const resolvedRootDir = resolve5(rootDir, configToValidate.rootDir ?? ".");
2242
+ const resolvedRootDir = resolve3(rootDir, configToValidate.rootDir ?? ".");
2232
2243
  return {
2233
2244
  ...configToValidate,
2234
2245
  plugins,
2235
2246
  configPath,
2236
2247
  rootDir: resolvedRootDir,
2237
- pagesDir: resolve5(resolvedRootDir, configToValidate.pagesDir ?? "src/pages")
2248
+ pagesDir: resolve3(resolvedRootDir, configToValidate.pagesDir ?? "src/pages")
2238
2249
  };
2239
2250
  }
2240
2251
 
@@ -2285,7 +2296,7 @@ if (command === "build") {
2285
2296
  bail(`Unsupported build target "${target}". Valid: ${BUILD_TARGETS.join(", ")}, all`);
2286
2297
  }
2287
2298
  const config = await loadCliConfig(process.cwd(), values.config);
2288
- const resolvedServerEntry = resolve6(config.rootDir, config.serverEntry ?? "src/server.ts");
2299
+ const resolvedServerEntry = resolve4(config.rootDir, config.serverEntry ?? "src/server.ts");
2289
2300
  if (!existsSync8(resolvedServerEntry)) {
2290
2301
  const expected = config.serverEntry ?? "src/server.ts";
2291
2302
  throw new Error(`[furin] Entrypoint ${expected} not found`);
package/dist/client.d.ts CHANGED
@@ -2,6 +2,9 @@ import type { Cookie, StatusMap } from "elysia";
2
2
  import type { AnySchema, HTTPHeaders, UnwrapSchema } from "elysia/types";
3
3
  declare const UNSET: unique symbol;
4
4
  type Unset = typeof UNSET;
5
+ type ToRecord<T> = {
6
+ [K in keyof T]: T[K];
7
+ };
5
8
  type ResolvedSchema<T> = [T] extends [Unset] ? Unset : T extends AnySchema ? UnwrapSchema<T> : Unset;
6
9
  type MergeSchema<TParent, TOwn> = [TParent] extends [Unset] ? TOwn : [TOwn] extends [Unset] ? TParent : TParent & TOwn;
7
10
  type NormalizeUnset<T> = [T] extends [Unset] ? {} : T;
@@ -33,7 +36,7 @@ type ResolveParent<T> = T extends RouteRef<infer D, infer P, infer Q> ? {
33
36
  query: Unset;
34
37
  };
35
38
  interface Resolved<TParentRef, TLoaderData, TParamsSchema = Unset, TQuerySchema = Unset> {
36
- data: ResolveParent<TParentRef>["data"] & TLoaderData;
39
+ data: ToRecord<ResolveParent<TParentRef>["data"] & TLoaderData>;
37
40
  params: MergeSchema<ResolveParent<TParentRef>["params"], ResolvedSchema<TParamsSchema>>;
38
41
  query: MergeSchema<ResolveParent<TParentRef>["query"], ResolvedSchema<TQuerySchema>>;
39
42
  }
@@ -89,7 +92,7 @@ export interface HeadOptions {
89
92
  export type LoaderDeps = (route: {
90
93
  __type: string;
91
94
  }) => Promise<Record<string, unknown>>;
92
- type ExtractLoaderReturn<TLoader> = TLoader extends (...args: never[]) => unknown ? Awaited<ReturnType<TLoader>> extends Record<string, unknown> ? Awaited<ReturnType<TLoader>> : {} : {};
95
+ type ExtractLoaderReturn<TLoader> = TLoader extends (...args: never[]) => unknown ? Awaited<ReturnType<TLoader>> extends object ? ToRecord<Awaited<ReturnType<TLoader>>> : {} : {};
93
96
  export interface PageConfig<TParentData extends Record<string, unknown>, TParams, TQuery, TPageLoaderData extends object = {}> {
94
97
  component: React.FC<TParentData & TPageLoaderData & ComponentProps<TParams, TQuery>>;
95
98
  head?: (ctx: ComponentProps<TParams, TQuery> & TParentData & TPageLoaderData) => HeadOptions;
@@ -124,7 +127,7 @@ export interface RouteRef<TData extends Record<string, unknown> = Record<string,
124
127
  query: TQuery;
125
128
  };
126
129
  }
127
- interface PageResult<TData extends Record<string, unknown>, TParams, TQuery, TPageLoaderData extends Record<string, unknown>> {
130
+ interface PageResult<TData extends Record<string, unknown>, TParams, TQuery, TPageLoaderData extends object> {
128
131
  __type: "FURIN_PAGE";
129
132
  _route: Route<TData, TParams, TQuery>;
130
133
  component: React.FC<TData & TPageLoaderData & ComponentProps<TParams, TQuery>>;
@@ -138,7 +141,7 @@ export interface Route<TParentData extends Record<string, unknown>, TParams, TQu
138
141
  } & ComponentProps<TParams, TQuery>>;
139
142
  loader?(ctx: RouteContext<TParams, TQuery> & TParentData, deps: TypedDeps): Promise<TParentData> | TParentData;
140
143
  mode?: "ssr" | "ssg" | "isr";
141
- page<TLoader extends (ctx: RouteContext<TParams, TQuery> & TParentData, deps: TypedDeps) => unknown, TPageLoaderData extends Record<string, unknown> = ExtractLoaderReturn<TLoader>>(config: {
144
+ page<TLoader extends (ctx: RouteContext<TParams, TQuery> & TParentData, deps: TypedDeps) => unknown, TPageLoaderData extends object = ExtractLoaderReturn<TLoader>>(config: {
142
145
  loader: TLoader;
143
146
  mode?: "ssr" | "ssg" | "isr";
144
147
  revalidate?: number;
@@ -161,7 +164,7 @@ export interface Route<TParentData extends Record<string, unknown>, TParams, TQu
161
164
  revalidate?: number;
162
165
  }
163
166
  type TypedDeps = <TData extends Record<string, unknown>>(route: Route<TData, any, any>) => Promise<TData>;
164
- export declare function createRoute<TParentRef extends RouteRef | undefined = undefined, TParamsSchema extends AnySchema | Unset = Unset, TQuerySchema extends AnySchema | Unset = Unset, TLoaderData extends Record<string, unknown> = {}>(config?: {
167
+ export declare function createRoute<TParentRef extends RouteRef | undefined = undefined, TParamsSchema extends AnySchema | Unset = Unset, TQuerySchema extends AnySchema | Unset = Unset, TLoaderData extends object = {}>(config?: {
165
168
  parent?: {
166
169
  ref: TParentRef;
167
170
  } & {