gemi 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 (183) hide show
  1. package/dist/ai/Agent.d.ts +533 -25
  2. package/dist/ai/Agent.d.ts.map +1 -1
  3. package/dist/ai/Agent.test-d.d.ts +2 -0
  4. package/dist/ai/Agent.test-d.d.ts.map +1 -0
  5. package/dist/ai/AgentController.d.ts +275 -6
  6. package/dist/ai/AgentController.d.ts.map +1 -1
  7. package/dist/ai/AgentProvider.d.ts +255 -0
  8. package/dist/ai/AgentProvider.d.ts.map +1 -0
  9. package/dist/ai/Schema.d.ts +125 -0
  10. package/dist/ai/Schema.d.ts.map +1 -0
  11. package/dist/ai/Schema.test-d.d.ts +2 -0
  12. package/dist/ai/Schema.test-d.d.ts.map +1 -0
  13. package/dist/ai/client/index.d.ts +24 -0
  14. package/dist/ai/client/index.d.ts.map +1 -0
  15. package/dist/ai/client/index.js +1053 -0
  16. package/dist/ai/client/index.js.map +1 -0
  17. package/dist/ai/client/reducer.d.ts +127 -0
  18. package/dist/ai/client/reducer.d.ts.map +1 -0
  19. package/dist/ai/client/reducer.test-d.d.ts +2 -0
  20. package/dist/ai/client/reducer.test-d.d.ts.map +1 -0
  21. package/dist/ai/client/sse.d.ts +54 -0
  22. package/dist/ai/client/sse.d.ts.map +1 -0
  23. package/dist/ai/example.d.ts +129 -0
  24. package/dist/ai/example.d.ts.map +1 -0
  25. package/dist/ai/index.d.ts +35 -0
  26. package/dist/ai/index.d.ts.map +1 -0
  27. package/dist/ai/index.js +20 -0
  28. package/dist/ai/index.js.map +23 -0
  29. package/dist/ai/live/harness.d.ts +137 -0
  30. package/dist/ai/live/harness.d.ts.map +1 -0
  31. package/dist/ai/providers/call.d.ts +42 -0
  32. package/dist/ai/providers/call.d.ts.map +1 -0
  33. package/dist/ai/providers/capabilities.d.ts +50 -0
  34. package/dist/ai/providers/capabilities.d.ts.map +1 -0
  35. package/dist/ai/providers/errors.d.ts +37 -0
  36. package/dist/ai/providers/errors.d.ts.map +1 -0
  37. package/dist/ai/providers/fakeProvider.d.ts +35 -0
  38. package/dist/ai/providers/fakeProvider.d.ts.map +1 -0
  39. package/dist/ai/providers/http.d.ts +46 -0
  40. package/dist/ai/providers/http.d.ts.map +1 -0
  41. package/dist/ai/providers/request.d.ts +69 -0
  42. package/dist/ai/providers/request.d.ts.map +1 -0
  43. package/dist/ai/providers/stream.d.ts +42 -0
  44. package/dist/ai/providers/stream.d.ts.map +1 -0
  45. package/dist/ai/signing.d.ts +195 -0
  46. package/dist/ai/signing.d.ts.map +1 -0
  47. package/dist/ai/store/LiveRuns.d.ts +142 -0
  48. package/dist/ai/store/LiveRuns.d.ts.map +1 -0
  49. package/dist/ai/store/MemoryAgentStore.d.ts +61 -0
  50. package/dist/ai/store/MemoryAgentStore.d.ts.map +1 -0
  51. package/dist/ai/store/index.d.ts +4 -0
  52. package/dist/ai/store/index.d.ts.map +1 -0
  53. package/dist/ai/store/sse.d.ts +58 -0
  54. package/dist/ai/store/sse.d.ts.map +1 -0
  55. package/dist/ai/store/stubAgentRun.d.ts +56 -0
  56. package/dist/ai/store/stubAgentRun.d.ts.map +1 -0
  57. package/dist/ai/types.d.ts +443 -0
  58. package/dist/ai/types.d.ts.map +1 -0
  59. package/dist/ai/useChat.d.ts +253 -7
  60. package/dist/ai/useChat.d.ts.map +1 -1
  61. package/dist/chunk-1aqzcgfr.js +5 -0
  62. package/dist/chunk-1aqzcgfr.js.map +10 -0
  63. package/dist/{chunk-get4mkx8.js → chunk-1b7e9rj7.js} +2 -2
  64. package/dist/{chunk-get4mkx8.js.map → chunk-1b7e9rj7.js.map} +1 -1
  65. package/dist/{chunk-x8beq9c4.js → chunk-3aemqfdr.js} +2 -2
  66. package/dist/{chunk-x8beq9c4.js.map → chunk-3aemqfdr.js.map} +1 -1
  67. package/dist/{chunk-j06g4sqc.js → chunk-528n3vgy.js} +2 -2
  68. package/dist/{chunk-j06g4sqc.js.map → chunk-528n3vgy.js.map} +1 -1
  69. package/dist/{chunk-2khdxyjb.js → chunk-57a0nqfj.js} +1 -1
  70. package/dist/chunk-57a0nqfj.js.map +10 -0
  71. package/dist/{chunk-c40n5r4v.js → chunk-5mhcwnyd.js} +2 -2
  72. package/dist/{chunk-c40n5r4v.js.map → chunk-5mhcwnyd.js.map} +1 -1
  73. package/dist/{chunk-gwchvzdp.js → chunk-71pk1mxx.js} +2 -2
  74. package/dist/{chunk-gwchvzdp.js.map → chunk-71pk1mxx.js.map} +1 -1
  75. package/dist/{chunk-spbgpndn.js → chunk-7t1hjs9f.js} +2 -2
  76. package/dist/{chunk-spbgpndn.js.map → chunk-7t1hjs9f.js.map} +1 -1
  77. package/dist/{chunk-9gsdcjt7.js → chunk-7xvaace2.js} +3 -3
  78. package/dist/{chunk-9gsdcjt7.js.map → chunk-7xvaace2.js.map} +1 -1
  79. package/dist/{chunk-fxy42w6n.js → chunk-8ag0da2s.js} +2 -2
  80. package/dist/{chunk-fxy42w6n.js.map → chunk-8ag0da2s.js.map} +1 -1
  81. package/dist/chunk-8r8epsef.js +5 -0
  82. package/dist/chunk-8r8epsef.js.map +11 -0
  83. package/dist/chunk-91cj3nxk.js +6 -0
  84. package/dist/{chunk-y3zz410b.js.map → chunk-91cj3nxk.js.map} +2 -2
  85. package/dist/{chunk-0fm6jh9b.js → chunk-9nmvm20t.js} +2 -2
  86. package/dist/{chunk-0fm6jh9b.js.map → chunk-9nmvm20t.js.map} +1 -1
  87. package/dist/{chunk-98a3k7bp.js → chunk-9xpa7dpy.js} +2 -2
  88. package/dist/{chunk-98a3k7bp.js.map → chunk-9xpa7dpy.js.map} +1 -1
  89. package/dist/{chunk-qva4841r.js → chunk-a1exbqcq.js} +3 -3
  90. package/dist/{chunk-qva4841r.js.map → chunk-a1exbqcq.js.map} +1 -1
  91. package/dist/{chunk-cw9y6k15.js → chunk-bb19bwg6.js} +2 -2
  92. package/dist/{chunk-cw9y6k15.js.map → chunk-bb19bwg6.js.map} +1 -1
  93. package/dist/{chunk-3gvjn3q4.js → chunk-cf7bvd12.js} +1 -1
  94. package/dist/{chunk-rkbv3df7.js → chunk-djp2xeqe.js} +2 -2
  95. package/dist/{chunk-rkbv3df7.js.map → chunk-djp2xeqe.js.map} +1 -1
  96. package/dist/chunk-ds44bqr9.js +4 -0
  97. package/dist/{chunk-4mcyyh1v.js.map → chunk-ds44bqr9.js.map} +4 -9
  98. package/dist/{chunk-wzvs3sym.js → chunk-exndjhza.js} +3 -3
  99. package/dist/{chunk-wzvs3sym.js.map → chunk-exndjhza.js.map} +1 -1
  100. package/dist/{chunk-f6dd4gd8.js → chunk-f233yzxf.js} +2 -2
  101. package/dist/{chunk-f6dd4gd8.js.map → chunk-f233yzxf.js.map} +1 -1
  102. package/dist/chunk-fz5g2z6h.js +4 -0
  103. package/dist/{chunk-fbvvqf9b.js.map → chunk-fz5g2z6h.js.map} +2 -2
  104. package/dist/{chunk-vj9538yn.js → chunk-gcszdwcb.js} +2 -2
  105. package/dist/{chunk-vj9538yn.js.map → chunk-gcszdwcb.js.map} +1 -1
  106. package/dist/{chunk-pkjq9833.js → chunk-htesx7ym.js} +4 -4
  107. package/dist/{chunk-pkjq9833.js.map → chunk-htesx7ym.js.map} +1 -1
  108. package/dist/chunk-hyxmmj9b.js +5 -0
  109. package/dist/{chunk-khf9xda6.js.map → chunk-hyxmmj9b.js.map} +2 -2
  110. package/dist/{chunk-stq96kya.js → chunk-k2sjvt0c.js} +2 -2
  111. package/dist/{chunk-stq96kya.js.map → chunk-k2sjvt0c.js.map} +1 -1
  112. package/dist/{chunk-zhbrkpb3.js → chunk-k75phgj4.js} +4 -4
  113. package/dist/{chunk-zhbrkpb3.js.map → chunk-k75phgj4.js.map} +1 -1
  114. package/dist/{chunk-y64j80v9.js → chunk-m0tp7zjp.js} +2 -2
  115. package/dist/{chunk-y64j80v9.js.map → chunk-m0tp7zjp.js.map} +1 -1
  116. package/dist/{chunk-06j6rsew.js → chunk-m45j7p1y.js} +2 -2
  117. package/dist/{chunk-06j6rsew.js.map → chunk-m45j7p1y.js.map} +1 -1
  118. package/dist/chunk-mca9wsvs.js +5 -0
  119. package/dist/{chunk-z2tcxwyr.js.map → chunk-mca9wsvs.js.map} +3 -4
  120. package/dist/{chunk-tey1xayb.js → chunk-ms13evzp.js} +2 -2
  121. package/dist/{chunk-tey1xayb.js.map → chunk-ms13evzp.js.map} +1 -1
  122. package/dist/{chunk-bn1v4sfs.js → chunk-r962ae93.js} +2 -2
  123. package/dist/{chunk-bn1v4sfs.js.map → chunk-r962ae93.js.map} +1 -1
  124. package/dist/{chunk-23h0dmx2.js → chunk-s41ees18.js} +2 -2
  125. package/dist/{chunk-23h0dmx2.js.map → chunk-s41ees18.js.map} +1 -1
  126. package/dist/chunk-snb68dgr.js +4 -0
  127. package/dist/{chunk-hwhw98hc.js.map → chunk-snb68dgr.js.map} +1 -1
  128. package/dist/chunk-sz051605.js +5 -0
  129. package/dist/chunk-sz051605.js.map +14 -0
  130. package/dist/{chunk-2cwcfwg3.js → chunk-tr3cbx8k.js} +2 -2
  131. package/dist/{chunk-2cwcfwg3.js.map → chunk-tr3cbx8k.js.map} +2 -2
  132. package/dist/{chunk-dgasxgsm.js → chunk-vqcswg7h.js} +2 -2
  133. package/dist/{chunk-dgasxgsm.js.map → chunk-vqcswg7h.js.map} +2 -2
  134. package/dist/{chunk-zqsfanvk.js → chunk-wpb1xpdp.js} +2 -2
  135. package/dist/{chunk-zqsfanvk.js.map → chunk-wpb1xpdp.js.map} +1 -1
  136. package/dist/{chunk-z1e55w67.js → chunk-ybqss0jy.js} +2 -2
  137. package/dist/{chunk-z1e55w67.js.map → chunk-ybqss0jy.js.map} +1 -1
  138. package/dist/{chunk-cejf873g.js → chunk-yk5wqmyh.js} +2 -2
  139. package/dist/{chunk-cejf873g.js.map → chunk-yk5wqmyh.js.map} +1 -1
  140. package/dist/{chunk-8kj3zrm9.js → chunk-ywntv8yw.js} +4 -4
  141. package/dist/{chunk-8kj3zrm9.js.map → chunk-ywntv8yw.js.map} +1 -1
  142. package/dist/chunks/{ThemeProvider-ByU4BQdL.js → ThemeProvider-BZ2SsSZ3.js} +60 -39
  143. package/dist/chunks/ThemeProvider-BZ2SsSZ3.js.map +1 -0
  144. package/dist/chunks/useParams-BN3XXfmG.js +20 -0
  145. package/dist/chunks/useParams-BN3XXfmG.js.map +1 -0
  146. package/dist/client/index.js +3 -3
  147. package/dist/client/index.js.map +1 -1
  148. package/dist/client/useDictionary.d.ts.map +1 -1
  149. package/dist/database/index.js +1 -1
  150. package/dist/facades/index.js +2 -2
  151. package/dist/facades/index.js.map +1 -1
  152. package/dist/http/ApiRouter.d.ts +30 -2
  153. package/dist/http/ApiRouter.d.ts.map +1 -1
  154. package/dist/http/index.js +2 -2
  155. package/dist/http/index.js.map +1 -1
  156. package/dist/i18n/defineDictionary.d.ts +7 -4
  157. package/dist/i18n/defineDictionary.d.ts.map +1 -1
  158. package/dist/i18n/dictionaryRegistry.d.ts +38 -14
  159. package/dist/i18n/dictionaryRegistry.d.ts.map +1 -1
  160. package/dist/i18n/dictionaryRuntime.js +1 -1
  161. package/dist/i18n/index.js +2 -2
  162. package/dist/i18n/index.js.map +2 -2
  163. package/dist/kernel/index.js +2 -2
  164. package/dist/kernel/index.js.map +2 -2
  165. package/dist/orm/index.js +2 -2
  166. package/dist/orm/index.js.map +2 -2
  167. package/dist/server/index.js +1 -1
  168. package/dist/services/index.js +2 -2
  169. package/dist/services/index.js.map +2 -2
  170. package/dist/testing/index.js +2 -1
  171. package/dist/testing/index.js.map +1 -1
  172. package/package.json +3 -1
  173. package/dist/chunk-2khdxyjb.js.map +0 -10
  174. package/dist/chunk-4mcyyh1v.js +0 -4
  175. package/dist/chunk-fbvvqf9b.js +0 -4
  176. package/dist/chunk-hwhw98hc.js +0 -4
  177. package/dist/chunk-khf9xda6.js +0 -5
  178. package/dist/chunk-q0y0j3ne.js +0 -5
  179. package/dist/chunk-q0y0j3ne.js.map +0 -11
  180. package/dist/chunk-y3zz410b.js +0 -6
  181. package/dist/chunk-z2tcxwyr.js +0 -5
  182. package/dist/chunks/ThemeProvider-ByU4BQdL.js.map +0 -1
  183. /package/dist/{chunk-3gvjn3q4.js.map → chunk-cf7bvd12.js.map} +0 -0
@@ -1,4 +1,5 @@
1
- import { A as Action, E as ServerDataContext, F as toVariantKey, H as Subject, I as applyParams, P as RouteStateProvider, R as QueryManagerContext, T as I18nProvider, a as m, c as ClientRouterContext, j as createMemoryHistory, k as ProgressManager, o as RouteTransitionProvider, r as WebSocketContext, t as ThemeProvider, z as QueryManagerProvider } from "../chunks/ThemeProvider-ByU4BQdL.js";
1
+ import { A as Action, E as ServerDataContext, F as QueryManagerContext, I as QueryManagerProvider, M as toVariantKey, N as applyParams, T as I18nProvider, a as m, c as ClientRouterContext, j as createMemoryHistory, k as ProgressManager, o as RouteTransitionProvider, r as WebSocketContext, t as ThemeProvider, z as Subject } from "../chunks/ThemeProvider-BZ2SsSZ3.js";
2
+ import { r as RouteStateProvider } from "../chunks/useParams-BN3XXfmG.js";
2
3
  import { Suspense, useContext, useMemo, useRef, useState } from "react";
3
4
  import { jsx } from "react/jsx-runtime";
