theokit 0.60.0 → 0.61.0

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.
Files changed (70) hide show
  1. package/dist/{actions-virtual-module-DNOALUTX.js → actions-virtual-module-345YHSEB.js} +5 -5
  2. package/dist/{actions-virtual-module-UE5H42GP.js → actions-virtual-module-XI5IGBF4.js} +2 -2
  3. package/dist/adapters/agent-mount.d.ts +1 -1
  4. package/dist/adapters/agent-mount.js +2 -2
  5. package/dist/{agent-VWPSEDXD.js → agent-L45EZWPV.js} +2 -2
  6. package/dist/{app-typed-client-MKTSLES3.js → app-typed-client-B7QIRDSP.js} +5 -5
  7. package/dist/{app-typed-client-4KLNKET6.js → app-typed-client-GVP4V4X3.js} +2 -2
  8. package/dist/{build-RG54DH3F.js → build-22OMF3NG.js} +3 -3
  9. package/dist/{chunk-KQ27YDLG.js → chunk-4BQIJ4HE.js} +3 -3
  10. package/dist/{chunk-JW5UFKQ3.js → chunk-5AGNZXHJ.js} +2 -2
  11. package/dist/{chunk-ETKLM6UN.js → chunk-6R6UR64X.js} +7 -7
  12. package/dist/{chunk-YN4W7LCX.js → chunk-ENRT6DAU.js} +6 -1
  13. package/dist/chunk-ENRT6DAU.js.map +1 -0
  14. package/dist/{chunk-DMODPX7P.js → chunk-H2X5T45M.js} +2 -2
  15. package/dist/{chunk-GZ5YHD5H.js → chunk-KVZQJ3ZM.js} +6 -1
  16. package/dist/chunk-KVZQJ3ZM.js.map +1 -0
  17. package/dist/{chunk-XES7ZE2K.js → chunk-L2NSHQOY.js} +2 -2
  18. package/dist/{chunk-KZ3PXNPT.js → chunk-MIPHNT4J.js} +3 -3
  19. package/dist/chunk-MIPHNT4J.js.map +1 -0
  20. package/dist/{chunk-WOANPZBT.js → chunk-Q3UE7WIM.js} +2 -2
  21. package/dist/{chunk-IZTOGKLS.js → chunk-YXEKPMDK.js} +2 -2
  22. package/dist/{chunk-K3DUUEQ5.js → chunk-ZXJAI4J7.js} +9 -9
  23. package/dist/cli/index.js +6 -6
  24. package/dist/{dev-5ETOFKOP.js → dev-BDODXUEA.js} +4 -4
  25. package/dist/{index-ADEV6pen.d.ts → index-BXGSBlxf.d.ts} +1 -1
  26. package/dist/index.js +5 -5
  27. package/dist/{internal-api-UM77XDXN.js → internal-api-QKWTQ2Q7.js} +2 -2
  28. package/dist/{internal-api-3YDGG5FF.js → internal-api-VRUDDBEG.js} +5 -5
  29. package/dist/{mcp-B42ISIJG.js → mcp-WMZSXQQG.js} +2 -2
  30. package/dist/{preview-XP77EPTL.js → preview-GUEKVBGL.js} +3 -3
  31. package/dist/{route-config-Cm_ZMA1C.d.ts → route-config-B7FaTSby.d.ts} +1 -1
  32. package/dist/{route-policy-BxOycCDq.d.ts → route-policy-BHXQDzBF.d.ts} +20 -1
  33. package/dist/server/define/index.d.ts +5 -4
  34. package/dist/server/define/index.js +1 -1
  35. package/dist/server/http/index.d.ts +3 -3
  36. package/dist/server/http/index.js +3 -3
  37. package/dist/server/index.d.ts +4 -4
  38. package/dist/server/index.js +3 -3
  39. package/dist/{server-boundary-X52AMCKI.js → server-boundary-7BRS2CWI.js} +2 -2
  40. package/dist/{server-boundary-JG53VI6L.js → server-boundary-OEBKNBEP.js} +5 -5
  41. package/dist/{start-3FYIYTM7.js → start-AKMBT3DW.js} +4 -4
  42. package/dist/vite-plugin/index.js +5 -5
  43. package/dist/{vite-plugin-BG5K3L46.js → vite-plugin-37OQ5RDR.js} +4 -4
  44. package/package.json +3 -3
  45. package/dist/chunk-GZ5YHD5H.js.map +0 -1
  46. package/dist/chunk-KZ3PXNPT.js.map +0 -1
  47. package/dist/chunk-YN4W7LCX.js.map +0 -1
  48. /package/dist/{actions-virtual-module-DNOALUTX.js.map → actions-virtual-module-345YHSEB.js.map} +0 -0
  49. /package/dist/{actions-virtual-module-UE5H42GP.js.map → actions-virtual-module-XI5IGBF4.js.map} +0 -0
  50. /package/dist/{agent-VWPSEDXD.js.map → agent-L45EZWPV.js.map} +0 -0
  51. /package/dist/{app-typed-client-MKTSLES3.js.map → app-typed-client-B7QIRDSP.js.map} +0 -0
  52. /package/dist/{app-typed-client-4KLNKET6.js.map → app-typed-client-GVP4V4X3.js.map} +0 -0
  53. /package/dist/{build-RG54DH3F.js.map → build-22OMF3NG.js.map} +0 -0
  54. /package/dist/{chunk-KQ27YDLG.js.map → chunk-4BQIJ4HE.js.map} +0 -0
  55. /package/dist/{chunk-JW5UFKQ3.js.map → chunk-5AGNZXHJ.js.map} +0 -0
  56. /package/dist/{chunk-ETKLM6UN.js.map → chunk-6R6UR64X.js.map} +0 -0
  57. /package/dist/{chunk-DMODPX7P.js.map → chunk-H2X5T45M.js.map} +0 -0
  58. /package/dist/{chunk-XES7ZE2K.js.map → chunk-L2NSHQOY.js.map} +0 -0
  59. /package/dist/{chunk-WOANPZBT.js.map → chunk-Q3UE7WIM.js.map} +0 -0
  60. /package/dist/{chunk-IZTOGKLS.js.map → chunk-YXEKPMDK.js.map} +0 -0
  61. /package/dist/{chunk-K3DUUEQ5.js.map → chunk-ZXJAI4J7.js.map} +0 -0
  62. /package/dist/{dev-5ETOFKOP.js.map → dev-BDODXUEA.js.map} +0 -0
  63. /package/dist/{internal-api-UM77XDXN.js.map → internal-api-QKWTQ2Q7.js.map} +0 -0
  64. /package/dist/{internal-api-3YDGG5FF.js.map → internal-api-VRUDDBEG.js.map} +0 -0
  65. /package/dist/{mcp-B42ISIJG.js.map → mcp-WMZSXQQG.js.map} +0 -0
  66. /package/dist/{preview-XP77EPTL.js.map → preview-GUEKVBGL.js.map} +0 -0
  67. /package/dist/{server-boundary-X52AMCKI.js.map → server-boundary-7BRS2CWI.js.map} +0 -0
  68. /package/dist/{server-boundary-JG53VI6L.js.map → server-boundary-OEBKNBEP.js.map} +0 -0
  69. /package/dist/{start-3FYIYTM7.js.map → start-AKMBT3DW.js.map} +0 -0
  70. /package/dist/{vite-plugin-BG5K3L46.js.map → vite-plugin-37OQ5RDR.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/cli/commands/build/emit-controllers.ts"],"sourcesContent":["import 'reflect-metadata'\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { basename, dirname, join, relative, resolve } from 'node:path'\nimport { pathToFileURL } from 'node:url'\n\nimport {\n CONTROLLER_PREFIX,\n ROUTE_METHODS,\n USE_GUARDS,\n getMeta,\n isControllerClass,\n transformControllerSource,\n} from '@theokit/http'\n\nimport { findControllerFiles } from '../../../server/http/controller-dispatch.js'\n\n/**\n * theokit#123 — compile `server/controllers/**` into `dist` so production can serve them.\n *\n * ## Why production needed anything at all\n *\n * #122 made decorator controllers first-class in `theokit dev`, where a Vite `enforce:'pre'` swc\n * transform compiles them on the fly — parameter decorators (`@Body`/`@Param`/`@Query`) emit\n * metadata esbuild cannot produce. `theokit start` has no Vite and no transform, so an uncompiled\n * `.controller.ts` simply cannot load, and controller routes 404'd in production while working in\n * dev. That split is the whole issue.\n *\n * ## Why compile at BUILD time rather than load with swc at runtime\n *\n * `loadControllerWithSwc` would work in production and was the smaller diff. It is refused on\n * purpose: `@swc/core` is a peer dependency and a native binary, so that path makes every deployed\n * app carry a compiler it only needs once, and turns a missing optional peer into a runtime 404\n * instead of a build failure. Compilation belongs where the rest of the build already is — and it\n * is what the issue's root-cause note asks for.\n *\n * ## Why NOT in `generateManifest`\n *\n * ADR-5 keeps controllers out of the manifest, and that is preserved here: the manifest is the\n * deploy-adapter contract, and adding a parallel route source to it would ripple through every\n * adapter. This emits a SEPARATE artifact (`dist/controllers.json` + `dist/controllers/*.mjs`) that\n * only the Node start path reads. An adapter that knows nothing about controllers keeps working\n * exactly as before.\n */\n\n/** The build artifact `theokit start` reads to find compiled controllers. */\ninterface ControllerBuildManifest {\n version: 1\n /** Emitted module paths, relative to `distDir`, in scan order. */\n modules: string[]\n}\n\nexport const CONTROLLER_MANIFEST_FILE = 'controllers.json'\nconst CONTROLLER_OUT_DIR = 'controllers'\n\n/**\n * Compile every controller under `<serverDir>/controllers` into `<distDir>/controllers`.\n *\n * No controllers ⇒ **no artifact at all** (not an empty one). `theokit start` treats a missing\n * manifest as \"this app has no controllers\" and skips the whole branch, so a routes-only app pays\n * nothing and its `dist` is byte-identical to before — the ADR-5 posture, kept.\n */\n/**\n * Point a compiled controller's RELATIVE imports back at the app's own source tree.\n *\n * theokit#516 — controllers are compiled into `<distDir>/controllers` because parameter decorators\n * need metadata only swc emits. File routes are never compiled: in production `importUserModule`\n * loads them straight from the source, which is why THEIR relative imports resolve. A controller's\n * did not — `../auth/index.js` resolved from `dist`, where the app does not exist — so a controller\n * that imported anything of the app's worked under `theokit dev` and failed the build.\n *\n * Rewriting to an ABSOLUTE path into the source tree is the smallest fix that keeps one definition\n * of every module. The alternatives each cost more than they buy: copying the app's modules beside\n * the controller duplicates them, and bundling inlines them, so in both a module with state exists\n * twice and the two copies drift.\n *\n * The extension is mapped back to what is on disk. TypeScript source writes `./x.js` for `./x.ts`\n * (NodeNext), and the emitted module has to name the file that exists, since it is loaded by the\n * same `importUserModule` path a file route takes — `.ts` included.\n *\n * BARE specifiers are left exactly as written. `@theokit/http`, `zod` and every other package\n * resolve through `node_modules` from any directory, so rewriting them would replace something that\n * works with a path that pins a version.\n */\nfunction rewriteLocalImports(code: string, sourceFile: string): string {\n const fromDir = dirname(sourceFile)\n return code.replace(\n /(\\bfrom\\s*|\\bimport\\s*\\(\\s*)(['\"])(\\.[^'\"]*)\\2/g,\n (whole, lead: string, quote: string, spec: string) => {\n const resolved = resolve(fromDir, spec)\n const onDisk = existingSourcePath(resolved)\n if (onDisk === undefined) return whole\n return `${lead}${quote}${pathToFileURL(onDisk).href}${quote}`\n },\n )\n}\n\n/**\n * The file a compiled specifier names, as it exists on disk — or `undefined` when nothing does.\n *\n * `./x.js` may be `x.ts`, `x.tsx`, a literal `x.js`, or a directory holding `index.*`. Returning\n * `undefined` for the rest is deliberate: a specifier this cannot resolve is left UNCHANGED, so the\n * runtime reports the missing module by the name the author wrote. Substituting a guess would move\n * the error somewhere the author never typed.\n */\nfunction existingSourcePath(resolved: string): string | undefined {\n const withoutExt = resolved.replace(/\\.(js|mjs|cjs)$/, '')\n const candidates = [\n ...(resolved === withoutExt ? [] : [`${withoutExt}.ts`, `${withoutExt}.tsx`, resolved]),\n ...(resolved === withoutExt ? [`${resolved}.ts`, `${resolved}.tsx`, `${resolved}.js`] : []),\n join(withoutExt, 'index.ts'),\n join(withoutExt, 'index.tsx'),\n join(withoutExt, 'index.js'),\n ]\n return candidates.find((c) => existsSync(c))\n}\n\n/**\n * The URL prefix both runtimes gate the controller fall-through on.\n *\n * `start/handlers.ts` and `vite-plugin/api-middleware.ts` each return early unless the request URL\n * starts with `/api/`, so a controller declaring anything else describes a path that branch never\n * visits. Written here as a constant rather than a literal in the check, because the day that gate\n * moves this is the line that has to move with it.\n */\nconst SERVED_PREFIX = 'api'\n\n/**\n * A controller compiled successfully and mounted at a path the runtime never routes to.\n *\n * Its own class so a caller can tell it from a compile failure: the source is fine, the decorators\n * are fine, and the app would start — the route simply answers 404 forever. That is the failure\n * this module's docblock already refuses for compile errors, reached by a different road.\n *\n * Measured against `theokit@0.56.0`: `@Controller('probe')` built clean, emitted a module, wrote\n * the manifest, and `/api/probe` returned 404. `/probe` returned **200** — the SPA fallback serving\n * `index.html`, so the status code agreed with success while the body was a web page. A defect that\n * survives a status-code check is exactly the kind a build gate has to catch instead.\n */\nexport class UnreachableControllerPathError extends Error {\n override readonly name = 'UnreachableControllerPathError'\n constructor(\n readonly controller: string,\n readonly declaredPath: string,\n readonly file: string,\n ) {\n super(\n [\n `${controller} declares \\`@Controller('${declaredPath}')\\`, which this runtime never routes to.`,\n ``,\n ` ${file}`,\n ``,\n ` Controller routes are served from a fall-through that runs only for URLs under`,\n ` \\`/${SERVED_PREFIX}/\\` — a file-route miss is what reaches it. A path outside that`,\n ` prefix compiles, emits, and then answers 404 for the life of the app.`,\n ``,\n ` Write it as:`,\n ``,\n ` @Controller('${SERVED_PREFIX}/${declaredPath.replace(/^\\/+/, '')}')`,\n ``,\n ` Refused at build rather than left to 404, for the reason this module already refuses a`,\n ` compile error: shipping a route nothing can reach, with nothing pointing back at why.`,\n ].join('\\n'),\n )\n }\n}\n\n/**\n * Is `prefix` reachable from the served path?\n *\n * `'api'`, `'/api'`, `'api/x'` and `'/api/x'` are the same URL written four ways, so all four pass:\n * the gate is about reachability, not spelling. A prefix that merely STARTS with the letters —\n * `'apiary'` — is not, which is why the check is segment-wise rather than a `startsWith`.\n */\nfunction isReachable(prefix: string): boolean {\n const segments = prefix.split('/').filter((s) => s.length > 0)\n return segments[0] === SERVED_PREFIX\n}\n\n/**\n * Refuse any emitted controller whose declared path the runtime cannot route to.\n *\n * Reads the prefix off the COMPILED module rather than the source: the decorator metadata is what\n * the runtime will actually match on, and a regex over source text would disagree with it the first\n * time someone writes the prefix as anything other than a literal.\n */\nfunction assertControllerPathsReachable(\n loaded: readonly { cls: ControllerClass; sourceFile: string }[],\n): void {\n for (const { cls, sourceFile } of loaded) {\n const meta = getMeta<{ prefix?: string }>(CONTROLLER_PREFIX, cls)\n const prefix = meta?.prefix ?? ''\n if (isReachable(prefix)) continue\n throw new UnreachableControllerPathError(cls.name || 'a controller', prefix, sourceFile)\n }\n}\n\n/**\n * The metadata key an explicitly-open controller route sets.\n *\n * The counterpart of `'public'` on the file path, and it exists for the same routes: a health\n * check a load balancer calls with no session, an OAuth callback the provider redirects to.\n *\n * An app writes the STRING, not this constant: `@SetMetadata('theokit:public', true)`. The docblock\n * used to show `@SetMetadata(PUBLIC_ROUTE_METADATA, true)`, which no consumer can write — this\n * module lives under `cli/commands/build/` and no entry point reaches it. Exporting it so the\n * example became true would publish a new surface for a string that appears once per open route and\n * whose mistyping fails this very gate loudly, so the example is corrected instead. `@theokit/http`\n * already ships `SetMetadata`, so no new decorator is needed either (parsimony-ladder.md rung 4).\n *\n * It is an opt-out, never a default. A route that is open says so in the file, where review sees\n * it; a route nobody thought about is the one that ships open, which is the whole reason ADR 0001\n * made absence stop meaning open on the file path.\n */\nconst PUBLIC_ROUTE_METADATA = 'theokit:public'\n\n/**\n * A controller route that declares no access decision at all.\n *\n * Distinct from a guard REFUSING a request — that is the system working. This is a route where\n * nobody wrote down whether it should be reachable, which on the file path is a build failure and\n * on the decorator path was, until now, silence.\n *\n * Measured against theokit@0.56.0: a `@Controller` with no guard answered 200 to a request with no\n * session, while the file route it would replace answered 403, on the same server in the same\n * second. The mechanism was never missing — `@UseGuards` works and returns `403 FORBIDDEN`. Only\n * the refusal of absence was.\n */\nexport class UndeclaredControllerAccessError extends Error {\n override readonly name = 'UndeclaredControllerAccessError'\n constructor(\n readonly controller: string,\n readonly method: string,\n readonly verb: string,\n readonly file: string,\n ) {\n super(\n [\n `${controller}.${method}() serves ${verb} and declares no access decision.`,\n ``,\n ` ${file}`,\n ``,\n ` A file route with no \\`.policy\\` fails this build for the same reason (ADR 0001): a route`,\n ` nobody thought about is the one that ships open. The decorator path now says the same.`,\n ``,\n ` Require a session:`,\n ``,\n ` @UseGuards(AuthGuard) // on the method, or on the @Controller to cover all of them`,\n ``,\n ` Or state that it is open on purpose — a health check, an OAuth callback:`,\n ``,\n ` @SetMetadata('${PUBLIC_ROUTE_METADATA}', true)`,\n ``,\n ` Both are declarations. What is refused is neither.`,\n ].join('\\n'),\n )\n }\n}\n\n/**\n * Refuse any controller route whose access decision nobody wrote down.\n *\n * A guard on the CLASS covers every method under it, which is the shape most controllers want and\n * mirrors how `@UseGuards` already behaves at runtime — the gate must agree with the dispatcher or\n * it would refuse code that works.\n *\n * Read off the compiled module for the reason the prefix check is: decorator metadata is what the\n * runtime matches on. The per-method key lives on the CLASS with the property name, not on the\n * prototype and not on the descriptor — measured, after both of those returned `undefined`.\n */\nfunction assertControllerAccessDeclared(\n loaded: readonly { cls: ControllerClass; sourceFile: string }[],\n): void {\n for (const { cls, sourceFile } of loaded) {\n // Class level covers every method under it — for BOTH forms. A guard on the class already\n // behaves that way at runtime, and a controller whose routes are all open (a health group, an\n // OAuth callback group) must be declarable once for the same reason. Checking one at class\n // level and not the other would refuse code that is correct.\n if (getMeta<unknown[]>(USE_GUARDS, cls) !== undefined) continue\n if (Reflect.getMetadata(PUBLIC_ROUTE_METADATA, cls) === true) continue\n\n const routes = getMeta<{ verb: string; propertyKey: string }[]>(ROUTE_METHODS, cls) ?? []\n for (const { verb, propertyKey } of routes) {\n if (getMeta<unknown[]>(USE_GUARDS, cls, propertyKey) !== undefined) continue\n // `Reflect` directly, not `getMeta`: `@SetMetadata` writes through `Reflect.defineMetadata`\n // with the key as given, and `getMeta` is typed for the symbol keys this package defines.\n if (Reflect.getMetadata(PUBLIC_ROUTE_METADATA, cls, propertyKey) === true) continue\n throw new UndeclaredControllerAccessError(\n cls.name || 'a controller',\n propertyKey,\n verb,\n sourceFile,\n )\n }\n }\n}\n\n/**\n * Load every emitted controller class once, for both checks below.\n *\n * One pass rather than one per check: the alternative loads each module twice and doubles the\n * surface on which a stale import could fool a gate.\n *\n * The `?t=` is a cache-bust. `emitControllerArtifacts` runs once per build process today, so it\n * changes nothing now — it is here because these are SECURITY gates, and the failure mode if a\n * watch mode is ever added is one that reads metadata from a version of the file that no longer\n * exists and passes it. `parsimony-ladder.md` is explicit that security is not what the ladder\n * trims, and the cost is a query parameter.\n */\nasync function loadEmittedControllers(\n emitted: readonly { modulePath: string; sourceFile: string }[],\n): Promise<{ cls: ControllerClass; sourceFile: string }[]> {\n const out: { cls: ControllerClass; sourceFile: string }[] = []\n for (const { modulePath, sourceFile } of emitted) {\n const url = `${pathToFileURL(modulePath).href}?t=${Date.now()}`\n const mod: Record<string, unknown> = await import(url)\n for (const exported of Object.values(mod)) {\n if (typeof exported !== 'function' || !isControllerClass(exported)) continue\n out.push({ cls: exported as ControllerClass, sourceFile })\n }\n }\n return out\n}\n\n/** A class carrying `@Controller` metadata — narrowed once so both checks read the same shape. */\ntype ControllerClass = (new (...args: never[]) => unknown) & { name: string }\n\nexport async function emitControllerArtifacts(opts: {\n serverDir: string\n distDir: string\n}): Promise<ControllerBuildManifest | null> {\n const controllersDir = resolve(opts.serverDir, CONTROLLER_OUT_DIR)\n const files = findControllerFiles(controllersDir)\n if (files.length === 0) return null\n\n const outDir = resolve(opts.distDir, CONTROLLER_OUT_DIR)\n mkdirSync(outDir, { recursive: true })\n\n const modules: string[] = []\n const emitted: { modulePath: string; sourceFile: string }[] = []\n for (const file of files) {\n // Errors are NOT caught. A controller that fails to compile must fail the BUILD — swallowing it\n // here would ship an app whose routes 404 at runtime with nothing pointing back at the cause,\n // which is the exact failure mode this issue reports (error-handling.md § 2).\n const compiled = await transformControllerSource(readFileSync(file, 'utf-8'), file)\n const code = rewriteLocalImports(compiled, file)\n\n // Mirror the source tree under `dist/controllers` so two files with the same basename in\n // different folders cannot overwrite each other.\n const rel = relative(controllersDir, file).replace(/\\.controller\\.ts$/, '.controller.mjs')\n const outPath = join(outDir, rel)\n mkdirSync(dirname(outPath), { recursive: true })\n writeFileSync(outPath, code)\n modules.push(`${CONTROLLER_OUT_DIR}/${rel.split('\\\\').join('/')}`)\n emitted.push({ modulePath: outPath, sourceFile: file })\n }\n\n // AFTER writing, because reading the prefix means loading the compiled module — and a module that\n // failed to compile has already thrown above. Before the manifest, so a refused build leaves no\n // artifact claiming a route that does not answer.\n const loaded = await loadEmittedControllers(emitted)\n assertControllerPathsReachable(loaded)\n assertControllerAccessDeclared(loaded)\n\n const manifest: ControllerBuildManifest = { version: 1, modules }\n writeFileSync(\n resolve(opts.distDir, CONTROLLER_MANIFEST_FILE),\n JSON.stringify(manifest, null, 2) + '\\n',\n )\n return manifest\n}\n\n/** Human-facing summary for the build log (mirrors the cron/job emitters). */\nexport function describeControllerArtifacts(manifest: ControllerBuildManifest | null): string {\n if (manifest === null) return 'controllers: none'\n const names = manifest.modules.map((m) => basename(m, '.mjs')).join(', ')\n return `controllers: ${manifest.modules.length} compiled (${names})`\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/contracts/route-policy.ts"],"mappings":";AAsCO,SAAS,mBAAmB,SAAuC;AACxE,MAAI,YAAY,QAAQ,OAAO,YAAY,SAAU,QAAO;AAC5D,QAAM,YAAa,QAAkC;AACrD,MAAI,cAAc,QAAQ,cAAc,UAAa,OAAO,cAAc,SAAU,QAAO;AAC3F,QAAM,KAAM,UAA+B;AAC3C,SAAO,OAAO,OAAO,YAAY,GAAG,SAAS,IAAK,YAA6B;AACjF;AAoBA,eAAsB,oBACpB,QACA,OACyB;AACzB,MAAI,WAAW,OAAW,QAAO,EAAE,SAAS,KAAK;AACjD,MAAI,WAAW,SAAU,QAAO,EAAE,SAAS,KAAK;AAEhD,QAAM,UAAU,MAAM,OAAO,KAAK;AAClC,MAAI,OAAO,YAAY,WAAW;AAChC,WAAO,UAAU,EAAE,SAAS,KAAK,IAAI,EAAE,SAAS,OAAO,QAAQ,gCAAgC;AAAA,EACjG;AACA,SAAO;AACT;AASO,SAAS,aACd,SACA,SACgB;AAChB,MAAI,YAAY,KAAM,QAAO,EAAE,SAAS,OAAO,QAAQ,oBAAoB;AAC3E,MAAI,OAAO,YAAY,YAAY,QAAQ,WAAW,GAAG;AAIvD,WAAO,EAAE,SAAS,OAAO,QAAQ,iCAAiC;AAAA,EACpE;AACA,SAAO,QAAQ,OAAO,UAClB,EAAE,SAAS,KAAK,IAChB,EAAE,SAAS,OAAO,QAAQ,qCAAqC;AACrE;","names":[]}