4
5
  //#region testing/Page.tsx
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../testing/Page.tsx"],"sourcesContent":["import {\n Suspense,\n useContext,\n useMemo,\n useRef,\n useState,\n type ComponentType,\n type PropsWithChildren,\n type ReactNode,\n} from \"react\";\nimport { ErrorBoundary, type FallbackProps } from \"react-error-boundary\";\nimport { Action, createMemoryHistory } from \"history\";\n\nimport type { User } from \"../auth/types\";\nimport { ClientRouterContext } from \"../client/ClientRouterContext\";\nimport { I18nProvider } from \"../client/I18nContext\";\nimport { ProgressManager } from \"../client/ProgressManager\";\nimport {\n QueryManagerContext,\n QueryManagerProvider,\n type QueryConfig,\n} from \"../client/QueryManagerContext\";\nimport {\n RouteStateProvider,\n type PageData,\n type RouteState,\n} from \"../client/RouteStateContext\";\nimport { RouteTransitionProvider } from \"../client/RouteTransitionProvider\";\nimport {\n ServerDataContext,\n type ServerDataContextValue,\n} from \"../client/ServerDataProvider\";\nimport { ThemeProvider } from \"../client/ThemeProvider\";\nimport type { ClientFeatureKey } from \"../client/rpc\";\nimport type { Breadcrumb } from \"../client/useBreadcrumbs\";\nimport { WebSocketContext } from \"../client/WebsocketContext\";\nimport { applyParams } from \"../utils/applyParams\";\nimport { Subject } from \"../utils/Subject\";\nimport { toVariantKey } from \"../utils/variantKey\";\n\n/**\n * A dictionary as `Dictionary.create` produces it: a name and a\n * `{ key: { locale: string } }` map.\n *\n * Typed structurally rather than as `Dictionary<T>` for two reasons. It keeps\n * `gemi/testing` from importing `gemi/i18n` — a server entry, which reaches the\n * `Lang` facade and through it the container. And it means an object literal of\n * the same shape is accepted, so a test never *has* to import the app's\n * dictionaries at all.\n *\n * Only `name` and `dictionary` are read — both plain data. `Dictionary`'s\n * server-only methods (`render`, `reference`, which throw once `window` is\n * defined) are never called from here.\n */\nexport interface PageDictionary {\n name: string;\n dictionary: Record<string, Record<string, string>>;\n}\n\nexport interface PageProps {\n /**\n * The URL the view is mounted at. A template (`/app/:orgId/chat`) is resolved\n * against `params`, so the same string can be pasted from the router.\n */\n pathname?: string;\n /** Route params, as the router would have parsed them out of `pathname`. */\n params?: Record<string, string>;\n /** `\"?tab=recent\"`, `\"tab=recent\"`, or `{ tab: \"recent\" }`. */\n searchParams?: string | Record<string, string | number | boolean>;\n hash?: string;\n /** The locale `useTranslator` and `useLocale` report. */\n locale?: string;\n /**\n * The app's default locale. Links and `useNavigate` omit the locale segment\n * for it, so leaving this equal to `locale` (the default) keeps hrefs\n * unprefixed — set it to seed a page being viewed in a non-default locale.\n */\n defaultLocale?: string;\n supportedLocales?: string[];\n /**\n * Dictionaries the components under test translate against — the app's own,\n * or literals of the same shape.\n *\n * Note what importing the app's costs: `app/i18n/index.ts` imports\n * `gemi/i18n`, a server entry, so the test file pulls the container and\n * `node:async_hooks` into its module graph. Nothing there runs (and nothing\n * here calls it), so it is fine under any runner that has Node builtins —\n * vitest, `bun test` — and not under one that renders in a real browser. Use\n * `translations` there, which is the shape the client actually receives.\n */\n dictionaries?: PageDictionary[];\n /**\n * Translations for the current locale, already resolved: dictionary name →\n * key → string. This is the shape the server serializes onto the page, so it\n * is what the client reads at runtime — and it imports nothing.\n *\n * ```tsx\n * <Page translations={{ Chat: { greeting: \"Hello {{name}}\" } }}>\n * ```\n *\n * Merged over `dictionaries`, so the two compose: seed from the app's real\n * dictionary and override the one key a test is about.\n */\n translations?: Record<string, Record<string, string>>;\n /**\n * Data `useQuery` finds already cached, keyed by API path — the path passed\n * to `useQuery`, without the `/api` prefix the client adds when it fetches.\n * A key may carry a query string (`\"/lists?page=2\"`) to seed one search\n * variant.\n *\n * The cache is keyed by the *resolved* path, so a key's `:params` are\n * resolved against the page's `params` — and a key naming one the page does\n * not carry is an error, naming the key. That case is common enough to be\n * worth the loud failure: a query often takes its params from the call site\n * rather than the route (`useQuery(\"/orgs/:orgId/lists\", { params: { orgId } })`\n * with `orgId` in component state), and the right seed for it is the resolved\n * path, `\"/orgs/abc/lists\"`.\n *\n * Seeded at mount only: a component that mutates or refetches its data owns\n * the cache from then on.\n */\n queryData?: Record<string, unknown>;\n /** App-wide `useQuery` defaults, as `createRoot` threads them. */\n queryConfig?: QueryConfig;\n /**\n * What `useUser()` reports. Defaults to `null` — an anonymous visitor — and\n * either way the hook resolves from here without issuing a request.\n */\n user?: Partial<User> | null;\n /** What `useBreadcrumbs()` returns, in order. */\n breadcrumbs?: Breadcrumb[];\n /**\n * What `useFeature()` reports, keyed by feature key. Anything left out reads\n * as off, exactly as an undeclared key does in a real request.\n *\n * A test seeds the *outcome*, not the declaration: `app/features` owns the\n * targeting and the rollout, and re-deriving those here would mean building a\n * request context — a user, a `session_id`, a bot verdict — to assert a\n * branch that only cares which way the feature came out. Cover the targeting\n * where it lives, with a server test.\n */\n features?: Partial<Record<ClientFeatureKey, boolean>>;\n /**\n * The theme `useTheme()` starts on. The app reads a visitor's stored choice\n * out of `localStorage`; a test has no session to have made one in, so this\n * seeds it without writing to storage. `setTheme` works from either.\n */\n theme?: \"light\" | \"dark\" | \"system\";\n /**\n * Fallback for the `Suspense` boundary wrapped around the children — the\n * stand-in for the view's own `Loading` export, which the real router\n * supplies. Defaults to `null`.\n */\n fallback?: ReactNode;\n /**\n * Renders in place of the children when one throws, mirroring a view's\n * `Error` export. Without it a thrown render (an errored suspense query,\n * say) propagates out of `render()` and fails the test, which is usually\n * what you want.\n */\n errorFallback?: ComponentType<FallbackProps>;\n /**\n * Called when something navigates — a `Link` click, `useNavigate().push`.\n * The navigation is reported, not performed: `<Page>` renders one route and\n * does not re-resolve the tree, so `useLocation()` keeps reporting the\n * pathname it was given.\n */\n onNavigate?: (href: string, action: \"push\" | \"replace\") => void;\n}\n\n/** `\"?a=b\"` (or `\"\"`) from any of the shapes `searchParams` accepts. */\nfunction toSearchString(search: PageProps[\"searchParams\"]): string {\n if (!search) return \"\";\n const query =\n typeof search === \"string\"\n ? search.replace(/^\\?/, \"\")\n : new URLSearchParams(\n Object.entries(search).map(([key, value]) => [key, String(value)]),\n ).toString();\n return query ? `?${query}` : \"\";\n}\n\n/**\n * The `:params` a seed key needs supplied. Wildcards (`:rest*`) are excluded —\n * `applyParams` drops those when missing, which is a resolution rather than a\n * failure.\n *\n * Optional params (`:id?`) cannot reach here at all: a key is split at its\n * first `?` to separate the search string, so `\"/lists/:folderId?\"` arrives as\n * the path `/lists/:folderId`. Seed the resolved path for those.\n */\nfunction requiredParamsOf(path: string): string[] {\n return Array.from(path.matchAll(/:([^/]+)/g), ([, name]) => name).filter(\n (name) => !name.endsWith(\"*\"),\n );\n}\n\n/**\n * Fails a `queryData` key whose `:params` the page does not carry, saying so\n * in terms of the key.\n *\n * Without this the two documented runners disagree, and neither is legible.\n * `applyParams` throws `Missing parameter: orgId` under `import.meta.env.DEV`\n * (vitest) — a router-utility stack trace out of `<Page>`'s render, before\n * anything mounts, naming nothing that appears in the test. Under `bun test`\n * that flag is falsy, so it logs and seeds the literal `/orgs/undefined/lists`\n * instead: the seed misses, the query goes to the network, and the assertion\n * runs against a loading state.\n *\n * The case is common because a query's params often come from the call site\n * rather than the route — `useQuery(\"/orgs/:orgId/lists\", { params: { orgId } })`\n * with `orgId` in component state. The cache is keyed by the *resolved* path,\n * so the way out is to seed that path directly.\n */\nfunction resolveSeedPath(\n key: string,\n rawPath: string,\n params: Record<string, string>,\n): string {\n const missing = requiredParamsOf(rawPath).filter(\n (name) => params[name] === undefined,\n );\n if (missing.length > 0) {\n throw new Error(\n `[gemi] <Page> cannot resolve the queryData key \"${key}\": no value for ` +\n `${missing.map((name) => `:${name}`).join(\", \")}. The query cache is ` +\n `keyed by the resolved path, so either add ${missing\n .map((name) => `\\`${name}\\``)\n .join(\", \")} to the page's \\`params\\`, or seed the resolved path ` +\n `(e.g. \"${applyParams(\n rawPath,\n Object.fromEntries(missing.map((name) => [name, \"123\"])),\n )}\") — which is what a query taking its params from component state ` +\n `reads under.`,\n );\n }\n return applyParams(rawPath, params);\n}\n\n/**\n * `queryData` in the shape the query cache seeds from: `{ [path]: { [variant]:\n * data } }`, the same payload `Query.prefetch` puts on a server-rendered page.\n */\nfunction toPrefetchedData(\n queryData: Record<string, unknown>,\n params: Record<string, string>,\n warned: Set<string>,\n) {\n const prefetchedData: Record<string, Record<string, unknown>> = {};\n for (const [key, data] of Object.entries(queryData)) {\n const [rawPath, rawSearch = \"\"] = key.split(\"?\");\n // Once per key per page, not once per render: this runs again on every\n // re-render, and a duplicated warning reads as a second mistake.\n if (rawPath.startsWith(\"/api/\") && !warned.has(key)) {\n warned.add(key);\n console.warn(\n `[gemi] queryData key \"${key}\" starts with /api. useQuery is keyed by ` +\n `the path you pass it — the /api prefix is added when it fetches — ` +\n `so this entry seeds a path no query reads.`,\n );\n }\n const path = resolveSeedPath(key, rawPath, params);\n prefetchedData[path] = {\n ...prefetchedData[path],\n [toVariantKey(rawSearch)]: data,\n };\n }\n return prefetchedData;\n}\n\n/**\n * `{ [locale]: { [dictionary]: { [key]: string } } }` — the payload\n * `Translator` serializes onto the page, which is the only form the client\n * ever sees. `dictionaries` are transposed into it (they are keyed the other\n * way round, by key then locale); `translations` is already in it and lands\n * under `locale`, last, so it wins.\n */\nfunction toClientDictionary(\n dictionaries: PageDictionary[],\n locales: string[],\n locale: string,\n translations: Record<string, Record<string, string>>,\n): Record<string, Record<string, Record<string, string>>> {\n const clientDictionary: Record<\n string,\n Record<string, Record<string, string>>\n > = {};\n for (const supported of locales) {\n clientDictionary[supported] ??= {};\n }\n for (const { name, dictionary } of dictionaries) {\n for (const [key, byLocale] of Object.entries(dictionary ?? {})) {\n for (const [dictLocale, translation] of Object.entries(byLocale ?? {})) {\n clientDictionary[dictLocale] ??= {};\n clientDictionary[dictLocale][name] ??= {};\n clientDictionary[dictLocale][name][key] = translation;\n }\n }\n }\n for (const [name, keys] of Object.entries(translations)) {\n clientDictionary[locale] ??= {};\n clientDictionary[locale][name] = {\n ...clientDictionary[locale][name],\n ...keys,\n };\n }\n return clientDictionary;\n}\n\n/**\n * Mounts a component with the inputs a view normally arrives with — route\n * params, the current locale and its dictionaries, prefetched query data, the\n * signed-in user — so a unit test can assert what it renders rather than only\n * its empty state.\n *\n * ```tsx\n * import { render, screen } from \"@testing-library/react\";\n * import { Page } from \"gemi/testing\";\n *\n * render(\n * <Page\n * pathname=\"/app/:orgId/chat\"\n * params={{ orgId: \"abc\" }}\n * queryData={{ \"/organizations/:orgId/messages\": [{ id: 1, body: \"hi\" }] }}\n * dictionaries={[ChatDictionary]}\n * >\n * <OrgChat />\n * </Page>,\n * );\n *\n * expect(screen.getByText(\"hi\")).toBeDefined();\n * ```\n *\n * It is a plain component, so it composes with any renderer — Testing\n * Library's `render`, `react-test-renderer`, or `renderToString`.\n *\n * Two things it does not do.\n *\n * It does not route: there is no view tree and no route manifest behind it, so\n * a navigation is reported through `onNavigate` rather than resolved. To\n * assert the page *after* one, render a second `<Page>`.\n *\n * And under `renderToString` it renders the server's own no-data branch for an\n * *unseeded* query rather than suspending — deliberately, because suspending\n * there is the streaming server's job: `createRoot` threads the request's\n * `ServerQueryStore` through `ServerQueryContext`, and that store is what runs\n * the route handler. A harness has no request and no handler to run, so there\n * is nothing to suspend on. Seeded queries render their data on the server\n * exactly as they do in the browser; unseeded ones behave as a route with no\n * `Query.prefetch` does, framework warning included.\n */\nexport const Page = (props: PropsWithChildren<PageProps>) => {\n const {\n children,\n pathname: routePath = \"/\",\n params = {},\n searchParams,\n hash = \"\",\n locale = \"en-US\",\n defaultLocale = locale,\n dictionaries = [],\n translations = {},\n queryData = {},\n queryConfig,\n user = null,\n breadcrumbs = [],\n features = {},\n theme,\n fallback = null,\n errorFallback,\n onNavigate,\n } = props;\n\n // The caller's list, in the caller's order — a language switcher maps over\n // it, so hoisting the page's own locale to the front would reorder the\n // rendered options. The defaults are appended, only to guarantee presence.\n const supportedLocales = useMemo(\n () =>\n Array.from(\n new Set([...(props.supportedLocales ?? []), defaultLocale, locale]),\n ),\n [props.supportedLocales, defaultLocale, locale],\n );\n const pathname = applyParams(routePath, params) || \"/\";\n const search = toSearchString(searchParams);\n // The URL's locale segment, which the default locale does not get.\n const urlLocaleSegment = locale === defaultLocale ? null : locale;\n\n const dictionary = useMemo(\n () =>\n toClientDictionary(dictionaries, supportedLocales, locale, translations),\n [dictionaries, supportedLocales, locale, translations],\n );\n\n // Keys that have already drawn a warning, so a re-render does not repeat it.\n const warnedRef = useRef<Set<string>>(new Set());\n const prefetchedData = useMemo(() => {\n const seeded = toPrefetchedData(queryData, params, warnedRef.current);\n // `useUser` reads `/auth/me` like any other query. Seeding it — with `null`\n // for the anonymous default — is what keeps a component test off the\n // network for a hook nothing in the test asked for.\n seeded[\"/auth/me\"] ??= { \"\": user ?? null };\n return seeded;\n }, [queryData, params, user]);\n\n // Keyed by `${view}:${pathname}` in the router's cache; the view names are\n // ours to choose here, and only their order reaches `useBreadcrumbs`.\n const { breadcrumbViews, breadcrumbsCache, breadcrumbsRecord } =\n useMemo(() => {\n const views = breadcrumbs.map((_, index) => `breadcrumb-${index}`);\n const cache = new Map<string, Breadcrumb>(\n breadcrumbs.map((breadcrumb, index) => [\n `${views[index]}:${pathname}`,\n breadcrumb,\n ]),\n );\n return {\n breadcrumbViews: views,\n breadcrumbsCache: cache,\n breadcrumbsRecord: Object.fromEntries(cache),\n };\n }, [breadcrumbs, pathname]);\n\n const [isNavigatingSubject] = useState(() => new Subject<boolean>(false));\n const [progressManager] = useState(\n () => new ProgressManager(isNavigatingSubject),\n );\n const [history] = useState(() =>\n createMemoryHistory({ initialEntries: [`${pathname}${search}${hash}`] }),\n );\n\n const routeState: RouteState & PageData = useMemo(\n () => ({\n views: [],\n params,\n search,\n state: {},\n pathname,\n hash,\n action: null,\n routePath,\n locale: urlLocaleSegment,\n data: {},\n i18n: { currentLocale: locale, dictionary, supportedLocales },\n prefetchedData,\n breadcrumbs: breadcrumbsRecord,\n features: features as Record<string, boolean>,\n appId: \"test\",\n }),\n [\n params,\n search,\n pathname,\n hash,\n routePath,\n urlLocaleSegment,\n locale,\n dictionary,\n supportedLocales,\n prefetchedData,\n breadcrumbsRecord,\n features,\n ],\n );\n\n const [routerSubject] = useState(() => new Subject<RouteState>(routeState));\n\n const onNavigateRef = useRef(onNavigate);\n onNavigateRef.current = onNavigate;\n // Subscribed during render, not in an effect, because React flushes child\n // effects before parent ones — and mount-time navigation is a real pattern:\n // `<Redirect>` pushes from its own mount effect, as does any auth guard. A\n // listener registered in `<Page>`'s effect is not there yet when those fire,\n // so `onNavigate` would silently miss exactly the redirects a test most\n // wants to assert. Ref-guarded, so React's double-invoke registers one.\n //\n // Nothing unsubscribes: this history is created per `<Page>` and reachable\n // from nowhere else, so it is collected with the page it belongs to.\n const listeningRef = useRef(false);\n if (!listeningRef.current) {\n listeningRef.current = true;\n history.listen(({ location, action }) => {\n const href = `${location.pathname}${location.search}${location.hash}`;\n onNavigateRef.current?.(\n href,\n action === Action.Replace ? \"replace\" : \"push\",\n );\n });\n }\n\n const serverData: ServerDataContextValue = useMemo(\n () => ({\n routeManifest: {},\n pageData: {},\n breadcrumbs: breadcrumbsRecord,\n prefetchedData,\n router: {\n pathname,\n params,\n currentPath: routePath,\n is404: false,\n searchParams: search,\n urlLocaleSegment,\n },\n i18n: {\n dictionary,\n currentLocale: locale,\n supportedLocales,\n defaultLocale,\n },\n componentTree: [],\n auth: { user: user as User },\n features: features as Record<string, boolean>,\n __csrf: \"test-csrf-token\",\n cssManifest: {},\n modulePreloadManifest: {},\n meta: {},\n appId: \"test\",\n }),\n [\n breadcrumbsRecord,\n prefetchedData,\n pathname,\n params,\n routePath,\n search,\n urlLocaleSegment,\n dictionary,\n locale,\n supportedLocales,\n defaultLocale,\n user,\n features,\n ],\n );\n\n // Everything the router hooks read, inert: nothing here fetches, preloads or\n // resolves a route, but every hook finds the shape it expects rather than an\n // empty context to crash on.\n const [viewEntriesSubject] = useState(() => new Subject<string[]>([]));\n const routerContext = useMemo(\n () => ({\n viewEntriesSubject,\n history,\n updatePageData: () => {},\n getPageData: () => ({}),\n getScrollPosition: () => 0,\n getViewPathsFromPathname: () => breadcrumbViews,\n getRoutePathnameFromHref: (href: string) => href,\n isNavigatingSubject,\n setNavigationAbortController: () => {},\n progressManager,\n fetchRouteCSS: async () => {},\n preloadRouteModules: () => {},\n prefetchRoute: async () => {},\n takePrefetched: () => null,\n clearPrefetchCache: () => {},\n breadcrumbsCache,\n routerSubject,\n urlLocaleSegment,\n }),\n [\n viewEntriesSubject,\n history,\n breadcrumbViews,\n isNavigatingSubject,\n progressManager,\n breadcrumbsCache,\n routerSubject,\n urlLocaleSegment,\n ],\n );\n\n const [websocket] = useState(() => ({\n subscribe: async () => {},\n unsubscribe: async () => {},\n broadcast: () => {},\n }));\n\n return (\n <ThemeProvider theme={theme}>\n <ServerDataContext.Provider value={serverData}>\n <I18nProvider>\n <WebSocketContext.Provider value={websocket}>\n <QueryManagerProvider queryConfig={queryConfig}>\n <ClientRouterContext.Provider value={routerContext}>\n <RouteTransitionProvider\n isPending={false}\n isFetching={false}\n transitionPath={[\"\", pathname]}\n >\n <RouteStateProvider state={routeState}>\n <Boundary\n errorFallback={errorFallback}\n fallback={fallback}\n resetKey={pathname}\n >\n {children}\n </Boundary>\n </RouteStateProvider>\n </RouteTransitionProvider>\n </ClientRouterContext.Provider>\n </QueryManagerProvider>\n </WebSocketContext.Provider>\n </I18nProvider>\n </ServerDataContext.Provider>\n </ThemeProvider>\n );\n};\n\n/**\n * The `Suspense` boundary every view renders inside, and — when the test\n * supplies a fallback for it — the error boundary too.\n *\n * `onReset={clearErrors}` is the part that has to be here rather than inline\n * above: it needs `QueryManagerContext`, and it is what makes a view's real\n * `Error` export testable. A fallback whose \"Try again\" calls\n * `resetErrorBoundary()` re-renders the child, and `useQuery` reads the\n * failure still stored on the `QueryResource` and throws it straight back —\n * so without this the fallback never goes away and the retry path that works\n * in the app cannot be exercised. `ClientRouter`'s own boundary wires exactly\n * this pair.\n */\nconst Boundary = (\n props: PropsWithChildren<{\n errorFallback?: ComponentType<FallbackProps>;\n fallback: ReactNode;\n resetKey: string;\n }>,\n) => {\n const { errorFallback: ErrorFallback, fallback, resetKey, children } = props;\n const { clearErrors } = useContext(QueryManagerContext);\n const content = <Suspense fallback={fallback}>{children}</Suspense>;\n\n if (!ErrorFallback) {\n return content;\n }\n\n return (\n <ErrorBoundary\n FallbackComponent={ErrorFallback}\n resetKeys={[resetKey]}\n onReset={clearErrors}\n >\n {content}\n </ErrorBoundary>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../testing/Page.tsx"],"sourcesContent":["import {\n Suspense,\n useContext,\n useMemo,\n useRef,\n useState,\n type ComponentType,\n type PropsWithChildren,\n type ReactNode,\n} from \"react\";\nimport { ErrorBoundary, type FallbackProps } from \"react-error-boundary\";\nimport { Action, createMemoryHistory } from \"history\";\n\nimport type { User } from \"../auth/types\";\nimport { ClientRouterContext } from \"../client/ClientRouterContext\";\nimport { I18nProvider } from \"../client/I18nContext\";\nimport { ProgressManager } from \"../client/ProgressManager\";\nimport {\n QueryManagerContext,\n QueryManagerProvider,\n type QueryConfig,\n} from \"../client/QueryManagerContext\";\nimport {\n RouteStateProvider,\n type PageData,\n type RouteState,\n} from \"../client/RouteStateContext\";\nimport { RouteTransitionProvider } from \"../client/RouteTransitionProvider\";\nimport {\n ServerDataContext,\n type ServerDataContextValue,\n} from \"../client/ServerDataProvider\";\nimport { ThemeProvider } from \"../client/ThemeProvider\";\nimport type { ClientFeatureKey } from \"../client/rpc\";\nimport type { Breadcrumb } from \"../client/useBreadcrumbs\";\nimport { WebSocketContext } from \"../client/WebsocketContext\";\nimport { applyParams } from \"../utils/applyParams\";\nimport { Subject } from \"../utils/Subject\";\nimport { toVariantKey } from \"../utils/variantKey\";\n\n/**\n * A dictionary as `Dictionary.create` produces it: a name and a\n * `{ key: { locale: string } }` map.\n *\n * Typed structurally rather than as `Dictionary<T>` for two reasons. It keeps\n * `gemi/testing` from importing `gemi/i18n` — a server entry, which reaches the\n * `Lang` facade and through it the container. And it means an object literal of\n * the same shape is accepted, so a test never *has* to import the app's\n * dictionaries at all.\n *\n * Only `name` and `dictionary` are read — both plain data. `Dictionary`'s\n * server-only methods (`render`, `reference`, which throw once `window` is\n * defined) are never called from here.\n */\nexport interface PageDictionary {\n name: string;\n dictionary: Record<string, Record<string, string>>;\n}\n\nexport interface PageProps {\n /**\n * The URL the view is mounted at. A template (`/app/:orgId/chat`) is resolved\n * against `params`, so the same string can be pasted from the router.\n */\n pathname?: string;\n /** Route params, as the router would have parsed them out of `pathname`. */\n params?: Record<string, string>;\n /** `\"?tab=recent\"`, `\"tab=recent\"`, or `{ tab: \"recent\" }`. */\n searchParams?: string | Record<string, string | number | boolean>;\n hash?: string;\n /** The locale `useTranslator` and `useLocale` report. */\n locale?: string;\n /**\n * The app's default locale. Links and `useNavigate` omit the locale segment\n * for it, so leaving this equal to `locale` (the default) keeps hrefs\n * unprefixed — set it to seed a page being viewed in a non-default locale.\n */\n defaultLocale?: string;\n supportedLocales?: string[];\n /**\n * Dictionaries the components under test translate against — the app's own,\n * or literals of the same shape.\n *\n * Note what importing the app's costs: `app/i18n/index.ts` imports\n * `gemi/i18n`, a server entry, so the test file pulls the container and\n * `node:async_hooks` into its module graph. Nothing there runs (and nothing\n * here calls it), so it is fine under any runner that has Node builtins —\n * vitest, `bun test` — and not under one that renders in a real browser. Use\n * `translations` there, which is the shape the client actually receives.\n */\n dictionaries?: PageDictionary[];\n /**\n * Translations for the current locale, already resolved: dictionary name →\n * key → string. This is the shape the server serializes onto the page, so it\n * is what the client reads at runtime — and it imports nothing.\n *\n * ```tsx\n * <Page translations={{ Chat: { greeting: \"Hello {{name}}\" } }}>\n * ```\n *\n * Merged over `dictionaries`, so the two compose: seed from the app's real\n * dictionary and override the one key a test is about.\n */\n translations?: Record<string, Record<string, string>>;\n /**\n * Data `useQuery` finds already cached, keyed by API path — the path passed\n * to `useQuery`, without the `/api` prefix the client adds when it fetches.\n * A key may carry a query string (`\"/lists?page=2\"`) to seed one search\n * variant.\n *\n * The cache is keyed by the *resolved* path, so a key's `:params` are\n * resolved against the page's `params` — and a key naming one the page does\n * not carry is an error, naming the key. That case is common enough to be\n * worth the loud failure: a query often takes its params from the call site\n * rather than the route (`useQuery(\"/orgs/:orgId/lists\", { params: { orgId } })`\n * with `orgId` in component state), and the right seed for it is the resolved\n * path, `\"/orgs/abc/lists\"`.\n *\n * Seeded at mount only: a component that mutates or refetches its data owns\n * the cache from then on.\n */\n queryData?: Record<string, unknown>;\n /** App-wide `useQuery` defaults, as `createRoot` threads them. */\n queryConfig?: QueryConfig;\n /**\n * What `useUser()` reports. Defaults to `null` — an anonymous visitor — and\n * either way the hook resolves from here without issuing a request.\n */\n user?: Partial<User> | null;\n /** What `useBreadcrumbs()` returns, in order. */\n breadcrumbs?: Breadcrumb[];\n /**\n * What `useFeature()` reports, keyed by feature key. Anything left out reads\n * as off, exactly as an undeclared key does in a real request.\n *\n * A test seeds the *outcome*, not the declaration: `app/features` owns the\n * targeting and the rollout, and re-deriving those here would mean building a\n * request context — a user, a `session_id`, a bot verdict — to assert a\n * branch that only cares which way the feature came out. Cover the targeting\n * where it lives, with a server test.\n */\n features?: Partial<Record<ClientFeatureKey, boolean>>;\n /**\n * The theme `useTheme()` starts on. The app reads a visitor's stored choice\n * out of `localStorage`; a test has no session to have made one in, so this\n * seeds it without writing to storage. `setTheme` works from either.\n */\n theme?: \"light\" | \"dark\" | \"system\";\n /**\n * Fallback for the `Suspense` boundary wrapped around the children — the\n * stand-in for the view's own `Loading` export, which the real router\n * supplies. Defaults to `null`.\n */\n fallback?: ReactNode;\n /**\n * Renders in place of the children when one throws, mirroring a view's\n * `Error` export. Without it a thrown render (an errored suspense query,\n * say) propagates out of `render()` and fails the test, which is usually\n * what you want.\n */\n errorFallback?: ComponentType<FallbackProps>;\n /**\n * Called when something navigates — a `Link` click, `useNavigate().push`.\n * The navigation is reported, not performed: `<Page>` renders one route and\n * does not re-resolve the tree, so `useLocation()` keeps reporting the\n * pathname it was given.\n */\n onNavigate?: (href: string, action: \"push\" | \"replace\") => void;\n}\n\n/** `\"?a=b\"` (or `\"\"`) from any of the shapes `searchParams` accepts. */\nfunction toSearchString(search: PageProps[\"searchParams\"]): string {\n if (!search) return \"\";\n const query =\n typeof search === \"string\"\n ? search.replace(/^\\?/, \"\")\n : new URLSearchParams(\n Object.entries(search).map(([key, value]) => [key, String(value)]),\n ).toString();\n return query ? `?${query}` : \"\";\n}\n\n/**\n * The `:params` a seed key needs supplied. Wildcards (`:rest*`) are excluded —\n * `applyParams` drops those when missing, which is a resolution rather than a\n * failure.\n *\n * Optional params (`:id?`) cannot reach here at all: a key is split at its\n * first `?` to separate the search string, so `\"/lists/:folderId?\"` arrives as\n * the path `/lists/:folderId`. Seed the resolved path for those.\n */\nfunction requiredParamsOf(path: string): string[] {\n return Array.from(path.matchAll(/:([^/]+)/g), ([, name]) => name).filter(\n (name) => !name.endsWith(\"*\"),\n );\n}\n\n/**\n * Fails a `queryData` key whose `:params` the page does not carry, saying so\n * in terms of the key.\n *\n * Without this the two documented runners disagree, and neither is legible.\n * `applyParams` throws `Missing parameter: orgId` under `import.meta.env.DEV`\n * (vitest) — a router-utility stack trace out of `<Page>`'s render, before\n * anything mounts, naming nothing that appears in the test. Under `bun test`\n * that flag is falsy, so it logs and seeds the literal `/orgs/undefined/lists`\n * instead: the seed misses, the query goes to the network, and the assertion\n * runs against a loading state.\n *\n * The case is common because a query's params often come from the call site\n * rather than the route — `useQuery(\"/orgs/:orgId/lists\", { params: { orgId } })`\n * with `orgId` in component state. The cache is keyed by the *resolved* path,\n * so the way out is to seed that path directly.\n */\nfunction resolveSeedPath(\n key: string,\n rawPath: string,\n params: Record<string, string>,\n): string {\n const missing = requiredParamsOf(rawPath).filter(\n (name) => params[name] === undefined,\n );\n if (missing.length > 0) {\n throw new Error(\n `[gemi] <Page> cannot resolve the queryData key \"${key}\": no value for ` +\n `${missing.map((name) => `:${name}`).join(\", \")}. The query cache is ` +\n `keyed by the resolved path, so either add ${missing\n .map((name) => `\\`${name}\\``)\n .join(\", \")} to the page's \\`params\\`, or seed the resolved path ` +\n `(e.g. \"${applyParams(\n rawPath,\n Object.fromEntries(missing.map((name) => [name, \"123\"])),\n )}\") — which is what a query taking its params from component state ` +\n `reads under.`,\n );\n }\n return applyParams(rawPath, params);\n}\n\n/**\n * `queryData` in the shape the query cache seeds from: `{ [path]: { [variant]:\n * data } }`, the same payload `Query.prefetch` puts on a server-rendered page.\n */\nfunction toPrefetchedData(\n queryData: Record<string, unknown>,\n params: Record<string, string>,\n warned: Set<string>,\n) {\n const prefetchedData: Record<string, Record<string, unknown>> = {};\n for (const [key, data] of Object.entries(queryData)) {\n const [rawPath, rawSearch = \"\"] = key.split(\"?\");\n // Once per key per page, not once per render: this runs again on every\n // re-render, and a duplicated warning reads as a second mistake.\n if (rawPath.startsWith(\"/api/\") && !warned.has(key)) {\n warned.add(key);\n console.warn(\n `[gemi] queryData key \"${key}\" starts with /api. useQuery is keyed by ` +\n `the path you pass it — the /api prefix is added when it fetches — ` +\n `so this entry seeds a path no query reads.`,\n );\n }\n const path = resolveSeedPath(key, rawPath, params);\n prefetchedData[path] = {\n ...prefetchedData[path],\n [toVariantKey(rawSearch)]: data,\n };\n }\n return prefetchedData;\n}\n\n/**\n * `{ [locale]: { [dictionary]: { [key]: string } } }` — the payload\n * `Translator` serializes onto the page, which is the only form the client\n * ever sees. `dictionaries` are transposed into it (they are keyed the other\n * way round, by key then locale); `translations` is already in it and lands\n * under `locale`, last, so it wins.\n */\nfunction toClientDictionary(\n dictionaries: PageDictionary[],\n locales: string[],\n locale: string,\n translations: Record<string, Record<string, string>>,\n): Record<string, Record<string, Record<string, string>>> {\n const clientDictionary: Record<\n string,\n Record<string, Record<string, string>>\n > = {};\n for (const supported of locales) {\n clientDictionary[supported] ??= {};\n }\n for (const { name, dictionary } of dictionaries) {\n for (const [key, byLocale] of Object.entries(dictionary ?? {})) {\n for (const [dictLocale, translation] of Object.entries(byLocale ?? {})) {\n clientDictionary[dictLocale] ??= {};\n clientDictionary[dictLocale][name] ??= {};\n clientDictionary[dictLocale][name][key] = translation;\n }\n }\n }\n for (const [name, keys] of Object.entries(translations)) {\n clientDictionary[locale] ??= {};\n clientDictionary[locale][name] = {\n ...clientDictionary[locale][name],\n ...keys,\n };\n }\n return clientDictionary;\n}\n\n/**\n * Mounts a component with the inputs a view normally arrives with — route\n * params, the current locale and its dictionaries, prefetched query data, the\n * signed-in user — so a unit test can assert what it renders rather than only\n * its empty state.\n *\n * ```tsx\n * import { render, screen } from \"@testing-library/react\";\n * import { Page } from \"gemi/testing\";\n *\n * render(\n * <Page\n * pathname=\"/app/:orgId/chat\"\n * params={{ orgId: \"abc\" }}\n * queryData={{ \"/organizations/:orgId/messages\": [{ id: 1, body: \"hi\" }] }}\n * dictionaries={[ChatDictionary]}\n * >\n * <OrgChat />\n * </Page>,\n * );\n *\n * expect(screen.getByText(\"hi\")).toBeDefined();\n * ```\n *\n * It is a plain component, so it composes with any renderer — Testing\n * Library's `render`, `react-test-renderer`, or `renderToString`.\n *\n * Two things it does not do.\n *\n * It does not route: there is no view tree and no route manifest behind it, so\n * a navigation is reported through `onNavigate` rather than resolved. To\n * assert the page *after* one, render a second `<Page>`.\n *\n * And under `renderToString` it renders the server's own no-data branch for an\n * *unseeded* query rather than suspending — deliberately, because suspending\n * there is the streaming server's job: `createRoot` threads the request's\n * `ServerQueryStore` through `ServerQueryContext`, and that store is what runs\n * the route handler. A harness has no request and no handler to run, so there\n * is nothing to suspend on. Seeded queries render their data on the server\n * exactly as they do in the browser; unseeded ones behave as a route with no\n * `Query.prefetch` does, framework warning included.\n */\nexport const Page = (props: PropsWithChildren<PageProps>) => {\n const {\n children,\n pathname: routePath = \"/\",\n params = {},\n searchParams,\n hash = \"\",\n locale = \"en-US\",\n defaultLocale = locale,\n dictionaries = [],\n translations = {},\n queryData = {},\n queryConfig,\n user = null,\n breadcrumbs = [],\n features = {},\n theme,\n fallback = null,\n errorFallback,\n onNavigate,\n } = props;\n\n // The caller's list, in the caller's order — a language switcher maps over\n // it, so hoisting the page's own locale to the front would reorder the\n // rendered options. The defaults are appended, only to guarantee presence.\n const supportedLocales = useMemo(\n () =>\n Array.from(\n new Set([...(props.supportedLocales ?? []), defaultLocale, locale]),\n ),\n [props.supportedLocales, defaultLocale, locale],\n );\n const pathname = applyParams(routePath, params) || \"/\";\n const search = toSearchString(searchParams);\n // The URL's locale segment, which the default locale does not get.\n const urlLocaleSegment = locale === defaultLocale ? null : locale;\n\n const dictionary = useMemo(\n () =>\n toClientDictionary(dictionaries, supportedLocales, locale, translations),\n [dictionaries, supportedLocales, locale, translations],\n );\n\n // Keys that have already drawn a warning, so a re-render does not repeat it.\n const warnedRef = useRef<Set<string>>(new Set());\n const prefetchedData = useMemo(() => {\n const seeded = toPrefetchedData(queryData, params, warnedRef.current);\n // `useUser` reads `/auth/me` like any other query. Seeding it — with `null`\n // for the anonymous default — is what keeps a component test off the\n // network for a hook nothing in the test asked for.\n seeded[\"/auth/me\"] ??= { \"\": user ?? null };\n return seeded;\n }, [queryData, params, user]);\n\n // Keyed by `${view}:${pathname}` in the router's cache; the view names are\n // ours to choose here, and only their order reaches `useBreadcrumbs`.\n const { breadcrumbViews, breadcrumbsCache, breadcrumbsRecord } =\n useMemo(() => {\n const views = breadcrumbs.map((_, index) => `breadcrumb-${index}`);\n const cache = new Map<string, Breadcrumb>(\n breadcrumbs.map((breadcrumb, index) => [\n `${views[index]}:${pathname}`,\n breadcrumb,\n ]),\n );\n return {\n breadcrumbViews: views,\n breadcrumbsCache: cache,\n breadcrumbsRecord: Object.fromEntries(cache),\n };\n }, [breadcrumbs, pathname]);\n\n const [isNavigatingSubject] = useState(() => new Subject<boolean>(false));\n const [progressManager] = useState(\n () => new ProgressManager(isNavigatingSubject),\n );\n const [history] = useState(() =>\n createMemoryHistory({ initialEntries: [`${pathname}${search}${hash}`] }),\n );\n\n const routeState: RouteState & PageData = useMemo(\n () => ({\n views: [],\n params,\n search,\n state: {},\n pathname,\n hash,\n action: null,\n routePath,\n locale: urlLocaleSegment,\n data: {},\n i18n: { currentLocale: locale, dictionary, supportedLocales },\n prefetchedData,\n breadcrumbs: breadcrumbsRecord,\n features: features as Record<string, boolean>,\n appId: \"test\",\n }),\n [\n params,\n search,\n pathname,\n hash,\n routePath,\n urlLocaleSegment,\n locale,\n dictionary,\n supportedLocales,\n prefetchedData,\n breadcrumbsRecord,\n features,\n ],\n );\n\n const [routerSubject] = useState(() => new Subject<RouteState>(routeState));\n\n const onNavigateRef = useRef(onNavigate);\n onNavigateRef.current = onNavigate;\n // Subscribed during render, not in an effect, because React flushes child\n // effects before parent ones — and mount-time navigation is a real pattern:\n // `<Redirect>` pushes from its own mount effect, as does any auth guard. A\n // listener registered in `<Page>`'s effect is not there yet when those fire,\n // so `onNavigate` would silently miss exactly the redirects a test most\n // wants to assert. Ref-guarded, so React's double-invoke registers one.\n //\n // Nothing unsubscribes: this history is created per `<Page>` and reachable\n // from nowhere else, so it is collected with the page it belongs to.\n const listeningRef = useRef(false);\n if (!listeningRef.current) {\n listeningRef.current = true;\n history.listen(({ location, action }) => {\n const href = `${location.pathname}${location.search}${location.hash}`;\n onNavigateRef.current?.(\n href,\n action === Action.Replace ? \"replace\" : \"push\",\n );\n });\n }\n\n const serverData: ServerDataContextValue = useMemo(\n () => ({\n routeManifest: {},\n pageData: {},\n breadcrumbs: breadcrumbsRecord,\n prefetchedData,\n router: {\n pathname,\n params,\n currentPath: routePath,\n is404: false,\n searchParams: search,\n urlLocaleSegment,\n },\n i18n: {\n dictionary,\n currentLocale: locale,\n supportedLocales,\n defaultLocale,\n },\n componentTree: [],\n auth: { user: user as User },\n features: features as Record<string, boolean>,\n __csrf: \"test-csrf-token\",\n cssManifest: {},\n modulePreloadManifest: {},\n meta: {},\n appId: \"test\",\n }),\n [\n breadcrumbsRecord,\n prefetchedData,\n pathname,\n params,\n routePath,\n search,\n urlLocaleSegment,\n dictionary,\n locale,\n supportedLocales,\n defaultLocale,\n user,\n features,\n ],\n );\n\n // Everything the router hooks read, inert: nothing here fetches, preloads or\n // resolves a route, but every hook finds the shape it expects rather than an\n // empty context to crash on.\n const [viewEntriesSubject] = useState(() => new Subject<string[]>([]));\n const routerContext = useMemo(\n () => ({\n viewEntriesSubject,\n history,\n updatePageData: () => {},\n getPageData: () => ({}),\n getScrollPosition: () => 0,\n getViewPathsFromPathname: () => breadcrumbViews,\n getRoutePathnameFromHref: (href: string) => href,\n isNavigatingSubject,\n setNavigationAbortController: () => {},\n progressManager,\n fetchRouteCSS: async () => {},\n preloadRouteModules: () => {},\n prefetchRoute: async () => {},\n takePrefetched: () => null,\n clearPrefetchCache: () => {},\n breadcrumbsCache,\n routerSubject,\n urlLocaleSegment,\n }),\n [\n viewEntriesSubject,\n history,\n breadcrumbViews,\n isNavigatingSubject,\n progressManager,\n breadcrumbsCache,\n routerSubject,\n urlLocaleSegment,\n ],\n );\n\n const [websocket] = useState(() => ({\n subscribe: async () => {},\n unsubscribe: async () => {},\n broadcast: () => {},\n }));\n\n return (\n <ThemeProvider theme={theme}>\n <ServerDataContext.Provider value={serverData}>\n <I18nProvider>\n <WebSocketContext.Provider value={websocket}>\n <QueryManagerProvider queryConfig={queryConfig}>\n <ClientRouterContext.Provider value={routerContext}>\n <RouteTransitionProvider\n isPending={false}\n isFetching={false}\n transitionPath={[\"\", pathname]}\n >\n <RouteStateProvider state={routeState}>\n <Boundary\n errorFallback={errorFallback}\n fallback={fallback}\n resetKey={pathname}\n >\n {children}\n </Boundary>\n </RouteStateProvider>\n </RouteTransitionProvider>\n </ClientRouterContext.Provider>\n </QueryManagerProvider>\n </WebSocketContext.Provider>\n </I18nProvider>\n </ServerDataContext.Provider>\n </ThemeProvider>\n );\n};\n\n/**\n * The `Suspense` boundary every view renders inside, and — when the test\n * supplies a fallback for it — the error boundary too.\n *\n * `onReset={clearErrors}` is the part that has to be here rather than inline\n * above: it needs `QueryManagerContext`, and it is what makes a view's real\n * `Error` export testable. A fallback whose \"Try again\" calls\n * `resetErrorBoundary()` re-renders the child, and `useQuery` reads the\n * failure still stored on the `QueryResource` and throws it straight back —\n * so without this the fallback never goes away and the retry path that works\n * in the app cannot be exercised. `ClientRouter`'s own boundary wires exactly\n * this pair.\n */\nconst Boundary = (\n props: PropsWithChildren<{\n errorFallback?: ComponentType<FallbackProps>;\n fallback: ReactNode;\n resetKey: string;\n }>,\n) => {\n const { errorFallback: ErrorFallback, fallback, resetKey, children } = props;\n const { clearErrors } = useContext(QueryManagerContext);\n const content = <Suspense fallback={fallback}>{children}</Suspense>;\n\n if (!ErrorFallback) {\n return content;\n }\n\n return (\n <ErrorBoundary\n FallbackComponent={ErrorFallback}\n resetKeys={[resetKey]}\n onReset={clearErrors}\n >\n {content}\n </ErrorBoundary>\n );\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gemi",
3
- "version": "0.60.0",
3
+ "version": "0.61.0",
4
4
  "private": false,
5
5
  "license": "MIT",
6
6
  "author": "Enes Tufekci <enes@gemijs.dev>",
@@ -22,6 +22,8 @@
22
22
  "exports": {
23
23
  "./http": "./dist/http/index.js",
24
24
  "./client": "./dist/client/index.js",
25
+ "./ai": "./dist/ai/index.js",
26
+ "./ai/client": "./dist/ai/client/index.js",
25
27
  "./testing": "./dist/testing/index.js",
26
28
  "./app": "./dist/app/index.js",
27
29
  "./facades": "./dist/facades/index.js",
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../i18n/defineDictionary.ts"],
4
- "sourcesContent": [
5
- "import {\n dictionaryId,\n dictionaryLocales,\n localeStrings,\n type DictionaryTranslations,\n type LocaleStrings,\n} from \"./dictionaryShape\";\nimport {\n loadDictionary,\n loadDictionaryForRender,\n registerDictionary,\n} from \"./dictionaryRegistry\";\n\ndeclare const brand: unique symbol;\n\nexport interface DictionaryHandle<\n T extends DictionaryTranslations = DictionaryTranslations,\n> {\n readonly id: string;\n /** Locales this dictionary declares, source language first. */\n readonly locales: readonly string[];\n /**\n * Strings for `locale`. Synchronous when they are already in memory —\n * always, for an unbundled dictionary; after a preload or the SSR seed, for a\n * bundled one.\n */\n load(locale: string): LocaleStrings | Promise<LocaleStrings>;\n /**\n * `load`, but never rejecting — safe to hand React's `use()`. A failed locale\n * chunk resolves to no strings so the component degrades to rendering keys\n * instead of unmounting into an error boundary.\n */\n loadForRender(locale: string): LocaleStrings | Promise<LocaleStrings>;\n get(locale: string): LocaleStrings | undefined;\n /** Type-only: carries the literal's shape through to `useDictionary`. */\n readonly [brand]?: T;\n}\n\n/**\n * Declare the strings a component needs, next to the component.\n *\n * ```ts\n * export const homeDict = defineDictionary({\n * title: { \"en-US\": \"Welcome {{name}}\", \"tr-TR\": \"Hoş geldin {{name}}\" },\n * });\n * ```\n *\n * As written this holds every locale. Under gemi's Vite plugin the call is\n * rewritten so each locale becomes its own chunk and a page downloads only the\n * one it renders in — but the plugin is strictly an optimization, and the\n * behaviour is identical without it (in `bun test`, and in server code that\n * does not go through the bundler).\n *\n * The first locale in the literal is the source language: a key missing from\n * another locale falls back to it rather than rendering as its own key.\n */\nexport interface DefineDictionaryOptions {\n /**\n * The locale this dictionary is authored in. Keys missing from another locale\n * fall back to it, and it is what renders when the app has no locale\n * configured.\n *\n * Optional, but worth setting on any dictionary that is not uniformly\n * translated: without it the source language is whichever locale appears\n * first in the literal, so adding a key at the top can re-point every\n * fallback in the dictionary.\n */\n sourceLocale?: string;\n}\n\nexport function defineDictionary<const T extends DictionaryTranslations>(\n translations: T,\n options: DefineDictionaryOptions = {},\n): DictionaryHandle<T> {\n const locales = dictionaryLocales(translations, options.sourceLocale);\n return createHandle(dictionaryId(translations), locales, (locale) =>\n localeStrings(translations, locale, locales),\n );\n}\n\n/**\n * The rewritten form of a `defineDictionary` call — emitted by\n * `packages/gemi/vite/dictionaryPlugin.ts`, never written by hand. `loaders`\n * holds one dynamic import per locale so the bundler emits one chunk per\n * locale and the untaken ones never reach the browser.\n */\nexport function __gemi_dict__<\n const T extends DictionaryTranslations = DictionaryTranslations,\n>(\n id: string,\n loaders: Record<string, () => Promise<{ default: LocaleStrings }>>,\n): DictionaryHandle<T> {\n const locales = Object.keys(loaders);\n return createHandle(id, locales, (locale) => {\n // An unknown locale falls back to the source language, matching what\n // `localeStrings` does per key on the unbundled path.\n const load = loaders[locale] ?? loaders[locales[0]];\n if (!load) {\n return {};\n }\n return load().then((mod) => mod.default);\n });\n}\n\nfunction createHandle<T extends DictionaryTranslations>(\n id: string,\n locales: string[],\n load: (locale: string) => LocaleStrings | Promise<LocaleStrings>,\n): DictionaryHandle<T> {\n const entry = { id, locales, load };\n registerDictionary(entry);\n\n // Re-asserted on every read rather than only at construction. A handle is\n // created once, at module scope, but the registry it delegates to can be\n // emptied under it — a test's `afterEach` reset, an HMR boundary — and the\n // handle would then be permanently orphaned, throwing \"Unknown dictionary\"\n // for a dictionary the caller is holding. `registerDictionary` is a no-op\n // when the id is already there, so this costs one Map lookup.\n const ensure = () => registerDictionary(entry);\n\n return {\n id,\n locales,\n // Routed through the registry rather than calling `load` directly so\n // concurrent readers share one in-flight import and results are cached.\n load: (locale: string) => {\n ensure();\n return loadDictionary(id, locale);\n },\n loadForRender: (locale: string) => {\n ensure();\n return loadDictionaryForRender(id, locale);\n },\n get: (locale: string) => {\n ensure();\n const strings = loadDictionary(id, locale);\n if (strings instanceof Promise) {\n // Nothing downstream awaits this one — `get` is the synchronous peek,\n // and the caller is about to discard it. An unattached rejection (a\n // locale chunk that 404s mid-deploy) would surface as an\n // `unhandledRejection`, which under Node's default handler takes the\n // process down over one missing translation file. The load itself is\n // still cached and still retried through `loadDictionary`.\n strings.catch(() => {});\n return undefined;\n }\n return strings;\n },\n };\n}\n\n"
6
- ],
7
- "mappings": ";wHAsEO,GAAS,CAAwD,CACtE,EACA,EAAmC,CAAC,EACf,CACrB,IAAM,EAAU,EAAkB,EAAc,EAAQ,YAAY,EACpE,OAAO,EAAa,EAAa,CAAY,EAAG,EAAS,CAAC,IACxD,EAAc,EAAc,EAAQ,CAAO,CAC7C,EASK,SAAS,CAEf,CACC,EACA,EACqB,CACrB,IAAM,EAAU,OAAO,KAAK,CAAO,EACnC,OAAO,EAAa,EAAI,EAAS,CAAC,IAAW,CAG3C,IAAM,EAAO,EAAQ,IAAW,EAAQ,EAAQ,IAChD,GAAI,CAAC,EACH,MAAO,CAAC,EAEV,OAAO,EAAK,EAAE,KAAK,CAAC,IAAQ,EAAI,OAAO,EACxC,EAGH,SAAS,CAA8C,CACrD,EACA,EACA,EACqB,CACrB,IAAM,EAAQ,CAAE,KAAI,UAAS,MAAK,EAClC,EAAmB,CAAK,EAQxB,IAAM,EAAS,IAAM,EAAmB,CAAK,EAE7C,MAAO,CACL,KACA,UAGA,KAAM,CAAC,IAAmB,CAExB,OADA,EAAO,EACA,EAAe,EAAI,CAAM,GAElC,cAAe,CAAC,IAAmB,CAEjC,OADA,EAAO,EACA,EAAwB,EAAI,CAAM,GAE3C,IAAK,CAAC,IAAmB,CACvB,EAAO,EACP,IAAM,EAAU,EAAe,EAAI,CAAM,EACzC,GAAI,aAAmB,QAAS,CAO9B,EAAQ,MAAM,IAAM,EAAE,EACtB,OAEF,OAAO,EAEX",
8
- "debugId": "001CC3B9EBC07CB664756E2164756E21",
9
- "names": []
10
- }
@@ -1,4 +0,0 @@
1
- // @bun
2
- import{Ne as vc,Qe as TS}from"./chunk-z2tcxwyr.js";import{nf as sS}from"./chunk-3296fwss.js";import{xf as nP}from"./chunk-tds3xq6b.js";class cf{static kind="controller";constructor(){}}class yO extends cf{}function BO(c){return typeof c==="function"&&c.prototype!==void 0}function $T(c){if(!/^\d+$/.test(c))return null;let T=Number(c);return Number.isSafeInteger(T)?T:null}function Ts(c){if(!c)return null;let T=c.trim();if(!/^bytes=/i.test(T))return null;let P=T.slice(6).split(",").map((S)=>S.trim()).filter((S)=>S!=="");if(P.length!==1)return null;let f=P[0],D=f.indexOf("-");if(D===-1)return null;let O=f.slice(0,D),i=f.slice(D+1);if(O===""){let S=$T(i);if(S===null)return null;return{kind:"suffix",suffixLength:S}}let F=$T(O);if(F===null)return null;if(i==="")return{kind:"offset",start:F,end:null};let C=$T(i);if(C===null||C<F)return null;return{kind:"offset",start:F,end:C}}function Tf(c,T){if(!Number.isFinite(T)||T<=0)return null;let s,P;if(c.kind==="suffix"){if(c.suffixLength<=0)return null;s=Math.max(0,T-c.suffixLength),P=T-1}else{if(c.start>=T)return null;if(s=c.start,P=c.end===null?T-1:Math.min(c.end,T-1),P<s)return null}return{start:s,end:P,length:P-s+1}}function aS(c){if(c.kind==="suffix")return`bytes=-${c.suffixLength}`;return c.end===null?`bytes=${c.start}-`:`bytes=${c.start}-${c.end}`}function ES(c){if(!c)return null;let T=/^bytes\s+(\d+)-(\d+)\/(\d+)$/i.exec(c.trim());if(!T)return null;let s=$T(T[1]),P=$T(T[2]),f=$T(T[3]);if(s===null||P===null||f===null||P<s)return null;return{start:s,end:P,total:f}}function sf(c,T,s){return`bytes ${c}-${T}/${s}`}function ss(c){return`bytes */${c}`}var EA="GEMI_REQUEST_BREAKER_ERROR";class V extends Error{kind="GEMI_REQUEST_BREAKER_ERROR";payload={api:{},view:{}}}class Ps extends V{errors={};constructor(c){super("Validation error");this.name="ValidationError",this.errors=c,this.payload={api:{status:400,data:{error:{kind:"validation_error",messages:c}},headers:{"Content-Type":"application/json"}},view:{status:400}}}}class QT{data;constructor(c){this.data=c}get(c){return this.data[c]}has(c){return this.data[c]!==void 0}toJSON(){return this.data}}function xS(c){let[T,s]=c.match(/\d+|\D+/g)??[];if(!T||!s)return 0;let P=Number.parseInt(T);switch(s){case"B":return P;case"KB":return P*1024;case"MB":return P*1024*1024;case"GB":return P*1024*1024*1024;case"TB":return P*1024*1024*1024*1024;default:return 0}}function mS(c){switch(c){case"image":return"image";case"png":return"image/png";case"jpg":return"image/jpeg";case"jpeg":return"image/jpeg";case"ttf":return"font/ttf";case"excel":return"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";case"csv":return"text/csv";case"word":return"application/vnd.openxmlformats-officedocument.wordprocessingml.document";case"pdf":return"application/pdf";case"json":return"application/json";default:return c}}function wS(c){let[T,s]=c.split(":");switch(T){case"required":return(P)=>{if(P instanceof Blob)return P.size>0;return P!==null&&P!==void 0&&P?.length>0};case"password":return(P)=>{return/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,}$/.test(P)};case"number":return(P)=>{if(typeof P!=="number")return!1;return!Number.isNaN(P)};case"min":return(P)=>{return P?.length>=Number.parseInt(s)};case"max":return(P)=>{return P?.length<=Number.parseInt(s)};case"email":return(P)=>{return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(P)};case"file":return(P)=>{return P instanceof Blob};case"fileType":return(P)=>{if(P instanceof Blob){let f=mS(s);return P.type.startsWith(f)}};case"fileSize":return(P)=>{if(P instanceof Blob){let f=xS(s);return P.size<=f}};default:return()=>!0}}class dc{kind;rawRequest;headers;cookies;search;schema={};routePath;params;constructor(c,T,s,P){if(!c){let C=vc.getStore().req;this.params=C.params,this.rawRequest=C.rawRequest,this.kind=C.kind,this.routePath=C.routePath}else this.params=T,this.rawRequest=c,this.routePath=P,this.kind=s??"api";this.headers=this.rawRequest.headers;let f=this.rawRequest.headers.get("Cookie"),D=new Map;if(f){let C=f.split(";");for(let S of C){let[M,Z]=S.split("=");D.set(M.trim(),Z.trim())}}let O=new URL(this.rawRequest.url),i=new Map;for(let[C,S]of O.searchParams)if(i.has(C)){let M=i.get(C);if(Array.isArray(M))M.push(S),i.set(C,M);else i.set(C,[M,S])}else i.set(C,S);let F=Object.fromEntries(i.entries());this.search=new QT(F),this.cookies=D}locale(){return vc.getStore().locale}ctx(){return vc.getStore()}range(){return Ts(this.rawRequest.headers.get("Range"))}refine(c){return{}}async parseBody(){let c=new QT({});if(this.rawRequest.headers.get("Content-Type")==="application/json"){let T=await this.rawRequest.json();c=new QT(T)}if(this.rawRequest.headers.get("Content-Type")==="application/x-www-form-urlencoded"){let T=await this.rawRequest.formData();c=new QT(T)}if(this.rawRequest.headers.get("Content-Type")?.startsWith("multipart/form-data")){let T=await this.rawRequest.formData(),s=new Map;for(let[P,f]of T.entries())if(s.has(P)){let D=s.get(P);if(Array.isArray(D))D.push(f),s.set(P,D);else s.set(P,[D,f])}else s.set(P,f);c=new QT(Object.fromEntries(s.entries()))}return c}validateInput(c){let T={};for(let[s,P]of Object.entries(this.schema))for(let[f,D]of Object.entries(P)){let O=wS(f),i=D,F=!1;if(typeof D==="function")i=D(c.get(s)),F=typeof i>"u";else F=O(c.get(s));if(F)continue;if(!c.get(s)&&!Object.keys(P).includes("required"))continue;if(!T[s])T[s]=[];if(f==="required"){T[s]=[String(i)];continue}T[s].push(String(i))}for(let[s,P]of Object.entries(this.refine(c.toJSON())??{})){if(!T[s])T[s]=[];T[s]=[...T[s]??[],P]}if(Object.keys(T).length>0)throw new Ps(T);return c}async input(){return this.validateInput(await this.parseBody())}async safeInput(){let c=await this.parseBody();try{return this.validateInput(c),{isValid:!0,errors:{},input:c}}catch(T){if(!(T instanceof Ps))throw T;return{isValid:!1,errors:T.errors,input:c}}}}function kc(c){return typeof c==="string"?[c]:c}function ys(c,T){let s=T?"attachment":"inline",P=c.replace(/["\\]/g,"").replace(/[^\x20-\x7e]/g,"_");return`${s}; filename="${P}"; filename*=UTF-8''${encodeURIComponent(c)}`}function WS(c){return"total"in c&&"partial"in c&&"body"in c}function fs(c){return new Response(null,{status:416,headers:{"Accept-Ranges":"bytes","Content-Range":ss(c),"Content-Length":"0","Cache-Control":"no-store"}})}async function IS(c){if(c instanceof Blob)return{body:c,start:0,end:c.size-1,total:c.size,partial:!1,type:c.type,name:c.name,download:!1,status:200,extraHeaders:{}};if(WS(c))return{body:c.body,start:c.start,end:c.end,total:c.total,partial:c.partial,type:c.type,name:c.name,download:!1,etag:c.etag,lastModified:c.lastModified,status:200,extraHeaders:{}};let T=c.file,s=T instanceof Blob?T:null,P=c.total??s?.size??-1;return{body:T,start:c.start??0,end:c.end??P-1,total:P,partial:c.partial??!1,type:c.type??s?.type??"",name:c.name??T?.name,download:c.download??!1,etag:c.etag,lastModified:c.lastModified,status:c.status??200,extraHeaders:c.headers??{}}}async function Pf(c,T){if(c instanceof Response)return c;if(!c)return new Response("Not found",{status:404});let s=await IS(c),{body:P,start:f,end:D,total:O,partial:i}=s;if(P instanceof Blob&&"exists"in P&&typeof P.exists==="function"){if(!await P.exists())return new Response("Not found",{status:404})}let{range:F}=T;if(F){if(O<=0)return fs(Math.max(O,0));if(!i){if(P instanceof Blob){let Z=Tf(F,O);if(!Z)return fs(O);P=P.slice(Z.start,Z.end+1),f=Z.start,D=Z.end,i=!0}}}let C=Boolean(F)&&i,S=C?206:s.status,M=new Headers;if(M.set("Accept-Ranges","bytes"),M.set("Content-Type",s.type||"application/octet-stream"),C)M.set("Content-Range",sf(f,D,O)),M.set("Content-Length",String(D-f+1));else if(O>=0)M.set("Content-Length",String(O));if(s.name)M.set("Content-Disposition",ys(s.name,s.download));if(s.etag)M.set("ETag",s.etag);if(s.lastModified)M.set("Last-Modified",s.lastModified.toUTCString());for(let[Z,A]of Object.entries(s.extraHeaders))M.set(Z,A);if((T.method??"GET").toUpperCase()==="HEAD"){if(P&&"cancel"in P&&typeof P.cancel==="function")await P.cancel();return new Response(null,{status:S,headers:M})}return new Response(P,{status:S,headers:M})}class zO extends V{error;constructor(c="Not authorized"){super("Authentication error");this.name="AuthenticationError",this.error=c,this.payload={api:{status:401,data:{error:this.error}},view:{}}}}class HO extends V{error;constructor(c="Insufficient permissions"){super("Authentication error");this.name="AuthenticationError",this.error=c,this.payload={api:{status:401,data:{error:this.error}},view:{}}}}class Bs extends V{total;constructor(c){super("Range not satisfiable");this.total=c;this.name="RangeNotSatisfiableError",this.payload={api:{status:416,data:{error:{message:"Range not satisfiable"}},headers:{"Content-Range":ss(c),"Accept-Ranges":"bytes","Cache-Control":"no-store"}},view:{}}}}class NO extends V{fileName;constructor(c){super("File not found");this.fileName=c;this.name="FileNotFoundError",this.payload={api:{status:404,data:{error:{message:"Not found"}},headers:{"Cache-Control":"no-store"}},view:{}}}}class Ds extends V{constructor(){super("Authentication error");this.name="AuthenticationError"}payload={api:{status:401,data:{error:"Authentication error"}},view:{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:"/auth/sign-in"}}}}function GS(c){return BO(c)}class ic{method;handler;methodName;__internal_brand="RouteHandler";middlewares=[];constructor(c,T,s){this.method=c;this.handler=T;this.methodName=s;this.handler=T,this.methodName=s,this.method=c}__internal_use(){return{run:this.run.bind(this),middlewares:this.middlewares}}run(c){if(GS(this.handler)){let T=new this.handler;return T[this.methodName].bind(T)()}return this.handler()}middleware(c){return this.middlewares=kc(c),this}}class VO{url;headers;__internal_brand="ProxyHandler";constructor(c,T){this.url=c;this.headers=T}run(){let c=new dc;return fetch(this.url,{method:c.rawRequest.method,headers:{...c.headers.toJSON(),...this.headers},body:c.rawRequest.body})}}class lO{constructor(...c){return new ic(...c)}}class pO extends ic{__internal_brand="StreamHandler";async run(c){let T=vc.getStore(),s=T?.req?.rawRequest,P=Ts(s?.headers.get("Range"));if(T)T.rangeRequest=P;try{let f=await super.run(c);return await Pf(f,{range:P,method:s?.method})}catch(f){if(f instanceof Bs)return fs(f.total);throw f}finally{if(T)T.rangeRequest=null}}}class vO{constructor(...c){return new pO(...c)}}class kO{__internal_brand="ResourceRoutes";first;second;constructor(c){this.first={get:new ic("GET",c,"list"),post:new ic("POST",c,"store")},this.second={get:new ic("GET",c,"show"),put:new ic("PUT",c,"update"),delete:new ic("DELETE",c,"delete")}}middleware(c){if(c.list)this.first.get.middleware(c.list);if(c.store)this.first.post.middleware(c.store);if(c.show)this.second.get.middleware(c.show);if(c.update)this.second.put.middleware(c.update);if(c.delete)this.second.delete.middleware(c.delete);return this}}class hO{static __brand="ApiRouter";routes={};middlewares=[];middleware(c){}get(c,T){return new ic("GET",c,T)}post(c,T){return new ic("POST",c,T)}put(c,T){return new ic("PUT",c,T)}patch(c,T){return new ic("PATCH",c,T)}delete(c,T){return new ic("DELETE",c,T)}resource(c){return new kO(c)}file(c,T){return new lO("GET",c,T)}stream(c,T){return new vO("GET",c,T)}proxy(c,T={}){return new VO(c,T)}}function oO(c,T){return c.replace(/:([^/]+[*?]?)/g,(s,P)=>{let f=P.endsWith("?")||P.endsWith("*"),D=f?P.slice(0,-1):P,O=T[D];if(O===void 0){if(f)return"";if(import.meta.env.DEV)throw Error(`Missing parameter: ${D}`);console.error(`Missing parameter: ${D} in URL: ${c}`)}return String(O)}).replace(/\/\//g,"/").replace(/\/$/,"")}class ff extends V{constructor(c,T=307){super("Redirect error");this.name="RedirectError",this.payload={api:{status:200,data:{},directive:{kind:"Redirect",path:c}},view:{status:T,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:c}}}}}class Df{static to(c,...T){let[s={}]=T,{search:P={},params:f={},permanent:D,status:O}={params:{},status:307,permanent:!1,...s},i=new URLSearchParams(P).toString();throw new ff([oO(c,f),i.toString()].filter(Boolean).join("?"),O??(D?301:307))}static external(c,T=307){throw new ff(c,T)}}class rO{kind="redirect";viewPath="REDIRECT";middlewares=[];featureGates=[];handler;constructor(c){if(!c)this.handler=()=>({});else if(typeof c==="function")this.handler=c;else{let[T,s]=c;this.handler=(P)=>{return new T()[s](P)}}}async run(c,T){let{destination:s,permanent:P=!1,status:f=307}=await this.handler(c);if(!s)throw Error(`Redirect destination is required see ${T}`);return Df.to(s,{permanent:P,status:f}),{}}middleware(c){return this.middlewares=kc(c),this}feature(c){return this.featureGates=[...this.featureGates,c],this}}async function bS(c,T){if(c instanceof Response)return c;let s=c instanceof Blob,P=s?c:c.file,f=s?c.name:c.name??c.file?.name,D=(s?c.type:c.type??c.file?.type)||"",O=s?!1:c.download??!1,i=s?200:c.status??200;if(!s)for(let[F,C]of Object.entries(c.headers??{}))T.set(F,C);if(P instanceof Blob&&"exists"in P&&typeof P.exists==="function"){if(!await P.exists())return new Response("Not found",{status:404})}if(T.set("Content-Type",D||"application/octet-stream"),P instanceof Blob)T.set("Content-Length",String(P.size));if(f)T.set("Content-Disposition",ys(f,O));return new Response(P instanceof Blob?P.stream():P,{status:i,headers:T})}class tO{kind="file";viewPath="FILE";middlewares=[];featureGates=[];handler;constructor(c){if(!c)this.handler=()=>null;else if(typeof c==="function")this.handler=c;else{let[T,s]=c;this.handler=(P)=>{return new T()[s](P)}}}async run(c,T){let s=await this.handler(c);if(!s)throw Error(`File route handler must return a file see ${T}`);return{FILE:s}}middleware(c){return this.middlewares=kc(c),this}feature(c){return this.featureGates=[...this.featureGates,c],this}}class uO{viewPath;middlewares=[];featureGates=[];handler;constructor(c,T){this.viewPath=c;if(!T)this.handler=()=>({});else if(typeof T==="function")this.handler=T;else{let[s,P]=T;this.handler=(f)=>{return new s()[P](f)}}}async run(c,T){let s=await this.handler(c);return{[this.viewPath]:{...s,breadcrumb:{label:s?.breadcrumb??"",href:T}}}}middleware(c){return this.middlewares=kc(c),this}feature(c){return this.featureGates=[...this.featureGates,c],this}}class nO{viewPath;children;middlewares=[];featureGates=[];alwaysRuns=!1;handler=()=>({});constructor(c,T,s){this.viewPath=c;if(typeof T==="function")this.handler=T,this.children=class extends Os{routes=s??{}};else if(Array.isArray(T)){let[P,f]=T;this.handler=(D)=>{return new P()[f](D)},this.children=class extends Os{routes=s??{}}}else this.children=class extends Os{routes=T},this.handler=()=>({})}async run(c,T){let s=await this.handler(c);return{[this.viewPath]:{...s,breadcrumb:{label:s?.breadcrumb??"",href:T}}}}alwaysRun(){return this.alwaysRuns=!0,this}middleware(c){return this.middlewares=kc(c),this}feature(c){return this.featureGates=[...this.featureGates,c],this}}class Os{middlewares=[];featureGates=[];routes={};view(c,T){return new uO(c,T)}file(c){return new tO(c)}redirect(c){return new rO(c)}layout(c,T,s){return new nO(c,T,s)}}class jc{req;config={};constructor(c){this.req=c}run(...c){return{}}static configure(c){let T=this;return class extends T{config=c}}}function qS(c){let T=c.headers.get("cookie");if(!T)return new Map;let s=new Map,P=T.split(";");for(let f of P){let[D,O]=f.split("=");s.set(D.trim(),O)}return s}function JS(c){return c}function KS(){return{aliases:{}}}import{randomBytes as SA}from"crypto";function Fc(c,T,s,P,f){return mc(T,ji(c,T),s,P,f)}function mc(c,T,s,P,f,D){let O=Mf(T,s,P);if(f&&T!==O)throw RangeError(uC(c,T,s,P,D));return O}function ji(c,T){let s=c[T];if(s===void 0)throw TypeError(HD(T));return s}function p(c){return c!==null&&/object|function/.test(typeof c)}function Mc(c,T=Map){let s=new T;return(P,...f)=>{if(s.has(P))return s.get(P);let D=c(P,...f);return s.set(P,D),D}}function wf(c){return AT({name:c},1)}function AT(c,T){return Gc((s)=>({value:s,configurable:1,writable:!T}),c)}function ai(c){return Gc((T)=>({get:T,configurable:1}),c)}function cP(c){return{[Symbol.toStringTag]:{value:c,configurable:1}}}function dT(c,T){let s={},P=c.length;for(let f of T)s[c[--P]]=f;return s}function Gc(c,T,s){let P={};for(let f in T)P[f]=c(T[f],f,s);return P}function as(c,T,s){let P={};for(let f=0;f<T.length;f++){let D=T[f];P[D]=c(D,f,s)}return P}function $S(c,T,s){let P={};for(let f=0;f<c.length;f++)P[T[f]]=s[c[f]];return P}function Ac(c,T){let s={};for(let P of c)s[P]=T[P];return s}function Wf(c,T){let s={};for(let P in T)c.has(P)||(s[P]=T[P]);return s}function If(c){c={...c};let T=Object.keys(c);for(let s of T)c[s]===void 0&&delete c[s];return c}function Ei(c,T){for(let s of T)if(!(s in c))return 0;return 1}function xi(c,T,s){for(let P of c)if(T[P]!==s[P])return 0;return 1}function mi(c,T,s){let P={...s};for(let f=0;f<T;f++)P[c[f]]=0;return P}function W(c,...T){return(...s)=>c(...T,...s)}function eO(c){return c[0].toUpperCase()+c.substring(1)}function Es(c){return c.slice().sort()}function vs(c,T){return String(T).padStart(c,"0")}function hc(c,T){return Math.sign(c-T)}function Mf(c,T,s){return Math.min(Math.max(c,T),s)}function yc(c,T){return[Math.floor(c/T),Fs(c,T)]}function Fs(c,T){return(c%T+T)%T}function tc(c,T){return[TP(c,T),Gf(c,T)]}function TP(c,T){return Math.trunc(c/T)||0}function Gf(c,T){return c%T||0}function zs(c){return Math.abs(c%1)===0.5}function wi(c,T,s){let P=0,f=0;for(let i=0;i<=T;i++){let F=c[s[i]],C=Xc[i],S=q/C,[M,Z]=tc(F,S);P+=Z*C,f+=M}let[D,O]=tc(P,q);return[f+D,O]}function sP(c,T,s){let P={};for(let f=T;f>=0;f--){let D=Xc[f];P[s[f]]=TP(c,D),c=Gf(c,D)}return P}function Wi(c){return c===I?gP:[]}function Ii(c){return c===I?Ks:[]}function Gi(c){return c===I?["year","day"]:[]}function bi(c){if(c!==void 0)return L(c)}function qi(c){if(c!==void 0)return bc(c)}function bf(c){if(c!==void 0)return xs(c)}function bc(c){return $i(xs(c))}function xs(c){return Ki(mM(c))}function qf(c){if(c==null)throw TypeError("Cannot be null or undefined");return c}function Ji(c,T){if(T==null)throw RangeError(HD(c));return T}function zc(c){if(!p(c))throw TypeError(tC);return c}function PP(c,T,s=c){if(typeof T!==c)throw TypeError(bs(s,T));return T}function Ki(c,T="number"){if(!Number.isInteger(c))throw RangeError(lS(T,c));return c||0}function $i(c,T="number"){if(c<=0)throw RangeError(pS(T,c));return c}function Jf(c){if(typeof c=="symbol")throw TypeError(oS);return String(c)}function ks(c,T){return p(c)?String(c):L(c,T)}function fP(c){if(typeof c=="string")return BigInt(c);if(typeof c!="bigint")throw TypeError(hS(c));return c}function Qi(c,T="number"){if(typeof c=="bigint")throw TypeError(kS(T));if(c=Number(c),!Number.isFinite(c))throw RangeError(vS(T,c));return c}function e(c,T){return Math.trunc(Qi(c,T))||0}function Xi(c,T){return Ki(Qi(c,T),T)}function ci(c,T){return $i(e(c,T),T)}function Kf(c,T){let[s,P]=tc(T,q),f=c+s,D=Math.sign(f);return D&&D===-Math.sign(P)&&(f-=D,P+=D*q),[f,P]}function UT(c,T,s=1){return Kf(c[0]+T[0]*s,c[1]+T[1]*s)}function YT(c,T){return Kf(c[0],c[1]+T)}function ac(c,T){return UT(T,c,-1)}function Tc(c,T){return hc(c[0],T[0])||hc(c[1],T[1])}function Ui(c,T,s){return Tc(c,T)===-1||Tc(c,s)===1}function DP(c,T=1){let s=BigInt(q/T);return[Number(c/s),Number(c%s)*T]}function LT(c,T=1){let s=q/T,[P,f]=tc(c,s);return[P,f*T]}function Yi(c,T=1){let[s,P]=c,f=Math.floor(P/T),D=q/T;return BigInt(s)*BigInt(D)+BigInt(f)}function Ec(c,T=1,s){let[P,f]=c,[D,O]=tc(f,T);return P*(q/T)+(D+(s?O/T:0))}function $f(c,T,s=yc){let[P,f]=c,[D,O]=s(f,T);return[P*(q/T)+D,O]}function Qf(c,T){let s=c.formatToParts(T),P={};for(let f of s)P[f.type]=f.value;return P}function Xf(c){return Fc(c,"isoYear",js,As,1),c.isoYear===js?Fc(c,"isoMonth",4,12,1):c.isoYear===As&&Fc(c,"isoMonth",1,9,1),c}function oc(c){return Hc({...c,...Ic,isoHour:12}),c}function Hc(c){let T=Fc(c,"isoYear",js,As,1),s=T===js?1:T===As?-1:0;return s&&xc(cc({...c,isoDay:c.isoDay+s,isoNanosecond:c.isoNanosecond-s})),c}function xc(c){if(!c||Ui(c,JM,qM))throw RangeError(LP);return c}function uc(c){return wi(c,5,$c)[1]}function OP(c){let[T,s]=yc(c,q);return[sP(s,5,$c),T]}function Li(c){return Ri(c)[0]}function Ri(c){return $f(c,Wc)}function sc(c){return gT(c.isoYear,c.isoMonth,c.isoDay,c.isoHour,c.isoMinute,c.isoSecond,c.isoMillisecond)}function cc(c){let T=sc(c);if(T!==void 0){let[s,P]=tc(T,Sc);return[s,P*Uc+(c.isoMicrosecond||0)*GT+(c.isoNanosecond||0)]}}function Uf(c,T){let[s,P]=OP(uc(c)-T);return xc(cc({...c,isoDay:c.isoDay+P,...s}))}function hs(...c){return gT(...c)/F0}function gT(...c){let[T,s]=_i(...c),P=T.valueOf();if(!isNaN(P))return P-s*Sc}function _i(c,T=1,s=1,P=0,f=0,D=0,O=0){let i=c===js?1:c===As?-1:0,F=new Date;return F.setUTCHours(P,f,D,O),F.setUTCFullYear(c,T-1,s+i),[F,i]}function ec(c,T){let[s,P]=YT(c,T);P<0&&(P+=q,s-=1);let[f,D]=yc(P,Uc),[O,i]=yc(D,GT);return iP(s*Sc+f,O,i)}function iP(c,T=0,s=0){let P=Math.ceil(Math.max(0,Math.abs(c)-bM)/Sc)*Math.sign(c),f=new Date(c-P*Sc);return dT(BP,[f.getUTCFullYear(),f.getUTCMonth()+1,f.getUTCDate()+P,f.getUTCHours(),f.getUTCMinutes(),f.getUTCSeconds(),f.getUTCMilliseconds(),T,s])}function di(c){return[c.isoYear,c.isoMonth,c.isoDay]}function gi(){return gc}function Yf(c,T){switch(T){case 2:return Lf(c)?29:28;case 4:case 6:case 9:case 11:return 30}return 31}function yi(c){return Lf(c)?366:365}function Lf(c){return c%4==0&&(c%100!=0||c%400==0)}function Bi(c){let[T,s]=_i(c.isoYear,c.isoMonth,c.isoDay);return Fs(T.getUTCDay()-s,7)||7}function zi({isoYear:c}){return c<1?["bce",1-c]:["ce",c]}function QS(c){let T=sc(c);if(T<$M)return zi(c);let s=Qf(fO(RT),T),{era:P,eraYear:f}=tF(s,RT);return[P,f]}function FP(c){return jT(c),CP(c,1),c}function jT(c){return Hi(c,1),c}function Ti(c){return xi(tD,c,Hi(c))}function Hi(c,T){let{isoYear:s}=c,P=Fc(c,"isoMonth",1,gi(),T);return{isoYear:s,isoMonth:P,isoDay:Fc(c,"isoDay",1,Yf(s,P),T)}}function CP(c,T){return dT($c,[Fc(c,"isoHour",0,23,T),Fc(c,"isoMinute",0,59,T),Fc(c,"isoSecond",0,59,T),Fc(c,"isoMillisecond",0,999,T),Fc(c,"isoMicrosecond",0,999,T),Fc(c,"isoNanosecond",0,999,T)])}function G(c){return c===void 0?0:J0(zc(c))}function ms(c,T=0){c=qc(c);let s=K0(c),P=yM(c,T);return[J0(c),P,s]}function Rf(c){return K0(qc(c))}function Ni(c){return c=qc(c),eD(c,9,6,1)}function yT(c,T,s,P=9,f=0,D=4){T=qc(T);let O=eD(T,P,f),i=gf(T),F=Qs(T,D),C=$s(T,P,f,1);return O==null?O=Math.max(s,C):vi(O,C),i=yf(i,C,1),c&&(F=((S)=>S<4?(S+2)%4:S)(F)),[O,C,i,F]}function SP(c,T=6,s){let P=gf(c=Bf(c,es)),f=Qs(c,7),D=$s(c,T);return D=Ji(es,D),P=yf(P,D,void 0,s),[D,P,f]}function _f(c){return cO(qc(c))}function Vi(c,T){return df(qc(c),T)}function df(c,T=4){let s=pi(c);return[Qs(c,4),...li($s(c,T),s)]}function li(c,T){return c!=null?[Xc[c],c<4?9-3*c:-1]:[T===void 0?1:10**(9-T),T]}function gf(c){let T=c[Cs];return T===void 0?1:e(T,Cs)}function yf(c,T,s,P){let f=P?q:Xc[T+1];if(f){let D=Xc[T];if(f%((c=mc(Cs,c,1,f/D-(P?0:1),1))*D))throw RangeError(bs(Cs,c))}else c=mc(Cs,c,1,s?1e9:1,1);return c}function pi(c){let T=c[Sf];if(T!==void 0){if(typeof T!="number"){if(Jf(T)==="auto")return;throw RangeError(bs(Sf,T))}T=mc(Sf,Math.floor(T),0,9,1)}return T}function qc(c){return c===void 0?{}:zc(c)}function Bf(c,T){return typeof c=="string"?{[T]:c}:zc(c)}function g(c){if(c!==void 0){if(p(c))return Object.assign(Object.create(null),c);throw TypeError(tC)}}function MP(c,T){return c&&Object.assign(Object.create(null),c,{overflow:XM[T]})}function zf(c,T,s=9,P=0,f){let D=T[c];if(D===void 0)return f?P:void 0;if(D=Jf(D),D==="auto")return f?P:null;let O=af[D];if(O===void 0&&(O=IM[D]),O===void 0)throw RangeError(c0(c,D,af));return mc(c,O,P,s,1,Js),O}function aT(c,T,s,P=0){let f=s[c];if(f===void 0)return P;let D=Jf(f),O=T[D];if(O===void 0)throw RangeError(c0(c,D,T));return O}function vi(c,T){if(T>c)throw RangeError(AM)}function v(c){return{branding:HP,epochNanoseconds:c}}function r(c,T,s){return{branding:pc,calendar:s,timeZone:T,epochNanoseconds:c}}function y(c,T=c.calendar){return{branding:qT,calendar:T,...Ac(I0,c)}}function B(c,T=c.calendar){return{branding:bT,calendar:T,...Ac(uD,c)}}function MT(c,T=c.calendar){return{branding:vT,calendar:T,...Ac(uD,c)}}function os(c,T=c.calendar){return{branding:kT,calendar:T,...Ac(uD,c)}}function Jc(c){return{branding:zP,...Ac(W0,c)}}function X(c){return{branding:NP,sign:cT(c),...Ac(hD,c)}}function ki(c){return Li(c.epochNanoseconds)}function ZP(c){return $f(c.epochNanoseconds,Uc)[0]}function hi(c){return Yi(c.epochNanoseconds,GT)}function oi(c){return Yi(c.epochNanoseconds)}function ri(c){return c.epochNanoseconds}function h(c){return typeof c=="string"?c:L(c.id)}function BT(c,T){return c===T||h(c)===h(T)}function ti(c,T,s,P,f){let D=ZT(P),[O,i]=((E,m)=>{let x=m((E=Bf(E,mf))[b0]),w=gM(E);return w=Ji(mf,w),[w,x]})(f,c);if(Ms(Math.max(O,D),i))return si(P,O);if(!i)throw RangeError(RP);let[F,C,S]=mP(T,s,i),M=CD(S),Z=wP(S),A=SD(S),j=Z(C,F,P),a=A(C,F,j,O);return Ms(O,i)?si(a,O):((E,m,x,w,d,U,Q)=>{let Y=cT(E),[k,N]=Hf(w,rD(x,E),x,Y,d,U,Q),eT=Nf(m,k,N);return E[b[x]]+eT*Y})(a,M(j),O,C,F,M,Z)}function si(c,T){return Ec(l(c),Xc[T],1)}function Hf(c,T,s,P,f,D,O){let i=b[s],F={...T,[i]:T[i]+P},C=O(c,f,T),S=O(c,f,F);return[D(C),D(S)]}function Nf(c,T,s){let P=Ec(ac(T,s));if(!P)throw RangeError(qs);return Ec(ac(T,c))/P}function ui(c,T){let[s,P,f]=SP(T,5,1);return v(jP(c.epochNanoseconds,s,P,f,1))}function ni(c,T,s){let{epochNanoseconds:P,timeZone:f,calendar:D}=T,[O,i,F]=SP(s);if(O===0&&i===1)return T;let C=c(f);if(O===6)P=((S,M,Z,A)=>{let j=Pc(Z,M),[a,E]=S(j),m=Z.epochNanoseconds,x=Zc(M,a),w=Zc(M,E);if(Ui(m,x,w))throw RangeError(qs);return iF(Nf(m,x,w),A)?w:x})(DF,C,T,F);else{let S=C.getOffsetNanosecondsFor(P);P=xT(C,PF(ec(P,S),O,i,F),S,2,0,1)}return r(P,f,D)}function ei(c,T){return y(PF(c,...SP(T)),c.calendar)}function cF(c,T){let[s,P,f]=SP(T,5);var D;return Jc((D=f,Vf(c,ws(s,P),D)[0]))}function TF(c,T){let s=c(T.timeZone),P=Pc(T,s),[f,D]=DF(P),O=Ec(ac(Zc(s,f),Zc(s,D)),dP,1);if(O<=0)throw RangeError(qs);return O}function sF(c,T){let{timeZone:s,calendar:P}=T,f=((D,O,i)=>Zc(O,D(Pc(i,O))))(OF,c(s),T);return r(f,s,P)}function PF(c,T,s,P){return fF(c,ws(T,s),P)}function fF(c,T,s){let[P,f]=Vf(c,T,s);return Hc({...mT(c,f),...P})}function Vf(c,T,s){return OP(nc(uc(c),T,s))}function rs(c){return nc(c,_P,7)}function ws(c,T){return Xc[c]*T}function DF(c){let T=OF(c);return[T,mT(T,1)]}function OF(c){return GM(6,c)}function XS(c,T,s){let P=Math.min(ZT(c),6);return HT(aP(l(c,P),T,s),P)}function AP(c,T,s,P,f,D,O,i,F,C){if(P===0&&f===1)return c;let S=Ms(P,i)?WP(i)&&P<6&&s>=6?YS:US:LS,[M,Z,A]=S(c,T,s,P,f,D,O,i,F,C);return A&&P!==7&&(M=((j,a,E,m,x,w,d,U)=>{let Q=cT(j);for(let Y=m+1;Y<=E;Y++){if(Y===7&&E!==7)continue;let k=rD(Y,j);k[b[Y]]+=Q;let N=Ec(ac(d(U(x,w,k)),a));if(N&&Math.sign(N)!==Q)break;j=k}return j})(M,Z,s,Math.max(6,P),O,i,F,C)),M}function jP(c,T,s,P,f){if(T===6){let D=((O)=>O[0]+O[1]/q)(c);return[nc(D,s,P),0]}return aP(c,ws(T,s),P,f)}function aP(c,T,s,P){let[f,D]=c;P&&D<0&&(D+=q,f-=1);let[O,i]=yc(nc(D,T,s),q);return Kf(f+O,i)}function nc(c,T,s){return iF(c/T,s)*T}function iF(c,T){return HM[T](c)}function US(c,T,s,P,f,D){let O=cT(c),i=l(c),F=jP(i,P,f,D),C=ac(i,F),S=Math.sign(F[0]-i[0])===O,M=HT(F,Math.min(s,6));return[{...c,...M},UT(T,C),S]}function YS(c,T,s,P,f,D,O,i,F,C){let S=cT(c),M=Ec(l(c,5)),Z=ws(P,f),A=nc(M,Z,D),[j,a]=Hf(O,{...c,...oD},6,S,i,F,C),E=A-Ec(ac(j,a)),m=0;E&&Math.sign(E)!==S?T=YT(j,A):(m+=S,A=nc(E,Z,D),T=YT(a,A));let x=GP(A);return[{...c,...x,days:c.days+m},T,Boolean(m)]}function LS(c,T,s,P,f,D,O,i,F,C){let S=cT(c),M=b[P],Z=rD(P,c);P===7&&(c={...c,weeks:c.weeks+Math.trunc(c.days/7)});let A=TP(c[M],f)*f;Z[M]=A;let[j,a]=Hf(O,Z,P,f*S,i,F,C),E=A+Nf(T,j,a)*S*f,m=nc(E,f,D),x=Math.sign(m-E)===S;return Z[M]=m,[Z,x?a:j,x]}function lf(c,T,s,P){let[f,D,O,i]=((C)=>{let S=df(C=qc(C));return[C.timeZone,...S]})(P),F=f!==void 0;return((C,S,M,Z,A,j)=>{M=aP(M,A,Z,1);let a=S.getOffsetNanosecondsFor(M);return tf(ec(M,a),j)+(C?ET(rs(a)):"Z")})(F,T(F?c(f):JT),s.epochNanoseconds,D,O,i)}function pf(c,T,s){let[P,f,D,O,i,F]=((C)=>{C=qc(C);let S=cO(C),M=pi(C),Z=zM(C),A=Qs(C,4),j=$s(C,4);return[S,BM(C),Z,A,...li(j,M)]})(s);return((C,S,M,Z,A,j,a,E,m,x)=>{Z=aP(Z,m,E,1);let w=C(M).getOffsetNanosecondsFor(Z);return tf(ec(Z,w),x)+ET(rs(w),a)+((d,U)=>U!==1?"["+(U===2?"!":"")+h(d)+"]":"")(M,j)+uf(S,A)})(c,T.calendar,T.timeZone,T.epochNanoseconds,P,f,D,O,i,F)}function vf(c,T){let[s,P,f,D]=((C)=>(C=qc(C),[cO(C),...df(C)]))(T);return O=c.calendar,i=s,F=D,tf(fF(c,f,P),F)+uf(O,i);var O,i,F}function kf(c,T){return s=c.calendar,P=c,f=_f(T),ts(P)+uf(s,f);var s,P,f}function hf(c,T){return FF(c.calendar,CF,c,_f(T))}function of(c,T){return FF(c.calendar,RS,c,_f(T))}function rf(c,T){let[s,P,f]=Vi(T);return D=f,SF(Vf(c,P,s)[0],D);var D}function EP(c,T){let[s,P,f]=Vi(T,3);return P>1&&(c={...c,...XS(c,P,s)}),((D,O)=>{let{sign:i}=D,F=i===-1?fc(D):D,{hours:C,minutes:S}=F,[M,Z]=$f(l(F,3),Wc,tc);mF(M);let A=nf(Z,O),j=O>=0||!i||A;return(i<0?"-":"")+"P"+Pi({Y:ST(F.years),M:ST(F.months),W:ST(F.weeks),D:ST(F.days)})+(C||S||M||j?"T"+Pi({H:ST(C),M:ST(S),S:ST(M,j)+A}):"")})(c,f)}function FF(c,T,s,P){let f=h(c),D=P>1||P===0&&f!==I;return P===1?f===I?T(s):ts(s):D?ts(s)+MF(f,P===2):T(s)}function Pi(c){let T=[];for(let s in c){let P=c[s];P&&T.push(P,s)}return T.join("")}function tf(c,T){return ts(c)+"T"+SF(c,T)}function ts(c){return CF(c)+"-"+wc(c.isoDay)}function CF(c){let{isoYear:T}=c;return(T<0||T>9999?ZF(T)+vs(6,Math.abs(T)):vs(4,T))+"-"+wc(c.isoMonth)}function RS(c){return wc(c.isoMonth)+"-"+wc(c.isoDay)}function SF(c,T){let s=[wc(c.isoHour),wc(c.isoMinute)];return T!==-1&&s.push(wc(c.isoSecond)+((P,f,D,O)=>nf(P*Uc+f*GT+D,O))(c.isoMillisecond,c.isoMicrosecond,c.isoNanosecond,T)),s.join(":")}function ET(c,T=0){if(T===1)return"";let[s,P]=yc(Math.abs(c),dP),[f,D]=yc(P,_P),[O,i]=yc(D,Wc);return ZF(c)+wc(s)+":"+wc(f)+(O||i?":"+wc(O)+nf(i):"")}function uf(c,T){if(T!==1){let s=h(c);if(T>1||T===0&&s!==I)return MF(s,T===2)}return""}function MF(c,T){return"["+(T?"!":"")+"u-ca="+c+"]"}function nf(c,T){let s=vs(9,c);return s=T===void 0?s.replace(lM,""):s.slice(0,T),s?"."+s:""}function ZF(c){return c<0?"-":"+"}function ST(c,T){return c||T?c.toLocaleString("fullwide",{useGrouping:0}):""}function _S(c,T){let{epochNanoseconds:s}=c,P=(T.getOffsetNanosecondsFor?T:T(c.timeZone)).getOffsetNanosecondsFor(s),f=ec(s,P);return{calendar:c.calendar,...f,offsetNanoseconds:P}}function AF(c,T){let s=Pc(T,c);return{calendar:T.calendar,...Ac(I0,s),offset:ET(s.offsetNanoseconds),timeZone:T.timeZone}}function xT(c,T,s,P=0,f=0,D,O){if(s!==void 0&&P===1&&(P===1||O))return Uf(T,s);let i=c.getPossibleInstantsFor(T);if(s!==void 0&&P!==3){let F=((C,S,M,Z)=>{let A=cc(S);Z&&(M=rs(M));for(let j of C){let a=Ec(ac(j,A));if(Z&&(a=rs(a)),a===M)return j}})(i,T,s,D);if(F!==void 0)return F;if(P===0)throw RangeError(iM)}return O?cc(T):Zc(c,T,f,i)}function Zc(c,T,s=0,P=c.getPossibleInstantsFor(T)){if(P.length===1)return P[0];if(s===1)throw RangeError(FM);if(P.length)return P[s===3?1:0];let f=cc(T),D=((i,F)=>{let C=i.getOffsetNanosecondsFor(YT(F,-q));return cD(i.getOffsetNanosecondsFor(YT(F,q))-C)})(c,f),O=D*(s===2?-1:1);return(P=c.getPossibleInstantsFor(ec(f,O)))[s===2?0:P.length-1]}function ef(c){if(Math.abs(c)>=q)throw RangeError(DM);return c}function cD(c){if(c>q)throw RangeError(OM);return c}function TD(c,T,s){return v(xc(UT(T.epochNanoseconds,((P)=>{if(wF(P))throw RangeError(MM);return l(P,5)})(c?fc(s):s))))}function sD(c,T,s,P,f,D=Object.create(null)){let O=T(P.timeZone),i=c(P.calendar);return{...P,...iD(O,i,P,s?fc(f):f,D)}}function PD(c,T,s,P,f=Object.create(null)){let{calendar:D}=s;return y(FD(c(D),s,T?fc(P):P,f),D)}function fD(c,T,s,P,f){let{calendar:D}=s;return B(xP(c(D),s,T?fc(P):P,f),D)}function DD(c,T,s,P,f=Object.create(null)){let D=s.calendar,O=c(D),i=Ss(O,s);T&&(P=IP(P)),P.sign<0&&(i=O.dateAdd(i,{...o,months:1}),i=mT(i,-1));let F=O.dateAdd(i,P,f);return MT(Ss(O,F),D)}function OD(c,T,s){return Jc(jF(T,c?fc(s):s)[0])}function iD(c,T,s,P,f){let D=l(P,5),O=s.epochNanoseconds;if(wF(P)){let i=Pc(s,c);O=UT(Zc(c,{...xP(T,i,{...P,...oD},f),...Ac($c,i)}),D)}else O=UT(O,D),G(f);return{epochNanoseconds:xc(O)}}function FD(c,T,s,P){let[f,D]=jF(T,s);return Hc({...xP(c,T,{...s,...oD,days:s.days+D},P),...f})}function xP(c,T,s,P){if(s.years||s.months||s.weeks)return c.dateAdd(T,s,P);G(P);let f=s.days+l(s,5)[0];return f?oc(mT(T,f)):T}function Ss(c,T,s=1){return mT(T,s-c.day(T))}function jF(c,T){let[s,P]=l(T,5),[f,D]=OP(uc(c)+P);return[f,s+D]}function mT(c,T){return T?{...c,...iP(sc(c)+T*Sc)}:c}function mP(c,T,s){let P=c(s.calendar);return WP(s)?[s,P,T(s.timeZone)]:[{...s,...Ic},P]}function CD(c){return c?ri:cc}function wP(c){return c?W(iD,c):FD}function SD(c){return c?W(gS,c):yS}function WP(c){return c&&c.epochNanoseconds}function Ms(c,T){return c<=6-(WP(T)?1:0)}function MD(c,T,s,P,f,D,O){let i=c(qc(O).relativeTo),F=Math.max(ZT(f),ZT(D));if(Ms(F,i))return X(zT(((a,E,m,x)=>{let w=UT(l(a),l(E),x?-1:1);if(!Number.isFinite(w[0]))throw RangeError(LP);return{...o,...HT(w,m)}})(f,D,F,P)));if(!i)throw RangeError(RP);P&&(D=fc(D));let[C,S,M]=mP(T,s,i),Z=wP(M),A=SD(M),j=Z(S,C,f);return X(A(S,C,Z(S,j,D),F))}function aF(c,T,s,P,f){let D=ZT(P),[O,i,F,C,S]=((Q,Y,k)=>{Q=Bf(Q,es);let N=eD(Q),eT=k(Q[b0]),cs=gf(Q),jS=Qs(Q,7),CT=$s(Q);if(N===void 0&&CT===void 0)throw RangeError(ZM);return CT==null&&(CT=0),N==null&&(N=Math.max(CT,Y)),vi(N,CT),cs=yf(cs,CT,1),[N,CT,cs,jS,eT]})(f,D,c),M=Math.max(D,O);if(!WP(S)&&M<=6)return X(zT(((Q,Y,k,N,eT)=>{let cs=jP(l(Q),k,N,eT);return{...o,...HT(cs,Y)}})(P,O,i,F,C)));if(!S)throw RangeError(RP);let[Z,A,j]=mP(T,s,S),a=CD(j),E=wP(j),m=SD(j),x=E(A,Z,P),w=m(A,Z,x,O),d=P.sign,U=cT(w);if(d&&U&&d!==U)throw RangeError(qs);return U&&(w=AP(w,a(x),O,i,F,C,A,Z,a,E)),X(w)}function EF(c){return c.sign===-1?IP(c):c}function IP(c){return X(fc(c))}function fc(c){let T={};for(let s of b)T[s]=-1*c[s]||0;return T}function xF(c){return!c.sign}function cT(c,T=b){let s=0;for(let P of T){let f=Math.sign(c[P]);if(f){if(s&&s!==f)throw RangeError(SM);s=f}}return s}function zT(c){for(let T of WM)mc(T,c[T],-Si,Si,1);return mF(Ec(l(c),Wc)),c}function mF(c){if(!Number.isSafeInteger(c))throw RangeError(CM)}function l(c,T=6){return wi(c,T,b)}function HT(c,T=6){let[s,P]=c,f=sP(P,T,b);if(f[b[T]]+=s*(q/Xc[T]),!Number.isFinite(f[b[T]]))throw RangeError(LP);return f}function GP(c,T=5){return sP(c,T,b)}function wF(c){return Boolean(cT(c,w0))}function ZT(c){let T=9;for(;T>0&&!c[b[T]];T--);return T}function dS(c,T){return[c,T]}function fi(c){let T=Math.floor(c/ls)*ls;return[T,T+ls]}function WF(c){let T=TT(c=ks(c));if(!T)throw RangeError(Cc(c));let s;if(T.m)s=0;else{if(!T.offset)throw RangeError(Cc(c));s=NT(T.offset)}return T.timeZone&&aD(T.timeZone,1),v(Uf(FP(T),s))}function IF(c){let T=TT(L(c));if(!T)throw RangeError(Cc(c));if(T.timeZone)return UF(T,T.offset?NT(T.offset):void 0);if(T.m)throw RangeError(Cc(c));return LF(T)}function GF(c,T){let s=TT(L(c));if(!s||!s.timeZone)throw RangeError(Cc(c));let{offset:P}=s,f=P?NT(P):void 0,[,D,O]=ms(T);return UF(s,f,D,O)}function NT(c){let T=aD(c);if(T===void 0)throw RangeError(Cc(c));return T}function bF(c){let T=TT(L(c));if(!T||T.m)throw RangeError(Cc(c));return y(YF(T))}function bP(c){let T=TT(L(c));if(!T||T.m)throw RangeError(Cc(c));return B(T.p?YF(T):LF(T))}function qF(c,T){let s=AD(L(T));if(s)return ZD(s),MT(Xf(jT(s)));let P=bP(T);return MT(Ss(c(P.calendar),P))}function ZD(c){if(c.calendar!==I)throw RangeError(Bc(c.calendar))}function JF(c,T){let s=jD(L(T));if(s)return ZD(s),os(jT(s));let P=bP(T),{calendar:f}=P,D=c(f),[O,i,F]=D.h(P),[C,S]=D.I(O,i),[M,Z]=D.N(C,S,F);return os(oc(D.P(M,Z,F)),f)}function KF(c){let T,s=((P)=>{let f=oM.exec(P);return f?(qP(f[10]),dF(f)):void 0})(L(c));if(!s){if(s=TT(c),!s)throw RangeError(Cc(c));if(!s.p)throw RangeError(Cc(c));if(s.m)throw RangeError(Bc("Z"));ZD(s)}if((T=AD(c))&&Ti(T))throw RangeError(Cc(c));if((T=jD(c))&&Ti(T))throw RangeError(Cc(c));return Jc(CP(s,1))}function $F(c){let T=((s)=>{let P=uM.exec(s);return P?((f)=>{function D(S,M,Z){let A=0,j=0;if(Z&&([A,F]=yc(F,Xc[Z])),S!==void 0){if(i)throw RangeError(Bc(S));j=((a)=>{let E=parseInt(a);if(!Number.isFinite(E))throw RangeError(Bc(a));return E})(S),O=1,M&&(F=ED(M)*(Xc[Z]/Wc),i=1)}return A+j}let O=0,i=0,F=0,C={...dT(b,[D(f[2]),D(f[3]),D(f[4]),D(f[5]),D(f[6],f[7],5),D(f[8],f[9],4),D(f[10],f[11],3)]),...sP(F,2,b)};if(!O)throw RangeError(nC(b));return xD(f[1])<0&&(C=fc(C)),C})(P):void 0})(L(c));if(!T)throw RangeError(Cc(c));return X(zT(T))}function QF(c){let T=TT(c)||AD(c)||jD(c);return T?T.calendar:c}function XF(c){let T=TT(c);return T&&(T.timeZone||T.m&&JT||T.offset)||c}function UF(c,T,s=0,P=0){let f=JP(c.timeZone),D=VP(f);return r(xT(D,FP(c),T,s,P,!D.v,c.m),f,Ws(c.calendar))}function YF(c){return RF(Hc(FP(c)))}function LF(c){return RF(oc(jT(c)))}function RF(c){return{...c,calendar:Ws(c.calendar)}}function TT(c){let T=hM.exec(c);return T?((s)=>{let P=s[10],f=(P||"").toUpperCase()==="Z";return{isoYear:_F(s),isoMonth:parseInt(s[4]),isoDay:parseInt(s[5]),...dF(s.slice(5)),...qP(s[16]),p:Boolean(s[6]),m:f,offset:f?void 0:P}})(T):void 0}function AD(c){let T=vM.exec(c);return T?((s)=>({isoYear:_F(s),isoMonth:parseInt(s[4]),isoDay:1,...qP(s[5])}))(T):void 0}function jD(c){let T=kM.exec(c);return T?((s)=>({isoYear:_T,isoMonth:parseInt(s[1]),isoDay:parseInt(s[2]),...qP(s[3])}))(T):void 0}function aD(c,T){let s=rM.exec(c);return s?((P,f)=>{let D=P[4]||P[5];if(f&&D)throw RangeError(Bc(D));return ef((XT(P[2])*dP+XT(P[3])*_P+XT(P[4])*Wc+ED(P[5]||""))*xD(P[1]))})(s,T):void 0}function _F(c){let T=xD(c[1]),s=parseInt(c[2]||c[3]);if(T<0&&!s)throw RangeError(Bc(-0));return T*s}function dF(c){let T=XT(c[3]);return{...OP(ED(c[4]||""))[0],isoHour:XT(c[1]),isoMinute:XT(c[2]),isoSecond:T===60?59:T}}function qP(c){let T,s,P=[];if(c.replace(tM,(f,D,O)=>{let i=Boolean(D),[F,C]=O.split("=").reverse();if(C){if(C==="u-ca")P.push(F),T||(T=i);else if(i||/[A-Z]/.test(C))throw RangeError(Bc(f))}else{if(s)throw RangeError(Bc(f));s=F}return""}),P.length>1&&T)throw RangeError(Bc(c));return{timeZone:s,calendar:P[0]||I}}function ED(c){return parseInt(c.padEnd(9,"0"))}function VT(c){return new RegExp(`^${c}$`,"i")}function xD(c){return c&&c!=="+"?-1:1}function XT(c){return c===void 0?0:parseInt(c)}function gF(c){return JP(L(c))}function JP(c){let T=mD(c);return typeof T=="number"?ET(T):T?((s)=>{if(eM.test(s))throw RangeError(fM);return s.toLowerCase().split("/").map((P,f)=>(P.length<=3||/\d/.test(P))&&!/etc|yap/.test(P)?P.toUpperCase():P.replace(/baja|dumont|[a-z]+/g,(D,O)=>D.length<=2&&!f||D==="in"||D==="chat"?D.toUpperCase():D.length>2||!O?eO(D).replace(/island|noronha|murdo|rivadavia|urville/,eO):D)).join("/")})(c):JT}function Di(c){let T=mD(c);return typeof T=="number"?T:T?T.resolvedOptions().timeZone:JT}function mD(c){let T=aD(c=c.toUpperCase(),1);return T!==void 0?T:c!==JT?nM(c):void 0}function wD(c,T){return Tc(c.epochNanoseconds,T.epochNanoseconds)}function WD(c,T){return Tc(c.epochNanoseconds,T.epochNanoseconds)}function yF(c,T,s,P,f,D){let O=c(qc(D).relativeTo),i=Math.max(ZT(P),ZT(f));if(xi(b,P,f))return 0;if(Ms(i,O))return Tc(l(P),l(f));if(!O)throw RangeError(RP);let[F,C,S]=mP(T,s,O),M=CD(S),Z=wP(S);return Tc(M(Z(C,F,P)),M(Z(C,F,f)))}function ID(c,T){return wT(c,T)||KP(c,T)}function wT(c,T){return hc(sc(c),sc(T))}function KP(c,T){return hc(uc(c),uc(T))}function BF(c,T){return!wD(c,T)}function zF(c,T){return!WD(c,T)&&!!$P(c.timeZone,T.timeZone)&&BT(c.calendar,T.calendar)}function HF(c,T){return!ID(c,T)&&BT(c.calendar,T.calendar)}function NF(c,T){return!wT(c,T)&&BT(c.calendar,T.calendar)}function VF(c,T){return!wT(c,T)&&BT(c.calendar,T.calendar)}function lF(c,T){return!wT(c,T)&&BT(c.calendar,T.calendar)}function pF(c,T){return!KP(c,T)}function $P(c,T){if(c===T)return 1;let s=h(c),P=h(T);if(s===P)return 1;try{return Di(s)===Di(P)}catch(f){}}function GD(c,T,s,P){let f=yT(c,g(P),3,5),D=QP(T.epochNanoseconds,s.epochNanoseconds,...f);return X(c?fc(D):D)}function bD(c,T,s,P,f,D){let O=UP(P.calendar,f.calendar),i=g(D),[F,C,S,M]=yT(s,i,5),Z=P.epochNanoseconds,A=f.epochNanoseconds,j=Tc(A,Z),a;if(j)if(F<6)a=QP(Z,A,F,C,S,M);else{let E=T(((x,w)=>{if(!$P(x,w))throw RangeError(f0);return x})(P.timeZone,f.timeZone)),m=c(O);a=kF(m,E,P,f,j,F,i),a=AP(a,A,F,C,S,M,m,P,ri,W(iD,E))}else a=o;return X(s?fc(a):a)}function qD(c,T,s,P,f){let D=UP(s.calendar,P.calendar),O=g(f),[i,F,C,S]=yT(T,O,6),M=cc(s),Z=cc(P),A=Tc(Z,M),j;if(A)if(i<=6)j=QP(M,Z,i,F,C,S);else{let a=c(D);j=hF(a,s,P,A,i,O),j=AP(j,Z,i,F,C,S,a,s,cc,FD)}else j=o;return X(T?fc(j):j)}function JD(c,T,s,P,f){let D=UP(s.calendar,P.calendar),O=g(f);return vF(T,()=>c(D),s,P,...yT(T,O,6,9,6),O)}function KD(c,T,s,P,f){let D=UP(s.calendar,P.calendar),O=g(f),i=yT(T,O,9,9,8),F=c(D);return vF(T,()=>F,Ss(F,s),Ss(F,P),...i,O)}function vF(c,T,s,P,f,D,O,i,F){let C=cc(s),S=cc(P),M;if(Tc(S,C))if(f===6)M=QP(C,S,f,D,O,i);else{let Z=T();M=Z.dateUntil(s,P,f,F),D===6&&O===1||(M=AP(M,S,f,D,O,i,Z,s,cc,xP))}else M=o;return X(c?fc(M):M)}function $D(c,T,s,P){let f=g(P),[D,O,i,F]=yT(c,f,5,5),C=nc(QD(T,s),ws(O,i),F),S={...o,...GP(C,D)};return X(c?fc(S):S)}function gS(c,T,s,P,f,D){let O=Tc(P.epochNanoseconds,s.epochNanoseconds);return O?f<6?oF(s.epochNanoseconds,P.epochNanoseconds,f):kF(T,c,s,P,O,f,D):o}function yS(c,T,s,P,f){let D=cc(T),O=cc(s),i=Tc(O,D);return i?P<=6?oF(D,O,P):hF(c,T,s,i,P,f):o}function kF(c,T,s,P,f,D,O){let[i,F,C]=((Z,A,j,a)=>{function E(){return Y={...mT(w,U++*-a),...x},k=Zc(Z,Y),Tc(d,k)===-a}let m=Pc(A,Z),x=Ac($c,m),w=Pc(j,Z),d=j.epochNanoseconds,U=0,Q=QD(m,w),Y,k;if(Math.sign(Q)===-a&&U++,E()&&(a===-1||E()))throw RangeError(qs);let N=Ec(ac(k,d));return[m,Y,N]})(T,s,P,f);var S,M;return{...D===6?(S=i,M=F,{...o,days:rF(S,M)}):c.dateUntil(i,F,D,O),...GP(C)}}function hF(c,T,s,P,f,D){let[O,i,F]=((C,S,M)=>{let Z=S,A=QD(C,S);return Math.sign(A)===-M&&(Z=mT(S,-M),A+=q*M),[C,Z,A]})(T,s,P);return{...c.dateUntil(O,i,f,D),...GP(F)}}function QP(c,T,s,P,f,D){return{...o,...HT(jP(ac(c,T),P,f,D),s)}}function oF(c,T,s){return{...o,...HT(ac(c,T),s)}}function rF(c,T){return XP(sc(c),sc(T))}function XP(c,T){return Math.trunc((T-c)/Sc)}function QD(c,T){return uc(T)-uc(c)}function UP(c,T){if(!BT(c,T))throw RangeError(lD);return c}function BS(c){function T(f){return((D,O)=>({...tF(D,O),F:D.month,day:parseInt(D.day)}))(Qf(s,f),P)}let s=fO(c),P=us(c);return{id:c,O:zS(T),B:HS(T)}}function zS(c){return Mc((T)=>{let s=sc(T);return c(s)},WeakMap)}function HS(c){let T=c(0).year-KM;return Mc((s)=>{let P,f=gT(s-T),D=[],O=[];do f+=400*Sc;while((P=c(f)).year<=s);do f+=(1-P.day)*Sc,P.year===s&&(D.push(f),O.push(P.F)),f-=Sc;while((P=c(f)).year>=s);return{k:D.reverse(),C:i0(O.reverse())}})}function tF(c,T){let s,P,f=uF(c);if(c.era){let D=E0[T];D!==void 0&&(s=T==="islamic"?"ah":c.era.normalize("NFD").toLowerCase().replace(/[^a-z0-9]/g,""),s==="bc"||s==="b"?s="bce":s!=="ad"&&s!=="a"||(s="ce"),P=f,f=sC(P,D[s]||0))}return{era:s,eraYear:P,year:f}}function uF(c){return parseInt(c.relatedYear||c.year)}function Zf(c){let{year:T,F:s,day:P}=this.O(c),{C:f}=this.B(T);return[T,f[s]+1,P]}function Zs(c,T=1,s=1){return this.B(c).k[T-1]+(s-1)*Sc}function Hs(c){let T=ii(this,c),s=ii(this,c-1),P=T.length;if(P>s.length){let f=PC(this);if(f<0)return-f;for(let D=0;D<P;D++)if(T[D]!==s[D])return D+1}}function Ns(c){return XP(Zs.call(this,c),Zs.call(this,c+1))}function Oi(c,T){let{k:s}=this.B(c),P=T+1,f=s;return P>s.length&&(P=1,f=this.B(c+1).k),XP(s[T-1],f[P-1])}function Vs(c){return this.B(c).k.length}function ii(c,T){return Object.keys(c.B(T).C)}function nF(c){return Ws(L(c))}function Ws(c){if((c=c.toLowerCase())!==I&&c!==yP&&us(c)!==us(fO(c).resolvedOptions().calendar))throw RangeError(PM(c));return c}function us(c){return c==="islamicc"&&(c="islamic"),c.split("-")[0]}function eF(c){return this.R(c)[0]}function cC(c){return this.R(c)[1]}function XD(c){let[T]=this.h(c);return XP(this.q(T),sc(c))+1}function TC(c){let T=TZ.exec(c);if(!T)throw RangeError(TM(c));return[parseInt(T[1]),Boolean(T[2])]}function ns(c,T,s){return c+(T||s&&c>=s?1:0)}function Af(c,T){return c-(T&&c>=T?1:0)}function sC(c,T){return(T+c)*(Math.sign(T)||1)||0}function jf(c){return E0[fC(c)]}function PC(c){return xM[fC(c)]}function fC(c){return us(c.id||I)}function DC(c,T,s,P){let f=sT(s,P,Kc,[],Z0);if(f.timeZone!==void 0){let D=s.dateFromFields(f),O=WT(f),i=c(f.timeZone);return{epochNanoseconds:xT(T(i),{...D,...O},f.offset!==void 0?NT(f.offset):void 0),timeZone:i}}return{...s.dateFromFields(f),...Ic}}function OC(c,T,s,P,f,D){let O=sT(s,f,Kc,S0,Z0),i=c(O.timeZone),[F,C,S]=ms(D),M=s.dateFromFields(O,MP(D,F)),Z=WT(O,F);return r(xT(T(i),{...M,...Z},O.offset!==void 0?NT(O.offset):void 0,C,S),i,P)}function iC(c,T,s){let P=sT(c,T,Kc,[],lc),f=G(s);return y(Hc({...c.dateFromFields(P,MP(s,f)),...WT(P,f)}))}function UD(c,T,s,P=[]){let f=sT(c,T,Kc,P);return c.dateFromFields(f,s)}function YD(c,T,s,P){let f=sT(c,T,kD,P);return c.yearMonthFromFields(f,s)}function LD(c,T,s,P,f=[]){let D=sT(c,s,Kc,f);return T&&D.month!==void 0&&D.monthCode===void 0&&D.year===void 0&&(D.year=_T),c.monthDayFromFields(D,P)}function FC(c,T){let s=G(T);return Jc(WT(Qc(c,Ef,[],1),s))}function CC(c){let T=Qc(c,hD);return X(zT({...o,...T}))}function sT(c,T,s,P=[],f=[]){return Qc(T,[...c.fields(s),...f].sort(),P)}function Qc(c,T,s,P=!s){let f={},D,O=0;for(let i of T){if(i===D)throw RangeError(rS(i));if(i==="constructor"||i==="__proto__")throw RangeError(ND(i));let F=c[i];if(F!==void 0)O=1,Mi[i]&&(F=Mi[i](F,i)),f[i]=F;else if(s){if(s.includes(i))throw TypeError(HD(i));f[i]=a0[i]}D=i}if(P&&!O)throw TypeError(nC(T));return f}function WT(c,T){return CP(DZ({...a0,...c}),T)}function SC(c,T,s,P,f,D){let O=g(D),{calendar:i,timeZone:F}=s;return r(((C,S,M,Z,A)=>{let j=Is(C,M,Z,Kc,M0,C0),[a,E,m]=ms(A,2);return xT(S,{...C.dateFromFields(j,MP(A,a)),...WT(j,a)},NT(j.offset),E,m)})(c(i),T(F),P,f,O),F,i)}function MC(c,T,s,P,f){let D=g(f);return y(((O,i,F,C)=>{let S=Is(O,i,F,Kc,lc),M=G(C);return Hc({...O.dateFromFields(S,MP(C,M)),...WT(S,M)})})(c(T.calendar),s,P,D))}function ZC(c,T,s,P,f){let D=g(f);return((O,i,F,C)=>{let S=Is(O,i,F,Kc);return O.dateFromFields(S,C)})(c(T.calendar),s,P,D)}function AC(c,T,s,P,f){let D=g(f);return MT(((O,i,F,C)=>{let S=Is(O,i,F,kD);return O.yearMonthFromFields(S,C)})(c(T.calendar),s,P,D))}function jC(c,T,s,P,f){let D=g(f);return((O,i,F,C)=>{let S=Is(O,i,F,Kc);return O.monthDayFromFields(S,C)})(c(T.calendar),s,P,D)}function aC(c,T,s){return Jc(((P,f,D)=>{let O=G(D);return WT({...Ac(Ef,P),...Qc(f,Ef)},O)})(c,T,s))}function EC(c,T){return X((s=c,P=T,zT({...s,...Qc(P,hD)})));var s,P}function Is(c,T,s,P,f=[],D=[]){let O=[...c.fields(P),...f].sort(),i=Qc(T,O,D),F=Qc(s,O);return i=c.mergeFields(i,F),Qc(i,O,[])}function RD(c,T){let s=sT(c,T,j0);return c.monthDayFromFields(s)}function _D(c,T,s){let P=sT(c,T,A0);return c.yearMonthFromFields(P,s)}function xC(c,T,s,P,f){T=Ac(s=c.fields(s),T),P=Qc(P,f=c.fields(f),[]);let D=c.mergeFields(T,P);return D=Qc(D,[...s,...f].sort(),[]),c.dateFromFields(D)}function Of(c,T){let{era:s,eraYear:P,year:f}=T,D=jf(c);if(s!==void 0||P!==void 0){if(s===void 0||P===void 0)throw TypeError(uS);if(!D)throw RangeError(tS);let O=D[s];if(O===void 0)throw RangeError(eS(s));let i=sC(P,O);if(f!==void 0&&f!==i)throw RangeError(nS);f=i}else if(f===void 0)throw TypeError(cM(D));return f}function Ff(c,T,s,P){let{month:f,monthCode:D}=T;if(D!==void 0){let O=((i,F,C,S)=>{let M=i.U(C),[Z,A]=TC(F),j=ns(Z,A,M);if(A){let a=PC(i);if(a===void 0)throw RangeError(is);if(a>0){if(j>a)throw RangeError(is);if(M===void 0){if(S===1)throw RangeError(is);j--}}else{if(j!==-a)throw RangeError(is);if(M===void 0&&S===1)throw RangeError(is)}}return j})(c,D,s,P);if(f!==void 0&&f!==O)throw RangeError(s0);f=O,P=1}else if(f===void 0)throw TypeError(sM);return mc("month",f,1,c.L(s),P)}function Fi(c,T,s,P,f){return Fc(T,"day",1,c.j(P,s),f)}function Cf(c,T,s,P){let f=0,D=[];for(let O of s)T[O]!==void 0?f=1:D.push(O);if(Object.assign(c,T),f)for(let O of P||D)delete c[O]}function mC(c){return v(xc(DP(fP(c))))}function wC(c,T,s,P,f=I){return r(xc(DP(fP(s))),T(P),c(f))}function WC(c,T,s,P,f=0,D=0,O=0,i=0,F=0,C=0,S=I){return y(Hc(FP(Gc(e,dT(BP,[T,s,P,f,D,O,i,F,C])))),c(S))}function IC(c,T,s,P,f=I){return B(oc(jT(Gc(e,{isoYear:T,isoMonth:s,isoDay:P}))),c(f))}function GC(c,T,s,P=I,f=1){let D=e(T),O=e(s),i=c(P);return MT(Xf(jT({isoYear:D,isoMonth:O,isoDay:e(f)})),i)}function bC(c,T,s,P=I,f=_T){let D=e(T),O=e(s),i=c(P);return os(oc(jT({isoYear:e(f),isoMonth:D,isoDay:O})),i)}function qC(c=0,T=0,s=0,P=0,f=0,D=0){return Jc(CP(Gc(e,dT($c,[c,T,s,P,f,D])),1))}function JC(c=0,T=0,s=0,P=0,f=0,D=0,O=0,i=0,F=0,C=0){return X(zT(Gc(Xi,dT(b,[c,T,s,P,f,D,O,i,F,C]))))}function dD(c,T,s=I){return r(c.epochNanoseconds,T,s)}function KC(c){return v(c.epochNanoseconds)}function gD(c,T){return y(Pc(T,c))}function yD(c,T){return B(Pc(T,c))}function $C(c,T,s){return _D(c(T.calendar),s)}function QC(c,T,s){return RD(c(T.calendar),s)}function BD(c,T){return Jc(Pc(T,c))}function XC(c,T,s,P){let f=((D,O,i,F)=>{let C=Rf(F);return Zc(D(O),i,C)})(c,s,T,P);return r(xc(f),s,T.calendar)}function UC(c,T,s){let P=c(T.calendar);return MT({...T,..._D(P,s)})}function YC(c,T,s){return RD(c(T.calendar),s)}function LC(c,T,s,P,f){let D=c(f.timeZone),O=f.plainTime,i=O!==void 0?T(O):Ic;return r(Zc(s(D),{...P,...i}),D,P.calendar)}function RC(c,T=Ic){return y(Hc({...c,...T}))}function _C(c,T,s){return _D(c(T.calendar),s)}function dC(c,T,s){return RD(c(T.calendar),s)}function gC(c,T,s,P){return((f,D,O)=>xC(f,D,A0,zc(O),Ks))(c(T.calendar),s,P)}function yC(c,T,s,P){return((f,D,O)=>xC(f,D,j0,zc(O),gP))(c(T.calendar),s,P)}function BC(c,T,s,P,f){let D=zc(f),O=T(D.plainDate),i=c(D.timeZone);return r(Zc(s(i),{...O,...P}),i,O.calendar)}function zC(c,T){return y(Hc({...c,...T}))}function HC(c){return v(xc(LT(c,Wc)))}function NC(c){return v(xc(LT(c,Uc)))}function VC(c){return v(xc(DP(fP(c),GT)))}function lC(c){return v(xc(DP(fP(c))))}function pC(c,T,s=Ic){let P=T.timeZone,f=c(P),D={...Pc(T,f),...s};return r(xT(f,D,D.offsetNanoseconds,2),P,T.calendar)}function vC(c,T,s){let P=T.timeZone,f=c(P),D={...Pc(T,f),...s},O=rC(T.calendar,s.calendar);return r(xT(f,D,D.offsetNanoseconds,2),P,O)}function kC(c,T=Ic){return y({...c,...T})}function hC(c,T){return y({...c,...T},rC(c.calendar,T.calendar))}function YP(c,T){return{...c,calendar:T}}function oC(c,T){return{...c,timeZone:T}}function rC(c,T){if(c===T)return c;let s=h(c),P=h(T);if(s===P||s===I)return T;if(P===I)return c;throw RangeError(lD)}function NS(c,T){return(s)=>s===I?c:s===yP||s===RT?Object.assign(Object.create(c),{id:s}):Object.assign(Object.create(T),cZ(s))}function IT(c,T,s){let P=new Set(s);return(f)=>(((D,O)=>{for(let i of O)if(i in D)return 1;return 0})(f=Wf(P,f),c)||Object.assign(f,T),s&&(f.timeZone=JT,["full","long"].includes(f.timeStyle)&&(f.timeStyle="medium")),f)}function Nc(c,T=zD){let[s,,,P]=c;return(f,D=IZ,...O)=>{let i=T(P&&P(...O),f,D,s),F=i.resolvedOptions();return[i,...VS(c,F,O)]}}function zD(c,T,s,P){if(s=P(s),c){if(s.timeZone!==void 0)throw TypeError(jM);s.timeZone=c}return new PT(T,s)}function VS(c,T,s){let[,P,f]=c;return s.map((D)=>(D.calendar&&((O,i,F)=>{if((F||O!==I)&&O!==i)throw RangeError(lD)})(h(D.calendar),T.calendar,f),P(D,T)))}function lT(c){let T=Gs();return ec(T,c.getOffsetNanosecondsFor(T))}function Gs(){return LT(Date.now(),Uc)}function Vc(){return Ai||(Ai=new PT().resolvedOptions().timeZone)}var lS=(c,T)=>`Non-integer ${c}: ${T}`,pS=(c,T)=>`Non-positive ${c}: ${T}`,vS=(c,T)=>`Non-finite ${c}: ${T}`,kS=(c)=>`Cannot convert bigint to ${c}`,hS=(c)=>`Invalid bigint: ${c}`,oS="Cannot convert Symbol to string",tC="Invalid object",uC=(c,T,s,P,f)=>f?uC(c,f[T],f[s],f[P]):bs(c,T)+`; must be between ${s}-${P}`,bs=(c,T)=>`Invalid ${c}: ${T}`,HD=(c)=>`Missing ${c}`,ND=(c)=>`Invalid field ${c}`,rS=(c)=>`Duplicate field ${c}`,nC=(c)=>"No valid fields: "+c.join(),eC="Invalid bag",c0=(c,T,s)=>bs(c,T)+"; must be "+Object.keys(s).join(),T0="Cannot use valueOf",VD="Invalid calling context",tS="Forbidden era/eraYear",uS="Mismatching era/eraYear",nS="Mismatching year/eraYear",eS=(c)=>`Invalid era: ${c}`,cM=(c)=>"Missing year"+(c?"/era/eraYear":""),TM=(c)=>`Invalid monthCode: ${c}`,s0="Mismatching month/monthCode",sM="Missing month/monthCode",Ci="Cannot guess year",is="Invalid leap month",P0="Invalid protocol",qs="Invalid protocol results",lD="Mismatching Calendars",PM=(c)=>`Invalid Calendar: ${c}`,f0="Mismatching TimeZones",fM="Forbidden ICU TimeZone",DM="Out-of-bounds offset",OM="Out-of-bounds TimeZone gap",iM="Invalid TimeZone offset",FM="Ambiguous offset",LP="Out-of-bounds date",CM="Out-of-bounds duration",SM="Cannot mix duration signs",RP="Missing relativeTo",MM="Cannot use large units",ZM="Required smallestUnit or largestUnit",AM="smallestUnit > largestUnit",Cc=(c)=>`Cannot parse: ${c}`,Bc=(c)=>`Invalid substring: ${c}`,D0=(c)=>`Cannot format ${c}`,O0="Mismatching types for formatting",jM="Cannot specify TimeZone",i0=W(as,(c,T)=>T),pT=W(as,(c,T,s)=>s),wc=W(vs,2),af={nanosecond:0,microsecond:1,millisecond:2,second:3,minute:4,hour:5,day:6,week:7,month:8,year:9},Js=Object.keys(af),Sc=86400000,F0=1000,GT=1000,Uc=1e6,Wc=1e9,_P=60000000000,dP=3600000000000,q=86400000000000,Xc=[1,GT,Uc,Wc,_P,dP,q],lc=Js.slice(0,6),Ef=Es(lc),C0=["offset"],S0=["timeZone"],M0=lc.concat(C0),Z0=M0.concat(S0),xf=["era","eraYear"],aM=xf.concat(["year"]),gP=["year"],pD=["monthCode"],vD=["month"].concat(pD),Ks=["day"],kD=vD.concat(gP),A0=pD.concat(gP),Kc=Ks.concat(kD),EM=Ks.concat(vD),j0=Ks.concat(pD),a0=pT(lc,0),I="iso8601",yP="gregory",RT="japanese",E0={[yP]:{bce:-1,ce:0},[RT]:{bce:-1,ce:0,meiji:1867,taisho:1911,showa:1925,heisei:1988,reiwa:2018},ethioaa:{era0:0},ethiopic:{era0:0,era1:5500},coptic:{era0:-1,era1:0},roc:{beforeroc:-1,minguo:0},buddhist:{be:0},islamic:{ah:0},indian:{saka:0},persian:{ap:0}},xM={chinese:13,dangi:13,hebrew:-6},L=W(PP,"string"),x0=W(PP,"boolean"),mM=W(PP,"number"),m0=W(PP,"function"),b=Js.map((c)=>c+"s"),hD=Es(b),wM=b.slice(0,6),w0=b.slice(6),WM=w0.slice(1),IM=i0(b),o=pT(b,0),oD=pT(wM,0),rD=W(mi,b),$c=["isoNanosecond","isoMicrosecond","isoMillisecond","isoSecond","isoMinute","isoHour"],tD=["isoDay","isoMonth","isoYear"],BP=$c.concat(tD),uD=Es(tD),W0=Es($c),I0=Es(BP),Ic=pT(W0,0),GM=W(mi,BP),PT=Intl.DateTimeFormat,G0="en-GB",nD=1e8,bM=nD*Sc,qM=[nD,0],JM=[-nD,0],As=275760,js=-271821,KM=1970,_T=1972,gc=12,$M=gT(1868,9,8),QM=Mc(QS,WeakMap),es="smallestUnit",mf="unit",Cs="roundingIncrement",Sf="fractionalSecondDigits",b0="relativeTo",q0={constrain:0,reject:1},XM=Object.keys(q0),UM={compatible:0,reject:1,earlier:2,later:3},YM={reject:0,use:1,prefer:2,ignore:3},LM={auto:0,never:1,critical:2,always:3},RM={auto:0,never:1,critical:2},_M={auto:0,never:1},dM={floor:0,halfFloor:1,ceil:2,halfCeil:3,trunc:4,halfTrunc:5,expand:6,halfExpand:7,halfEven:8},$s=W(zf,es),eD=W(zf,"largestUnit"),gM=W(zf,mf),J0=W(aT,"overflow",q0),K0=W(aT,"disambiguation",UM),yM=W(aT,"offset",YM),cO=W(aT,"calendarName",LM),BM=W(aT,"timeZoneName",RM),zM=W(aT,"offset",_M),Qs=W(aT,"roundingMode",dM),vT="PlainYearMonth",kT="PlainMonthDay",bT="PlainDate",qT="PlainDateTime",zP="PlainTime",pc="ZonedDateTime",HP="Instant",NP="Duration",HM=[Math.floor,(c)=>zs(c)?Math.floor(c):Math.round(c),Math.ceil,(c)=>zs(c)?Math.ceil(c):Math.round(c),Math.trunc,(c)=>zs(c)?Math.trunc(c)||0:Math.round(c),(c)=>c<0?Math.floor(c):Math.ceil(c),(c)=>Math.sign(c)*Math.round(Math.abs(c))||0,(c)=>zs(c)?(c=Math.trunc(c)||0)+c%2:Math.round(c)],JT="UTC",ls=5184000,NM=hs(1847),VM=hs(new Date().getUTCFullYear()+10),lM=/0+$/,Pc=Mc(_S,WeakMap),Si=4294967295,VP=Mc((c)=>{let T=mD(c);return typeof T=="object"?new Q0(T):new $0(T||0)});class $0{constructor(c){this.v=c}getOffsetNanosecondsFor(){return this.v}getPossibleInstantsFor(c){return[Uf(c,this.v)]}l(){}}class Q0{constructor(c){this.$=((T)=>{function s(F){let C=Mf(F,O,i),[S,M]=fi(C),Z=f(S),A=f(M);return Z===A?Z:P(D(S,M),Z,A,F)}function P(F,C,S,M){let Z,A;for(;(M===void 0||(Z=M<F[0]?C:M>=F[1]?S:void 0)===void 0)&&(A=F[1]-F[0]);){let j=F[0]+Math.floor(A/2);T(j)===S?F[1]=j:F[0]=j+1}return Z}let f=Mc(T),D=Mc(dS),O=NM,i=VM;return{G(F){let C=s(F-86400),S=s(F+86400),M=F-C,Z=F-S;if(C===S)return[M];let A=s(M);return A===s(Z)?[F-A]:C>S?[M,Z]:[]},V:s,l(F,C){let S=Mf(F,O,i),[M,Z]=fi(S),A=ls*C,j=C<0?()=>Z>O||(O=S,0):()=>M<i||(i=S,0);for(;j();){let a=f(M),E=f(Z);if(a!==E){let m=D(M,Z);P(m,a,E);let x=m[0];if((hc(x,F)||1)===C)return x}M+=A,Z+=A}}}})(((T)=>(s)=>{let P=Qf(T,s*F0);return hs(uF(P),parseInt(P.month),parseInt(P.day),parseInt(P.hour),parseInt(P.minute),parseInt(P.second))-s})(c))}getOffsetNanosecondsFor(c){return this.$.V(Li(c))*Wc}getPossibleInstantsFor(c){let[T,s]=[hs((P=c).isoYear,P.isoMonth,P.isoDay,P.isoHour,P.isoMinute,P.isoSecond),P.isoMillisecond*Uc+P.isoMicrosecond*GT+P.isoNanosecond];var P;return this.$.G(T).map((f)=>xc(YT(LT(f,Wc),s)))}l(c,T){let[s,P]=Ri(c),f=this.$.l(s+(T>0||P?1:0),T);if(f!==void 0)return LT(f,Wc)}}var TO="([+\u2212-])",ps="(?:[.,](\\d{1,9}))?",X0=`(?:(?:${TO}(\\d{6}))|(\\d{4}))-?(\\d{2})`,sO="(\\d{2})(?::?(\\d{2})(?::?(\\d{2})"+ps+")?)?",PO=TO+sO,pM=X0+"-?(\\d{2})(?:[T ]"+sO+"(Z|"+PO+")?)?",U0="\\[(!?)([^\\]]*)\\]",lP=`((?:${U0}){0,9})`,vM=VT(X0+lP),kM=VT("(?:--)?(\\d{2})-?(\\d{2})"+lP),hM=VT(pM+lP),oM=VT("T?"+sO+"(?:"+PO+")?"+lP),rM=VT(PO),tM=new RegExp(U0,"g"),uM=VT(`${TO}?P(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(?:T(?:(\\d+)${ps}H)?(?:(\\d+)${ps}M)?(?:(\\d+)${ps}S)?)?`),nM=Mc((c)=>new PT(G0,{timeZone:c,era:"short",year:"numeric",month:"numeric",day:"numeric",hour:"numeric",minute:"numeric",second:"numeric"})),eM=/^(AC|AE|AG|AR|AS|BE|BS|CA|CN|CS|CT|EA|EC|IE|IS|JS|MI|NE|NS|PL|PN|PR|PS|SS|VS)T$/,cZ=Mc(BS),fO=Mc((c)=>new PT(G0,{calendar:c,timeZone:JT,era:"short",year:"numeric",month:"short",day:"numeric"})),TZ=/^M(\d{2})(L?)$/,sZ={era:ks,eraYear:e,year:e,month:ci,monthCode:ks,day:ci},PZ=pT(lc,e),fZ=pT(b,Xi),Mi=Object.assign({},sZ,PZ,fZ,{offset:ks}),DZ=W($S,lc,$c),Zi={dateAdd(c,T,s){let P=G(s),f,{years:D,months:O,weeks:i,days:F}=T;if(F+=l(T,5)[0],D||O)f=((C,S,M,Z,A)=>{let[j,a,E]=C.h(S);if(M){let[m,x]=C.I(j,a);j+=M,a=ns(m,x,C.U(j)),a=mc("month",a,1,C.L(j),A)}return Z&&([j,a]=C._(j,a,Z)),E=mc("day",E,1,C.j(j,a),A),C.q(j,a,E)})(this,c,D,O,P);else{if(!i&&!F)return c;f=sc(c)}return f+=(7*i+F)*Sc,oc(iP(f))},dateUntil(c,T,s){if(s<=7){let F=0,C=rF({...c,...Ic},{...T,...Ic});return s===7&&([F,C]=tc(C,7)),{...o,weeks:F,days:C}}let P=this.h(c),f=this.h(T),[D,O,i]=((F,C,S,M,Z,A,j)=>{let a=Z-C,E=A-S,m=j-M;if(a||E){let x=Math.sign(a||E),w=F.j(Z,A),d=0;if(Math.sign(m)===-x){let U=w;[Z,A]=F._(Z,A,-x),a=Z-C,E=A-S,w=F.j(Z,A),d=x<0?-U:w}if(m=j-Math.min(M,w)+d,a){let[U,Q]=F.I(C,S),[Y,k]=F.I(Z,A);if(E=Y-U||Number(k)-Number(Q),Math.sign(E)===-x){let N=x<0&&-F.L(Z);a=(Z-=x)-C,E=A-ns(U,Q,F.U(Z))+(N||F.L(Z))}}}return[a,E,m]})(this,...P,...f);return s===8&&(O+=this.J(D,P[0]),D=0),{...o,years:D,months:O,days:i}},dateFromFields(c,T){let s=G(T),P=Of(this,c),f=Ff(this,c,P,s),D=Fi(this,c,f,P,s);return B(oc(this.P(P,f,D)),this.id||I)},yearMonthFromFields(c,T){let s=G(T),P=Of(this,c),f=Ff(this,c,P,s);return MT(Xf(this.P(P,f,1)),this.id||I)},monthDayFromFields(c,T){let s=G(T),P=!this.id,{monthCode:f,year:D,month:O}=c,i,F,C,S,M;if(f!==void 0){[i,F]=TC(f),M=ji(c,"day");let Z=this.N(i,F,M);if(!Z)throw RangeError(Ci);if([C,S]=Z,O!==void 0&&O!==S)throw RangeError(s0);P&&(S=mc("month",S,1,gc,1),M=mc("day",M,1,Yf(D!==void 0?D:C,S),s))}else{C=D===void 0&&P?_T:Of(this,c),S=Ff(this,c,C,s),M=Fi(this,c,S,C,s);let Z=this.U(C);F=S===Z,i=Af(S,Z);let A=this.N(i,F,M);if(!A)throw RangeError(Ci);[C,S]=A}return os(oc(this.P(C,S,M)),this.id||I)},fields(c){return jf(this)&&c.includes("year")?[...c,...xf]:c},mergeFields(c,T){let s=Object.assign(Object.create(null),c);return Cf(s,T,vD),jf(this)&&(Cf(s,T,aM),this.id===RT&&Cf(s,T,EM,xf)),s},inLeapYear(c){let[T]=this.h(c);return this.K(T)},monthsInYear(c){let[T]=this.h(c);return this.L(T)},daysInMonth(c){let[T,s]=this.h(c);return this.j(T,s)},daysInYear(c){let[T]=this.h(c);return this.X(T)},dayOfYear:XD,era(c){return this.ee(c)[0]},eraYear(c){return this.ee(c)[1]},monthCode(c){let[T,s]=this.h(c),[P,f]=this.I(T,s);return((D,O)=>"M"+wc(D)+(O?"L":""))(P,f)},dayOfWeek:Bi,daysInWeek(){return 7}},OZ={dayOfYear:XD,h:di,q:gT},iZ=Object.assign({},OZ,{weekOfYear:eF,yearOfWeek:cC,R(c){function T(A){return(7-A<P?7:0)-A}function s(A){let j=yi(Z+A),a=A||1,E=T(Fs(F+j*a,7));return S=(j+(E-C)*a)/7}let P=this.id?1:4,f=Bi(c),D=this.dayOfYear(c),O=Fs(f-1,7),i=D-1,F=Fs(O-i,7),C=T(F),S,M=Math.floor((i-C)/7)+1,Z=c.isoYear;return M?M>s(0)&&(M=1,Z++):(M=s(-1),Z--),[M,Z,S]}}),FZ={dayOfYear:XD,h:Zf,q:Zs,weekOfYear:eF,yearOfWeek:cC,R(){return[]}},hT=NS(Object.assign({},Zi,iZ,{h:di,ee(c){return this.id===yP?zi(c):this.id===RT?QM(c):[]},I:(c,T)=>[T,0],N(c,T){if(!T)return[_T,c]},K:Lf,U(){},L:gi,J:(c)=>c*gc,j:Yf,X:yi,P:(c,T,s)=>({isoYear:c,isoMonth:T,isoDay:s}),q:gT,_:(c,T,s)=>(c+=TP(s,gc),(T+=Gf(s,gc))<1?(c--,T+=gc):T>gc&&(c++,T-=gc),[c,T]),year(c){return c.isoYear},month(c){return c.isoMonth},day:(c)=>c.isoDay}),Object.assign({},Zi,FZ,{h:Zf,ee(c){let T=this.O(c);return[T.era,T.eraYear]},I(c,T){let s=Hs.call(this,c);return[Af(T,s),s===T]},N(c,T,s){let[P,f,D]=Zf.call(this,{isoYear:_T,isoMonth:gc,isoDay:31}),O=Hs.call(this,P),i=f===O;(hc(c,Af(f,O))||hc(Number(T),Number(i))||hc(s,D))===1&&P--;for(let F=0;F<100;F++){let C=P-F,S=Hs.call(this,C),M=ns(c,T,S);if(T===(M===S)&&s<=Oi.call(this,C,M))return[C,M]}},K(c){let T=Ns.call(this,c);return T>Ns.call(this,c-1)&&T>Ns.call(this,c+1)},U:Hs,L:Vs,J(c,T){let s=T+c,P=Math.sign(c),f=P<0?-1:0,D=0;for(let O=T;O!==s;O+=P)D+=Vs.call(this,O+f);return D},j:Oi,X:Ns,P(c,T,s){return iP(Zs.call(this,c,T,s))},q:Zs,_(c,T,s){if(s){if(T+=s,!Number.isSafeInteger(T))throw RangeError(LP);if(s<0)for(;T<1;)T+=Vs.call(this,--c);else{let P;for(;T>(P=Vs.call(this,c));)T-=P,c++}}return[c,T]},year(c){return this.O(c).year},month(c){let{year:T,F:s}=this.O(c),{C:P}=this.B(T);return P[s]+1},day(c){return this.O(c).day}})),rc="numeric",oT=["timeZoneName"],Y0={month:rc,day:rc},DO={year:rc,month:rc},OO=Object.assign({},DO,{day:rc}),iO={hour:rc,minute:rc,second:rc},FO=Object.assign({},OO,iO),CZ=Object.assign({},FO,{timeZoneName:"short"}),SZ=Object.keys(DO),MZ=Object.keys(Y0),ZZ=Object.keys(OO),AZ=Object.keys(iO),CO=["dateStyle"],jZ=SZ.concat(CO),aZ=MZ.concat(CO),SO=ZZ.concat(CO,["weekday"]),Xs=AZ.concat(["dayPeriod","timeStyle"]),MO=SO.concat(Xs),EZ=MO.concat(oT),xZ=oT.concat(Xs),mZ=oT.concat(SO),wZ=oT.concat(["day","weekday"],Xs),WZ=oT.concat(["year","weekday"],Xs),IZ={},ZO=[IT(MO,FO),ZP],L0=[IT(EZ,CZ),ZP,0,(c,T)=>{let s=h(c.timeZone);if(T&&h(T.timeZone)!==s)throw RangeError(f0);return s}],AO=[IT(MO,FO,oT),sc],jO=[IT(SO,OO,xZ),sc],aO=[IT(Xs,iO,mZ),(c)=>uc(c)/Uc],EO=[IT(jZ,DO,wZ),sc,1],xO=[IT(aZ,Y0,WZ),sc,1],Ai;function Rc(c,T,s,P,f){function D(...F){if(!(this instanceof D))throw TypeError(VD);g0(this,T(...F))}function O(F,C){return Object.defineProperties(function(...S){return F.call(this,i(this),...S)},wf(C))}function i(F){let C=n(F);if(!C||C.branding!==c)throw TypeError(VD);return C}return Object.defineProperties(D.prototype,{...ai(Gc(O,s)),...AT(Gc(O,P)),...cP("Temporal."+c)}),Object.defineProperties(D,{...AT(f),...wf(c)}),[D,(F)=>{let C=Object.create(D.prototype);return g0(C,F),C},i]}function z0(c){return c=c.concat("id").sort(),(T)=>{if(!Ei(T,c))throw TypeError(P0);return T}}function nT(c){if(n(c)||c.calendar!==void 0||c.timeZone!==void 0)throw TypeError(eC);return c}function pP(c,T){let s={};for(let P in c)s[P]=({o:f},D)=>{let O=n(D)||{},{branding:i}=O,F=i===bT||T.includes(i)?O:Oc(D);return f[P](F)};return s}function WO(c){let T={};for(let s in c)T[s]=(P)=>{let{calendar:f}=P;return(D=f,typeof D=="string"?hT(D):(O=D,Object.assign(Object.create(yZ),{i:O})))[s](P);var D,O};return T}function FT(){throw TypeError(T0)}function Ys({calendar:c}){return typeof c=="string"?new XO(c):c}function R0(c,T){if(T=g(T),p(c)){let P=n(c);if(P&&P.branding===kT)return G(T),P;let f=V0(c);return LD(uP(f||I),!f,c,T)}let s=JF(hT,c);return G(T),s}function H0(c,T,s){return P=T.call(c,Dc(v(s))),ef(xs(P));var P}function vP(c,T=k0){let s=Object.keys(T).sort(),P={};for(let f of s)P[f]=W(T[f],c,m0(c[f]));return P}function J(c,T){return typeof c=="string"?VP(c):vP(c,T)}function H(c){return J(c,wO)}function Yc(c){if(p(c)){let T=n(c);if(T)switch(T.branding){case HP:return T;case pc:return v(T.epochNanoseconds)}}return WF(c)}function _0(c,T,s){let P=T.l(Yc(s).epochNanoseconds,c);return P?Dc(v(P)):null}function $(c){return p(c)?(n(c)||{}).timeZone||lZ(c):((T)=>JP(XF(L(T))))(c)}function fT(c,T){if(p(c)){let s=n(c)||{};switch(s.branding){case zP:return G(T),s;case qT:return G(T),Jc(s);case pc:return G(T),BD(H,s)}return FC(c,T)}return G(T),KF(c)}function IO(c){return c===void 0?void 0:fT(c)}function rT(c,T){if(T=g(T),p(c)){let P=n(c);return P&&P.branding===vT?(G(T),P):YD(rP(Ls(c)),c,T)}let s=qF(hT,c);return G(T),s}function DT(c,T){if(T=g(T),p(c)){let P=n(c)||{};switch(P.branding){case qT:return G(T),P;case bT:return G(T),y({...P,...Ic});case pc:return G(T),gD(H,P)}return iC(tP(Ls(c)),c,T)}let s=bF(c);return G(T),s}function Oc(c,T){if(T=g(T),p(c)){let P=n(c)||{};switch(P.branding){case bT:return G(T),P;case qT:return G(T),B(P);case pc:return G(T),yD(H,P)}return UD(tP(Ls(c)),c,T)}let s=bP(c);return G(T),s}function N0(c,T,s){return bc(T.call(c,_(B(s,c))))}function _c(c){return(T)=>typeof T=="string"?hT(T):((s,P)=>{let f=Object.keys(P).sort(),D={};for(let O of f)D[O]=W(P[O],s,s[O]);return D})(T,c)}function R(c){if(p(c)){let T=n(c);return T&&T.branding===NP?T:CC(c)}return $F(c)}function Us(c){if(c!==void 0){if(p(c)){let T=n(c)||{};switch(T.branding){case pc:case bT:return T;case qT:return B(T)}let s=Ls(c);return{...DC($,J,tP(s),c),calendar:s}}return IF(c)}}function Ls(c){return V0(c)||I}function V0(c){let{calendar:T}=c;if(T!==void 0)return u(T)}function u(c){return p(c)?(n(c)||{}).calendar||fA(c):((T)=>Ws(QF(L(T))))(c)}function tT(c,T){if(T=g(T),p(c)){let s=n(c);if(s&&s.branding===pc)return ms(T),s;let P=Ls(c);return OC($,J,tP(P),P,c,T)}return GF(c,T)}function d0(c){return Gc((T)=>(s)=>T(mO(s)),c)}function mO(c){return Pc(c,H)}function GZ(){let c=PT.prototype,T=Object.getOwnPropertyDescriptors(c),s=Object.getOwnPropertyDescriptors(PT),P=function(f,D={}){if(!(this instanceof P))return new P(f,D);UO.set(this,((O,i={})=>{let F=new PT(O,i),C=F.resolvedOptions(),S=C.locale,M=Ac(Object.keys(i),C),Z=Mc(JZ),A=(...j)=>{let a,E=j.map((m,x)=>{let w=n(m),d=(w||{}).branding;if(x&&a&&a!==d)throw TypeError(O0);return a=d,w});return a?Z(a)(S,M,...E):[F,...j]};return A.u=F,A})(f,D))};for(let f in T){let D=T[f],O=f.startsWith("format")&&bZ(f);typeof D.value=="function"?D.value=f==="constructor"?P:O||qZ(f):O&&(D.get=function(){return O.bind(this)})}return s.prototype.value=Object.create(c,T),Object.defineProperties(P,s),P}function bZ(c){return function(...T){let s=UO.get(this),[P,...f]=s(...T);return P[c](...f)}}function qZ(c){return function(...T){return UO.get(this).u[c](...T)}}function JZ(c){let T=KZ[c];if(!T)throw TypeError(D0(c));return Nc(T,Mc(zD))}var KZ={Instant:ZO,PlainDateTime:AO,PlainDate:jO,PlainTime:aO,PlainYearMonth:EO,PlainMonthDay:xO},$Z=Nc(ZO),QZ=Nc(L0),XZ=Nc(AO),UZ=Nc(jO),YZ=Nc(aO),LZ=Nc(EO),RZ=Nc(xO),GO={era:bi,eraYear:bf,year:xs,month:bc,daysInMonth:bc,daysInYear:bc,inLeapYear:x0,monthsInYear:bc},hP={monthCode:L},bO={day:bc},l0={dayOfWeek:bc,dayOfYear:bc,weekOfYear:qi,yearOfWeek:bf,daysInWeek:bc},p0=Object.assign({},GO,hP,bO,l0),kP=new WeakMap,n=kP.get.bind(kP),g0=kP.set.bind(kP),_Z={...pP(GO,[vT]),...pP(l0,[]),...pP(hP,[vT,kT]),...pP(bO,[kT])},qO=WO(p0),dZ=WO({...GO,...hP}),gZ=WO({...hP,...bO}),Rs={calendarId:(c)=>h(c.calendar)},yZ=Gc((c,T)=>function(s){let{i:P}=this;return c(P[T](_(B(s,P))))},p0),BZ=as((c)=>(T)=>T[c],b.concat("sign")),JO=as((c,T)=>(s)=>s[$c[T]],lc),v0={epochSeconds:ki,epochMilliseconds:ZP,epochMicroseconds:hi,epochNanoseconds:oi},_s=W(Wf,new Set(["branding"])),[zZ,uT,HZ]=Rc(kT,W(bC,u),{...Rs,...gZ},{getISOFields:_s,getCalendar:Ys,with(c,T,s){return uT(jC(TA,c,this,nT(T),s))},equals:(c,T)=>lF(c,R0(T)),toPlainDate(c,T){return _(yC(ds,c,this,T))},toLocaleString(c,T,s){let[P,f]=RZ(T,s,c);return P.format(f)},toString:of,toJSON:(c)=>of(c),valueOf:FT},{from:(c,T)=>uT(R0(c,T))}),k0={getOffsetNanosecondsFor:H0,getPossibleInstantsFor(c,T,s){let P=[...T.call(c,t(y(s,I)))].map((D)=>VZ(D).epochNanoseconds),f=P.length;return f>1&&(P.sort(Tc),cD(Ec(ac(P[0],P[f-1])))),P}},wO={getOffsetNanosecondsFor:H0},[NZ,Dc,VZ]=Rc(HP,mC,v0,{add:(c,T)=>Dc(TD(0,c,R(T))),subtract:(c,T)=>Dc(TD(1,c,R(T))),until:(c,T,s)=>K(GD(0,c,Yc(T),s)),since:(c,T,s)=>K(GD(1,c,Yc(T),s)),round:(c,T)=>Dc(ui(c,T)),equals:(c,T)=>BF(c,Yc(T)),toZonedDateTime(c,T){let s=zc(T);return z(dD(c,$(s.timeZone),u(s.calendar)))},toZonedDateTimeISO:(c,T)=>z(dD(c,$(T))),toLocaleString(c,T,s){let[P,f]=$Z(T,s,c);return P.format(f)},toString:(c,T)=>lf($,H,c,T),toJSON:(c)=>lf($,H,c),valueOf:FT},{from:(c)=>Dc(Yc(c)),fromEpochSeconds:(c)=>Dc(HC(c)),fromEpochMilliseconds:(c)=>Dc(NC(c)),fromEpochMicroseconds:(c)=>Dc(VC(c)),fromEpochNanoseconds:(c)=>Dc(lC(c)),compare:(c,T)=>wD(Yc(c),Yc(T))}),[oP,Pj]=Rc("TimeZone",(c)=>{let T=gF(c);return{branding:"TimeZone",id:T,o:VP(T)}},{id:(c)=>c.id},{getPossibleInstantsFor:({o:c},T)=>c.getPossibleInstantsFor(DT(T)).map((s)=>Dc(v(s))),getOffsetNanosecondsFor:({o:c},T)=>c.getOffsetNanosecondsFor(Yc(T).epochNanoseconds),getOffsetStringFor(c,T){let s=Yc(T).epochNanoseconds,P=vP(this,wO).getOffsetNanosecondsFor(s);return ET(P)},getPlainDateTimeFor(c,T,s=I){let P=Yc(T).epochNanoseconds,f=vP(this,wO).getOffsetNanosecondsFor(P);return t(y(ec(P,f),u(s)))},getInstantFor(c,T,s){let P=DT(T),f=Rf(s),D=vP(this);return Dc(v(Zc(D,P,f)))},getNextTransition:({o:c},T)=>_0(1,c,T),getPreviousTransition:({o:c},T)=>_0(-1,c,T),equals(c,T){return!!$P(this,$(T))},toString:(c)=>c.id,toJSON:(c)=>c.id},{from(c){let T=$(c);return typeof T=="string"?new oP(T):T}}),lZ=z0(Object.keys(k0)),[pZ,OT]=Rc(zP,qC,JO,{getISOFields:_s,with(c,T,s){return OT(aC(this,nT(T),s))},add:(c,T)=>OT(OD(0,c,R(T))),subtract:(c,T)=>OT(OD(1,c,R(T))),until:(c,T,s)=>K($D(0,c,fT(T),s)),since:(c,T,s)=>K($D(1,c,fT(T),s)),round:(c,T)=>OT(cF(c,T)),equals:(c,T)=>pF(c,fT(T)),toZonedDateTime:(c,T)=>z(BC($,Oc,J,c,T)),toPlainDateTime:(c,T)=>t(zC(c,Oc(T))),toLocaleString(c,T,s){let[P,f]=YZ(T,s,c);return P.format(f)},toString:rf,toJSON:(c)=>rf(c),valueOf:FT},{from:(c,T)=>OT(fT(c,T)),compare:(c,T)=>KP(fT(c),fT(T))}),[vZ,iT,kZ]=Rc(vT,W(GC,u),{...Rs,...dZ},{getISOFields:_s,getCalendar:Ys,with(c,T,s){return iT(AC(cA,c,this,nT(T),s))},add:(c,T,s)=>iT(DD(y0,0,c,R(T),s)),subtract:(c,T,s)=>iT(DD(y0,1,c,R(T),s)),until:(c,T,s)=>K(KD(B0,0,c,rT(T),s)),since:(c,T,s)=>K(KD(B0,1,c,rT(T),s)),equals:(c,T)=>VF(c,rT(T)),toPlainDate(c,T){return _(gC(ds,c,this,T))},toLocaleString(c,T,s){let[P,f]=LZ(T,s,c);return P.format(f)},toString:hf,toJSON:(c)=>hf(c),valueOf:FT},{from:(c,T)=>iT(rT(c,T)),compare:(c,T)=>wT(rT(c),rT(T))}),[hZ,t]=Rc(qT,W(WC,u),{...Rs,...qO,...JO},{getISOFields:_s,getCalendar:Ys,with(c,T,s){return t(MC(ds,c,this,nT(T),s))},withCalendar:(c,T)=>t(YP(c,u(T))),withPlainDate:(c,T)=>t(hC(c,Oc(T))),withPlainTime:(c,T)=>t(kC(c,IO(T))),add:(c,T,s)=>t(PD(KT,0,c,R(T),s)),subtract:(c,T,s)=>t(PD(KT,1,c,R(T),s)),until:(c,T,s)=>K(qD(Lc,0,c,DT(T),s)),since:(c,T,s)=>K(qD(Lc,1,c,DT(T),s)),round:(c,T)=>t(ei(c,T)),equals:(c,T)=>HF(c,DT(T)),toZonedDateTime:(c,T,s)=>z(XC(J,c,$(T),s)),toPlainDate:(c)=>_(B(c)),toPlainTime:(c)=>OT(Jc(c)),toPlainYearMonth(c){return iT(UC(rP,c,this))},toPlainMonthDay(c){return uT(YC(uP,c,this))},toLocaleString(c,T,s){let[P,f]=XZ(T,s,c);return P.format(f)},toString:vf,toJSON:(c)=>vf(c),valueOf:FT},{from:(c,T)=>t(DT(c,T)),compare:(c,T)=>ID(DT(c),DT(T))}),[oZ,_,h0]=Rc(bT,W(IC,u),{...Rs,...qO},{getISOFields:_s,getCalendar:Ys,with(c,T,s){return _(ZC(ds,c,this,nT(T),s))},withCalendar:(c,T)=>_(YP(c,u(T))),add:(c,T,s)=>_(fD(KT,0,c,R(T),s)),subtract:(c,T,s)=>_(fD(KT,1,c,R(T),s)),until:(c,T,s)=>K(JD(Lc,0,c,Oc(T),s)),since:(c,T,s)=>K(JD(Lc,1,c,Oc(T),s)),equals:(c,T)=>NF(c,Oc(T)),toZonedDateTime(c,T){let s=!p(T)||T instanceof oP?{timeZone:T}:T;return z(LC($,fT,J,c,s))},toPlainDateTime:(c,T)=>t(RC(c,IO(T))),toPlainYearMonth(c){return iT(_C(rP,c,this))},toPlainMonthDay(c){return uT(dC(uP,c,this))},toLocaleString(c,T,s){let[P,f]=UZ(T,s,c);return P.format(f)},toString:kf,toJSON:(c)=>kf(c),valueOf:FT},{from:(c,T)=>_(Oc(c,T)),compare:(c,T)=>wT(Oc(c),Oc(T))}),KO={fields(c,T,s){return[...T.call(c,s)]}},o0=Object.assign({dateFromFields(c,T,s,P){return h0(T.call(c,Object.assign(Object.create(null),s),P))}},KO),r0=Object.assign({yearMonthFromFields(c,T,s,P){return kZ(T.call(c,Object.assign(Object.create(null),s),P))}},KO),t0=Object.assign({monthDayFromFields(c,T,s,P){return HZ(T.call(c,Object.assign(Object.create(null),s),P))}},KO),$O={mergeFields(c,T,s,P){return zc(T.call(c,Object.assign(Object.create(null),s),Object.assign(Object.create(null),P)))}},rZ=Object.assign({},o0,$O),tZ=Object.assign({},r0,$O),uZ=Object.assign({},t0,$O),QO={dateAdd(c,T,s,P,f){return h0(T.call(c,_(B(s,c)),K(X(P)),f))}},u0=Object.assign({},QO,{dateUntil(c,T,s,P,f,D){return PA(T.call(c,_(B(s,c)),_(B(P,c)),Object.assign(Object.create(null),D,{largestUnit:Js[f]})))}}),nZ=Object.assign({},QO,{day:N0}),eZ=Object.assign({},u0,{day:N0}),rP=_c(r0),tP=_c(o0),uP=_c(t0),cA=_c(tZ),ds=_c(rZ),TA=_c(uZ),KT=_c(QO),Lc=_c(u0),y0=_c(nZ),B0=_c(eZ),[sA,K,PA]=Rc(NP,JC,{...BZ,blank:xF},{with:(c,T)=>K(EC(c,T)),negated:(c)=>K(IP(c)),abs:(c)=>K(EF(c)),add:(c,T,s)=>K(MD(Us,Lc,J,0,c,R(T),s)),subtract:(c,T,s)=>K(MD(Us,Lc,J,1,c,R(T),s)),round:(c,T)=>K(aF(Us,Lc,J,c,T)),total:(c,T)=>ti(Us,Lc,J,c,T),toLocaleString(c,T,s){return Intl.DurationFormat?new Intl.DurationFormat(T,s).format(this):EP(c)},toString:EP,toJSON:(c)=>EP(c),valueOf:FT},{from:(c)=>K(R(c)),compare:(c,T,s)=>yF(Us,KT,J,R(c),R(T),s)}),n0={toString:(c)=>c.id,toJSON:(c)=>c.id,..._Z,dateAdd:({id:c,o:T},s,P,f)=>_(B(T.dateAdd(Oc(s),R(P),f),c)),dateUntil:({o:c},T,s,P)=>K(X(c.dateUntil(Oc(T),Oc(s),Ni(P)))),dateFromFields:({id:c,o:T},s,P)=>_(UD(T,s,P,Gi(c))),yearMonthFromFields:({id:c,o:T},s,P)=>iT(YD(T,s,P,Wi(c))),monthDayFromFields:({id:c,o:T},s,P)=>uT(LD(T,0,s,P,Ii(c))),fields({o:c},T){let s=new Set(Kc),P=[];for(let f of T){if(L(f),!s.has(f))throw RangeError(ND(f));s.delete(f),P.push(f)}return c.fields(P)},mergeFields:({o:c},T,s)=>c.mergeFields(If(qf(T)),If(qf(s)))},[XO]=Rc("Calendar",(c)=>{let T=nF(c);return{branding:"Calendar",id:T,o:hT(T)}},{id:(c)=>c.id},n0,{from(c){let T=u(c);return typeof T=="string"?new XO(T):T}}),fA=z0(Object.keys(n0).slice(4)),[DA,z]=Rc(pc,W(wC,u,$),{...v0,...Rs,...d0(qO),...d0(JO),offset:(c)=>ET(mO(c).offsetNanoseconds),offsetNanoseconds:(c)=>mO(c).offsetNanoseconds,timeZoneId:(c)=>h(c.timeZone),hoursInDay:(c)=>TF(J,c)},{getISOFields:(c)=>AF(H,c),getCalendar:Ys,getTimeZone:({timeZone:c})=>typeof c=="string"?new oP(c):c,with(c,T,s){return z(SC(ds,J,c,this,nT(T),s))},withCalendar:(c,T)=>z(YP(c,u(T))),withTimeZone:(c,T)=>z(oC(c,$(T))),withPlainDate:(c,T)=>z(vC(J,c,Oc(T))),withPlainTime:(c,T)=>z(pC(J,c,IO(T))),add:(c,T,s)=>z(sD(KT,J,0,c,R(T),s)),subtract:(c,T,s)=>z(sD(KT,J,1,c,R(T),s)),until:(c,T,s)=>K(X(bD(Lc,J,0,c,tT(T),s))),since:(c,T,s)=>K(X(bD(Lc,J,1,c,tT(T),s))),round:(c,T)=>z(ni(J,c,T)),startOfDay:(c)=>z(sF(J,c)),equals:(c,T)=>zF(c,tT(T)),toInstant:(c)=>Dc(KC(c)),toPlainDateTime:(c)=>t(gD(H,c)),toPlainDate:(c)=>_(yD(H,c)),toPlainTime:(c)=>OT(BD(H,c)),toPlainYearMonth(c){return iT($C(rP,c,this))},toPlainMonthDay(c){return uT(QC(uP,c,this))},toLocaleString(c,T,s={}){let[P,f]=QZ(T,s,c);return P.format(f)},toString:(c,T)=>pf(H,c,T),toJSON:(c)=>pf(H,c),valueOf:FT},{from:(c,T)=>z(tT(c,T)),compare:(c,T)=>WD(tT(c),tT(T))}),OA=Object.defineProperties({},{...cP("Temporal.Now"),...AT({timeZoneId:()=>Vc(),instant:()=>Dc(v(Gs())),zonedDateTime:(c,T=Vc())=>z(r(Gs(),$(T),u(c))),zonedDateTimeISO:(c=Vc())=>z(r(Gs(),$(c),I)),plainDateTime:(c,T=Vc())=>t(y(lT(H($(T))),u(c))),plainDateTimeISO:(c=Vc())=>t(y(lT(H($(c))),I)),plainDate:(c,T=Vc())=>_(B(lT(H($(T))),u(c))),plainDateISO:(c=Vc())=>_(B(lT(H($(c))),I)),plainTimeISO:(c=Vc())=>OT(Jc(lT(H($(c)))))})}),gs=Object.defineProperties({},{...cP("Temporal"),...AT({PlainYearMonth:vZ,PlainMonthDay:zZ,PlainDate:oZ,PlainTime:pZ,PlainDateTime:hZ,ZonedDateTime:DA,Instant:NZ,Calendar:XO,TimeZone:oP,Duration:sA,Now:OA})}),iA=GZ(),UO=new WeakMap,FA=Object.defineProperties(Object.create(Intl),AT({DateTimeFormat:iA}));class YO extends dc{schema={name:{string:"Invalid name",required:"Name is required","min:2":"Name must be at least 3 characters"},email:{string:"Invalid email",required:"Email is required",email:"Invalid email"},password:{"min:8":"Password must be at least 9 characters"}}}function Mj(c){return c}function e0(c={}){return{basePath:"/auth",verifyEmail:!0,redirectPath:"/dashboard",sessionExpiresInHours:24,sessionAbsoluteExpiresInHours:672,signUpRequest:YO,oauthProviders:{},verifyPassword:async(T,s)=>await Bun.password.verify(T,s),hashPassword:async(T)=>await Bun.password.hash(T),generateForgotPasswordToken:async(T)=>{let s=new Bun.CryptoHasher("sha256");return s.update(`${T.email}${Date.now()}`),s.digest("hex")},generateEmailVerificationToken:(T)=>{if(!(c.verifyEmail??!0))return"";let s=new Bun.CryptoHasher("sha256");return s.update(`${T}${Date.now()}`),s.digest("hex")},generateMagicLinkToken:(T)=>{let s=new Bun.CryptoHasher("sha256");return s.update(`${T}${Date.now()}`),s.digest("hex")},extendSession:()=>({}),onUserCreated:async()=>{},onSignUp:()=>{},onSignIn:()=>{},onSignOut:()=>{},onForgotPassword:()=>{},onResetPassword:()=>{},onMagicLinkCreated:()=>{}}}function cS(c){if(c&&typeof c==="object")delete c.password;return c}function CA(){return new Proxy({},{get:(c,T)=>TS(T)})}var LO={select:{id:!0,publicId:!0,email:!0,name:!0,locale:!0,globalRole:!0,accounts:{select:{id:!0,publicId:!0,organizationRole:!0,organization:!0}}}};class RO{models;constructor(c=CA()){this.models=c}run(c){return this.models.User.asSystem(c)}transaction(c){return this.models.User.transaction(c)}async createUser(c){let T=await this.run(()=>this.models.User.create({data:c}));return cS(T)}async updateUserPassword(c){let T=await this.run(()=>this.models.User.update({where:{id:c.id},data:{password:c.password}}));return cS(T)}async findUserByEmailAddress(c,T){return await this.run(()=>this.models.User.findUnique({where:T?{email:c,emailVerifiedAt:{not:null}}:{email:c}}))}async findUserByVerificationToken(c){return await this.run(()=>this.models.User.findFirst({where:{verificationToken:c}}))}async verifyUser(c){return await this.run(()=>this.models.User.update({where:{email:c},data:{emailVerifiedAt:new Date}}))}async createSession(c){return await this.run(()=>this.models.Session.create({data:c,include:{user:!0}}))}async createSessionV2(c){return await this.run(()=>this.models.Session.create({data:c,select:{token:!0,expiresAt:!0,absoluteExpiresAt:!0,updatedAt:!0,location:!0,userAgent:!0,user:LO}}))}async findSession(c){if(!c.token)return null;try{return await this.run(()=>this.models.Session.findUnique({where:{token:c.token},select:{token:!0,expiresAt:!0,absoluteExpiresAt:!0,updatedAt:!0,location:!0,userAgent:!0,user:LO}}))}catch(T){return console.error("findSession failed:",T),null}}async updateSession(c){return await this.run(()=>this.models.Session.update({where:{token:c.token},data:{expiresAt:c.expiresAt},select:{token:!0,expiresAt:!0,absoluteExpiresAt:!0,updatedAt:!0,location:!0,userAgent:!0,user:LO}}))}async deleteSession(c){await this.run(()=>this.models.Session.deleteMany({where:{token:c.token}}))}async deleteAllUserSessions(c){await this.run(()=>this.models.Session.deleteMany({where:{userId:c}}))}async createPasswordResetToken(c){return await this.run(()=>this.models.PasswordResetToken.create({data:{token:c.token,user:{connect:{id:c.user.id}}}}))}async findPasswordResetToken(c){return await this.run(()=>this.models.PasswordResetToken.findUnique({where:{token:c.token},include:{user:!0}}))}async deletePasswordResetToken(c){return await this.run(()=>this.models.PasswordResetToken.delete({where:{token:c.token}}))}async findInvitation(c,T){return await this.run(()=>this.models.OrganizationInvitation.findFirst({where:{publicId:c,email:T}}))}async deleteInvitationById(c){await this.run(()=>this.models.OrganizationInvitation.delete({where:{publicId:c}}))}async createAccount(c){return await this.run(()=>this.models.Account.create({data:{userId:c.userId,organizationId:c.organizationId,organizationRole:c.organizationRole}}))}async createMagicLinkToken(c){return await this.run(()=>this.models.MagicLinkToken.create({data:{email:c.email,token:c.token,pin:c.pin}}))}async findUserMagicLinkToken(c){return await this.run(()=>c.token?this.models.MagicLinkToken.findUnique({where:{token_email:{token:c.token,email:c.email}}}):this.models.MagicLinkToken.findUnique({where:{pin_email:{pin:c.pin,email:c.email}}}))}async deleteMagicLinkToken(c){await this.run(()=>this.models.MagicLinkToken.deleteMany({where:{email:c}}))}async createSocialAccount(c){return await this.run(()=>this.models.SocialAccount.create({data:c}))}}class _O{static token="auth";config;provider;constructor(c={},T=new RO){this.config=sS(e0(c),c),this.provider=T}get userProvider(){return this.provider}async getSession(c,T){let s=await this.userProvider.findSession({token:c,userAgent:T}),P=null;if(s?.user)P=await this.config.extendSession(s.user),s.user.extension=P;return s}async generateMagicLink(c){}async upsertSession(c){await this.userProvider.findSession({token:"",userAgent:""})}async authenticate(c){try{let T=await this.userProvider.findUserByEmailAddress(c,!1);if(!T)throw Error(`User not found with email: ${c}`);let s=await this.createOrUpdateSession({email:c,id:T.id}),P=new dc,f=new URL(P.rawRequest.url);if(P.ctx().setCookie("access_token",s.token,{expires:s.expiresAt,secure:!f.origin.includes("localhost"),httpOnly:!0}),s?.user)s.user.extension=await this.config.extendSession(s.user);return s}catch(T){console.log(T)}}async createOrUpdateSessionV2(c){let T=await this.createOrUpdateSession(c),s=null;if(T?.user)s=await this.config.extendSession(T.user),T.user.extension=s;return T}async createOrUpdateSession(c){let T=new dc,s=T.headers.get("User-Agent"),P=new Bun.CryptoHasher("sha256");P.update(`${c.email}${s}`);let f=P.digest("hex"),D=await this.userProvider.findSession({token:f,userAgent:Bun.env.NODE_ENV==="development"?"local":T.headers.get("User-Agent")});if(!D){let O=c.id;if(!O){let{id:i}=await this.userProvider.findUserByEmailAddress(c.email,!1);O=i}D=await this.userProvider.createSessionV2({token:f,userId:O,userAgent:Bun.env.NODE_ENV==="development"?"local":T.headers.get("User-Agent"),expiresAt:new Date(gs.Now.instant().add({hours:this.config.sessionExpiresInHours}).toString()),absoluteExpiresAt:new Date(gs.Now.instant().add({hours:this.config.sessionAbsoluteExpiresInHours}).toString())})}else D=await this.userProvider.updateSession({token:f,expiresAt:new Date(gs.Now.instant().add({hours:this.config.sessionExpiresInHours}).toString())});return D}async createMagicLinkToken(c){let T=await this.userProvider.findUserByEmailAddress(c,!1);if(T){await this.userProvider.deleteMagicLinkToken(c);let s=await this.config.generateMagicLinkToken(c),P=(Number.parseInt(SA(4).toString("hex"),16)%1e6).toString().padStart(6,"0");return await this.userProvider.createMagicLinkToken({email:c,token:s,pin:P}),{user:T,email:c,pin:P,token:s}}return{}}}class PS extends jc{async run(c){let T=vc.getStore(),s=T.req.cookies.get("access_token"),P=T.req.headers.get("access_token"),f=s||P;if(!f)throw new Ds;let D=T.user;if(!D){let O=await nP(_O).getSession(f,T.req.headers.get("User-Agent"));if(!O)throw new Ds;D=O?.user,T.setUser(D)}return{}}}class fS extends jc{async run(...c){let[T="public",s="864000",...P]=c,f=`${T}, max-age=${s}${P.length>0?", ":""}${P.join(", ")}`;if(c.length===0)f="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if(c.length===1&&c[0]==="public")f="public, max-age=864000, stale-while-revalidate=300, stale-if-error=600";if(c.length===1&&c[0]==="private")f="private, max-age=0, stale-while-revalidate=300, stale-if-error=600";if(this.req.rawRequest.method==="GET")this.req.ctx().setHeaders("Cache-Control",f);return{}}}var MA={"Access-Control-Allow-Methods":"GET, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, X-Requested-With","Access-Control-Allow-Credentials":"true"};class DS extends jc{config={origins:{"":{"Access-Control-Allow-Methods":"GET, HEAD, POST, PUT, DELETE, OPTIONS","Access-Control-Allow-Headers":"Content-Type, Authorization, X-Requested-With","Access-Control-Allow-Credentials":"true"}}};run(){let c=this.req,T=c.rawRequest.headers.get("Origin");if(this.config.origins[T]){c.ctx().setHeaders("Access-Control-Allow-Origin",T);let s={...MA,...this.config.origins[T]};for(let[P,f]of Object.entries(s))c.ctx().setHeaders(P,f)}return{}}}class eP{config;static token="ratelimiter";constructor(c){this.config=c}get driver(){return this.config.driver}async consume(c,T={}){let s=T.limit??this.config.limit,P=T.window??this.config.window,f=T.cost??1;if(OS("window",P),OS("limit",s),!Number.isFinite(f)||f<0)throw Error(`Rate limiter cost must be zero or greater, got ${f}`);return await this.config.driver.consume({key:c,limit:s,window:P*1000,cost:f})}}function OS(c,T){if(!Number.isFinite(T)||T<=0)throw Error(`Rate limiter ${c} must be greater than zero, got ${T}`)}class dO extends V{constructor(c){super("Rate limit exceeded");let T={"Content-Type":"application/json",...c?SS(c):{}};this.payload={api:{status:429,data:{error:{message:"Rate limit exceeded"}},headers:T},view:{error:{message:"Rate limit exceeded"},status:429,headers:T}}}}class FS extends jc{async run(c,T){let s=ZA();if(!s)return{};let P=await s.consume(this.key(),{limit:iS(c)??this.config.limit,window:iS(T)??this.config.window});if(this.config.headers!==!1){let f=this.req.ctx?.();if(f)for(let[D,O]of Object.entries(SS(P)))f.setHeaders(D,O)}if(!P.allowed)throw new dO(P);return{}}key(){if(this.config.key)return this.config.key(this.req);return`${CS(this.req)}:${this.req.routePath??"*"}`}}function ZA(){try{let c=nP();return c.bound(eP)?c.make(eP):null}catch{return null}}function CS(c){let T=c.headers.get("x-forwarded-for");if(T){let[s]=T.split(",");if(s?.trim())return s.trim()}return c.headers.get("x-real-ip")?.trim()||"unknown"}function SS(c){let T={"X-RateLimit-Limit":String(c.limit),"X-RateLimit-Remaining":String(c.remaining),"X-RateLimit-Reset":String(Math.ceil(c.resetAt/1000))};if(!c.allowed)T["Retry-After"]=String(Math.max(1,Math.ceil(c.retryAfter/1000)));return T}function iS(c){if(c===void 0||c===null||c==="")return;let T=Number(c);if(!Number.isFinite(T)||T<=0)return;return T}class MS extends jc{async run(){let c=this.req.cookies.get("csrf_token");if(!c)throw new gO;if(!["POST","PUT","PATCH","DELETE"].includes(this.req.rawRequest.method))return{};if(!Bun.CSRF.verify(c,{secret:process.env.SECRET}))throw new gO;return{}}}class gO extends V{constructor(){super("Invalid CSRF token");this.name="InvalidCSRFTokenError"}payload={api:{status:403,data:{error:"Invalid CSRF token"}},view:{}}}class ZS{policiesList={};constructor(){let c=this.register();for(let T of c){let s=new T;this.policiesList[T.name]=s}}register(){return[]}}class AS{all(c,T){return!0}}export{cf as Ud,yO as Vd,BO as Wd,Ts as Xd,Tf as Yd,aS as Zd,ES as _d,sf as $d,ss as ae,EA as be,V as ce,Ps as de,dc as ee,kc as fe,fs as ge,Pf as he,zO as ie,HO as je,Bs as ke,NO as le,Ds as me,hO as ne,oO as oe,Df as pe,bS as qe,Os as re,jc as se,qS as te,JS as ue,KS as ve,gs as we,Mj as xe,e0 as ye,RO as ze,_O as Ae,PS as Be,fS as Ce,DS as De,eP as Ee,dO as Fe,FS as Ge,CS as He,MS as Ie,ZS as Je,AS as Ke};
3
-
4
- //# debugId=122276D6707BE39B64756E2164756E21
@@ -1,4 +0,0 @@
1
- // @bun
2
- import{M}from"./chunk-c40n5r4v.js";import{Hf as E}from"./chunk-4dan69s4.js";class x{marshaller;serializer;deserializer;serdeContext;defaultContentType;constructor({marshaller:i,serializer:n,deserializer:o,serdeContext:c,defaultContentType:y}){this.marshaller=i,this.serializer=n,this.deserializer=o,this.serdeContext=c,this.defaultContentType=y}async serializeEventStream({eventStream:i,requestSchema:n,initialRequest:o}){let c=this.marshaller,y=n.getEventStreamMember(),p=n.getMemberSchema(y),d=this.serializer,f=this.defaultContentType,h=Symbol("initialRequestMarker"),S={async*[Symbol.asyncIterator](){if(o){let r={":event-type":{type:"string",value:"initial-request"},":message-type":{type:"string",value:"event"},":content-type":{type:"string",value:f}};d.write(n,o);let t=d.flush();yield{[h]:!0,headers:r,body:t}}for await(let r of i)yield r}};return c.serialize(S,(r)=>{if(r[h])return{headers:r.headers,body:r.body};let t=Object.keys(r).find((s)=>{return s!=="__type"})??"",{additionalHeaders:e,body:a,eventType:l,explicitPayloadContentType:m}=this.writeEventBody(t,p,r);return{headers:{":event-type":{type:"string",value:l},":message-type":{type:"string",value:"event"},":content-type":{type:"string",value:m??f},...e},body:a}})}async deserializeEventStream({response:i,responseSchema:n,initialResponseContainer:o}){let c=this.marshaller,y=n.getEventStreamMember(),d=n.getMemberSchema(y).getMemberSchemas(),f=Symbol("initialResponseMarker"),h=c.deserialize(i.body,async(t)=>{let e=Object.keys(t).find((l)=>{return l!=="__type"})??"",a=t[e].body;if(e==="initial-response"){let l=await this.deserializer.read(n,a);return delete l[y],{[f]:!0,...l}}else if(e in d){let l=d[e];if(l.isStructSchema()){let m={},u=!1;for(let[s,g]of l.structIterator()){let{eventHeader:v,eventPayload:w}=g.getMergedTraits();if(u=u||Boolean(v||w),w){if(g.isBlobSchema())m[s]=a;else if(g.isStringSchema())m[s]=(this.serdeContext?.utf8Encoder??z.toUtf8)(a);else if(g.isStructSchema())m[s]=await this.deserializer.read(g,a)}else if(v){let b=t[e].headers[s]?.value;if(b!=null)if(g.isNumericSchema())if(b&&typeof b==="object"&&"bytes"in b)m[s]=BigInt(b.toString());else m[s]=Number(b);else m[s]=b}}if(u)return{[e]:m};if(a.byteLength===0)return{[e]:{}}}return{[e]:await this.deserializer.read(l,a)}}else return{$unknown:t}}),S=h[Symbol.asyncIterator](),r=await S.next();if(r.done)return h;if(r.value?.[f]){if(!n)throw Error("@smithy::core/protocols - initial-response event encountered in event stream but no response schema given.");for(let[t,e]of Object.entries(r.value))o[t]=e}return{async*[Symbol.asyncIterator](){if(!r?.value?.[f])yield r.value;while(!0){let{done:t,value:e}=await S.next();if(t)break;yield e}}}}writeEventBody(i,n,o){let c=this.serializer,y=i,p=null,d,f=(()=>{return n.getSchema()[4].includes(i)})(),h={};if(!f){let[t,e]=o[i];y=t,c.write(15,e)}else{let t=n.getMemberSchema(i);if(t.isStructSchema()){for(let[e,a]of t.structIterator()){let{eventHeader:l,eventPayload:m}=a.getMergedTraits();if(m)p=e;else if(l){let u=o[i][e],s="binary";if(a.isNumericSchema())if(-2147483648<=u&&u<=2147483647)s="integer";else s="long";else if(a.isTimestampSchema())s="timestamp";else if(a.isStringSchema())s="string";else if(a.isBooleanSchema())s="boolean";if(u!=null)h[e]={type:s,value:u},delete o[i][e]}}if(p!==null){let e=t.getMemberSchema(p);if(e.isBlobSchema())d="application/octet-stream";else if(e.isStringSchema())d="text/plain";c.write(e,o[i][p])}else c.write(t,o[i])}else if(t.isUnitSchema())c.write(t,{});else throw Error("@smithy/core/event-streams - non-struct member not supported in event stream union.")}let S=c.flush()??new Uint8Array;return{body:typeof S==="string"?(this.serdeContext?.utf8Decoder??z.fromUtf8)(S):S,eventType:y,explicitPayloadContentType:d,additionalHeaders:h}}}var z,T;var C=E(()=>{z=M();T=x});C();export{T as EventStreamSerde};export default {get EventStreamSerde(){return T}};
3
-
4
- //# debugId=0E5BB7DFB59E7DBB64756E2164756E21
@@ -1,4 +0,0 @@
1
- // @bun
2
- import{Q as a,R as b,S as c,T as d,U as e,V as f,W as g}from"./chunk-0fm6jh9b.js";import"./chunk-tey1xayb.js";import"./chunk-get4mkx8.js";import"./chunk-4dan69s4.js";export{g as fromEnv,c as ENV_SESSION,b as ENV_SECRET,a as ENV_KEY,d as ENV_EXPIRATION,e as ENV_CREDENTIAL_SCOPE,f as ENV_ACCOUNT_ID};
3
-
4
- //# debugId=6F8D5665603FE0CC64756E2164756E21
@@ -1,5 +0,0 @@
1
- // @bun
2
- import{$ as q,_ as D}from"./chunk-y3zz410b.js";import"./chunk-tkdxv6cq.js";import{Ac as V,oc as P}from"./chunk-dgasxgsm.js";import"./chunk-rkbv3df7.js";import"./chunk-z1e55w67.js";import"./chunk-q0y0j3ne.js";import"./chunk-4mcyyh1v.js";import"./chunk-z2tcxwyr.js";import"./chunk-f6dd4gd8.js";import"./chunk-3296fwss.js";import"./chunk-x6y1z4cq.js";import"./chunk-tds3xq6b.js";import"./chunk-j23cengk.js";import{Df as v}from"./chunk-hxb1eg2z.js";import"./chunk-4dan69s4.js";import{join as E}from"path";import{Duplex as o}from"stream";import{constants as T,createBrotliCompress as l,createGzip as n}from"zlib";var i=["br","gzip"],t=1024,a=5,s=19,r=6;function e($){if($===void 0)return 1;if(!/^\d+(\.\d{0,3})?$/.test($.trim()))return 1;let J=Number($.trim());return Number.isFinite(J)?Math.min(J,1):1}function JJ($){if($===null||$===void 0)return null;let J=new Map;for(let H of $.split(",")){let[Z,...X]=H.split(";"),j=Z.trim().toLowerCase();if(j==="")continue;let x=1;for(let K of X){let O=K.indexOf("=");if(O===-1)continue;if(K.slice(0,O).trim().toLowerCase()==="q"){x=e(K.slice(O+1));break}}J.set(j,x)}return J}function $J($,J=i){let H=JJ($);if(!H)return null;let Z=H.get("*"),X=null,j=0;for(let x of J){let K=H.get(x)??Z??0;if(K>j)X=x,j=K}return X}function HJ($,J){if(!$)return!1;return $.split(",").some((H)=>H.trim().toLowerCase().split("=")[0].trim()===J)}function UJ($,J){if($==="HEAD")return!1;if(!J.body)return!1;if(J.status<200||J.status===204||J.status===206||J.status===304)return!1;if(J.headers.has("Content-Range"))return!1;let H=J.headers.get("Content-Type");if(!H||!/^\s*text\/html\s*(;|$)/i.test(H))return!1;let Z=J.headers.get("Content-Encoding");if(Z&&Z.trim().toLowerCase()!=="identity")return!1;if(HJ(J.headers.get("Cache-Control"),"no-transform"))return!1;let X=J.headers.get("Content-Length");if(X!==null&&Number(X)<t)return!1;return!0}function ZJ($){let J=$==="br"?l({params:{[T.BROTLI_PARAM_QUALITY]:a,[T.BROTLI_PARAM_LGWIN]:s},flush:T.BROTLI_OPERATION_FLUSH}):n({level:r,flush:T.Z_SYNC_FLUSH});return o.toWeb(J)}function zJ($){let J=$.get("Vary");if(!J){$.set("Vary","Accept-Encoding");return}let H=J.split(",").map((Z)=>Z.trim().toLowerCase());if(H.includes("*")||H.includes("accept-encoding"))return;$.append("Vary","Accept-Encoding")}function F($,J){if(!UJ($.method,J))return J;let H=new Headers(J.headers);zJ(H);let Z=$J($.headers.get("Accept-Encoding"));if(!Z)return new Response(J.body,{status:J.status,statusText:J.statusText,headers:H});let X;try{X=ZJ(Z)}catch{return new Response(J.body,{status:J.status,statusText:J.statusText,headers:H})}return H.set("Content-Encoding",Z),H.delete("Content-Length"),new Response(J.body.pipeThrough(X),{status:J.status,statusText:J.statusText,headers:H})}function y($){let J=$.toString(),H=new Bun.CryptoHasher("sha1");return H.update(J),H.digest("hex")}if(!globalThis.URLPattern)globalThis.URLPattern=P;import{exists as GJ}from"fs/promises";var g="app/client.tsx";function w($){let J=$["app/client.tsx"]?.file;if(!J)return;return{module:`/${J}`,preload:S($,"app/client.tsx")}}function S($,J){let H=[],Z=new Set,X=(j)=>{if(Z.has(j))return;Z.add(j);let x=$[j];if(!x?.file)return;H.push(`/${x.file}`);for(let K of x.imports??[])X(K)};return X(J),H}var I=v(),XJ=E(I,"app"),L=E(I,"dist");async function VJ($,J){let H=await import(`${L}/client/.vite/manifest.json`),Z=await import(`${L}/server/.vite/manifest.json`);process.env.ROOT_DIR=I,process.env.APP_DIR=XJ,process.env.DIST_DIR=L;let X={},j={},x={},K={},O={},f=(U,G)=>`"${U}": () => import("${G}")`,k=[];for(let U of["404",...$.getFlatComponentTree.call($)]){let G=Z[`app/views/${U}.tsx`];if(!G?.file){console.log(`Server file not found for ${U}`),console.log(G);let W=Object.keys(Z),A=`app/views/${U}.tsx`;console.log(`${A} not found in server manifest`),console.log(W)}let Q=await import(`${process.env.DIST_DIR}/server/${G?.file}`);X[U]=Q.default,j[U]=Q.OpenGraph,x[U]=Q;let z=H[`app/views/${U}.tsx`];if(z?.css&&z?.css.length>0)K[U]=z?.css;if(z)k.push(f(U,`/${z?.file}`)),O[U]=S(H,`app/views/${U}.tsx`)}let u=`{${k.join(",")}}`,N=w(H);if(!N)console.error(`Client manifest has no "${g}" entry \u2014 dist/client is incomplete, so documents will render but never hydrate.`);let m=H["app/client.tsx"]?.css??[],h=(await Promise.all(m.map((U)=>Bun.file(`${L}/client/${U}`).text()))).join(`
3
- `),c=new P({pathname:"/*.:filetype(png|txt|js|css|jpg|svg|jpeg|avif|webp|ico|ttf|map)"});async function p(U){let{pathname:G}=new URL(U.url),Q=G.startsWith("/.well-known"),z=c.test({pathname:G})||Q,W=G.startsWith("/api");if(z&&!W){let A=new URL(U.url),b=U.url.replace(A.origin,"").split("?")[0],B=`${L}/client${b.replace("/assets/assets","/assets")}`,C=await GJ(B);if(!C&&A.pathname.includes(".js"))return new Response(`if(caches){caches?.delete("${B}")}window.location.reload();export {}`,{headers:{"Content-Type":"application/javascript"}});if(!C){if(G===V||G.startsWith(`${V}/`))return new Response("Not found",{status:404});return await R(U,G)}try{let Y=Bun.file(B),_=y(Y.lastModified);return new Response(Y.stream(),{headers:{"Content-Type":Y.type,"Cache-Control":"public, max-age=31536000, must-revalidate","Content-Length":String(Y.size),ETag:_}})}catch(Y){return $.onException?.(Y),new Response("Not found",{status:404})}}return await R(U,G)}async function R(U,G){let Q=$.fetch.bind($);try{let z=await Q(U);if(z instanceof Response)return z;else{let W=[];return W.push({content:h}),await z({getStyles:async(b)=>{if(!b)return D([]);for(let B of b){let C=H[`app/views/${B}.tsx`];for(let Y of C?.css??[]){let _=Bun.file(`${process.env.DIST_DIR}/client/${Y}`);W.push({id:Y,content:await _.text()})}}return D(W)},clientEntry:N,modulePreloadManifest:O,loaders:u,viewImportMap:X,viewModules:x,ogMap:j,cssManifest:K})}}catch(z){if(console.error(z),G.startsWith("/api"))return new Response(JSON.stringify({error:z.message}),{status:500,headers:{"Content-Type":"application/json"}});return $.onException?.(z),new Response(z.stack,{status:500})}}let d=(process.env.GEMI_COMPRESSION??"auto").toLowerCase()!=="off",M=Bun.serve({maxRequestBodySize:10737418240,fetch:async(U,G)=>{if(!U.headers.get("x-forwarded-for")){let z=G.requestIP(U);if(z)U.headers.set("x-forwarded-for",z.address)}let Q=await J(U,p);return d?F(U,Q):Q},idleTimeout:Number(process.env.SERVER_IDLE_TIMEOUT??10),port:process.env.PORT||5173});return q({port:M.port,rootDir:I}),M}export{VJ as httpProd};
4
-
5
- //# debugId=BC47A4F2D8EBF4CE64756E2164756E21
@@ -1,5 +0,0 @@
1
- // @bun
2
- var $=globalThis.__GEMI_DICTIONARY_REGISTRY__??={registry:new Map,resolved:new Map,inFlight:new Map,degraded:new Map,order:[],warmed:new Map,activeLocale:null},{registry:V,resolved:X,inFlight:Q,degraded:E,order:j,warmed:W}=$;function G(q,x){return`${q}\x00${x}`}function U(q){if(V.has(q.id))return;V.set(q.id,q),j.push(q.id)}function Y(){return j.length}function I(q,x){return X.get(q)?.get(x)}function Z(q,x,A){let z=X.get(q);if(!z)z=new Map,X.set(q,z);z.set(x,A)}function M(q,x){let A=I(q,x);if(A)return A;let z=G(q,x),C=Q.get(z);if(C)return C;let B=V.get(q);if(!B)throw Error(`Unknown dictionary "${q}". A dictionary must be created with defineDictionary() and its module must have been evaluated before it is read.`);let H=B.load(x);if(!(H instanceof Promise))return Z(q,x,H),H;let J=H.then((O)=>{return Z(q,x,O),Q.delete(z),O},(O)=>{throw Q.delete(z),O});return Q.set(z,J),J}function _(q,x){let A=I(q,x);if(A)return A;let z=G(q,x),C=E.get(z);if(C)return C;let B=M(q,x);if(!(B instanceof Promise))return B;let H=B.then((J)=>J,(J)=>{return console.error(`Failed to load dictionary ${q} for locale ${x}; rendering keys instead.`,J),N});return E.set(z,H),H}var N={};async function D(q,x){let A=x??W.get(q)??0,z=j.slice(A);if(z.length===0)return;let C=await Promise.all(z.map(async(B)=>{try{return await M(B,P(B,q)),!0}catch{return!1}}));if(x===void 0){let B=C.indexOf(!1),H=B===-1?z.length:B;W.set(q,Math.max(W.get(q)??0,A+H))}}function P(q,x){if(x)return x;return V.get(q)?.locales[0]??x}function K(q,x){if(!q)return;for(let[A,z]of Object.entries(q))Z(A,x,z)}function S(q){if(q)$.activeLocale=q}function T(){return $.activeLocale}if(typeof window<"u"){let q=window,x=([z,C,B])=>{Z(z,C,B)},A=Array.isArray(q.__GEMI_DICT__)?q.__GEMI_DICT__:[];q.__GEMI_DICT__={push:x};for(let z of A)x(z)}function L(){V.clear(),X.clear(),Q.clear(),E.clear(),W.clear(),j.length=0,$.activeLocale=null}function w(){let q=new Set,x=[],A=[];return{use(z,C,B){let H=`${z} ${C}`;if(q.has(H))return;q.add(H);let J={id:z,locale:C,strings:B};if(x.length===0){A.push(J);return}for(let O of x)O(J)},onUse(z){x.push(z);while(A.length>0)z(A.shift())}}}
3
- export{U as Kd,Y as Ld,M as Md,_ as Nd,D as Od,K as Pd,S as Qd,T as Rd,L as Sd,w as Td};
4
-
5
- //# debugId=B782E12B365A919464756E2164756E21
@@ -1,11 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../i18n/dictionaryRegistry.ts", "../i18n/dictionarySink.ts"],
4
- "sourcesContent": [
5
- "/**\n * The process-wide store behind `defineDictionary`.\n *\n * Every handle registers itself here when its module is *evaluated*, not when\n * it is first rendered. That ordering is the whole point: the view router\n * already awaits a view's module import before rendering it, so by the time it\n * calls `preloadDictionaries()` every dictionary reachable from that view has\n * announced itself and can be warmed in one pass. `useDictionary` then reads\n * resolved strings synchronously and the render never suspends — on the server\n * that keeps the SSR stream from fragmenting into a reveal chunk per\n * dictionary, and on the client it keeps navigations flash-free.\n *\n * `use()` in the hook is the correctness net for what a preload pass cannot\n * see: a dictionary inside a `lazy()` subtree, or a locale switch.\n */\n\nimport type { LocaleStrings } from \"./dictionaryShape\";\n\nexport type { LocaleStrings };\n\nexport interface RegisteredDictionary {\n id: string;\n /** Locales this dictionary declares. Empty when it is not known up front. */\n locales: string[];\n load: (locale: string) => Promise<LocaleStrings> | LocaleStrings;\n}\n\ninterface RegistryState {\n /** Every handle that has been constructed, by id. */\n registry: Map<string, RegisteredDictionary>;\n /** Resolved strings: id -> locale -> strings. */\n resolved: Map<string, Map<string, LocaleStrings>>;\n /** In-flight loads, so N components sharing a dictionary share one request. */\n inFlight: Map<string, Promise<LocaleStrings>>;\n /**\n * Never-rejecting promises for the render path; see\n * `loadDictionaryForRender`. `use()` needs a stable reference, so these\n * cannot be built per render.\n */\n degraded: Map<string, Promise<LocaleStrings>>;\n /**\n * Registration order, so `preloadDictionaries` can warm only what a freshly\n * imported module added instead of re-walking every dictionary in the app on\n * every navigation.\n */\n order: string[];\n /**\n * Per locale, how far into `order` an unmarked `preloadDictionaries` has\n * already warmed. Lets the server's per-request call cost O(newly imported)\n * rather than O(every dictionary in the app).\n */\n warmed: Map<string, number>;\n /**\n * The locale currently being rendered, recorded by `useDictionary`. The\n * initial payload is in `__GEMI_DATA__`, but that snapshot is frozen at the\n * first load — after a locale switch it is stale, and the view loader needs\n * to know which locale's chunks to warm.\n */\n activeLocale: string | null;\n}\n\n/**\n * Parked on `globalThis` rather than in module scope, because this module gets\n * bundled more than once and the copies have to agree.\n *\n * gemi ships `gemi/client` from one Vite lib build and `gemi/dictionary` from a\n * separate Bun build, an SSR view graph externalizes some gemi subpaths and\n * bundles others, and a dictionary imported by both a view and a controller is\n * evaluated on both sides. Every one of those splits would otherwise produce a\n * second registry: views would register into one Map while the view router\n * preloaded and snapshotted from another, and the hydration payload would come\n * out empty. Module identity is not something this can depend on; a global key\n * is.\n */\nconst GLOBAL_KEY = \"__GEMI_DICTIONARY_REGISTRY__\";\n\nconst state: RegistryState = ((globalThis as any)[GLOBAL_KEY] ??= {\n registry: new Map(),\n resolved: new Map(),\n inFlight: new Map(),\n degraded: new Map(),\n order: [],\n warmed: new Map(),\n activeLocale: null,\n});\n\nconst { registry, resolved, inFlight, degraded, order, warmed } = state;\n\nfunction cacheKey(id: string, locale: string) {\n return `${id}\\0${locale}`;\n}\n\nexport function registerDictionary(entry: RegisteredDictionary) {\n // A dictionary module can be evaluated twice with the same id — e.g. the\n // Vite-processed copy pulled in by a view and the plain copy a controller\n // imports outside the bundler. Same id means same source literal, so the\n // first registration wins and the duplicate is a no-op rather than a reset\n // that would drop already-resolved strings.\n if (registry.has(entry.id)) {\n return;\n }\n registry.set(entry.id, entry);\n order.push(entry.id);\n}\n\n/** A marker for \"everything registered so far\", for `preloadDictionaries`. */\nexport function dictionaryRegistrationMark(): number {\n return order.length;\n}\n\nexport function getResolved(\n id: string,\n locale: string,\n): LocaleStrings | undefined {\n return resolved.get(id)?.get(locale);\n}\n\nfunction putResolved(id: string, locale: string, strings: LocaleStrings) {\n let byLocale = resolved.get(id);\n if (!byLocale) {\n byLocale = new Map();\n resolved.set(id, byLocale);\n }\n byLocale.set(locale, strings);\n}\n\n/**\n * Load one dictionary's locale, de-duplicating concurrent callers. Returns the\n * strings directly (not a promise) when they are already resolved, so the hook\n * can take a synchronous path without a microtask hop.\n */\nexport function loadDictionary(\n id: string,\n locale: string,\n): LocaleStrings | Promise<LocaleStrings> {\n const already = getResolved(id, locale);\n if (already) {\n return already;\n }\n\n const key = cacheKey(id, locale);\n const pending = inFlight.get(key);\n if (pending) {\n return pending;\n }\n\n const entry = registry.get(id);\n if (!entry) {\n throw new Error(\n `Unknown dictionary \"${id}\". A dictionary must be created with defineDictionary() and its module must have been evaluated before it is read.`,\n );\n }\n\n const result = entry.load(locale);\n\n // The untransformed path holds every locale in memory and answers\n // synchronously — no reason to make callers await a resolved promise.\n if (!(result instanceof Promise)) {\n putResolved(id, locale, result);\n return result;\n }\n\n const promise = result.then(\n (strings) => {\n putResolved(id, locale, strings);\n inFlight.delete(key);\n return strings;\n },\n (err) => {\n inFlight.delete(key);\n throw err;\n },\n );\n inFlight.set(key, promise);\n return promise;\n}\n\n/**\n * The same load, but as something safe to hand React's `use()`.\n *\n * A rejecting promise passed to `use()` rethrows during render, which unmounts\n * the whole route into its error boundary — or, before the shell is ready,\n * fails the server render outright. A missing locale chunk is a routine event\n * (a browser holding stale HTML after a rolling deploy requests a hashed\n * filename that no longer exists), and the deprecated `useTranslator` degraded\n * every i18n failure to rendering the raw key. This keeps that behaviour: the\n * returned promise resolves to no strings, and the per-key lookup in\n * `useDictionary` then logs and falls back to the key.\n *\n * The degraded promise is cached because `use()` requires a stable reference —\n * a fresh `.then()` per render would suspend forever. It is only consulted\n * after `getResolved` misses, so a later successful load supersedes it without\n * needing to be evicted.\n */\nexport function loadDictionaryForRender(\n id: string,\n locale: string,\n): LocaleStrings | Promise<LocaleStrings> {\n const already = getResolved(id, locale);\n if (already) {\n return already;\n }\n\n const key = cacheKey(id, locale);\n const cached = degraded.get(key);\n if (cached) {\n return cached;\n }\n\n const result = loadDictionary(id, locale);\n if (!(result instanceof Promise)) {\n return result;\n }\n\n const safe = result.then(\n (strings) => strings,\n (err) => {\n console.error(\n `Failed to load dictionary ${id} for locale ${locale}; rendering keys instead.`,\n err,\n );\n return EMPTY_STRINGS;\n },\n );\n degraded.set(key, safe);\n return safe;\n}\n\nconst EMPTY_STRINGS: LocaleStrings = {};\n\n/**\n * Warm dictionaries for `locale`, so a subsequent render reads them\n * synchronously instead of suspending.\n *\n * With a `mark` — the value taken *before* importing a view module — only that\n * view's newly announced dictionaries are loaded. That is the client's use: it\n * knows exactly which chunk just arrived.\n *\n * Without one, it resumes from where this locale last got to. The server calls\n * it per request and has no mark to give (view modules were imported long\n * before the request arrived), so a plain scan from zero would walk every\n * dictionary in the app on every request — re-deriving the per-request cost this\n * whole change exists to remove, just with a smaller constant.\n *\n * An empty `locale` means the app configured none, and each dictionary is warmed\n * under its own source language — the same key `useDictionary` will ask for, so\n * the warmed entry is the one the render actually reads.\n *\n * Failures are swallowed: a dictionary that cannot load should surface at the\n * component that actually reads it, where the error names the key, rather than\n * take down an unrelated navigation.\n */\nexport async function preloadDictionaries(locale: string, mark?: number) {\n const from = mark ?? warmed.get(locale) ?? 0;\n const ids = order.slice(from);\n if (ids.length === 0) {\n return;\n }\n\n const settled = await Promise.all(\n ids.map(async (id) => {\n try {\n await loadDictionary(id, localeFor(id, locale));\n return true;\n } catch {\n // Deliberately ignored — see above.\n return false;\n }\n }),\n );\n\n if (mark === undefined) {\n // Advanced *after* the loads settle, and only across the leading run that\n // resolved. Moving it up front — as this first did — is a correctness bug\n // twice over: a second request arriving mid-flight reads the raised mark,\n // finds an empty slice, returns immediately and then suspends on the\n // in-flight promises anyway, which is the stream fragmentation the preload\n // exists to prevent; and a swallowed failure would be marked warm and never\n // retried. Stopping at the first failure keeps \"below the watermark\" and\n // \"resolved\" the same statement.\n const firstFailure = settled.indexOf(false);\n const reached = firstFailure === -1 ? ids.length : firstFailure;\n warmed.set(locale, Math.max(warmed.get(locale) ?? 0, from + reached));\n }\n}\n\n/**\n * Which locale a given dictionary should be warmed under.\n *\n * `useDictionary` falls back to the dictionary's own source language when the\n * app has no locale configured, so the preload has to make the same choice or\n * it caches under a key no render ever reads — warming `\"\"`, then suspending on\n * `\"en-US\"` a moment later.\n */\nfunction localeFor(id: string, locale: string): string {\n if (locale) {\n return locale;\n }\n return registry.get(id)?.locales[0] ?? locale;\n}\n\n/**\n * Seed already-known strings, skipping the loader entirely. The client calls\n * this with the SSR payload before hydration so the first render matches the\n * server without a single dictionary request.\n */\nexport function seedDictionaries(\n dictionaries: Record<string, LocaleStrings> | undefined,\n locale: string,\n) {\n if (!dictionaries) {\n return;\n }\n for (const [id, strings] of Object.entries(dictionaries)) {\n putResolved(id, locale, strings);\n }\n}\n\nexport function setActiveLocale(locale: string | undefined | null) {\n if (locale) {\n state.activeLocale = locale;\n }\n}\n\nexport function getActiveLocale(): string | null {\n return state.activeLocale;\n}\n\n/**\n * Adopt strings the server streamed into the document.\n *\n * Mirrors `__GEMI_STREAM__` in `QueryManagerContext`: scripts that already ran\n * sit buffered in a plain array, and from here on `push` seeds directly. Both\n * halves are needed because dictionary scripts interleave with React's chunks —\n * a segment that reveals late carries its dictionary late too.\n *\n * Installed at module scope rather than during a render: seeding is idempotent\n * and touches no React state, and doing it here means it is already in place\n * before hydration reads anything.\n */\ntype StreamedDictionary = [id: string, locale: string, strings: LocaleStrings];\n\nif (typeof window !== \"undefined\") {\n const w = window as unknown as {\n __GEMI_DICT__?: StreamedDictionary[] | { push: (p: StreamedDictionary) => void };\n };\n const adopt = ([id, locale, strings]: StreamedDictionary) => {\n putResolved(id, locale, strings);\n };\n const buffered = Array.isArray(w.__GEMI_DICT__) ? w.__GEMI_DICT__ : [];\n w.__GEMI_DICT__ = { push: adopt };\n for (const entry of buffered) {\n adopt(entry);\n }\n}\n\n/** Test-only: drop all state so cases do not leak into one another. */\nexport function __resetDictionaryRegistry() {\n registry.clear();\n resolved.clear();\n inFlight.clear();\n degraded.clear();\n warmed.clear();\n order.length = 0;\n state.activeLocale = null;\n}\n",
6
- "import type { LocaleStrings } from \"./dictionaryShape\";\n\n/**\n * Collects the dictionaries one SSR render actually read.\n *\n * Scoped per request by living in React context rather than in module state: a\n * streaming server has several renders in flight at once, so a module-level\n * collector would mix one page's dictionaries into another's payload. Context\n * is per render tree, which is exactly the boundary wanted, and it needs no\n * async-local storage to survive React's internal scheduling.\n *\n * Why stream these rather than put them in `__GEMI_DATA__`: that snapshot is\n * serialized before `renderToReadableStream` is even called, and which\n * dictionaries a page reads is only known once it has rendered. A suspended\n * segment reveals later still, long after the shell has flushed.\n *\n * The sink deliberately emits data, not markup — `streamQueryInjection` owns\n * script formatting and the `</script>`-safe encoding that goes with it.\n */\nexport interface DictionaryUse {\n id: string;\n locale: string;\n strings: LocaleStrings;\n}\n\nexport interface DictionarySink {\n /** Called during render, the first time a dictionary is read. */\n use(id: string, locale: string, strings: LocaleStrings): void;\n /** The response injector subscribes to receive uses as they happen. */\n onUse(cb: (use: DictionaryUse) => void): void;\n}\n\nexport function createDictionarySink(): DictionarySink {\n const seen = new Set<string>();\n const listeners: Array<(use: DictionaryUse) => void> = [];\n // Uses recorded before the injector subscribed — the render begins before the\n // response stream is wrapped.\n const pending: DictionaryUse[] = [];\n\n return {\n use(id, locale, strings) {\n const key = `${id} ${locale}`;\n if (seen.has(key)) return;\n seen.add(key);\n const entry: DictionaryUse = { id, locale, strings };\n if (listeners.length === 0) {\n pending.push(entry);\n return;\n }\n for (const listener of listeners) listener(entry);\n },\n onUse(cb) {\n listeners.push(cb);\n while (pending.length > 0) {\n cb(pending.shift()!);\n }\n },\n };\n}\n"
7
- ],
8
- "mappings": "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",
9
- "debugId": "B782E12B365A919464756E2164756E21",
10
- "names": []
11
- }
@@ -1,6 +0,0 @@
1
- // @bun
2
- import{pa as h}from"./chunk-tkdxv6cq.js";import{createElement as x}from"react";function j(i,n){let e=Object.keys(n).sort((u,b)=>b.length-u.length).map((u)=>u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),r=new RegExp(e.join("|"),"g");return i.replace(r,(u)=>n[u])}async function J(i,n,e=[]){let r=[...e.map((t)=>`${i}/views/${t}.tsx`),`${i}/views/RootLayout.tsx`],u=new Set;for(let t of r){let s=n.moduleGraph.getModulesByFile(t);if(s)for(let d of s)u.add(d)}let b=[],p=[],c={};for(let t of u)if(t)for(let s of t.importedModules){if(s.file.includes("module.css"))c[s.file]=s.ssrTransformResult.map.sourcesContent.join("");if(s.file.includes(".css"))p.push(s.file)}for(let t of p){let s=await n.transformRequest(t+"?direct"),d=t.includes("module.css"),o="";if(d)o=j(c[t],s.default);b.push({isDev:!0,id:t,content:d?o:s.code})}return b.map((t,s)=>{return x("style",{key:s,type:"text/css","data-vite-dev-id":t.id,dangerouslySetInnerHTML:{__html:t.content}})})}async function L(i=[]){return i.map((n,e)=>{return x("style",{key:e,id:n?.id,type:"text/css",dangerouslySetInnerHTML:{__html:n.content}})})}import{existsSync as f}from"fs";import{basename as k}from"path";import{networkInterfaces as v}from"os";var y={name:"gemi",version:"0.60.0",private:!1,license:"MIT",author:"Enes Tufekci <enes@gemijs.dev>",repository:{type:"git",url:"git+https://github.com/nstfkc/gemi.git",directory:"packages/gemi"},bin:{gemi:"./dist/bin/gemi.js","gemi-orm-generator":"./dist/bin/orm-generator.js"},files:["dist/**/*","ide/typescript-plugin/package.json","skills/**/*"],module:!0,exports:{"./http":"./http/index.ts","./client":"./client/index.ts","./testing":"./testing/index.ts","./app":"./app/index.ts","./facades":"./facades/index.ts","./email":"./email/index.ts","./vite":"./dist/vite/index.mjs","./kernel":"./kernel/index.ts","./services":"./services/index.ts","./broadcasting":"./broadcasting/index.ts","./i18n":"./i18n/index.ts","./dictionary":"./i18n/dictionaryRuntime.ts","./server":"./server/index.ts","./config":"./config/index.ts","./container":"./container/index.ts","./foundation":"./foundation/index.ts","./database":"./database/index.ts","./orm":"./orm/index.ts","./support":"./support/index.ts","./console/run":"./console/run.ts","./ide/typescript-plugin":"./ide/typescript-plugin/index.ts","./bun/preload":"./bun/preload.ts","./bun/plugin":"./bun/plugin.ts"},scripts:{lint:"oxlint",typecheck:"tsc --noEmit -p tsconfig.json && tsc --noEmit -p ide/typescript-plugin/tsconfig.json",build:"NODE_ENV=production bun run build:core && bun run build:bin && bun run build:types && bun run build:client && bun run build:plugin && bun run build:ts-plugin && bun run build:client-types && bun run build:augmentation","build:core":"bun ./scripts/build.ts","build:bin":"bun build --outdir=./dist/bin --target=bun --external=vite --external=react-dom --external=react/jsx-runtime --external=bun --external=sharp --external=@azure/storage-blob --sourcemap ./bin/gemi.ts ./bin/orm-generator.ts && bun ./scripts/prepare-bin.ts","build:client":"rm -rf dist/client dist/testing dist/chunks && vite build -c vite.client.config.mts","build:plugin":"vite build -c vite.plugin.config.mts","build:ts-plugin":"bun ./scripts/build-ts-plugin.ts","build:types":"tsc","build:client-types":"tsc -p tsconfig.browser.json",test:"bun --bun vitest","test:types":"vitest run --typecheck.only","test:packaging":"bun --bun vitest run --config vitest.packaging.config.ts","build:publish":"bun scripts/build-publish.ts",prepublishOnly:"echo 'Do not publish from this directory \u2014 its exports point at TS source. Run: bun run build:publish, then publish from .publish/' && exit 1","build:augmentation":"bun ./scripts/wire-augmentation.ts"},dependencies:{"@aws-sdk/client-s3":"^3.629.0","@aws-sdk/s3-request-presigner":"^3.629.0","ast-types":"^0.14.2",commander:"^12.1.0",history:"^5.3.0","jsx-email":"2.0.0-rc2.1","magic-string":"^0.30.17",open:"^10.1.0","react-error-boundary":"^6.0.0",recast:"^0.23.9",resend:"^6.12.3",satori:"^0.12.2","temporal-polyfill":"^0.2.5","twitter-api-v2":"^1.20.2","urlpattern-polyfill":"^10.0.0",uuid:"^9.0.1"},devDependencies:{"@babel/parser":"^7.25.4","@prisma/generator-helper":"^6.5.0","@repo/typescript-config":"*","@testing-library/react":"^16.3.2","@types/bun":"^1.3.14","@types/eslint":"^8.56.5","@types/node":"^20.11.24","@types/react":"^19.0.2","@types/react-dom":"^19.0.2",eslint:"^8.57.0",jsdom:"^30.0.1",oxlint:"^1.39.0",react:"19.2.3","react-dom":"19.2.3",typescript:"^5.7.3",vitest:"^4.0.0"},peerDependencies:{"@azure/storage-blob":"^12.28.0",react:">=19","react-dom":">=19",sharp:"^0.34.2",vite:"^8.0.0"},peerDependenciesMeta:{"@azure/storage-blob":{optional:!0}}};var z=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557\u2588\u2588\u2557","\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551","\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2551","\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551\u255A\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2551","\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u255A\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2551"," \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D"],O=Boolean(process.stdout.isTTY)&&!process.env.NO_COLOR,g=(i,n)=>O?`\x1B[${i}m${n}\x1B[0m`:n,T=(i)=>g("1",i),l=(i)=>g("2",i),a=(i)=>g("36",i),q=(i)=>g("32",i),E=(i)=>g("35",i);function R(){return y.version??"?"}function _(i){for(let n of Object.values(v()))for(let e of n??[])if((e.family==="IPv4"||e.family===4)&&!e.internal)return`http://${e.address}:${i}`;return null}function G(i){return h(i).filter((n)=>f(n)).map((n)=>k(n))}function A(i){let{port:n,rootDir:e}=i,r=`http://localhost:${n}`,u=_(n),b=G(e),p=(t,s)=>` ${q("\u279C")} ${T(t.padEnd(9))}${s}`,c=["",...z.map((t)=>E(t)),"",` ${l("gemi")} ${a(`v${R()}`)}`,"",p("Local:",a(r)),p("Network:",u?a(u):l("unavailable")),p("Env:",b.length?b.join(", "):l("none")),""];console.log(c.join(`
3
- `))}
4
- export{J as Z,L as _,A as $};
5
-
6
- //# debugId=487B21B42AFDBDAC64756E2164756E21
@@ -1,5 +0,0 @@
1
- // @bun
2
- import{lf as P}from"./chunk-f6dd4gd8.js";import{Gf as O}from"./chunk-4dan69s4.js";var S={};O(S,{registeredNames:()=>_,register:()=>W,has:()=>A,get:()=>R,clearRegistry:()=>C});var F=new Map;function W(j,z){F.set(j,z)}function A(j){return F.has(j)}function R(j){let z=F.get(j);if(z===void 0)throw new P(j,[...F.keys()]);return z}function _(){return[...F.keys()]}function C(){F.clear()}import{AsyncLocalStorage as k}from"async_hooks";class V{content={title:"Gemi App",description:null,openGraph:null};touched=!1;render(){return{title:this.content.title,description:this.content.description,openGraph:this.content.openGraph}}title(j){this.touched=!0,this.content.title=j}description(j){this.touched=!0,this.content.description=j}openGraph({title:j,description:z,type:B,url:Q,image:G,imageAlt:Y,imageWidth:Z,imageHeight:$,twitterImage:D=G,twitterImageAlt:M=Y,twitterImageWidth:E=Z,twitterImageHeight:b=$}){this.touched=!0;let K=G,L=D;if(G&&!G.startsWith("http"))K=`${process.env.HOST_NAME}${G}`,L=`${process.env.HOST_NAME}${D}`;this.content.openGraph=Object.fromEntries(Object.entries({title:j,description:z,type:B,url:Q,image:K,imageAlt:Y,imageWidth:Z,imageHeight:$,twitterImage:L,twitterImageAlt:M,twitterImageWidth:E,twitterImageHeight:b}).filter(([v,H])=>H!==void 0))}}function U(j,z,B={}){return[`${j}=${z}`,B.maxAge?`Max-Age=${B.maxAge}`:"",B.httpOnly?"HttpOnly":"",B.secure?"Secure":"",B.sameSite?`SameSite=${B.sameSite}`:"SameSite=Strict",B.path?`Path=${B.path}`:"Path=/",B.domain?`Domain=${B.domain}`:"",B.expires?`Expires=${B.expires.toUTCString()}`:"",B.partitioned?"Partitioned":""].filter((Q)=>Q!=="").join("; ")}var J=new k;class T{req;cookies=new Set;headers=new Headers;serverQueries=null;user=null;csrfHmac=null;locale=null;metadata=new V;rangeRequest=null;sessionId=null;featureEvaluations=null;featureContext=null;featureBuckets=null;constructor(j){this.req=j}setLocale(j){this.locale=j}renderMeta(){return this.metadata.render()}setCSRFHmac(j){this.csrfHmac=j}setCookie(j,z,B={}){this.cookies.add(U(j,z,B))}deleteCookie(j){this.cookies.add(U(j,"",{maxAge:-1}))}setHeaders(j,z){this.headers.set(j,z)}setUser(j){this.user=j}setRequest(j){this.req=j}destroy(){delete this.cookies,delete this.headers,this.serverQueries=null,this.sessionId=null,this.featureEvaluations=null,this.featureContext=null,this.featureBuckets=null,delete this.user}}var N="session_id";function x(){let j=X.getStore();if(!j)return null;if(j.sessionId)return j.sessionId;let z=j.req?.cookies?.get(N);if(z)j.sessionId=z;return j.sessionId}function I(){let j=X.getStore();if(!j)return null;let z=x();if(z)return z;let B=Bun.randomUUIDv7();return j.sessionId=B,j.setCookie(N,B,{httpOnly:!0,secure:Bun.env.NODE_ENV==="production",sameSite:"Lax",expires:new Date(Date.now()+31536000000)}),B}class X{static getStore(){return J.getStore()}static setRequest(j){J.getStore().req=j}static run(j,z){return J.run(new T(j),z)}static runWith(j,z){return J.run(j,z)}}
3
- export{x as Le,I as Me,X as Ne,W as Oe,A as Pe,R as Qe,_ as Re,S as Se};
4
-
5
- //# debugId=C9B049DBE002097764756E2164756E21