vibe64 0.1.39 → 0.1.40

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 (261) hide show
  1. package/bin/run.js +1942 -1846
  2. package/bin/server.js +136 -112
  3. package/bin/upgrade-state.js +5023 -4860
  4. package/dist/assets/GithubBrowserTabs-BoDkGFtY.js +1 -0
  5. package/dist/assets/LocalDatabaseServer-BWAvRlUl.css +1 -0
  6. package/dist/assets/LocalDatabaseServer-CVsGChHh.js +2 -0
  7. package/dist/assets/StudioErrorNotice-C_jbvp9V.js +1 -0
  8. package/dist/assets/VAlert-gwuhYlYb.js +1 -0
  9. package/dist/assets/VAutocomplete-D7Vk5wq_.js +1 -0
  10. package/dist/assets/VAvatar-DvRBcmqv.js +1 -0
  11. package/dist/assets/VBtn-BhVEwXLX.js +1 -0
  12. package/dist/assets/VCard-C3Hx769y.js +1 -0
  13. package/dist/assets/VCheckbox-DyCGSN0H.js +1 -0
  14. package/dist/assets/VCheckboxBtn-DCyuVH7W.css +1 -0
  15. package/dist/assets/VCheckboxBtn-DYcQU2Pn.js +1 -0
  16. package/dist/assets/VChip-VVdtjfq-.js +1 -0
  17. package/dist/assets/VDialog-CQDhjRiV.js +1 -0
  18. package/dist/assets/VDivider-Dq25WsKu.js +1 -0
  19. package/dist/assets/VExpansionPanels-C1y-myl5.js +1 -0
  20. package/dist/assets/VMenu-CDcBLYWR.js +1 -0
  21. package/dist/assets/VOverlay-Cp4rFk6g.js +1 -0
  22. package/dist/assets/VRadioGroup-CAjNZwF7.js +1 -0
  23. package/dist/assets/VRow-BskP28jR.js +1 -0
  24. package/dist/assets/VSelect-D3oLvCcB.js +2 -0
  25. package/dist/assets/VSheet-DxYEFfnM.js +1 -0
  26. package/dist/assets/VSkeletonLoader-Cync3lZZ.js +1 -0
  27. package/dist/assets/VSpacer-CgWOWvBh.js +1 -0
  28. package/dist/assets/VSwitch-BxGuGypi.js +1 -0
  29. package/dist/assets/VTextField-C0b_0cSa.js +1 -0
  30. package/dist/assets/VTextField-F6unyhrS.css +1 -0
  31. package/dist/assets/VTextarea-B7sZd1JY.js +1 -0
  32. package/dist/assets/{Vibe64AsyncModuleState-Do9EqX3S.js → Vibe64AsyncModuleState-syuPcpGx.js} +1 -1
  33. package/dist/assets/Vibe64AuthSettingsButton-CmiidAs5.js +5 -0
  34. package/dist/assets/{Vibe64AuthSettingsButton-M44SSmZ9.css → Vibe64AuthSettingsButton-D2lltUhi.css} +1 -1
  35. package/dist/assets/Vibe64CopyCommand-CYiZcy0d.js +1 -0
  36. package/dist/assets/Vibe64CopyCommand-ClbQLYZi.css +1 -0
  37. package/dist/assets/{Vibe64DashboardBackButton-BH_8j_VR.js → Vibe64DashboardBackButton-Go_MJuIK.js} +1 -1
  38. package/dist/assets/{Vibe64DashboardPageHeader-BXQR00HK.js → Vibe64DashboardPageHeader-BMrdRph6.js} +1 -1
  39. package/dist/assets/Vibe64DashboardPageHeader-CdlzsyKQ.css +1 -0
  40. package/dist/assets/Vibe64DashboardShell-MCzEQCWu.js +1 -0
  41. package/dist/assets/{Vibe64DatabaseWorkspace-CEml9BWn.js → Vibe64DatabaseWorkspace-DM9V017v.js} +3 -3
  42. package/dist/assets/{Vibe64DatabaseWorkspace-DPDMxhAW.css → Vibe64DatabaseWorkspace-DePBDUMy.css} +1 -1
  43. package/dist/assets/Vibe64OutputControls-CU9H0Dur.js +8 -0
  44. package/dist/assets/{Vibe64OutputControls-Co5YzwcK.css → Vibe64OutputControls-CeBzZPUT.css} +1 -1
  45. package/dist/assets/{Vibe64RepositoryWorkspace-Agyt4O-V.css → Vibe64RepositoryWorkspace-Bw9W691N.css} +1 -1
  46. package/dist/assets/{Vibe64RepositoryWorkspace-obZFXkoG.js → Vibe64RepositoryWorkspace-DaAChLA8.js} +2 -2
  47. package/dist/assets/{Vibe64SessionFiles-CQzs6fee.js → Vibe64SessionFiles-CM2EzXBf.js} +4 -4
  48. package/dist/assets/Vibe64SessionFiles-DsPb8hOe.css +1 -0
  49. package/dist/assets/{Vibe64TemporaryAiFixAction-BiuIE9mC.js → Vibe64TemporaryAiFixAction-CIePbdW8.js} +1 -1
  50. package/dist/assets/{Vibe64UiStoryboardView-BhKRpL0N.js → Vibe64UiStoryboardView-Bp9STItF.js} +1 -1
  51. package/dist/assets/{Vibe64UnavailableSessions-Ca5nC7KH.js → Vibe64UnavailableSessions-JBgHzM-j.js} +1 -1
  52. package/dist/assets/{_sessionId_-CKkGH3Rx.js → _sessionId_-DVHd6D5V.js} +1 -1
  53. package/dist/assets/{_sessionTool_-1V-z6Pbp.js → _sessionTool_-BV1AwpUx.js} +1 -1
  54. package/dist/assets/_slug_-DsfaE8Vh.js +25 -0
  55. package/dist/assets/_slug_-_qfQqdHb.css +1 -0
  56. package/dist/assets/{access-WlhPvPgy.js → access-BbzSuMt5.js} +1 -1
  57. package/dist/assets/app-BNh2oZg-.js +1 -0
  58. package/dist/assets/assistantRouting-DeE8jvtE.js +3 -0
  59. package/dist/assets/{changes-CHJjrZAc.js → changes-D8Koqrqg.js} +1 -1
  60. package/dist/assets/client-CybfBKCn.js +2 -0
  61. package/dist/assets/client-D6UGamrv.css +1 -0
  62. package/dist/assets/{conversation-B90ERX9h.js → conversation-DZW4-Wck.js} +2 -2
  63. package/dist/assets/{conversation-vxJGwmtW.css → conversation-TK6EmDk4.css} +1 -1
  64. package/dist/assets/{createSimpleFunctional-CZTGuNuR.js → createSimpleFunctional-zlXZooQW.js} +1 -1
  65. package/dist/assets/{dashboard-CuutW8iv.js → dashboard-DLrmf5ed.js} +1 -1
  66. package/dist/assets/definitions-DgyQJgn-.js +1 -0
  67. package/dist/assets/dialog-transition-D2vqGksQ.js +1 -0
  68. package/dist/assets/env-B5V1EC4M.css +1 -0
  69. package/dist/assets/env-rVQwLtYr.js +1 -0
  70. package/dist/assets/health-92hh8xXh.css +1 -0
  71. package/dist/assets/health-B6r9LLrd.js +1 -0
  72. package/dist/assets/{history-1_NU8azF.js → history-C6xLWUxL.js} +1 -1
  73. package/dist/assets/incoming-Bdqo8z25.css +1 -0
  74. package/dist/assets/incoming-CNwZa_yD.js +2 -0
  75. package/dist/assets/index-B9P6KjvH.js +138 -0
  76. package/dist/assets/{index-irlMYzLh.css → index-BC29JK2e.css} +1 -1
  77. package/dist/assets/{integrations-BMzWQQpa.js → integrations-CcrqPXxj.js} +10 -10
  78. package/dist/assets/integrations-Co8WvCiD.css +1 -0
  79. package/dist/assets/issues-DEjIlMdl.js +1 -0
  80. package/dist/assets/layout-B2Ap07aa.js +1 -0
  81. package/dist/assets/{lazy-NHSwD9FS.js → lazy-BjyT2XvW.js} +1 -1
  82. package/dist/assets/{learning-Bdi3XRS7.js → learning-BP1xvd8w.js} +1 -1
  83. package/dist/assets/mdi-Bt90Ns76.js +1 -0
  84. package/dist/assets/placement-CQy46H3H.js +1 -0
  85. package/dist/assets/publish-CPWnztCc.css +1 -0
  86. package/dist/assets/publish-CVXolnAG.js +3 -0
  87. package/dist/assets/pull-requests-BjwokcU0.css +1 -0
  88. package/dist/assets/pull-requests-DdgzLzY_.js +1 -0
  89. package/dist/assets/{repository-BL_2bgzC.js → repository-5S0LzRq3.js} +1 -1
  90. package/dist/assets/ripple-EFNA8EBu.js +11 -0
  91. package/dist/assets/rolldown-runtime-DBalRfVu.js +1 -0
  92. package/dist/assets/{session-BdhKrcX4.js → session-BGpiZThC.js} +1 -1
  93. package/dist/assets/{settings-1rpuL7eR.js → settings-BKP_eQ3F.js} +1 -1
  94. package/dist/assets/settings-D8x4KUqV.css +1 -0
  95. package/dist/assets/shared-DZETtWRH.js +2 -0
  96. package/dist/assets/studioGateApi-BXHVBVEc.js +1 -0
  97. package/dist/assets/studioUrls-DpSS-0z1.js +1 -0
  98. package/dist/assets/useArchivedVibe64Sessions-D8DWpcSy.js +1 -0
  99. package/dist/assets/useCommand-nWFczmJy.js +1 -0
  100. package/dist/assets/useEndpointResource-Ds8EDBZ2.js +1 -0
  101. package/dist/assets/useRealtimeEvent-DrOiU8lJ.js +1 -0
  102. package/dist/assets/{useUiFeedback-BPBF_0bp.js → useUiFeedback-CMwE4MLs.js} +1 -1
  103. package/dist/assets/useVibe64ConversationLog-D-Vkq0sK.js +1 -0
  104. package/dist/assets/{useVibe64DatabaseTools-4o6S8eXq.js → useVibe64DatabaseTools-Dpm53ruL.js} +1 -1
  105. package/dist/assets/useVibe64ProjectScope-B5ogg6jd.js +1 -0
  106. package/dist/assets/useVibe64SessionData-CGJXj3r7.js +1 -0
  107. package/dist/assets/{useVibe64SessionSelection-BzL1y_Vq.js → useVibe64SessionSelection-BEqKR412.js} +1 -1
  108. package/dist/assets/{useVibe64SystemGraph-B4RmsC9Y.js → useVibe64SystemGraph-DbSfrYF8.js} +1 -1
  109. package/dist/assets/{useVibe64Terminal-Cg3idMcy.js → useVibe64Terminal-I7Sf6xMW.js} +1 -1
  110. package/dist/assets/vibe64ProjectScope.local-B06ABkhI.js +1 -0
  111. package/dist/assets/vibe64SavedEnvValues-B_QE9aAj.js +1 -0
  112. package/dist/assets/vibe64SessionFocus-CA-sk8Ri.css +1 -0
  113. package/dist/assets/vibe64SessionFocus-tv2wz7_H.js +1 -0
  114. package/dist/assets/{vibe64SessionInfo-BuBUdL-e.js → vibe64SessionInfo-B0uItVOK.js} +1 -1
  115. package/dist/assets/{vibe64SessionToolDefinitions-BJaJH5LR.js → vibe64SessionToolDefinitions-Dsn8WYmO.js} +1 -1
  116. package/dist/index.html +56 -46
  117. package/docs/colleague-usage/account-profile-and-appearance.md +1 -1
  118. package/docs/colleague-usage/{ai-accounts-and-routing.md → ai-accounts.md} +41 -114
  119. package/docs/colleague-usage/ai-model-setups.md +159 -0
  120. package/docs/colleague-usage/ai-onboarding.md +94 -21
  121. package/docs/colleague-usage/ai-personal-use.md +41 -0
  122. package/docs/colleague-usage/auto-workflow.md +8 -3
  123. package/docs/colleague-usage/codex-context-recovery.md +2 -1
  124. package/docs/colleague-usage/coding-agent-goals.md +7 -4
  125. package/docs/colleague-usage/coding-agents.md +8 -5
  126. package/docs/colleague-usage/colleague-watches.md +15 -4
  127. package/docs/colleague-usage/colleague.md +21 -5
  128. package/docs/colleague-usage/connected-contributions.md +13 -13
  129. package/docs/colleague-usage/connected-projects.md +2 -2
  130. package/docs/colleague-usage/conversation-context.md +1 -1
  131. package/docs/colleague-usage/dashboard-navigation.md +5 -3
  132. package/docs/colleague-usage/development-env.md +21 -4
  133. package/docs/colleague-usage/file-interfaces.md +1 -1
  134. package/docs/colleague-usage/github-work.md +8 -8
  135. package/docs/colleague-usage/health-checks.md +52 -18
  136. package/docs/colleague-usage/incoming-changes.md +3 -3
  137. package/docs/colleague-usage/integrations.md +5 -3
  138. package/docs/colleague-usage/learning-course-catalogue.md +3 -3
  139. package/docs/colleague-usage/learning-environment.md +55 -47
  140. package/docs/colleague-usage/learning-mode-ui.md +13 -10
  141. package/docs/colleague-usage/learning-practice-projects.md +13 -2
  142. package/docs/colleague-usage/learning-teacher-guide.md +9 -4
  143. package/docs/colleague-usage/learning-with-colleague.md +9 -5
  144. package/docs/colleague-usage/lesson-authoring.md +12 -12
  145. package/docs/colleague-usage/lesson-step-bar.md +22 -22
  146. package/docs/colleague-usage/main-chat-approvals.md +150 -0
  147. package/docs/colleague-usage/preview-browser-checks.md +5 -1
  148. package/docs/colleague-usage/project-language-tools.md +16 -2
  149. package/docs/colleague-usage/project-settings.md +1 -1
  150. package/docs/colleague-usage/project-setup.md +17 -7
  151. package/docs/colleague-usage/publishing.md +185 -0
  152. package/docs/colleague-usage/running-vibe64-on-your-computer.md +54 -6
  153. package/docs/colleague-usage/sessions.md +18 -10
  154. package/docs/colleague-usage/set-up-linux.md +254 -0
  155. package/docs/colleague-usage/set-up-macos.md +199 -0
  156. package/docs/colleague-usage/set-up-windows.md +76 -0
  157. package/docs/colleague-usage/starter-apps.md +21 -4
  158. package/docs/colleague-usage/teaching-content.md +2 -2
  159. package/docs/colleague-usage/team-ai-access.md +108 -0
  160. package/docs/colleague-usage/temporary-chats.md +9 -7
  161. package/docs/colleague-usage/workspace-preparation.md +50 -1
  162. package/docs/templates/learn-topic/README.md +3 -3
  163. package/docs/templates/learn-topic/training/lessons/TOPIC-01/lesson.json +2 -1
  164. package/docs/training-content.md +37 -15
  165. package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
  166. package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
  167. package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
  168. package/node_modules/@jskit-ai/connector-google-calendar/package.json +1 -1
  169. package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
  170. package/node_modules/@jskit-ai/connectors-catalog/patterns/oauth-connection/PATTERN.md +25 -0
  171. package/node_modules/@jskit-ai/connectors-core/package.json +1 -1
  172. package/node_modules/@jskit-ai/http-runtime/package.json +1 -1
  173. package/node_modules/@jskit-ai/kernel/package.json +1 -1
  174. package/node_modules/@jskit-ai/realtime/package.json +1 -1
  175. package/node_modules/@jskit-ai/resource-core/package.json +1 -1
  176. package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
  177. package/node_modules/@jskit-ai/uploads-runtime/package.json +1 -1
  178. package/node_modules/@local/vibe64-accounts/package.json +2 -1
  179. package/node_modules/@local/vibe64-core/package.json +4 -1
  180. package/node_modules/@local/vibe64-execution/src/host/execHelper.js +82 -81
  181. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +73 -69
  182. package/node_modules/@local/vibe64-genesis/package.json +1 -0
  183. package/node_modules/@local/vibe64-genesis/src/server/agentSpecs.js +118 -68
  184. package/node_modules/@local/vibe64-genesis/src/server/index.js +501 -415
  185. package/node_modules/@local/vibe64-genesis/src/server/packaging.js +105 -0
  186. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +143 -139
  187. package/node_modules/@local/vibe64-packaging/package.json +26 -0
  188. package/node_modules/@local/vibe64-packaging/src/server/packers/capacitor/ShellIcons.java +112 -0
  189. package/node_modules/@local/vibe64-project/package.json +3 -1
  190. package/node_modules/@local/vibe64-publishing/package.json +12 -0
  191. package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +7 -7
  192. package/node_modules/@local/vibe64-runtime/src/shared/assistantRoutingScores.json +25 -22
  193. package/node_modules/@local/vibe64-terminals/package.json +2 -1
  194. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1340 -1300
  195. package/node_modules/@local/vibe64-training/package.json +2 -1
  196. package/package.json +19 -15
  197. package/server.bundle.mjs +42890 -40887
  198. package/dist/assets/GithubBrowserTabs-C2NO5l8g.js +0 -1
  199. package/dist/assets/StudioErrorNotice-CSrUw1QV.js +0 -1
  200. package/dist/assets/VAlert-P256xaE0.js +0 -1
  201. package/dist/assets/VAutocomplete-BDb95qJX.js +0 -1
  202. package/dist/assets/VAvatar-DPzqDH4r.js +0 -1
  203. package/dist/assets/VBtn-B2MBK2DL.js +0 -1
  204. package/dist/assets/VCard-mXy0k4aS.js +0 -1
  205. package/dist/assets/VCheckbox-C7A1ZW4D.js +0 -1
  206. package/dist/assets/VChip-CcI-Oo2J.js +0 -1
  207. package/dist/assets/VDialog-Bu3EfKb1.js +0 -1
  208. package/dist/assets/VDivider-BMEqUoAB.js +0 -1
  209. package/dist/assets/VExpansionPanels-Dgjrop0V.js +0 -1
  210. package/dist/assets/VMenu-C_x18lwb.js +0 -1
  211. package/dist/assets/VOverlay-CeMZurIN.js +0 -1
  212. package/dist/assets/VRadioGroup-CUu2-KIP.js +0 -1
  213. package/dist/assets/VRow-Cpw7OHQV.js +0 -1
  214. package/dist/assets/VSelect-DL3HaA5m.js +0 -2
  215. package/dist/assets/VSheet-DZWsu0kL.js +0 -1
  216. package/dist/assets/VSkeletonLoader-CttxM1tw.js +0 -1
  217. package/dist/assets/VSpacer-Dhmsvk4t.js +0 -1
  218. package/dist/assets/VSwitch-BRHeDJkH.js +0 -1
  219. package/dist/assets/VTextField-BR2eZeFT.js +0 -1
  220. package/dist/assets/VTextField-BiatYyd3.css +0 -1
  221. package/dist/assets/VTextarea-DbqamXJd.js +0 -1
  222. package/dist/assets/Vibe64AuthSettingsButton-fY4ZiIFF.js +0 -5
  223. package/dist/assets/Vibe64DashboardPageHeader-Gm1IvlHx.css +0 -1
  224. package/dist/assets/Vibe64DashboardShell-BSq7uXEW.js +0 -1
  225. package/dist/assets/Vibe64OutputControls-_zhGX9ne.js +0 -8
  226. package/dist/assets/Vibe64SessionFiles-Bl8wJ5Sk.css +0 -1
  227. package/dist/assets/_slug_-BclonbST.js +0 -24
  228. package/dist/assets/_slug_-CZ1bxO9C.css +0 -1
  229. package/dist/assets/app-BNP_n_Tt.js +0 -1
  230. package/dist/assets/assistantRouting-D4XpXcEf.js +0 -3
  231. package/dist/assets/client-BWV84wi2.js +0 -2
  232. package/dist/assets/client-DGrP-2AJ.css +0 -1
  233. package/dist/assets/definitions-BrMvu6yV.js +0 -1
  234. package/dist/assets/env-BzRtyO0w.css +0 -1
  235. package/dist/assets/env-D3KQGvRe.js +0 -1
  236. package/dist/assets/health-BJvooRnJ.css +0 -1
  237. package/dist/assets/health-BhoO1d4h.js +0 -1
  238. package/dist/assets/incoming-DWDrmxyH.css +0 -1
  239. package/dist/assets/incoming-DzADFGqp.js +0 -2
  240. package/dist/assets/index-dNxr4Lg9.js +0 -138
  241. package/dist/assets/integrations-Cq1x-Di9.css +0 -1
  242. package/dist/assets/issues-Bywux4s7.js +0 -1
  243. package/dist/assets/mdi-CG9pWOSj.js +0 -1
  244. package/dist/assets/placement-BF-zIEhA.js +0 -1
  245. package/dist/assets/pull-requests-CdbhyFOv.css +0 -1
  246. package/dist/assets/pull-requests-ncmKT3sS.js +0 -1
  247. package/dist/assets/ripple-BVltMmyV.js +0 -11
  248. package/dist/assets/settings-BopLnpB0.css +0 -1
  249. package/dist/assets/shared-DpMvYJO3.js +0 -2
  250. package/dist/assets/studioGateApi-DcCqiD9V.js +0 -1
  251. package/dist/assets/studioUrls-DmMMIScP.js +0 -1
  252. package/dist/assets/useArchivedVibe64Sessions-_LB2XxEa.js +0 -1
  253. package/dist/assets/useCommand-Bqxb-naz.js +0 -1
  254. package/dist/assets/useEndpointResource-DWoQ2keu.js +0 -1
  255. package/dist/assets/useRealtimeEvent-Bwapstla.js +0 -1
  256. package/dist/assets/useVibe64ConversationLog-BqUI0S5n.js +0 -1
  257. package/dist/assets/useVibe64Learning-DyqXkpLw.js +0 -1
  258. package/dist/assets/useVibe64ProjectScope-Bp1ImZlz.js +0 -1
  259. package/dist/assets/useVibe64SessionData-B686lToN.js +0 -1
  260. package/dist/assets/vibe64SessionFocus-CqZNTvYF.js +0 -1
  261. package/dist/assets/vibe64SessionFocus-OJ2toBd9.css +0 -1
@@ -1 +0,0 @@
1
- import{H as hasInjectionContext,Ht as watch,J as inject,On as unref,Tn as toRefs,_n as readonly,bn as shallowReadonly,g as computed,gn as reactive,pn as onScopeDispose,un as isRef,yn as shallowReactive}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{n as useRealtimeEvent,p as getHttpWebClient}from"./useRealtimeEvent-Bwapstla.js";import{d as normalizeText$1}from"./normalize-CO2KHj_d.js";var VUE_QUERY_CLIENT=`VUE_QUERY_CLIENT`;function getClientKey(key){const suffix=key?`:${key}`:``;return`${VUE_QUERY_CLIENT}${suffix}`}function updateState(state,update){Object.keys(state).forEach(key=>{state[key]=update[key]})}function _cloneDeep(value,customize,currentKey=``,currentLevel=0){if(customize){const result=customize(value,currentKey,currentLevel);if(result===void 0&&isRef(value))return result;if(result!==void 0)return result}if(Array.isArray(value))return value.map((val,index)=>_cloneDeep(val,customize,String(index),currentLevel+1));if(typeof value===`object`&&isPlainObject$1(value)){const entries=Object.entries(value).map(([key,val])=>[key,_cloneDeep(val,customize,key,currentLevel+1)]);return Object.fromEntries(entries)}return value}function cloneDeep(value,customize){return _cloneDeep(value,customize)}function cloneDeepUnref(obj,unrefGetters=false){return cloneDeep(obj,(val,key,level)=>{if(level===1&&key===`queryKey`)return cloneDeepUnref(val,true);if(unrefGetters&&isFunction(val))return cloneDeepUnref(val(),unrefGetters);if(isRef(val))return cloneDeepUnref(unref(val),unrefGetters)})}function isPlainObject$1(value){if(Object.prototype.toString.call(value)!==`[object Object]`)return false;const prototype=Object.getPrototypeOf(value);return prototype===null||prototype===Object.prototype}function isFunction(value){return typeof value===`function`}function useQueryClient(id=``){if(!hasInjectionContext())throw new Error(`vue-query hooks can only be used inside setup() function or functions that support injection context.`);const key=getClientKey(id);const queryClient=inject(key);if(!queryClient)throw new Error(`No 'queryClient' found in Vue context, use 'VueQueryPlugin' to properly initialize the library.`);return queryClient}var defaultTimeoutProvider={setTimeout:(callback,delay)=>setTimeout(callback,delay),clearTimeout:timeoutId=>clearTimeout(timeoutId),setInterval:(callback,delay)=>setInterval(callback,delay),clearInterval:intervalId=>clearInterval(intervalId)};var TimeoutManager=class{#provider=defaultTimeoutProvider;#providerCalled=false;setTimeoutProvider(provider){this.#provider=provider}setTimeout(callback,delay){return this.#provider.setTimeout(callback,delay)}clearTimeout(timeoutId){this.#provider.clearTimeout(timeoutId)}setInterval(callback,delay){return this.#provider.setInterval(callback,delay)}clearInterval(intervalId){this.#provider.clearInterval(intervalId)}};var timeoutManager=new TimeoutManager;function systemSetTimeoutZero(callback){setTimeout(callback,0)}var isServer$1=typeof window===`undefined`||`Deno`in globalThis;function noop(){}function functionalUpdate(updater,input){return typeof updater===`function`?updater(input):updater}function isValidTimeout(value){return typeof value===`number`&&value>=0&&value!==Infinity}function timeUntilStale(updatedAt,staleTime){return Math.max(updatedAt+(staleTime||0)-Date.now(),0)}function resolveQueryValue(value,query){return typeof value===`function`?value(query):value}function matchQuery(filters,query){const{type=`all`,exact,fetchStatus,predicate,queryKey,stale}=filters;if(queryKey){if(exact){if(query.queryHash!==hashQueryKeyByOptions(queryKey,query.options))return false}else if(!partialMatchKey(query.queryKey,queryKey))return false}if(type!==`all`){const isActive=query.isActive();if(type===`active`&&!isActive)return false;if(type===`inactive`&&isActive)return false}if(typeof stale===`boolean`&&query.isStale()!==stale)return false;if(fetchStatus&&fetchStatus!==query.state.fetchStatus)return false;if(predicate&&!predicate(query))return false;return true}function matchMutation(filters,mutation){const{exact,status,predicate,mutationKey}=filters;if(mutationKey){if(!mutation.options.mutationKey)return false;if(exact){if(hashKey(mutation.options.mutationKey)!==hashKey(mutationKey))return false}else if(!partialMatchKey(mutation.options.mutationKey,mutationKey))return false}if(status&&mutation.state.status!==status)return false;if(predicate&&!predicate(mutation))return false;return true}function hashQueryKeyByOptions(queryKey,options){return(options?.queryKeyHashFn||hashKey)(queryKey)}function hashKey(queryKey){return JSON.stringify(queryKey,(_,val)=>isPlainObject(val)?Object.keys(val).sort().reduce((result,key)=>{result[key]=val[key];return result},{}):val)}function partialMatchKey(a,b){if(a===b)return true;if(typeof a!==typeof b)return false;if(a&&b&&typeof a===`object`&&typeof b===`object`){if(Array.isArray(a)&&Array.isArray(b)){if(b.length>a.length)return false;for(let i=0;i<b.length;i++)if(!partialMatchKey(a[i],b[i]))return false;return true}const bKeys=Object.keys(b);for(const key of bKeys)if(!partialMatchKey(a[key],b[key]))return false;return true}return false}var hasOwn=Object.prototype.hasOwnProperty;function replaceEqualDeep(a,b,depth=0){if(a===b)return a;if(depth>500)return b;const array=isPlainArray(a)&&isPlainArray(b);if(!array&&!(isPlainObject(a)&&isPlainObject(b)))return b;const aSize=(array?a:Object.keys(a)).length;const bItems=array?b:Object.keys(b);const bSize=bItems.length;const copy=array?new Array(bSize):{};let equalItems=0;for(let i=0;i<bSize;i++){const key=array?i:bItems[i];const aItem=a[key];const bItem=b[key];if(aItem===bItem){copy[key]=aItem;if(array?i<aSize:hasOwn.call(a,key))equalItems++;continue}if(aItem===null||bItem===null||typeof aItem!==`object`||typeof bItem!==`object`){copy[key]=bItem;continue}const v=replaceEqualDeep(aItem,bItem,depth+1);copy[key]=v;if(v===aItem)equalItems++}return aSize===bSize&&equalItems===aSize?a:copy}function shallowEqualObjects(a,b){if(!b||Object.keys(a).length!==Object.keys(b).length)return false;for(const key in a)if(a[key]!==b[key])return false;return true}function isPlainArray(value){return Array.isArray(value)&&value.length===Object.keys(value).length}function isPlainObject(o){if(!hasObjectPrototype(o))return false;const objectPrototype=Object.getPrototypeOf(o);const ctor=objectPrototype?.constructor;if(ctor===void 0)return true;if(typeof ctor!==`function`)return false;const prot=ctor.prototype;if(!hasObjectPrototype(prot))return false;if(!prot.hasOwnProperty(`isPrototypeOf`))return false;if(objectPrototype!==Object.prototype)return false;return true}function hasObjectPrototype(o){return Object.prototype.toString.call(o)===`[object Object]`}function sleep(timeout){return new Promise(resolve=>{timeoutManager.setTimeout(resolve,timeout)})}function replaceData(prevData,data,options){if(typeof options.structuralSharing===`function`)return options.structuralSharing(prevData,data);else if(options.structuralSharing!==false)return replaceEqualDeep(prevData,data);return data}function addToEnd(items,item,max=0){const newItems=[...items,item];return max&&newItems.length>max?newItems.slice(1):newItems}function addToStart(items,item,max=0){const newItems=[item,...items];return max&&newItems.length>max?newItems.slice(0,-1):newItems}var skipToken=Symbol();function ensureQueryFn(options,fetchOptions){if(!options.queryFn&&fetchOptions?.initialPromise)return()=>fetchOptions.initialPromise;if(!options.queryFn||options.queryFn===skipToken)return()=>Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));return options.queryFn}function shouldThrowError(throwOnError,params){if(typeof throwOnError===`function`)return throwOnError(...params);return!!throwOnError}function addConsumeAwareSignal(object,getSignal,onCancelled){let consumed=false;let signal;Object.defineProperty(object,"signal",{enumerable:true,get:()=>{signal??=getSignal();if(consumed)return signal;consumed=true;if(signal.aborted)onCancelled();else signal.addEventListener(`abort`,onCancelled,{once:true});return signal}});return object}var isServerFn=()=>isServer$1;var isServer=()=>isServerFn();var environmentManager={isServer,setIsServer(isServerValue){isServerFn=isServerValue}};var Subscribable=class{constructor(){this.listeners=new Set;this.subscribe=this.subscribe.bind(this)}subscribe(listener){this.listeners.add(listener);this.onSubscribe();return()=>{this.listeners.delete(listener);this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}};var FocusManager=class extends Subscribable{#focused;#cleanup;#setup;constructor(){super();this.#setup=onFocus=>{if(typeof window!==`undefined`&&window.addEventListener){const listener=()=>onFocus();window.addEventListener(`visibilitychange`,listener,false);return()=>{window.removeEventListener(`visibilitychange`,listener)}}}}onSubscribe(){if(!this.#cleanup)this.setEventListener(this.#setup)}onUnsubscribe(){if(!this.hasListeners()){this.#cleanup?.();this.#cleanup=void 0}}setEventListener(setup){this.#setup=setup;this.#cleanup?.();this.#cleanup=setup(focused=>{if(typeof focused===`boolean`)this.setFocused(focused);else this.onFocus()})}setFocused(focused){if(this.#focused!==focused){this.#focused=focused;this.onFocus()}}onFocus(){const isFocused=this.isFocused();this.listeners.forEach(listener=>{listener(isFocused)})}isFocused(){if(typeof this.#focused===`boolean`)return this.#focused;return globalThis.document?.visibilityState!==`hidden`}};var focusManager=new FocusManager;var defaultScheduler=systemSetTimeoutZero;function createNotifyManager(){let queue=[];let transactions=0;let notifyFn=callback=>{callback()};let batchNotifyFn=callback=>{callback()};let scheduleFn=defaultScheduler;const schedule=callback=>{if(transactions)queue.push(callback);else scheduleFn(()=>{notifyFn(callback)})};const flush=()=>{const originalQueue=queue;queue=[];if(originalQueue.length)scheduleFn(()=>{batchNotifyFn(()=>{originalQueue.forEach(callback=>{notifyFn(callback)})})})};return{batch:callback=>{let result;transactions++;try{result=callback()}finally{transactions--;if(!transactions)flush()}return result},batchCalls:callback=>{return(...args)=>{schedule(()=>{callback(...args)})}},schedule,setNotifyFunction:fn=>{notifyFn=fn},setBatchNotifyFunction:fn=>{batchNotifyFn=fn},setScheduler:fn=>{scheduleFn=fn}}}var notifyManager=createNotifyManager();var OnlineManager=class extends Subscribable{#online=true;#cleanup;#setup;constructor(){super();this.#setup=onOnline=>{if(typeof window!==`undefined`&&window.addEventListener){const onlineListener=()=>onOnline(true);const offlineListener=()=>onOnline(false);window.addEventListener(`online`,onlineListener,false);window.addEventListener(`offline`,offlineListener,false);return()=>{window.removeEventListener(`online`,onlineListener);window.removeEventListener(`offline`,offlineListener)}}}}onSubscribe(){if(!this.#cleanup)this.setEventListener(this.#setup)}onUnsubscribe(){if(!this.hasListeners()){this.#cleanup?.();this.#cleanup=void 0}}setEventListener(setup){this.#setup=setup;this.#cleanup?.();this.#cleanup=setup(this.setOnline.bind(this))}setOnline(online){if(this.#online!==online){this.#online=online;this.listeners.forEach(listener=>{listener(online)})}}isOnline(){return this.#online}};var onlineManager=new OnlineManager;function defaultRetryDelay(failureCount){return Math.min(1e3*2**failureCount,3e4)}function canFetch(networkMode){return(networkMode??`online`)===`online`?onlineManager.isOnline():true}var CancelledError=class extends Error{constructor(options){super(`CancelledError`);this.revert=options?.revert;this.silent=options?.silent}};function createRetryer(config){let isRetryCancelled=false;let failureCount=0;let continueFn;let status=`pending`;let promiseResolve;let promiseReject;const promise=new Promise((resolve,reject)=>{promiseResolve=resolve;promiseReject=reject});promise.catch(noop);const isResolved=()=>status!==`pending`;const cancel=cancelOptions=>{if(!isResolved()){const error=new CancelledError(cancelOptions);reject(error);config.onCancel?.(error)}};const cancelRetry=()=>{isRetryCancelled=true};const continueRetry=()=>{isRetryCancelled=false};const canContinue=()=>focusManager.isFocused()&&(config.networkMode===`always`||onlineManager.isOnline())&&config.canRun();const canStart=()=>canFetch(config.networkMode)&&config.canRun();const resolve=value=>{if(!isResolved()){continueFn?.();status=`resolved`;promiseResolve(value)}};const reject=value=>{if(!isResolved()){continueFn?.();status=`rejected`;promiseReject(value)}};const pause=()=>{return new Promise(continueResolve=>{continueFn=value=>{if(isResolved()||canContinue())continueResolve(value)};config.onPause?.()}).then(()=>{continueFn=void 0;if(!isResolved())config.onContinue?.()})};const run=()=>{if(isResolved())return;let promiseOrValue;const initialPromise=failureCount===0?config.initialPromise:void 0;try{promiseOrValue=initialPromise??config.fn()}catch(error){promiseOrValue=Promise.reject(error)}Promise.resolve(promiseOrValue).then(resolve).catch(error=>{if(isResolved())return;const retry=config.retry??(isServer()?0:3);const retryDelay=config.retryDelay??defaultRetryDelay;const delay=typeof retryDelay===`function`?retryDelay(failureCount,error):retryDelay;const shouldRetry=retry===true||typeof retry===`number`&&failureCount<retry||typeof retry===`function`&&retry(failureCount,error);if(isRetryCancelled||!shouldRetry){reject(error);return}failureCount++;config.onFail?.(failureCount,error);sleep(delay).then(()=>{return canContinue()?void 0:pause()}).then(()=>{if(isRetryCancelled)reject(error);else run()})})};return{promise,status:()=>status,cancel,continue:()=>{continueFn?.();return promise},cancelRetry,continueRetry,canStart,start:()=>{if(canStart())run();else pause().then(run);return promise}}}var Removable=class{#gcTimeout;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout();if(isValidTimeout(this.gcTime))this.#gcTimeout=timeoutManager.setTimeout(()=>{this.optionalRemove()},this.gcTime)}updateGcTime(newGcTime){this.gcTime=Math.max(this.gcTime||0,newGcTime??(isServer()?Infinity:3e5))}clearGcTimeout(){if(this.#gcTimeout!==void 0){timeoutManager.clearTimeout(this.#gcTimeout);this.#gcTimeout=void 0}}};function infiniteQueryBehavior(pages){return{onFetch:(context,query)=>{const options=context.options;const direction=context.fetchOptions?.meta?.fetchMore?.direction;const oldPages=context.state.data?.pages||[];const oldPageParams=context.state.data?.pageParams||[];let result={pages:[],pageParams:[]};let currentPage=0;const fetchFn=async()=>{let cancelled=false;const addSignalProperty=object=>{addConsumeAwareSignal(object,()=>context.signal,()=>cancelled=true)};const queryFn=ensureQueryFn(context.options,context.fetchOptions);const fetchPage=async(data,param,previous)=>{if(cancelled)return Promise.reject(context.signal.reason);if(param==null&&data.pages.length)return Promise.resolve(data);const createQueryFnContext=()=>{const queryFnContext={client:context.client,queryKey:context.queryKey,pageParam:param,direction:previous?`backward`:`forward`,meta:context.options.meta};addSignalProperty(queryFnContext);return queryFnContext};const queryFnContext=createQueryFnContext();const page=await queryFn(queryFnContext);const{maxPages}=context.options;const addTo=previous?addToStart:addToEnd;return{pages:addTo(data.pages,page,maxPages),pageParams:addTo(data.pageParams,param,maxPages)}};if(direction&&oldPages.length){const previous=direction===`backward`;const pageParamFn=previous?getPreviousPageParam:getNextPageParam;const oldData={pages:oldPages,pageParams:oldPageParams};result=await fetchPage(oldData,pageParamFn(options,oldData),previous)}else{const remainingPages=pages??oldPages.length;do{const param=currentPage===0?oldPageParams[0]??options.initialPageParam:getNextPageParam(options,result);if(currentPage>0&&param==null)break;result=await fetchPage(result,param);currentPage++}while(currentPage<remainingPages)}return result};if(context.options.persister)context.fetchFn=()=>{return context.options.persister?.(fetchFn,{client:context.client,queryKey:context.queryKey,meta:context.options.meta,signal:context.signal},query)};else context.fetchFn=fetchFn}}}function getNextPageParam(options,{pages,pageParams}){const lastIndex=pages.length-1;return pages.length>0?options.getNextPageParam(pages[lastIndex],pages,pageParams[lastIndex],pageParams):void 0}function getPreviousPageParam(options,{pages,pageParams}){return pages.length>0?options.getPreviousPageParam?.(pages[0],pages,pageParams[0],pageParams):void 0}function hasNextPage(options,data){if(!data)return false;return getNextPageParam(options,data)!=null}function hasPreviousPage(options,data){if(!data||!options.getPreviousPageParam)return false;return getPreviousPageParam(options,data)!=null}var Query=class extends Removable{#queryType;#initialState;#revertState;#cache;#client;#retryer;#defaultOptions;#abortSignalConsumed;constructor(config){super();this.#abortSignalConsumed=false;this.#defaultOptions=config.defaultOptions;this.setOptions(config.options);this.observers=[];this.#client=config.client;this.#cache=this.#client.getQueryCache();this.queryKey=config.queryKey;this.queryHash=config.queryHash;this.#initialState=getDefaultState$1(this.options);this.state=config.state??this.#initialState;this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#queryType}get promise(){return this.#retryer?.promise}setOptions(options){this.options={...this.#defaultOptions,...options};if(options?._type)this.#queryType=options._type;this.updateGcTime(this.options.gcTime);if(this.state&&this.state.data===void 0){const defaultState=getDefaultState$1(this.options);if(defaultState.data!==void 0){this.setState(successState(defaultState.data,defaultState.dataUpdatedAt));this.#initialState=defaultState}}}optionalRemove(){if(!this.observers.length&&this.state.fetchStatus===`idle`)this.#cache.remove(this)}setData(newData,options){const data=replaceData(this.state.data,newData,this.options);this.#dispatch({data,type:`success`,dataUpdatedAt:options?.updatedAt,manual:options?.manual});return data}setState(state){this.#dispatch({type:`setState`,state})}cancel(options){const promise=this.#retryer?.promise;this.#retryer?.cancel(options);return promise?promise.then(noop).catch(noop):Promise.resolve()}destroy(){super.destroy();this.cancel({silent:true})}get resetState(){return this.#initialState}reset(){this.destroy();this.setState(this.resetState)}isActive(){return this.observers.some(observer=>resolveQueryValue(observer.options.enabled,this)!==false)}isDisabled(){if(this.getObserversCount()>0)return!this.isActive();return this.options.queryFn===skipToken||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){if(this.getObserversCount()>0)return this.observers.some(observer=>resolveQueryValue(observer.options.staleTime,this)===`static`);return false}isStale(){if(this.getObserversCount()>0)return this.observers.some(observer=>observer.getCurrentResult().isStale);return this.state.data===void 0||this.state.isInvalidated}isStaleByTime(staleTime=0){if(this.state.data===void 0)return true;if(staleTime===`static`)return false;if(this.state.isInvalidated)return true;return!timeUntilStale(this.state.dataUpdatedAt,staleTime)}onFocus(){this.observers.find(x=>x.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:false});this.#retryer?.continue()}onOnline(){this.observers.find(x=>x.shouldFetchOnReconnect())?.refetch({cancelRefetch:false});this.#retryer?.continue()}addObserver(observer){if(!this.observers.includes(observer)){this.observers.push(observer);this.clearGcTimeout();this.#cache.notify({type:`observerAdded`,query:this,observer})}}removeObserver(observer){const index=this.observers.indexOf(observer);if(index!==-1){this.observers.splice(index,1);if(!this.observers.length){if(this.#retryer){if(this.#abortSignalConsumed||this.state.fetchStatus===`paused`&&this.state.status===`pending`)this.#retryer.cancel({revert:true});else this.#retryer.cancelRetry()}this.scheduleGc()}this.#cache.notify({type:`observerRemoved`,query:this,observer})}}getObserversCount(){return this.observers.length}invalidate(){if(!this.state.isInvalidated)this.#dispatch({type:`invalidate`})}async fetch(options,fetchOptions){if(this.state.fetchStatus!==`idle`&&this.#retryer?.status()!==`rejected`){if(this.state.data!==void 0&&fetchOptions?.cancelRefetch)this.cancel({silent:true});else if(this.#retryer){this.#retryer.continueRetry();return this.#retryer.promise}}if(options)this.setOptions(options);if(!this.options.queryFn){const observer=this.observers.find(x=>x.options.queryFn);if(observer)this.setOptions(observer.options)}const abortController=new AbortController;const addSignalProperty=object=>{Object.defineProperty(object,"signal",{enumerable:true,get:()=>{this.#abortSignalConsumed=true;return abortController.signal}})};const fetchFn=()=>{const queryFn=ensureQueryFn(this.options,fetchOptions);const createQueryFnContext=()=>{const queryFnContext={client:this.#client,queryKey:this.queryKey,meta:this.meta};addSignalProperty(queryFnContext);return queryFnContext};const queryFnContext=createQueryFnContext();this.#abortSignalConsumed=false;if(this.options.persister)return this.options.persister(queryFn,queryFnContext,this);return queryFn(queryFnContext)};const createFetchContext=()=>{const context={fetchOptions,options:this.options,queryKey:this.queryKey,client:this.#client,state:this.state,fetchFn};addSignalProperty(context);return context};const context=createFetchContext();(this.#queryType===`infinite`?infiniteQueryBehavior(this.options.pages):this.options.behavior)?.onFetch(context,this);this.#revertState=this.state;if(this.state.fetchStatus===`idle`||this.state.fetchMeta!==context.fetchOptions?.meta)this.#dispatch({type:`fetch`,meta:context.fetchOptions?.meta});const retryer=this.#retryer=createRetryer({initialPromise:fetchOptions?.initialPromise,fn:context.fetchFn,onCancel:error=>{if(error instanceof CancelledError&&error.revert)this.setState({...this.#revertState,fetchStatus:`idle`});abortController.abort()},onFail:(failureCount,error)=>{this.#dispatch({type:`failed`,failureCount,error})},onPause:()=>{this.#dispatch({type:`pause`})},onContinue:()=>{this.#dispatch({type:`continue`})},retry:context.options.retry,retryDelay:context.options.retryDelay,networkMode:context.options.networkMode,canRun:()=>true});try{const data=await retryer.start();if(data===void 0)throw new Error(`${this.queryHash} data is undefined`);this.setData(data);this.#cache.config.onSuccess?.(data,this);this.#cache.config.onSettled?.(data,this.state.error,this);return data}catch(error){if(error instanceof CancelledError){if(error.silent)return this.#retryer.promise;else if(error.revert){if(this.state.data===void 0)throw error;return this.state.data}}this.#dispatch({type:`error`,error});this.#cache.config.onError?.(error,this);this.#cache.config.onSettled?.(this.state.data,error,this);throw error}finally{if(this.#retryer===retryer)this.#retryer=void 0;this.scheduleGc()}}#dispatch(action){const reducer=state=>{switch(action.type){case`failed`:return{...state,fetchFailureCount:action.failureCount,fetchFailureReason:action.error};case`pause`:return{...state,fetchStatus:`paused`};case`continue`:return{...state,fetchStatus:`fetching`};case`fetch`:return{...state,...fetchState(state.data,this.options),fetchMeta:action.meta??null};case`success`:const newState={...state,...successState(action.data,action.dataUpdatedAt),dataUpdateCount:state.dataUpdateCount+1,...!action.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};this.#revertState=action.manual?newState:void 0;return newState;case`error`:const error=action.error;return{...state,error,errorUpdateCount:state.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:state.fetchFailureCount+1,fetchFailureReason:error,fetchStatus:`idle`,status:`error`,isInvalidated:true};case`invalidate`:return{...state,isInvalidated:true};case`setState`:return{...state,...action.state}}};this.state=reducer(this.state);notifyManager.batch(()=>{this.observers.slice().forEach(observer=>{observer.onQueryUpdate()});this.#cache.notify({query:this,type:`updated`,action})})}};function fetchState(data,options){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:canFetch(options.networkMode)?`fetching`:`paused`,...data===void 0&&{error:null,status:`pending`}}}function successState(data,dataUpdatedAt){return{data,dataUpdatedAt:dataUpdatedAt??Date.now(),error:null,isInvalidated:false,status:`success`}}function getDefaultState$1(options){const data=typeof options.initialData===`function`?options.initialData():options.initialData;const hasData=data!==void 0;const initialDataUpdatedAt=hasData?typeof options.initialDataUpdatedAt===`function`?options.initialDataUpdatedAt():options.initialDataUpdatedAt:0;return{data,dataUpdateCount:0,dataUpdatedAt:hasData?initialDataUpdatedAt??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:false,status:hasData?`success`:`pending`,fetchStatus:`idle`}}var QueryObserver=class extends Subscribable{#client;#currentQuery=void 0;#currentQueryInitialState=void 0;#currentResult=void 0;#currentResultState;#currentResultOptions;#selectError;#selectFn;#selectResult;#lastQueryWithDefinedData;#staleTimeoutId;#refetchIntervalId;#currentRefetchInterval;#trackedProps=new Set;constructor(client,options){super();this.options=options;this.#client=client;this.#selectError=null;this.bindMethods();this.setOptions(options)}bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){if(this.listeners.size===1){this.#currentQuery.addObserver(this);if(shouldFetchOnMount(this.#currentQuery,this.options))this.#executeFetch();else this.updateResult();this.#updateTimers()}}onUnsubscribe(){if(!this.hasListeners())this.destroy()}shouldFetchOnReconnect(){return shouldFetchOn(this.#currentQuery,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return shouldFetchOn(this.#currentQuery,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set;this.#clearStaleTimeout();this.#clearRefetchInterval();this.#currentQuery.removeObserver(this)}setOptions(options){const prevOptions=this.options;const prevQuery=this.#currentQuery;this.options=this.#client.defaultQueryOptions(options);if(this.options.enabled!==void 0&&typeof this.options.enabled!==`boolean`&&typeof this.options.enabled!==`function`&&typeof resolveQueryValue(this.options.enabled,this.#currentQuery)!==`boolean`)throw new Error(`Expected enabled to be a boolean or a callback that returns a boolean`);this.#updateQuery();this.#currentQuery.setOptions(this.options);if(prevOptions._defaulted&&!shallowEqualObjects(this.options,prevOptions))this.#client.getQueryCache().notify({type:`observerOptionsUpdated`,query:this.#currentQuery,observer:this});const mounted=this.hasListeners();if(mounted&&shouldFetchOptionally(this.#currentQuery,prevQuery,this.options,prevOptions))this.#executeFetch();this.updateResult();if(mounted&&(this.#currentQuery!==prevQuery||resolveQueryValue(this.options.enabled,this.#currentQuery)!==resolveQueryValue(prevOptions.enabled,this.#currentQuery)||resolveQueryValue(this.options.staleTime,this.#currentQuery)!==resolveQueryValue(prevOptions.staleTime,this.#currentQuery)))this.#updateStaleTimeout();const nextRefetchInterval=this.#computeRefetchInterval();if(mounted&&(this.#currentQuery!==prevQuery||resolveQueryValue(this.options.enabled,this.#currentQuery)!==resolveQueryValue(prevOptions.enabled,this.#currentQuery)||nextRefetchInterval!==this.#currentRefetchInterval))this.#updateRefetchInterval(nextRefetchInterval)}getOptimisticResult(options){const query=this.#client.getQueryCache().build(this.#client,options);const result=this.createResult(query,options);if(!shallowEqualObjects(this.getCurrentResult(),result)){this.#currentResult=result;this.#currentResultOptions=this.options;this.#currentResultState=this.#currentQuery.state}return result}getCurrentResult(){return this.#currentResult}trackResult(result,onPropTracked){return new Proxy(result,{get:(target,key)=>{this.trackProp(key);onPropTracked?.(key);return Reflect.get(target,key)}})}trackProp(key){this.#trackedProps.add(key)}getCurrentQuery(){return this.#currentQuery}refetch({...options}={}){return this.fetch({...options})}fetchOptimistic(options){const defaultedOptions=this.#client.defaultQueryOptions(options);const query=this.#client.getQueryCache().build(this.#client,defaultedOptions);let unsubscribe=()=>{};let resolveEarly;const cachePromise=new Promise(resolve=>{resolveEarly=resolve;unsubscribe=this.#client.getQueryCache().subscribe(event=>{if(event.type===`updated`&&event.query.queryHash===query.queryHash&&query.state.data!==void 0){unsubscribe();resolve(this.createResult(query,defaultedOptions))}})});return Promise.race([query.fetch().then(()=>{const result=this.createResult(query,defaultedOptions);resolveEarly?.(result);return result}).finally(()=>{unsubscribe()}),cachePromise])}fetch(fetchOptions){return this.#executeFetch({...fetchOptions,cancelRefetch:fetchOptions.cancelRefetch??true}).then(()=>{this.updateResult();return this.#currentResult})}#executeFetch(fetchOptions){this.#updateQuery();let promise=this.#currentQuery.fetch(this.options,fetchOptions);if(!fetchOptions?.throwOnError)promise=promise.catch(noop);return promise}#shouldScheduleTimer(timeout){return!isServer()&&resolveQueryValue(this.options.enabled,this.#currentQuery)!==false&&isValidTimeout(timeout)}#updateStaleTimeout(){this.#clearStaleTimeout();const staleTime=resolveQueryValue(this.options.staleTime,this.#currentQuery);if(this.#currentResult.isStale||!this.#shouldScheduleTimer(staleTime))return;const timeout=timeUntilStale(this.#currentResult.dataUpdatedAt,staleTime)+1;this.#staleTimeoutId=timeoutManager.setTimeout(()=>{if(!this.#currentResult.isStale)this.updateResult()},timeout)}#computeRefetchInterval(){return resolveQueryValue(this.options.refetchInterval,this.#currentQuery)??false}#updateRefetchInterval(nextInterval){this.#clearRefetchInterval();this.#currentRefetchInterval=nextInterval;if(this.#currentRefetchInterval===0||!this.#shouldScheduleTimer(this.#currentRefetchInterval))return;this.#refetchIntervalId=timeoutManager.setInterval(()=>{if(this.options.refetchIntervalInBackground||focusManager.isFocused())this.#executeFetch()},this.#currentRefetchInterval)}#updateTimers(){this.#updateStaleTimeout();this.#updateRefetchInterval(this.#computeRefetchInterval())}#clearStaleTimeout(){if(this.#staleTimeoutId!==void 0){timeoutManager.clearTimeout(this.#staleTimeoutId);this.#staleTimeoutId=void 0}}#clearRefetchInterval(){if(this.#refetchIntervalId!==void 0){timeoutManager.clearInterval(this.#refetchIntervalId);this.#refetchIntervalId=void 0}}createResult(query,options){const prevQuery=this.#currentQuery;const prevOptions=this.options;const prevResult=this.#currentResult;const prevResultState=this.#currentResultState;const prevResultOptions=this.#currentResultOptions;const queryInitialState=query!==prevQuery?query.state:this.#currentQueryInitialState;const{state}=query;let newState={...state};let isPlaceholderData=false;let data;if(options._optimisticResults){const mounted=this.hasListeners();const fetchOnMount=!mounted&&shouldFetchOnMount(query,options);const fetchOptionally=mounted&&shouldFetchOptionally(query,prevQuery,options,prevOptions);if(fetchOnMount||fetchOptionally)newState={...newState,...fetchState(state.data,query.options)};if(options._optimisticResults===`isRestoring`)newState.fetchStatus=`idle`}let{error,errorUpdatedAt,status}=newState;data=newState.data;let skipSelect=false;if(options.placeholderData!==void 0&&data===void 0&&status===`pending`){let placeholderData;if(prevResult?.isPlaceholderData&&options.placeholderData===prevResultOptions?.placeholderData){placeholderData=prevResult.data;skipSelect=true}else placeholderData=typeof options.placeholderData===`function`?options.placeholderData(this.#lastQueryWithDefinedData?.state.data,this.#lastQueryWithDefinedData):options.placeholderData;if(placeholderData!==void 0){status=`success`;data=replaceData(prevResult?.data,placeholderData,options);isPlaceholderData=true}}if(options.select&&data!==void 0&&!skipSelect){if(prevResult&&data===prevResultState?.data&&options.select===this.#selectFn)data=this.#selectResult;else try{this.#selectFn=options.select;data=options.select(data);data=replaceData(prevResult?.data,data,options);this.#selectResult=data;this.#selectError=null}catch(selectError){this.#selectError=selectError}}else if(data===void 0)this.#selectError=null;if(this.#selectError){error=this.#selectError;data=this.#selectResult;errorUpdatedAt=Date.now();status=`error`;isPlaceholderData=false}const isFetching=newState.fetchStatus===`fetching`;const isPending=status===`pending`;const isError=status===`error`;const isLoading=isPending&&isFetching;const hasData=data!==void 0;return{status,fetchStatus:newState.fetchStatus,isPending,isSuccess:status===`success`,isError,isInitialLoading:isLoading,isLoading,data,dataUpdatedAt:newState.dataUpdatedAt,error,errorUpdatedAt,failureCount:newState.fetchFailureCount,failureReason:newState.fetchFailureReason,errorUpdateCount:newState.errorUpdateCount,isFetched:query.isFetched(),isFetchedAfterMount:newState.dataUpdateCount>queryInitialState.dataUpdateCount||newState.errorUpdateCount>queryInitialState.errorUpdateCount,isFetching,isRefetching:isFetching&&!isPending,isLoadingError:isError&&!hasData,isPaused:newState.fetchStatus===`paused`,isPlaceholderData,isRefetchError:isError&&hasData,isStale:isStale(query,options),refetch:this.refetch,isEnabled:resolveQueryValue(options.enabled,query)!==false}}updateResult(){const prevResult=this.#currentResult;const nextResult=this.createResult(this.#currentQuery,this.options);this.#currentResultState=this.#currentQuery.state;this.#currentResultOptions=this.options;if(this.#currentResultState.data!==void 0)this.#lastQueryWithDefinedData=this.#currentQuery;if(shallowEqualObjects(nextResult,prevResult))return;this.#currentResult=nextResult;const shouldNotifyListeners=()=>{if(!prevResult)return true;const{notifyOnChangeProps}=this.options;const notifyOnChangePropsValue=typeof notifyOnChangeProps===`function`?notifyOnChangeProps():notifyOnChangeProps;if(notifyOnChangePropsValue===`all`||!notifyOnChangePropsValue&&!this.#trackedProps.size)return true;const includedProps=new Set(notifyOnChangePropsValue??this.#trackedProps);if(this.options.throwOnError)includedProps.add(`error`);return Object.keys(this.#currentResult).some(key=>{const typedKey=key;return this.#currentResult[typedKey]!==prevResult[typedKey]&&includedProps.has(typedKey)})};const notifyListeners=shouldNotifyListeners();notifyManager.batch(()=>{if(notifyListeners)this.listeners.forEach(listener=>{listener(this.#currentResult)});this.#client.getQueryCache().notify({query:this.#currentQuery,type:`observerResultsUpdated`})})}#updateQuery(){const query=this.#client.getQueryCache().build(this.#client,this.options);if(query===this.#currentQuery)return;const prevQuery=this.#currentQuery;this.#currentQuery=query;this.#currentQueryInitialState=query.state;if(this.hasListeners()){prevQuery?.removeObserver(this);query.addObserver(this)}}onQueryUpdate(){this.updateResult();if(this.hasListeners())this.#updateTimers()}};function shouldLoadOnMount(query,options){return resolveQueryValue(options.enabled,query)!==false&&query.state.data===void 0&&!(query.state.status===`error`&&resolveQueryValue(options.retryOnMount,query)===false)}function shouldFetchOnMount(query,options){return shouldLoadOnMount(query,options)||query.state.data!==void 0&&shouldFetchOn(query,options,options.refetchOnMount)}function shouldFetchOn(query,options,field){if(resolveQueryValue(options.enabled,query)!==false&&resolveQueryValue(options.staleTime,query)!==`static`){const value=resolveQueryValue(field,query);return value===`always`||value!==false&&isStale(query,options)}return false}function shouldFetchOptionally(query,prevQuery,options,prevOptions){return(query!==prevQuery||resolveQueryValue(prevOptions.enabled,query)===false)&&(!options.suspense||query.state.status!==`error`)&&isStale(query,options)}function isStale(query,options){return resolveQueryValue(options.enabled,query)!==false&&query.isStaleByTime(resolveQueryValue(options.staleTime,query))}var Mutation=class extends Removable{#client;#observers;#mutationCache;#retryer;constructor(config){super();this.#client=config.client;this.mutationId=config.mutationId;this.#mutationCache=config.mutationCache;this.#observers=[];this.state=config.state||getDefaultState();this.setOptions(config.options);this.scheduleGc()}setOptions(options){this.options=options;this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(observer){if(!this.#observers.includes(observer)){this.#observers.push(observer);this.clearGcTimeout();this.#mutationCache.notify({type:`observerAdded`,mutation:this,observer})}}removeObserver(observer){this.#observers=this.#observers.filter(x=>x!==observer);this.scheduleGc();this.#mutationCache.notify({type:`observerRemoved`,mutation:this,observer})}optionalRemove(){if(!this.#observers.length){if(this.state.status===`pending`)this.scheduleGc();else this.#mutationCache.remove(this)}}continue(){return this.#retryer?.continue()??(this.state.status===`pending`?this.execute(this.state.variables):Promise.resolve())}async execute(variables){const onContinue=()=>{this.#dispatch({type:`continue`})};const mutationFnContext={client:this.#client,meta:this.options.meta,mutationKey:this.options.mutationKey};const retryer=this.#retryer=createRetryer({fn:()=>{if(!this.options.mutationFn)return Promise.reject(new Error(`No mutationFn found`));return this.options.mutationFn(variables,mutationFnContext)},onFail:(failureCount,error)=>{this.#dispatch({type:`failed`,failureCount,error})},onPause:()=>{this.#dispatch({type:`pause`})},onContinue,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#mutationCache.canRun(this)});const restored=this.state.status===`pending`;const isPaused=!retryer.canStart();try{if(restored)onContinue();else{this.#dispatch({type:`pending`,variables,isPaused});if(this.#mutationCache.config.onMutate)await this.#mutationCache.config.onMutate(variables,this,mutationFnContext);const context=await this.options.onMutate?.(variables,mutationFnContext);if(context!==this.state.context)this.#dispatch({type:`pending`,context,variables,isPaused})}const data=await retryer.start();await this.#mutationCache.config.onSuccess?.(data,variables,this.state.context,this,mutationFnContext);await this.options.onSuccess?.(data,variables,this.state.context,mutationFnContext);await this.#mutationCache.config.onSettled?.(data,null,this.state.variables,this.state.context,this,mutationFnContext);await this.options.onSettled?.(data,null,variables,this.state.context,mutationFnContext);this.#dispatch({type:`success`,data});return data}catch(error){try{await this.#mutationCache.config.onError?.(error,variables,this.state.context,this,mutationFnContext)}catch(e){Promise.reject(e)}try{await this.options.onError?.(error,variables,this.state.context,mutationFnContext)}catch(e){Promise.reject(e)}try{await this.#mutationCache.config.onSettled?.(void 0,error,this.state.variables,this.state.context,this,mutationFnContext)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,error,variables,this.state.context,mutationFnContext)}catch(e){Promise.reject(e)}this.#dispatch({type:`error`,error});throw error}finally{if(this.#retryer===retryer)this.#retryer=void 0;this.#mutationCache.runNext(this)}}#dispatch(action){const reducer=state=>{switch(action.type){case`failed`:return{...state,failureCount:action.failureCount,failureReason:action.error};case`pause`:return{...state,isPaused:true};case`continue`:return{...state,isPaused:false};case`pending`:return{...state,context:action.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:action.isPaused,status:`pending`,variables:action.variables,submittedAt:Date.now()};case`success`:return{...state,data:action.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:false};case`error`:return{...state,data:void 0,error:action.error,failureCount:state.failureCount+1,failureReason:action.error,isPaused:false,status:`error`}}};this.state=reducer(this.state);notifyManager.batch(()=>{this.#observers.forEach(observer=>{observer.onMutationUpdate(action)});this.#mutationCache.notify({mutation:this,type:`updated`,action})})}};function getDefaultState(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:false,status:`idle`,variables:void 0,submittedAt:0}}var MutationObserver=class extends Subscribable{#client;#currentResult=void 0;#currentMutation;#mutateOptions;constructor(client,options){super();this.#client=client;this.setOptions(options);this.bindMethods();this.#updateResult()}bindMethods(){this.mutate=this.mutate.bind(this);this.reset=this.reset.bind(this)}setOptions(options){const prevOptions=this.options;this.options=this.#client.defaultMutationOptions(options);if(!shallowEqualObjects(this.options,prevOptions))this.#client.getMutationCache().notify({type:`observerOptionsUpdated`,mutation:this.#currentMutation,observer:this});if(prevOptions?.mutationKey&&this.options.mutationKey&&hashKey(prevOptions.mutationKey)!==hashKey(this.options.mutationKey))this.reset();else if(this.#currentMutation?.state.status===`pending`)this.#currentMutation.setOptions(this.options)}onSubscribe(){if(this.listeners.size===1&&this.#currentMutation){this.#currentMutation.addObserver(this);this.#updateResult()}}onUnsubscribe(){if(!this.hasListeners())this.#currentMutation?.removeObserver(this)}onMutationUpdate(action){this.#updateResult();this.#notify(action)}getCurrentResult(){return this.#currentResult}reset(){this.#currentMutation?.removeObserver(this);this.#currentMutation=void 0;this.#updateResult();this.#notify()}mutate(variables,options){this.#mutateOptions=options;this.#currentMutation?.removeObserver(this);this.#currentMutation=this.#client.getMutationCache().build(this.#client,this.options);this.#currentMutation.addObserver(this);return this.#currentMutation.execute(variables)}#updateResult(){const state=this.#currentMutation?.state??getDefaultState();this.#currentResult={...state,isPending:state.status===`pending`,isSuccess:state.status===`success`,isError:state.status===`error`,isIdle:state.status===`idle`,mutate:this.mutate,reset:this.reset}}#notify(action){notifyManager.batch(()=>{if(this.#mutateOptions&&this.hasListeners()){const variables=this.#currentResult.variables;const onMutateResult=this.#currentResult.context;const context={client:this.#client,meta:this.options.meta,mutationKey:this.options.mutationKey};if(action?.type===`success`){try{this.#mutateOptions.onSuccess?.(action.data,variables,onMutateResult,context)}catch(e){Promise.reject(e)}try{this.#mutateOptions.onSettled?.(action.data,null,variables,onMutateResult,context)}catch(e){Promise.reject(e)}}else if(action?.type===`error`){try{this.#mutateOptions.onError?.(action.error,variables,onMutateResult,context)}catch(e){Promise.reject(e)}try{this.#mutateOptions.onSettled?.(void 0,action.error,variables,onMutateResult,context)}catch(e){Promise.reject(e)}}}this.listeners.forEach(listener=>{listener(this.#currentResult)})})}};function useBaseQuery(Observer,options,queryClient){const client=queryClient||useQueryClient();const defaultedOptions=computed(()=>{let resolvedOptions=options;if(typeof resolvedOptions===`function`)resolvedOptions=resolvedOptions();const clonedOptions=cloneDeepUnref(resolvedOptions);if(typeof clonedOptions.enabled===`function`)clonedOptions.enabled=clonedOptions.enabled();const defaulted=client.defaultQueryOptions(clonedOptions);defaulted._optimisticResults=client.isRestoring?.value?`isRestoring`:`optimistic`;return defaulted});const observer=new Observer(client,defaultedOptions.value);const state=defaultedOptions.value.shallow?shallowReactive(observer.getCurrentResult()):reactive(observer.getCurrentResult());let unsubscribe=()=>{};if(client.isRestoring)watch(client.isRestoring,isRestoring=>{if(!isRestoring){unsubscribe();unsubscribe=observer.subscribe(result=>{updateState(state,result)})}},{immediate:true});const updater=()=>{observer.setOptions(defaultedOptions.value);updateState(state,observer.getCurrentResult())};watch(defaultedOptions,updater);onScopeDispose(()=>{unsubscribe()});const refetch=(...args)=>{updater();return state.refetch(...args)};const suspense=()=>{return new Promise((resolve,reject)=>{let stopWatch=()=>{};const run=()=>{if(defaultedOptions.value.enabled!==false){observer.setOptions(defaultedOptions.value);const optimisticResult=observer.getOptimisticResult(defaultedOptions.value);if(optimisticResult.isStale){stopWatch();observer.fetchOptimistic(defaultedOptions.value).then(resolve,error=>{if(shouldThrowError(defaultedOptions.value.throwOnError,[error,observer.getCurrentQuery()]))reject(error);else resolve(observer.getCurrentResult())})}else{stopWatch();resolve(optimisticResult)}}};run();stopWatch=watch(defaultedOptions,run)})};watch(()=>state.error,error=>{if(state.isError&&!state.isFetching&&shouldThrowError(defaultedOptions.value.throwOnError,[error,observer.getCurrentQuery()]))throw error});const readonlyState=defaultedOptions.value.shallow?shallowReadonly(state):readonly(state);const object=toRefs(readonlyState);for(const key in state)if(typeof state[key]===`function`)object[key]=state[key];object.suspense=suspense;object.refetch=refetch;return object}function useQuery(options,queryClient){return useBaseQuery(QueryObserver,options,queryClient)}function useMutation(options,queryClient){const client=queryClient||useQueryClient();const defaultedOptions=computed(()=>{const resolvedOptions=typeof options===`function`?options():options;return client.defaultMutationOptions(cloneDeepUnref(resolvedOptions))});const observer=new MutationObserver(client,defaultedOptions.value);const state=defaultedOptions.value.shallow?shallowReactive(observer.getCurrentResult()):reactive(observer.getCurrentResult());const unsubscribe=observer.subscribe(result=>{updateState(state,result)});const mutate=(...args)=>{observer.mutate(args[0],args[1]).catch(()=>{})};watch(defaultedOptions,()=>{observer.setOptions(defaultedOptions.value)});onScopeDispose(()=>{unsubscribe()});const readonlyState=defaultedOptions.value.shallow?shallowReadonly(state):readonly(state);const resultRefs=toRefs(readonlyState);watch(()=>state.error,error=>{if(error&&shouldThrowError(defaultedOptions.value.throwOnError,[error]))throw error});return{...resultRefs,mutate,mutateAsync:state.mutate,reset:state.reset}}var AUTH_POLICY_PUBLIC=`public`;var AUTH_POLICY_AUTHENTICATED=`authenticated`;var ROUTE_VISIBILITY_PUBLIC=AUTH_POLICY_PUBLIC;var ROUTE_VISIBILITY_USER=`user`;function resolveEnabledRef(value){if(value===void 0)return true;if(typeof value===`function`)return Boolean(value());return Boolean(unref(value))}function resolveTextRef(value){return String(unref(value)||``).trim()}var ROUTE_VISIBILITY_LEVELS=Object.freeze([ROUTE_VISIBILITY_PUBLIC,ROUTE_VISIBILITY_USER]);var ROUTE_VISIBILITY_LEVEL_SET=new Set(ROUTE_VISIBILITY_LEVELS);var ROUTE_VISIBILITY_WORKSPACE=`workspace`;var ROUTE_VISIBILITY_WORKSPACE_USER=`workspace_user`;var ROUTE_VISIBILITY_TOKENS=Object.freeze([ROUTE_VISIBILITY_PUBLIC,ROUTE_VISIBILITY_USER,ROUTE_VISIBILITY_WORKSPACE,ROUTE_VISIBILITY_WORKSPACE_USER]);var ROUTE_VISIBILITY_TOKEN_SET=new Set(ROUTE_VISIBILITY_TOKENS);var OWNERSHIP_FILTER_VALUES=ROUTE_VISIBILITY_TOKENS;var SCOPED_OWNERSHIP_FILTER_SET=new Set([ROUTE_VISIBILITY_WORKSPACE,ROUTE_VISIBILITY_WORKSPACE_USER]);var ACCESS_MODE_VALUES=Object.freeze([`auto`,`always`,`never`]);function asPlainObject(value){if(!value||typeof value!==`object`||Array.isArray(value))return{};return value}function normalizePermissions(value){if(Array.isArray(value))return value.map(entry=>String(entry||``).trim()).filter(Boolean);const one=String(value||``).trim();return one?[one]:[]}function resolvePermissionAccess(access,normalizedPermissions=[]){if(normalizedPermissions.length<1)return true;return access.canAny(normalizedPermissions)}function normalizeAccessMode(value=`auto`){const normalized=String(value||`auto`).trim().toLowerCase();if(ACCESS_MODE_VALUES.includes(normalized))return normalized;throw new TypeError(`access must be one of: ${ACCESS_MODE_VALUES.join(`, `)}. Received: ${String(value||``)||`(empty)`}`)}function resolveAccessModeEnabled(accessMode=`auto`,{hasPermissionRequirements=false}={}){const normalizedMode=normalizeAccessMode(accessMode);if(normalizedMode===`always`)return true;if(normalizedMode===`never`)return false;return hasPermissionRequirements===true}function ensureAccessModeCompatibility({accessMode=`auto`,hasPermissionRequirements=false,caller=`http-web`}={}){const normalizedMode=normalizeAccessMode(accessMode);if(normalizedMode===`never`&&hasPermissionRequirements)throw new TypeError(`${caller} cannot use access:\"never\" when permission requirements are configured.`);return normalizedMode}function resolveApiSuffix(apiSuffix,context={}){if(typeof apiSuffix===`function`)return resolveTextRef(apiSuffix(context));return resolveTextRef(apiSuffix)}function resolveEnabled$1(value,context={}){if(typeof value===`function`)return Boolean(value(context));return resolveEnabledRef(value)}function normalizeOwnershipFilter(value=ROUTE_VISIBILITY_WORKSPACE){const normalized=String(value||`workspace`).trim().toLowerCase();if(OWNERSHIP_FILTER_VALUES.includes(normalized))return normalized;throw new TypeError(`ownershipFilter must be one of: ${OWNERSHIP_FILTER_VALUES.join(`, `)}. Received: ${String(value||``)||`(empty)`}`)}function isScopedOwnershipFilter(ownershipFilter){return SCOPED_OWNERSHIP_FILTER_SET.has(ownershipFilter)}function resolveQueryKey(queryKeyFactory,{surfaceId=``,scopeParamValue=``,ownershipFilter=ROUTE_VISIBILITY_WORKSPACE}={}){if(typeof queryKeyFactory!==`function`)throw new TypeError(`queryKeyFactory is required.`);if(isScopedOwnershipFilter(ownershipFilter))return queryKeyFactory(surfaceId,scopeParamValue,ownershipFilter);return queryKeyFactory(surfaceId,ownershipFilter)}function resolveResourceMessages(resource,defaults={}){const defaultMessages=asPlainObject(defaults);const resourceMessages=asPlainObject(asPlainObject(resource).messages);return{...defaultMessages,...resourceMessages}}function normalizeErrorStatus(error){if(error==null||typeof error!==`object`)return null;const hasStatus=Object.prototype.hasOwnProperty.call(error,`status`);const hasStatusCode=Object.prototype.hasOwnProperty.call(error,`statusCode`);if(!hasStatus&&!hasStatusCode)return null;const status=Number(hasStatus?error.status:error.statusCode);return Number.isInteger(status)?status:null}function isGenericTransportMessage(error){const normalizedMessage=String(error?.message||``).trim();if(!normalizedMessage)return false;const status=normalizeErrorStatus(error);if(status===0)return true;return status!=null&&status>=400&&normalizedMessage===`Request failed with status ${status}.`}function toQueryErrorMessage(error,fallbackMessage=``,defaultMessage=`Request failed.`){if(!error)return``;const normalizedFallback=String(fallbackMessage||``).trim();const normalizedMessage=String(error?.message||``).trim();if(normalizedMessage&&!isGenericTransportMessage(error))return normalizedMessage;if(normalizedFallback)return normalizedFallback;if(normalizedMessage)return normalizedMessage;return String(defaultMessage||`Request failed.`).trim()}function toUiErrorMessage(error,fallbackMessage=``,defaultMessage=`Request failed.`){const normalizedFallback=String(fallbackMessage||``).trim();const normalizedMessage=String(error?.message||``).trim();if(normalizedMessage&&!isGenericTransportMessage(error))return normalizedMessage;if(normalizedFallback)return normalizedFallback;if(normalizedMessage)return normalizedMessage;return String(defaultMessage||`Request failed.`).trim()}function hasResolvedQueryData({query=null,data=null}={}){const querySucceeded=Boolean(unref(query?.isSuccess));const hasDataPayload=unref(data)!=null;return querySucceeded||hasDataPayload}function mergeQueryMeta(queryOptions=null,meta={}){const sourceOptions=queryOptions&&typeof queryOptions===`object`&&!Array.isArray(queryOptions)?queryOptions:{};const sourceMeta=sourceOptions.meta&&typeof sourceOptions.meta===`object`&&!Array.isArray(sourceOptions.meta)?sourceOptions.meta:{};const sourceJskitMeta=sourceMeta.jskit&&typeof sourceMeta.jskit===`object`&&!Array.isArray(sourceMeta.jskit)?sourceMeta.jskit:{};const nextJskitMeta=meta.jskit&&typeof meta.jskit===`object`&&!Array.isArray(meta.jskit)?meta.jskit:{};return{...sourceOptions,meta:{...sourceMeta,...meta,jskit:{...sourceJskitMeta,...nextJskitMeta}}}}function normalizeText(value=``){return String(value||``).trim()}function firstNormalizedText(...values){for(const value of values){const normalized=normalizeText(value);if(normalized)return normalized}return``}function firstNonNegativeFiniteNumber(...values){for(const value of values){const numberValue=Number(value);if(Number.isFinite(numberValue))return Math.max(0,numberValue)}return null}function normalizePlainObject(value=null){return value&&typeof value===`object`&&!Array.isArray(value)?value:{}}function normalizeRequestRecoveryInput(requestRecovery=null){if(typeof requestRecovery===`string`)return{label:requestRecovery};return normalizePlainObject(requestRecovery)}function normalizeRequestRecoveryMethod(value=``){return normalizeText(value).toUpperCase()}function isRequestRecoveryMetaDisabled(sourceJskitMeta={}){return sourceJskitMeta.requestRecovery===false}function hasUsableMetaValue(source={},key=``){return Object.hasOwn(source,key)&&source[key]!==void 0&&source[key]!==null&&source[key]!==``}function buildRequestRecoveryMeta(requestRecovery=null,defaults={}){if(requestRecovery===false)return{jskit:{requestRecovery:false}};const fallback=normalizePlainObject(defaults);const source=normalizeRequestRecoveryInput(requestRecovery);if(source.requestRecovery===false||source.enabled===false)return{jskit:{requestRecovery:false}};const label=firstNormalizedText(source.requestRecoveryLabel,source.label,fallback.requestRecoveryLabel,fallback.label);const recoverySource=firstNormalizedText(source.requestRecoverySource,source.source,fallback.requestRecoverySource,fallback.source);const dedupeKey=firstNormalizedText(source.requestRecoveryDedupeKey,source.dedupeKey,fallback.requestRecoveryDedupeKey,fallback.dedupeKey);const method=normalizeRequestRecoveryMethod(firstNormalizedText(source.requestRecoveryMethod,source.method,fallback.requestRecoveryMethod,fallback.method));const dedupeWindowMs=firstNonNegativeFiniteNumber(source.requestRecoveryDedupeWindowMs,source.dedupeWindowMs,fallback.requestRecoveryDedupeWindowMs,fallback.dedupeWindowMs);const jskit={};if(label)jskit.requestRecoveryLabel=label;if(recoverySource)jskit.requestRecoverySource=recoverySource;if(dedupeKey)jskit.requestRecoveryDedupeKey=dedupeKey;if(method)jskit.requestRecoveryMethod=method;if(dedupeWindowMs!==null)jskit.requestRecoveryDedupeWindowMs=dedupeWindowMs;return Object.keys(jskit).length>0?{jskit}:{}}function resolveRequestRecoveryDefaults(queryOptions=null,defaults={}){const sourceJskitMeta=normalizePlainObject(normalizePlainObject(normalizePlainObject(queryOptions).meta).jskit);const fallback=normalizePlainObject(defaults);if(isRequestRecoveryMetaDisabled(sourceJskitMeta))return{};const hasExplicitLabel=hasUsableMetaValue(sourceJskitMeta,`requestRecoveryLabel`);const hasExplicitSource=hasUsableMetaValue(sourceJskitMeta,`requestRecoverySource`);const hasExplicitDedupeKey=hasUsableMetaValue(sourceJskitMeta,`requestRecoveryDedupeKey`);const hasExplicitDedupeWindowMs=hasUsableMetaValue(sourceJskitMeta,`requestRecoveryDedupeWindowMs`);const hasExplicitMethod=hasUsableMetaValue(sourceJskitMeta,`requestRecoveryMethod`);return{...fallback,requestRecoveryLabel:hasExplicitLabel?``:fallback.requestRecoveryLabel,label:hasExplicitLabel?``:fallback.label,requestRecoverySource:hasExplicitSource?``:fallback.requestRecoverySource,source:hasExplicitSource?``:fallback.source,requestRecoveryDedupeKey:hasExplicitDedupeKey?``:fallback.requestRecoveryDedupeKey,dedupeKey:hasExplicitDedupeKey?``:fallback.dedupeKey,requestRecoveryDedupeWindowMs:hasExplicitDedupeWindowMs?``:fallback.requestRecoveryDedupeWindowMs,dedupeWindowMs:hasExplicitDedupeWindowMs?``:fallback.dedupeWindowMs,requestRecoveryMethod:hasExplicitMethod?``:fallback.requestRecoveryMethod,method:hasExplicitMethod?``:fallback.method}}function mergeRequestRecoveryQueryMeta(queryOptions=null,requestRecovery=null,defaults={}){const sourceOptions=normalizePlainObject(queryOptions);const meta=buildRequestRecoveryMeta(requestRecovery,requestRecovery==null?resolveRequestRecoveryDefaults(sourceOptions,defaults):normalizePlainObject(defaults));if(Object.keys(meta).length<1)return sourceOptions;return mergeQueryMeta(sourceOptions,meta)}function normalizeRealtimeOptions(value={}){if(value===null||value===void 0||value===false)return{};if(typeof value!==`object`||Array.isArray(value))throw new TypeError(`realtime must be an object when configured.`);return value}function hasRealtimeEventConfig(value={}){const source=normalizeRealtimeOptions(value);return Object.hasOwn(source,`event`)||Object.hasOwn(source,`events`)}function resolveOperationRealtimeOptions({realtime=void 0,fallbackRealtime=null}={}){if(realtime===false)return null;const fallback=normalizeRealtimeOptions(fallbackRealtime);const explicit=realtime==null?{}:normalizeRealtimeOptions(realtime);if(hasRealtimeEventConfig(explicit)||!hasRealtimeEventConfig(fallback))return Object.keys(explicit).length>0?explicit:null;return Object.freeze({...fallback,...explicit})}function resolveEnabled(value){if(typeof value===`undefined`)return true;return Boolean(unref(value))}function toQueryKeyList(value){const resolved=typeof value===`function`?value():unref(value);if(!Array.isArray(resolved)||resolved.length<1)return[];if(Array.isArray(resolved[0]))return resolved.filter(entry=>Array.isArray(entry)&&entry.length>0).map(entry=>Object.freeze([...entry]));return[Object.freeze([...resolved])]}function useRealtimeQueryInvalidation({event=``,enabled=true,matches=null,queryKey=null,onEvent=null}={}){const queryClient=useQueryClient();const normalizedEvent=computed(()=>normalizeText$1(unref(event)));const active=computed(()=>resolveEnabled(enabled)&&Boolean(normalizedEvent.value));const listener=useRealtimeEvent({event:normalizedEvent,enabled:active,matches,onEvent:async context=>{if(typeof onEvent===`function`)await onEvent(context);const keys=toQueryKeyList(queryKey);for(const key of keys)await queryClient.invalidateQueries({queryKey:key})}});return Object.freeze({active:listener.active})}function useOperationRealtime({realtime=null,queryKey=null,enabled=true}={}){const source=normalizeRealtimeOptions(realtime);const eventList=[];if(Object.hasOwn(source,`event`)){const normalizedEvent=normalizeText$1(source.event);if(normalizedEvent)eventList.push(normalizedEvent)}if(Object.hasOwn(source,`events`)){if(!Array.isArray(source.events))throw new TypeError(`realtime.events must be an array when configured.`);for(const entry of source.events){const normalizedEvent=normalizeText$1(entry);if(!normalizedEvent||eventList.includes(normalizedEvent))continue;eventList.push(normalizedEvent)}}if(eventList.length<1)return null;const matches=typeof source.matches===`function`?source.matches:null;const onEvent=typeof source.onEvent===`function`?source.onEvent:null;const resolvedQueryKey=Object.hasOwn(source,`queryKey`)?source.queryKey:queryKey;const active=computed(()=>{const sourceEnabled=Object.hasOwn(source,`enabled`)?source.enabled:true;return resolveEnabled(enabled)&&resolveEnabled(sourceEnabled)});const bindings=eventList.map(event=>useRealtimeQueryInvalidation({event,enabled:active,matches,queryKey:resolvedQueryKey,onEvent}));return Object.freeze({active:computed(()=>bindings.some(binding=>Boolean(binding?.active?.value)))})}function buildEndpointReadRequestOptions({method=`GET`,query=null,transport=null}={}){const requestOptions={method:String(method||`GET`).toUpperCase()};const normalizedQuery=resolveRequestQuery(query);if(normalizedQuery)requestOptions.query=normalizedQuery;if(transport&&typeof transport===`object`)requestOptions.transport=transport;return requestOptions}function resolveRequestQuery(value=null){const source=unref(value);if(!source||typeof source!==`object`||Array.isArray(source))return null;return source}function buildEndpointWriteRequestOptions({method=`PATCH`,body=void 0,options=null,transport=null}={}){const requestOptions={method:String(method||`PATCH`).toUpperCase(),...asPlainObject(options)};if(body!==void 0)requestOptions.body=body;if(transport&&typeof transport===`object`)requestOptions.transport=transport;return requestOptions}function useEndpointResource({queryKey,path=``,enabled=true,client=null,readMethod=`GET`,writeMethod=`PATCH`,readQuery=null,transport=null,refreshOnPull=false,realtime=null,queryOptions=null,mutationOptions=null,requestRecovery=null,requestRecoveryLabel=`Request`,fallbackLoadError=`Unable to load resource.`,fallbackSaveError=`Unable to save resource.`}={}){const activeClient=client||getHttpWebClient();if(!activeClient||typeof activeClient.request!==`function`)throw new TypeError(`useEndpointResource requires a client with request().`);const normalizedPath=computed(()=>resolveTextRef(path));const queryEnabled=computed(()=>resolveEnabledRef(enabled)&&Boolean(normalizedPath.value));const query=useQuery({queryKey,queryFn:({signal})=>{const requestPath=normalizedPath.value;if(!requestPath)throw new Error(`Resource path is required.`);return activeClient.request(requestPath,{...buildEndpointReadRequestOptions({method:readMethod,query:readQuery,transport}),signal})},enabled:queryEnabled,...mergeRequestRecoveryQueryMeta(refreshOnPull?mergeQueryMeta(asPlainObject(queryOptions),{jskit:{refreshOnPull:true}}):asPlainObject(queryOptions),requestRecovery,{label:requestRecoveryLabel,method:readMethod})});const realtimeBinding=useOperationRealtime({realtime,queryKey,enabled:queryEnabled});const mutation=useMutation({mutationFn:async(request={})=>{const options=asPlainObject(request);const requestPath=resolveTextRef(options.path||normalizedPath.value);if(!requestPath)throw new Error(`Resource path is required.`);const method=String(options.method||writeMethod||`PATCH`).toUpperCase();const body=Object.hasOwn(options,`body`)?options.body:options.payload;return activeClient.request(requestPath,buildEndpointWriteRequestOptions({method,body,options:options.options,transport}))},...asPlainObject(mutationOptions)});const data=computed(()=>query.data.value);const hasResolvedData=computed(()=>hasResolvedQueryData({query,data}));const isInitialLoading=computed(()=>Boolean(queryEnabled.value&&query.isPending.value&&!hasResolvedData.value));const isFetching=computed(()=>Boolean(queryEnabled.value&&query.isFetching.value));const isRefetching=computed(()=>Boolean(isFetching.value&&!isInitialLoading.value));const isLoading=computed(()=>Boolean(isInitialLoading.value||isFetching.value));const isSaving=computed(()=>Boolean(mutation.isPending.value));const loadError=computed(()=>toQueryErrorMessage(query.error.value,fallbackLoadError,`Request failed.`));const saveError=computed(()=>toQueryErrorMessage(mutation.error.value,fallbackSaveError,`Request failed.`));async function reload(){return query.refetch()}async function save(payload,options={}){return mutation.mutateAsync({...asPlainObject(options),payload})}return Object.freeze({query,mutation,data,isInitialLoading,isFetching,isRefetching,isLoading,isSaving,loadError,saveError,realtime:realtimeBinding,reload,save})}export{QueryObserver as A,hashKey as B,AUTH_POLICY_AUTHENTICATED as C,useQuery as D,useMutation as E,notifyManager as F,partialMatchKey as G,matchMutation as H,focusManager as I,useQueryClient as J,resolveQueryValue as K,Subscribable as L,hasNextPage as M,hasPreviousPage as N,useBaseQuery as O,onlineManager as P,environmentManager as R,resolveTextRef as S,ROUTE_VISIBILITY_PUBLIC as T,matchQuery as U,hashQueryKeyByOptions as V,noop as W,getClientKey as X,cloneDeepUnref as Y,resolvePermissionAccess as _,mergeQueryMeta as a,ROUTE_VISIBILITY_WORKSPACE as b,toUiErrorMessage as c,normalizeAccessMode as d,normalizeOwnershipFilter as f,resolveEnabled$1 as g,resolveApiSuffix as h,useRealtimeQueryInvalidation as i,Query as j,Mutation as k,asPlainObject as l,resolveAccessModeEnabled as m,resolveOperationRealtimeOptions as n,mergeRequestRecoveryQueryMeta as o,normalizePermissions as p,skipToken as q,useOperationRealtime as r,toQueryErrorMessage as s,useEndpointResource as t,ensureAccessModeCompatibility as u,resolveQueryKey as v,AUTH_POLICY_PUBLIC as w,resolveEnabledRef as x,resolveResourceMessages as y,functionalUpdate as z};
@@ -1 +0,0 @@
1
- import{Yn as __exportAll}from"./ripple-BVltMmyV.js";import{Ht as watch,J as inject,On as unref,pn as onScopeDispose,vn as ref}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{c as normalizeObject,d as normalizeText,f as normalizeTransactionOutcome,n as isRecord$4,p as normalizeUniqueTextList,r as normalizeArray,t as TRANSACTION_OUTCOMES}from"./normalize-CO2KHj_d.js";import{t as deepFreeze}from"./deepFreeze-BgoYkoTa.js";function splitPathAndHash(path=``){const normalizedPath=String(path||``).trim();const hashIndex=normalizedPath.indexOf(`#`);if(hashIndex<0)return{pathWithoutHash:normalizedPath,hash:``};return{pathWithoutHash:normalizedPath.slice(0,hashIndex),hash:normalizedPath.slice(hashIndex)}}function splitPathQueryAndHash(path=``){const{pathWithoutHash,hash}=splitPathAndHash(path);const queryIndex=pathWithoutHash.indexOf(`?`);if(queryIndex<0)return{pathname:pathWithoutHash,queryString:``,hash};return{pathname:pathWithoutHash.slice(0,queryIndex),queryString:pathWithoutHash.slice(queryIndex+1),hash}}function appendQueryString(path=``,queryString=``){const normalizedPath=String(path||``).trim();if(!normalizedPath)return``;const normalizedQuery=String(queryString||``).trim().replace(/^\?+/,``);if(!normalizedQuery)return normalizedPath;const{pathWithoutHash,hash}=splitPathAndHash(normalizedPath);return`${pathWithoutHash}${pathWithoutHash.includes(`?`)?`&`:`?`}${normalizedQuery}${hash}`}function normalizeFieldErrors(value){const source=isRecord$4(value)?value:{};const normalized={};for(const[field,message]of Object.entries(source)){const normalizedField=String(field||``).trim();if(!normalizedField)continue;normalized[normalizedField]=String(message||``)}return normalized}function resolveFieldErrors(value=null){const source=isRecord$4(value)?value:{};if(isRecord$4(source.fieldErrors))return normalizeFieldErrors(source.fieldErrors);if(isRecord$4(source.details?.fieldErrors))return normalizeFieldErrors(source.details.fieldErrors);return{}}function resolveRelationshipFieldKey(relationshipName=``,lookupFieldMap=null){const normalizedRelationshipName=normalizeText(relationshipName);const explicitFieldKey=normalizeText(lookupFieldMap?.[normalizedRelationshipName]);if(explicitFieldKey)return explicitFieldKey;return normalizedRelationshipName?`${normalizedRelationshipName}Id`:``}function simplifyJsonApiResourceWithRelationshipIds(resource={},{lookupFieldMap=null}={}){const normalizedResource=isRecord$4(resource)?normalizeObject(resource):{};const simplified={id:normalizedResource.id==null?``:String(normalizedResource.id),...normalizeObject(normalizedResource.attributes)};for(const[relationshipName,relationshipValue]of Object.entries(normalizeObject(normalizedResource.relationships))){const relationshipData=relationshipValue?.data;if(Array.isArray(relationshipData))continue;const fieldKey=resolveRelationshipFieldKey(relationshipName,lookupFieldMap);if(!fieldKey||Object.hasOwn(simplified,fieldKey))continue;simplified[fieldKey]=relationshipData?.id==null?null:String(relationshipData.id)}return simplified}var JSON_API_CONTENT_TYPE=`application/vnd.api+json`;function isRecord$3(value){return Boolean(value)&&typeof value===`object`&&!Array.isArray(value)}function normalizeMediaType(contentType=``){return String(contentType||``).split(`;`)[0].trim().toLowerCase()}function isJsonContentType(contentType=``){const mediaType=normalizeMediaType(contentType);if(!mediaType)return false;return mediaType===`application/json`||/^application\/[a-z0-9.!#$&^_-]+\+json$/i.test(mediaType)}function isJsonApiContentType(contentType=``){return normalizeMediaType(contentType)===JSON_API_CONTENT_TYPE}function resolveJsonApiTransportTypes({type=``,requestType=``,responseType=``}={},{context=`JSON:API transport`}={}){const fallbackType=normalizeText(type);const normalizedRequestType=normalizeText(requestType,{fallback:fallbackType});const normalizedResponseType=normalizeText(responseType,{fallback:fallbackType||normalizedRequestType});if(!normalizedRequestType&&!normalizedResponseType)throw new TypeError(`${context} requires requestType, responseType, or type.`);return Object.freeze({requestType:normalizedRequestType,responseType:normalizedResponseType})}function normalizeJsonApiResourceObject(resource={}){if(!isRecord$3(resource))return Object.freeze({});const source=normalizeObject(resource);const normalized={};if(source.type!=null)normalized.type=String(source.type);if(source.id!=null)normalized.id=String(source.id);if(isRecord$3(source.attributes))normalized.attributes=normalizeObject(source.attributes);if(isRecord$3(source.relationships))normalized.relationships=normalizeObject(source.relationships);if(isRecord$3(source.links))normalized.links=normalizeObject(source.links);if(isRecord$3(source.meta))normalized.meta=normalizeObject(source.meta);return Object.freeze(normalized)}function normalizeJsonApiResourceArray(value){return Object.freeze(normalizeArray(value).map(entry=>normalizeJsonApiResourceObject(entry)))}function normalizeJsonApiLinks(value){return isRecord$3(value)?Object.freeze(normalizeObject(value)):void 0}function normalizeJsonApiMeta(value){return isRecord$3(value)?Object.freeze(normalizeObject(value)):void 0}function normalizeJsonApiErrors(value){return Array.isArray(value)?Object.freeze(value.map(entry=>isRecord$3(entry)?normalizeObject(entry):{})):void 0}function isJsonApiResourceDocument(payload={}){return isRecord$3(payload)&&isRecord$3(payload.data)&&!Array.isArray(payload.data)}function isJsonApiCollectionDocument(payload={}){return isRecord$3(payload)&&Array.isArray(payload.data)}function isJsonApiErrorDocument(payload={}){return isRecord$3(payload)&&Array.isArray(payload.errors)}function normalizeJsonApiDocument(payload={}){const source=isRecord$3(payload)?normalizeObject(payload):{};const links=normalizeJsonApiLinks(source.links);const meta=normalizeJsonApiMeta(source.meta);const included=normalizeJsonApiResourceArray(source.included);if(isJsonApiResourceDocument(source))return Object.freeze({kind:`resource`,data:normalizeJsonApiResourceObject(source.data),...included.length>0?{included}:{},...links?{links}:{},...meta?{meta}:{}});if(Object.hasOwn(source,`data`)&&source.data==null)return Object.freeze({kind:`resource`,data:null,...included.length>0?{included}:{},...links?{links}:{},...meta?{meta}:{}});if(isJsonApiCollectionDocument(source))return Object.freeze({kind:`collection`,data:normalizeJsonApiResourceArray(source.data),...included.length>0?{included}:{},...links?{links}:{},...meta?{meta}:{}});if(isJsonApiErrorDocument(source)){const errors=normalizeJsonApiErrors(source.errors);return Object.freeze({kind:`errors`,errors:errors||Object.freeze([]),...links?{links}:{},...meta?{meta}:{}})}if(meta&&!Object.hasOwn(source,`data`)&&!Object.hasOwn(source,`errors`))return Object.freeze({kind:`meta`,meta,...links?{links}:{}});return Object.freeze({kind:`unknown`,value:source})}function createJsonApiResourceObject({type=``,id=null,attributes=void 0,relationships=void 0,links=void 0,meta=void 0}={}){const normalizedType=String(type||``).trim();if(!normalizedType)throw new TypeError(`createJsonApiResourceObject requires a non-empty type.`);const resource={type:normalizedType};if(id!=null&&String(id).trim())resource.id=String(id);if(attributes!==void 0){if(!isRecord$3(attributes))throw new TypeError(`createJsonApiResourceObject attributes must be an object.`);resource.attributes=normalizeObject(attributes)}if(relationships!==void 0){if(!isRecord$3(relationships))throw new TypeError(`createJsonApiResourceObject relationships must be an object.`);resource.relationships=normalizeObject(relationships)}if(links!==void 0){if(!isRecord$3(links))throw new TypeError(`createJsonApiResourceObject links must be an object.`);resource.links=normalizeObject(links)}if(meta!==void 0){if(!isRecord$3(meta))throw new TypeError(`createJsonApiResourceObject meta must be an object.`);resource.meta=normalizeObject(meta)}return Object.freeze(resource)}function createJsonApiDocument({data=void 0,included=void 0,links=void 0,meta=void 0,errors=void 0}={}){const hasData=data!==void 0;const hasErrors=errors!==void 0;if(!hasData&&!hasErrors&&!(meta!==void 0))throw new TypeError(`createJsonApiDocument requires at least one of data, errors, or meta.`);if(hasData&&hasErrors)throw new TypeError(`createJsonApiDocument cannot include both data and errors.`);const document={};if(hasData){if(data==null)document.data=null;else if(Array.isArray(data))document.data=normalizeJsonApiResourceArray(data);else if(isRecord$3(data))document.data=normalizeJsonApiResourceObject(data);else throw new TypeError(`createJsonApiDocument data must be a resource object, an array, or null.`)}if(hasErrors){if(!Array.isArray(errors))throw new TypeError(`createJsonApiDocument errors must be an array.`);document.errors=normalizeJsonApiErrors(errors)||Object.freeze([])}if(included!==void 0){if(!Array.isArray(included))throw new TypeError(`createJsonApiDocument included must be an array.`);document.included=normalizeJsonApiResourceArray(included)}if(links!==void 0){if(!isRecord$3(links))throw new TypeError(`createJsonApiDocument links must be an object.`);document.links=Object.freeze(normalizeObject(links))}if(meta!==void 0){if(!isRecord$3(meta))throw new TypeError(`createJsonApiDocument meta must be an object.`);document.meta=Object.freeze(normalizeObject(meta))}return Object.freeze(document)}function createJsonApiErrorObject({status=``,code=``,title=``,detail=``,source=void 0,links=void 0,meta=void 0}={}){const errorObject={};const normalizedStatus=String(status||``).trim();const normalizedCode=String(code||``).trim();const normalizedTitle=String(title||``).trim();const normalizedDetail=String(detail||``).trim();if(normalizedStatus)errorObject.status=normalizedStatus;if(normalizedCode)errorObject.code=normalizedCode;if(normalizedTitle)errorObject.title=normalizedTitle;if(normalizedDetail)errorObject.detail=normalizedDetail;if(source!==void 0){if(!isRecord$3(source))throw new TypeError(`createJsonApiErrorObject source must be an object.`);errorObject.source=normalizeObject(source)}if(links!==void 0){if(!isRecord$3(links))throw new TypeError(`createJsonApiErrorObject links must be an object.`);errorObject.links=normalizeObject(links)}if(meta!==void 0){if(!isRecord$3(meta))throw new TypeError(`createJsonApiErrorObject meta must be an object.`);errorObject.meta=normalizeObject(meta)}return Object.freeze(errorObject)}function escapeJsonPointerSegment(value=``){return String(value||``).replace(/~/g,`~0`).replace(/\//g,`~1`)}function resolveValidationFieldName(issue={}){const pathParts=String(issue?.instancePath||``).split(`/`).filter(Boolean);const missingProperty=String(issue?.params?.missingProperty||``).trim();return String(issue?.params?.additionalProperty||``).trim()||missingProperty||pathParts[pathParts.length-1]||``}function resolveJsonApiValidationSource(issue={},validationContext=``){const normalizedContext=String(validationContext||``).trim().toLowerCase();const fieldName=resolveValidationFieldName(issue);if(normalizedContext===`querystring`||normalizedContext===`params`)return fieldName?Object.freeze({parameter:fieldName}):void 0;const instancePath=String(issue?.instancePath||``).trim();if(!instancePath&&!fieldName)return;const pointerBase=instancePath||``;const pointer=fieldName&&!pointerBase.endsWith(`/${fieldName}`)?`${pointerBase}/${escapeJsonPointerSegment(fieldName)}`:pointerBase;return Object.freeze({pointer:pointer||`/`})}function createJsonApiErrorDocumentFromFailure({statusCode=500,code=``,message=``,transactionOutcome,fieldErrors={},validationIssues=[],validationContext=``,pointerPrefix=`/data/attributes`}={}){const outcome=normalizeTransactionOutcome(transactionOutcome);const meta=outcome?{transactionOutcome:outcome}:void 0;const normalizedStatus=String(Number(statusCode)||500);const normalizedCode=String(code||``).trim();const normalizedMessage=String(message||``).trim()||`Request failed.`;const normalizedFieldErrors=isRecord$3(fieldErrors)?normalizeObject(fieldErrors):{};const issues=Array.isArray(validationIssues)?validationIssues:[];if(issues.length>0)return createJsonApiDocument({errors:issues.map(issue=>createJsonApiErrorObject({status:normalizedStatus,meta,code:normalizedCode,title:normalizedMessage,detail:String(issue?.message||`Invalid value.`).trim()||`Invalid value.`,source:resolveJsonApiValidationSource(issue,validationContext)}))});const fieldEntries=Object.entries(normalizedFieldErrors).filter(([field])=>String(field||``).trim());if(fieldEntries.length>0)return createJsonApiDocument({errors:fieldEntries.map(([field,detail])=>createJsonApiErrorObject({status:normalizedStatus,meta,code:normalizedCode,title:normalizedMessage,detail:String(detail||`Invalid value.`).trim()||`Invalid value.`,source:{pointer:`${pointerPrefix}/${escapeJsonPointerSegment(field)}`}}))});return createJsonApiDocument({errors:[createJsonApiErrorObject({status:normalizedStatus,meta,code:normalizedCode,title:normalizedMessage})]})}function simplifyJsonApiResourceObject(resource={}){return simplifyJsonApiResourceWithRelationshipIds(normalizeJsonApiResourceObject(resource))}function simplifyJsonApiDocument(payload={}){const document=normalizeJsonApiDocument(payload);if(document.kind===`resource`)return document.data==null?null:simplifyJsonApiResourceObject(document.data);if(document.kind===`collection`)return document.data.map(entry=>simplifyJsonApiResourceObject(entry));if(document.kind===`meta`)return document.meta||{};return payload}function normalizeJsonApiFieldList(value=[]){const values=Array.isArray(value)?value:[value];const fields=new Set;for(const entry of values){const parts=typeof entry===`string`?entry.split(`,`):[entry];for(const part of parts){const field=normalizeText(part);if(field)fields.add(field)}}return Object.freeze([...fields].sort((left,right)=>left.localeCompare(right)))}function normalizeJsonApiFieldsets(value={},{primaryType=``}={}){const normalizedPrimaryType=normalizeText(primaryType);let source={};if(value&&typeof value===`object`&&!Array.isArray(value))source=value;else if(normalizedPrimaryType)source={[normalizedPrimaryType]:value};const fieldsets=[];for(const[rawType,rawFields]of Object.entries(source)){const type=normalizeText(rawType);const fields=normalizeJsonApiFieldList(rawFields);if(!type||fields.length<1)continue;fieldsets.push([type,fields])}return deepFreeze(Object.fromEntries(fieldsets.sort(([left],[right])=>left.localeCompare(right))))}function buildJsonApiFieldsetsToken(value={}){const fieldsets=normalizeJsonApiFieldsets(value);return Object.keys(fieldsets).length>0?JSON.stringify(fieldsets):``}function isPlainObject(value){if(value===null||typeof value!==`object`)return false;const prototype=Object.getPrototypeOf(value);return prototype===Object.prototype||prototype===null||isEmptyNullPrototypeRecord(prototype)}function isEmptyNullPrototypeRecord(value){return value!==null&&typeof value===`object`&&Object.getPrototypeOf(value)===null&&Reflect.ownKeys(value).length===0}function isSchemaLike(value){return value!==null&&typeof value===`object`&&isPlainObject(value.structure)&&isPlainObject(value.operations)&&typeof value.validateWith===`function`&&typeof value.toJsonSchema===`function`&&typeof value.cleanup===`function`}function resolveArrayItemsConfig(fieldPath,definition){if(!Object.hasOwn(definition,`items`))return null;const{items}=definition;if(isSchemaLike(items))return{kind:`schema`,schema:items};if(!isPlainObject(items)||typeof items.type!==`string`)throw new Error(`Array field "${fieldPath}" must define items as either a Schema instance or a field definition object.`);return{kind:`definition`,definition:items}}function resolveObjectValuesConfig(fieldPath,definition){if(!Object.hasOwn(definition,`values`))return null;const{values}=definition;if(isSchemaLike(values))return{kind:`schema`,schema:values};if(!isPlainObject(values)||typeof values.type!==`string`)throw new Error(`Object field "${fieldPath}" must define values as either a Schema instance or a field definition object.`);return{kind:`definition`,definition:values}}function resolveObjectFieldMode(fieldPath,definition){const hasNestedSchema=Object.hasOwn(definition,`schema`);const hasValues=Object.hasOwn(definition,`values`);const hasAdditionalProperties=Object.hasOwn(definition,`additionalProperties`);if(hasNestedSchema&&hasValues)throw new Error(`Object field "${fieldPath}" cannot define both schema and values.`);if(hasAdditionalProperties&&definition.additionalProperties!==true)throw new Error(`Object field "${fieldPath}" only supports additionalProperties: true.`);if(hasValues&&definition.additionalProperties===true)throw new Error(`Object field "${fieldPath}" cannot define both values and additionalProperties: true.`);if(hasNestedSchema){if(!isSchemaLike(definition.schema))throw new Error(`Object field "${fieldPath}" must define schema as a Schema instance.`);return{kind:`nested`,schema:definition.schema,allowAdditionalProperties:definition.additionalProperties===true}}if(hasValues)return{kind:`map`,valuesConfig:resolveObjectValuesConfig(fieldPath,definition)};if(definition.additionalProperties===true)return{kind:`opaque`};return{kind:`plain`}}function isNumericDefinition(definition){return definition?.type===`number`||definition?.type===`integer`||definition?.type===`epochMilliseconds`||definition?.type===`epochSeconds`}var EPOCH_MILLISECONDS_LIMIT=864e13;var EPOCH_SECONDS_LIMIT=864e10;var EPOCH_INTEGER_STRING_PATTERN=`^(?:0|-?[1-9]\\d*)$`;var YEAR_PATTERN=`\\d{4}`;var MONTH_PATTERN=`0[1-9]|1[0-2]`;var DAY_PATTERN=`0[1-9]|[12]\\d|3[01]`;var HOUR_PATTERN=`[01]\\d|2[0-3]`;var MINUTE_OR_SECOND_PATTERN=`[0-5]\\d`;var HOUR_MINUTE_PATTERN=`(?:${HOUR_PATTERN}):${MINUTE_OR_SECOND_PATTERN}`;var TIME_ZONE_PATTERN=`(?:Z|[+-](?:${HOUR_PATTERN}):${MINUTE_OR_SECOND_PATTERN})`;var CAPTURED_DATE_PATTERN=`(${YEAR_PATTERN})-(${MONTH_PATTERN})-(${DAY_PATTERN})`;var JSON_SCHEMA_DATE_PATTERN=`${YEAR_PATTERN}-(?:${MONTH_PATTERN})-(?:${DAY_PATTERN})`;var DATE_JSON_SCHEMA_PATTERN=`^${JSON_SCHEMA_DATE_PATTERN}$`;var DATE_PATTERN=new RegExp(`^${CAPTURED_DATE_PATTERN}$`);var TIME_PATTERN=new RegExp(`^${HOUR_MINUTE_PATTERN}(?::${MINUTE_OR_SECOND_PATTERN}(?:\\.(\\d+))?)?$`);var DATE_TIME_PATTERN=new RegExp(`^${CAPTURED_DATE_PATTERN}T${HOUR_MINUTE_PATTERN}:${MINUTE_OR_SECOND_PATTERN}(?:\\.(\\d+))?${TIME_ZONE_PATTERN}$`);var EPOCH_INTEGER_STRING=new RegExp(EPOCH_INTEGER_STRING_PATTERN);var DAYS_PER_MONTH=[31,28,31,30,31,30,31,31,30,31,30,31];function isLeapYear(year){return year%4===0&&(year%100!==0||year%400===0)}function daysInMonth(year,month){if(month===2)return isLeapYear(year)?29:28;return DAYS_PER_MONTH[month-1]}function isValidCalendarDateParts(yearText,monthText,dayText){const year=Number(yearText);const month=Number(monthText);const day=Number(dayText);return month>=1&&month<=12&&day>=1&&day<=daysInMonth(year,month)}function resolveTemporalPrecision(definition,fieldName){const precision=definition.temporalPrecision;if(precision===void 0)return void 0;if(!Number.isInteger(precision)||precision<0)throw new Error(`temporalPrecision for "${fieldName}" must be a non-negative integer.`);return precision}function hasAllowedFractionalPrecision(fraction,temporalPrecision){if(fraction===void 0)return true;return temporalPrecision===void 0||fraction.length<=temporalPrecision}function isValidDate(value){if(typeof value!==`string`)return false;const match=DATE_PATTERN.exec(value);return match!==null&&isValidCalendarDateParts(match[1],match[2],match[3])}function isValidTime(value,temporalPrecision){if(typeof value!==`string`)return false;const match=TIME_PATTERN.exec(value);return match!==null&&hasAllowedFractionalPrecision(match[1],temporalPrecision)}function isValidDateTime(value,temporalPrecision){if(typeof value!==`string`)return false;const match=DATE_TIME_PATTERN.exec(value);if(match===null)return false;return isValidCalendarDateParts(match[1],match[2],match[3])&&hasAllowedFractionalPrecision(match[4],temporalPrecision)}function fractionalPattern(temporalPrecision){if(temporalPrecision===void 0)return`(?:\\.\\d+)?`;if(temporalPrecision===0)return``;return`(?:\\.\\d{1,${temporalPrecision}})?`}function timeJsonSchemaPattern(definition,fieldName){const precision=resolveTemporalPrecision(definition,fieldName);return`^${HOUR_MINUTE_PATTERN}(?::${MINUTE_OR_SECOND_PATTERN}${fractionalPattern(precision)})?$`}function dateTimeJsonSchemaPattern(definition,fieldName){const precision=resolveTemporalPrecision(definition,fieldName);return`^${JSON_SCHEMA_DATE_PATTERN}T${HOUR_MINUTE_PATTERN}:${MINUTE_OR_SECOND_PATTERN}${fractionalPattern(precision)}${TIME_ZONE_PATTERN}$`}function castEpochInteger(value,limit){let integerValue;if(typeof value===`number`)integerValue=value;else if(typeof value===`string`&&EPOCH_INTEGER_STRING.test(value))integerValue=Number(value);else return null;if(!Number.isSafeInteger(integerValue)||integerValue<-limit||integerValue>limit)return null;return integerValue===0?0:integerValue}var UNSAFE_PATH_SEGMENTS=new Set([`__proto__`,`prototype`,`constructor`]);function setOwnProperty(target,key,value){Object.defineProperty(target,key,{value,enumerable:true,configurable:true,writable:true})}function assertSafePathSegment(segment,helperName){if(UNSAFE_PATH_SEGMENTS.has(segment))throw new Error(`${helperName}() received unsafe path segment "${segment}".`)}function normalizeFieldPath(path){if(typeof path!==`string`)return path;return path.replace(/\[(.+?)\]/g,`.$1`).replace(/^\.+/,``).replace(/\.+/g,`.`).replace(/\.$/,``)}function buildPathSegments$1(path,helperName,{normalize=false,allowEmpty=false}={}){const normalizedPath=normalize?normalizeFieldPath(path):path;if(typeof normalizedPath!==`string`||normalizedPath.trim()===``){if(allowEmpty&&normalizedPath===``)return[];throw new Error(`${helperName}() expects a non-empty dotted path string.`)}const segments=normalizedPath.split(`.`);if(segments.some(segment=>segment===``))throw new Error(`${helperName}() received an invalid path "${normalizedPath}".`);for(const segment of segments)assertSafePathSegment(segment,helperName);return segments}var JSON_SCHEMA_DRAFT_07=`http://json-schema.org/draft-07/schema#`;var JSON_REST_EXTENSION_KEY=`x-json-rest-schema`;var NON_NULL_JSON_TYPES=[`object`,`array`,`string`,`number`,`boolean`];var EXPORT_CONTEXT_KEY=Symbol(`json-rest-schema.exportContext`);var BOOLEAN_TRUE_VALUES=[`true`,`1`,`yes`,`y`,`on`];var BOOLEAN_FALSE_VALUES=[`false`,`0`,`no`,`n`,`off`];function epochIntegerSchema(limit){return{anyOf:[{type:`integer`,minimum:-limit,maximum:limit},{type:`string`,pattern:EPOCH_INTEGER_STRING_PATTERN}]}}function extensionMetadataFragment(section,values){return{[JSON_REST_EXTENSION_KEY]:{[section]:values}}}var BUILTIN_TYPE_EXPORTERS={none:()=>({type:NON_NULL_JSON_TYPES}),blob:()=>({type:NON_NULL_JSON_TYPES}),serialize:()=>({type:NON_NULL_JSON_TYPES}),object:()=>({type:`object`}),array:()=>({type:`array`}),file:()=>({type:`string`}),string:()=>({type:`string`}),number:()=>({type:[`number`,`string`]}),integer:()=>({type:[`integer`,`string`]}),epochMilliseconds:()=>epochIntegerSchema(EPOCH_MILLISECONDS_LIMIT),epochSeconds:()=>epochIntegerSchema(EPOCH_SECONDS_LIMIT),dateTime:({definition,fieldName})=>({type:`string`,format:`date-time`,pattern:dateTimeJsonSchemaPattern(definition,fieldName)}),date:()=>({type:`string`,format:`date`,pattern:DATE_JSON_SCHEMA_PATTERN}),time:({definition,fieldName})=>({type:`string`,pattern:timeJsonSchemaPattern(definition,fieldName)}),boolean:({definition})=>{if(definition.strictBoolean===true)return{type:`boolean`};const trueValues=new Set([...BOOLEAN_TRUE_VALUES,String(definition.stringTrueWhen||`true`).trim().toLowerCase()]);return{anyOf:[{type:`boolean`},{type:`number`,enum:[0,1]},{type:`string`,enum:[...new Set([...BOOLEAN_FALSE_VALUES,String(definition.stringFalseWhen||`false`).trim().toLowerCase()]),...trueValues]}]}},id:()=>({type:[`integer`,`string`],minimum:1,pattern:`^[1-9][0-9]*$`})};var BUILTIN_VALIDATOR_EXPORTERS={minLength:({definition,parameterValue})=>definition.type===`string`?{minLength:parameterValue}:null,maxLength:({definition,parameterValue})=>definition.type===`string`?{maxLength:parameterValue}:null,min:({definition,parameterValue})=>isNumericDefinition(definition)?{minimum:parameterValue}:null,max:({definition,parameterValue})=>isNumericDefinition(definition)?{maximum:parameterValue}:null,pattern:({definition,parameterValue})=>definition.type===`string`?{pattern:parameterValue instanceof RegExp?parameterValue.source:parameterValue}:null,enum:({parameterValue})=>({enum:parameterValue}),notEmpty:({parameterValue,definition})=>{if(!parameterValue)return null;if(definition.type===`array`)return null;return{minLength:1}},uppercase:({parameterValue})=>parameterValue?extensionMetadataFragment(`transforms`,{uppercase:true}):null,lowercase:({parameterValue})=>parameterValue?extensionMetadataFragment(`transforms`,{lowercase:true}):null,length:({parameterValue})=>extensionMetadataFragment(`transforms`,{length:parameterValue}),unsigned:({parameterValue})=>parameterValue?extensionMetadataFragment(`metadata`,{unsigned:true}):null,precision:({parameterValue})=>extensionMetadataFragment(`metadata`,{precision:parameterValue}),scale:({parameterValue})=>extensionMetadataFragment(`metadata`,{scale:parameterValue}),temporalPrecision:({parameterValue})=>extensionMetadataFragment(`metadata`,{temporalPrecision:parameterValue}),strictBoolean:()=>null,required:()=>null,nullable:()=>null,nullOnEmpty:()=>null,defaultTo:()=>null};function mergePlainObjects(target,source){for(const key of Object.keys(source)){const sourceValue=source[key];const targetValue=target[key];if(sourceValue&&targetValue&&typeof sourceValue===`object`&&typeof targetValue===`object`&&!Array.isArray(sourceValue)&&!Array.isArray(targetValue)){mergePlainObjects(targetValue,sourceValue);continue}target[key]=sourceValue}}function mergeSchemaFragment(target,fragment){if(!fragment||typeof fragment!==`object`||Array.isArray(fragment))throw new Error(`JSON Schema export hooks must return an object or null.`);for(const key of Object.keys(fragment)){if(key===JSON_REST_EXTENSION_KEY&&target[key]&&typeof target[key]===`object`&&typeof fragment[key]===`object`&&!Array.isArray(target[key])&&!Array.isArray(fragment[key])){mergePlainObjects(target[key],fragment[key]);continue}target[key]=fragment[key]}}function buildAnyOfSchema(baseSchema,alternatives){const finalAlternatives=[...Array.isArray(baseSchema.anyOf)&&Object.keys(baseSchema).length===1?baseSchema.anyOf:[baseSchema],...alternatives];if(finalAlternatives.length===1)return baseSchema;return{anyOf:finalAlternatives}}function getTypeExporter(schema,definition){if(!Object.hasOwn(schema.types,definition.type))throw new Error(`No casting function for type: ${definition.type}`);const handler=schema.types[definition.type];if(typeof handler.toJsonSchema===`function`)return handler.toJsonSchema;const exporter=BUILTIN_TYPE_EXPORTERS[definition.type];if(!exporter)throw new Error(`Type '${definition.type}' cannot be exported to JSON Schema without a toJsonSchema hook.`);return exporter}function getValidatorExporter(schema,parameterName,fieldName){if(!Object.hasOwn(schema.validators,parameterName))return null;const handler=schema.validators[parameterName];if(typeof handler.toJsonSchema===`function`)return handler.toJsonSchema;const exporter=BUILTIN_VALIDATOR_EXPORTERS[parameterName];if(exporter)return exporter;throw new Error(`Validator '${parameterName}' on field '${fieldName}' cannot be exported to JSON Schema without a toJsonSchema hook.`)}function normalizeMode(mode){if(mode===void 0)return`create`;if([`create`,`replace`,`patch`].includes(mode))return mode;throw new Error(`Unsupported JSON Schema export mode '${mode}'. Expected 'create', 'replace', or 'patch'.`)}function resolveOperationName(schema,options={}){if(options.mode!==void 0&&options.operation!==void 0){const normalizedMode=normalizeMode(options.mode);if(normalizedMode!==options.operation)throw new Error(`Conflicting JSON Schema export options: mode '${normalizedMode}' does not match operation '${options.operation}'.`)}if(options.operation!==void 0){if(!Object.hasOwn(schema.operations,options.operation))throw new Error(`Unknown JSON Schema export operation '${options.operation}'.`);return options.operation}return normalizeMode(options.mode)}function resolveExportOperation(schema,options={}){if(options.operationName!==void 0&&options.operationDescriptor!==void 0)return{operationName:options.operationName,operation:options.operationDescriptor};const operationName=resolveOperationName(schema,options);return{operationName,operation:schema.operations[operationName]}}function createExportOptions(options={}){const exportOptions={...options};Object.defineProperty(exportOptions,EXPORT_CONTEXT_KEY,{value:{definitions:{},nodes:[],nextDefinitionId:1,rootNode:null},enumerable:false});return exportOptions}function getExportContext(options={}){if(options[EXPORT_CONTEXT_KEY])return options[EXPORT_CONTEXT_KEY];return{definitions:{},nodes:[],nextDefinitionId:1,rootNode:null}}function sanitizeDefinitionNamePart(value){return String(value).replace(/[^a-zA-Z0-9]+/g,`_`).replace(/^_+|_+$/g,``)||`operation`}function isReferenceOnlySchema(schema){return isPlainObject(schema)&&Object.keys(schema).length===1&&typeof schema.$ref===`string`}function wrapReferenceSchema(schema){if(!isReferenceOnlySchema(schema))return schema;return{allOf:[schema]}}function findExportNode(exportContext,schema,operationName,operation,additionalProperties){return exportContext.nodes.find(node=>node.schema===schema&&node.operationName===operationName&&node.operation===operation&&node.additionalProperties===additionalProperties)||null}function createDefinitionName(exportContext,operationName){const suffix=sanitizeDefinitionNamePart(operationName);const definitionName=`SchemaNode_${exportContext.nextDefinitionId}_${suffix}`;exportContext.nextDefinitionId+=1;return definitionName}function getOrCreateExportNode(schema,options,operationName,operation,additionalProperties,{root=false}={}){const exportContext=getExportContext(options);const existingNode=findExportNode(exportContext,schema,operationName,operation,additionalProperties);if(existingNode){if(root){existingNode.pointer=`#`;exportContext.rootNode=existingNode}return existingNode}const node={schema,operationName,operation,additionalProperties,status:`new`,definitionName:root?null:createDefinitionName(exportContext,operationName),pointer:root?`#`:null};if(!root)node.pointer=`#/definitions/${node.definitionName}`;else exportContext.rootNode=node;exportContext.nodes.push(node);return node}function buildExportNodeSchema(node,options){if(node.status===`built`)return{$ref:node.pointer};if(node.status===`building`)return{$ref:node.pointer};const exportContext=getExportContext(options);node.status=`building`;if(node.pointer!==`#`)exportContext.definitions[node.definitionName]={};const objectSchema=buildSchemaObjectFragment(node.schema,options,node.operationName,node.operation,node.additionalProperties);node.status=`built`;if(node.pointer===`#`)return objectSchema;exportContext.definitions[node.definitionName]=objectSchema;return{$ref:node.pointer}}function buildSchemaReference(schema,options,operationName,operation,additionalProperties=false){const exportContext=getExportContext(options);const node=getOrCreateExportNode(schema,options,operationName,operation,additionalProperties);if(exportContext.rootNode===node)return{$ref:`#`};return buildExportNodeSchema(node,options)}function createFieldSchemaState(schema,{referenceBacked=false}={}){return{schema,referenceBacked}}function buildSchemaObjectFragment(schema,options,operationName,operation,additionalProperties=false){const properties={};const required=[];for(const[fieldName,definition]of Object.entries(schema.structure)){setOwnProperty(properties,fieldName,buildFieldSchema(schema,fieldName,definition,options,operationName,operation));if(operation.enforceRequired&&definition.required===true)required.push(fieldName)}const objectSchema={type:`object`,properties,additionalProperties};if(required.length>0)objectSchema.required=required;return objectSchema}function buildArrayItemsSchema(schema,fieldName,definition,options,operationName,operation){const itemsConfig=resolveArrayItemsConfig(fieldName,definition);if(!itemsConfig)return null;if(itemsConfig.kind===`schema`)return{...wrapReferenceSchema(buildSchemaReference(itemsConfig.schema,options,`replace`,itemsConfig.schema.operations.replace,false)),[JSON_REST_EXTENSION_KEY]:{castType:`object`}};const itemOperationName=definition.items.type===`object`&&Object.hasOwn(definition.items,`schema`)?`replace`:operationName;const itemOperation=itemOperationName===`replace`?schema.operations.replace:operation;return buildFieldSchema(schema,`${fieldName}[]`,definition.items,options,itemOperationName,itemOperation)}function buildObjectValuesSchema(schema,fieldName,definition,options,operationName,operation){const valuesConfig=resolveObjectValuesConfig(fieldName,definition);if(!valuesConfig)return null;if(valuesConfig.kind===`schema`)return{...wrapReferenceSchema(buildSchemaReference(valuesConfig.schema,options,`replace`,valuesConfig.schema.operations.replace,false)),[JSON_REST_EXTENSION_KEY]:{castType:`object`}};const valueOperationName=valuesConfig.definition.type===`object`&&Object.hasOwn(valuesConfig.definition,`schema`)?`replace`:operationName;const valueOperation=valueOperationName===`replace`?schema.operations.replace:operation;return buildFieldSchema(schema,`${fieldName}.*`,valuesConfig.definition,options,valueOperationName,valueOperation)}function buildBaseFieldSchema(schema,fieldName,definition,options,operationName,operation){if(definition.type===`object`){const objectMode=resolveObjectFieldMode(fieldName,definition);if(objectMode.kind===`nested`)return createFieldSchemaState(buildSchemaReference(objectMode.schema,options,operationName,operation,objectMode.allowAdditionalProperties===true),{referenceBacked:true});if(objectMode.kind===`opaque`)return createFieldSchemaState({type:`object`,additionalProperties:true});if(objectMode.kind===`map`)return createFieldSchemaState({type:`object`,additionalProperties:buildObjectValuesSchema(schema,fieldName,definition,options,operationName,operation)})}const baseSchema=getTypeExporter(schema,definition)({schema,fieldName,definition,operation:operationName,mode:operationName,options});if(!baseSchema||typeof baseSchema!==`object`||Array.isArray(baseSchema))throw new Error(`Type '${definition.type}' on field '${fieldName}' returned an invalid JSON Schema fragment.`);if(definition.type===`array`){const itemsSchema=buildArrayItemsSchema(schema,fieldName,definition,options,operationName,operation);if(itemsSchema)return createFieldSchemaState({...baseSchema,items:itemsSchema},{referenceBacked:isReferenceOnlySchema(baseSchema)})}return createFieldSchemaState(baseSchema,{referenceBacked:isReferenceOnlySchema(baseSchema)})}function buildFieldSchema(schema,fieldName,definition,options,operationName,operation){const exportContext={schema,fieldName,definition,operation:operationName,mode:operationName,options};const baseFieldSchemaState=buildBaseFieldSchema(schema,fieldName,definition,options,operationName,operation);const workingSchema=baseFieldSchemaState.referenceBacked?wrapReferenceSchema(baseFieldSchemaState.schema):{...baseFieldSchemaState.schema};const extensionMetadata={castType:definition.type};for(const parameterName of Object.keys(definition)){if(parameterName===`type`)continue;if(!Object.hasOwn(schema.validators,parameterName))continue;const exporter=getValidatorExporter(schema,parameterName,fieldName);if(!exporter)continue;const fragment=exporter({...exportContext,parameterName,parameterValue:definition[parameterName],fieldSchema:{...workingSchema}});if(!fragment)continue;mergeSchemaFragment(workingSchema,fragment)}if(workingSchema[JSON_REST_EXTENSION_KEY]){mergePlainObjects(extensionMetadata,workingSchema[JSON_REST_EXTENSION_KEY]);delete workingSchema[JSON_REST_EXTENSION_KEY]}const alternatives=[];if(definition.nullable===true)alternatives.push({type:`null`});if(definition.nullOnEmpty===true)alternatives.push({const:``});const finalSchema=wrapReferenceSchema(buildAnyOfSchema(workingSchema,alternatives));if(definition.defaultTo!==void 0&&operation.applyDefaults){if(typeof definition.defaultTo!==`function`){const defaultResult=schema._normalizeDefault(definition,definition.defaultTo,{fieldPath:fieldName,currentObject:{},containerKey:fieldName,objectBeforeCast:{},options:{},settings:schema._buildOperationSettings(operationName,operation,{})});if(Object.keys(defaultResult.errors).length>0){const firstError=Object.values(defaultResult.errors)[0];throw new Error(`defaultTo for "${fieldName}" is invalid (${firstError.code}).`)}finalSchema.default=defaultResult.value}else extensionMetadata.defaults={providedByFunction:true}}finalSchema[JSON_REST_EXTENSION_KEY]=extensionMetadata;return finalSchema}function buildJsonSchema(schema,options={}){const exportOptions=createExportOptions(options);const{operationName,operation}=resolveExportOperation(schema,exportOptions);const additionalProperties=exportOptions.additionalProperties===void 0?false:exportOptions.additionalProperties;const exportContext=getExportContext(exportOptions);const rootNode=getOrCreateExportNode(schema,exportOptions,operationName,operation,additionalProperties,{root:true});const transportSchema={$schema:JSON_SCHEMA_DRAFT_07,...buildExportNodeSchema(rootNode,exportOptions)};if(Object.keys(exportContext.definitions).length>0)transportSchema.definitions=exportContext.definitions;return transportSchema}function isThenable$1(value){return value!==null&&(typeof value===`object`||typeof value===`function`)&&typeof value.then===`function`}function isSchemaInstance(value){return value instanceof Schema}function createSelectionNode(){return{self:false,children:{}}}function hasSelectionChildren(selectionNode){return Object.keys(selectionNode.children).length>0}function joinPath(basePath,pathSegment){return`${basePath}.${String(pathSegment)}`}function buildFieldPath(basePath,fieldName){return basePath===``?String(fieldName):joinPath(basePath,fieldName)}function stripPathPrefix(path,prefix){if(path===prefix)return``;const prefixWithDot=`${prefix}.`;if(!path.startsWith(prefixWithDot))return null;return path.slice(prefixWithDot.length)}function prefixErrorMap(errors,prefix){const prefixedErrors={};for(const error of Object.values(errors)){const field=joinPath(prefix,error.field);setOwnProperty(prefixedErrors,field,{...error,field})}return prefixedErrors}function buildPathSegments(path){return buildPathSegments$1(path,`validatePath`)}function buildSelectionTree(paths){const selectionTree={};for(const path of paths){const segments=buildPathSegments(path);let currentTree=selectionTree;for(let index=0;index<segments.length;index++){const segment=segments[index];if(!Object.hasOwn(currentTree,segment))setOwnProperty(currentTree,segment,createSelectionNode());if(index===segments.length-1)currentTree[segment].self=true;currentTree=currentTree[segment].children}}return selectionTree}function getValueAtPath(value,pathSegments){let currentValue=value;for(const segment of pathSegments){if(currentValue===null||currentValue===void 0)return void 0;if(typeof currentValue!==`object`)return void 0;if(!Object.hasOwn(currentValue,segment))return void 0;currentValue=currentValue[segment]}return currentValue}function hasSelectedValue(value){if(value===null)return true;if(Array.isArray(value))return Object.keys(value).length>0;if(isPlainObject(value))return Object.keys(value).length>0;return value!==void 0}function sortSelectionKeys(keys){return[...keys].sort((left,right)=>{const leftIsIndex=/^[0-9]+$/.test(left);const rightIsIndex=/^[0-9]+$/.test(right);if(leftIsIndex&&rightIsIndex)return Number(left)-Number(right);if(leftIsIndex)return-1;if(rightIsIndex)return 1;return left.localeCompare(right)})}function isNumericPathSegment(segment){return/^[0-9]+$/.test(segment)}function cloneSchemaIntrospectionSnapshot(schema,seen=new WeakMap){if(seen.has(schema))return seen.get(schema);const snapshot=Object.create(Schema.prototype);seen.set(schema,snapshot);snapshot.structure=null;snapshot.types=schema.types;snapshot.validators=schema.validators;snapshot.operations=schema.operations;snapshot.structure=freezeIntrospectionValue(cloneIntrospectionValue(schema.structure,seen));snapshot._installOperationMethods();return Object.freeze(snapshot)}function cloneIntrospectionValue(value,seen=new WeakMap){if(value===null||typeof value!==`object`)return value;if(isSchemaInstance(value))return cloneSchemaIntrospectionSnapshot(value,seen);if(value instanceof Date)return new Date(value.getTime());if(value instanceof RegExp){const cloned=new RegExp(value.source,value.flags);cloned.lastIndex=value.lastIndex;return cloned}if(seen.has(value))return seen.get(value);if(Array.isArray(value)){const cloned=[];seen.set(value,cloned);for(const item of value)cloned.push(cloneIntrospectionValue(item,seen));return cloned}if(!isPlainObject(value))return value;const cloned={};seen.set(value,cloned);for(const[key,entry]of Object.entries(value))setOwnProperty(cloned,key,cloneIntrospectionValue(entry,seen));return cloned}function freezeIntrospectionValue(value,seen=new WeakSet){if(value===null||typeof value!==`object`||seen.has(value)||isSchemaInstance(value))return value;seen.add(value);if(Array.isArray(value))for(const item of value)freezeIntrospectionValue(item,seen);else for(const key of Reflect.ownKeys(value))freezeIntrospectionValue(value[key],seen);return Object.freeze(value)}function createIntrospectionSnapshot(value){return freezeIntrospectionValue(cloneIntrospectionValue(value))}function resolveDefinitionFromSchemaPath(schema,pathSegments,basePath=``){if(!isSchemaInstance(schema))return null;if(!Array.isArray(pathSegments)||pathSegments.length<1)return null;const[fieldName,...rest]=pathSegments;if(!Object.hasOwn(schema.structure,fieldName))return null;const definition=schema.structure[fieldName];if(rest.length<1)return definition;return resolveNestedDefinitionAtPath(schema,definition,rest,buildFieldPath(basePath,fieldName))}function resolveNestedDefinitionAtPath(schema,definition,pathSegments,fieldPath){if(definition?.type===`object`){const objectMode=schema._resolveObjectFieldMode(fieldPath,definition);if(objectMode.kind!==`nested`)return null;return resolveDefinitionFromSchemaPath(objectMode.schema,pathSegments,fieldPath)}if(definition?.type===`array`){const itemsConfig=schema._resolveArrayItemsConfig(fieldPath,definition);if(!itemsConfig||pathSegments.length<1)return null;const[indexSegment,...rest]=pathSegments;if(!isNumericPathSegment(indexSegment))return null;const itemPath=joinPath(fieldPath,indexSegment);if(itemsConfig.kind===`schema`){if(rest.length<1)return null;return resolveDefinitionFromSchemaPath(itemsConfig.schema,rest,itemPath)}if(rest.length<1)return itemsConfig.definition;return resolveNestedDefinitionAtPath(schema,itemsConfig.definition,rest,itemPath)}return null}function buildNestedOptions(options,prefix){const nestedOptions={...options};if(Array.isArray(options.skipFields)){const skipFields=options.skipFields.map(fieldPath=>stripPathPrefix(fieldPath,prefix)).filter(fieldPath=>fieldPath!==null&&fieldPath!==``);if(skipFields.length>0)nestedOptions.skipFields=skipFields;else delete nestedOptions.skipFields}if(isPlainObject(options.skipParams)){const skipParams={};for(const[fieldPath,parameters]of Object.entries(options.skipParams)){const nestedFieldPath=stripPathPrefix(fieldPath,prefix);if(nestedFieldPath===null||nestedFieldPath===``)continue;setOwnProperty(skipParams,nestedFieldPath,parameters)}if(Object.keys(skipParams).length>0)nestedOptions.skipParams=skipParams;else delete nestedOptions.skipParams}return nestedOptions}var DEFAULT_OPERATIONS=Object.freeze({create:Object.freeze({targetFields:`schema`,enforceRequired:true,applyDefaults:true,outputFields:`validated`,rejectExplicitUndefined:true}),replace:Object.freeze({targetFields:`schema`,enforceRequired:true,applyDefaults:true,outputFields:`validated`,rejectExplicitUndefined:true}),patch:Object.freeze({targetFields:`input`,enforceRequired:false,applyDefaults:false,outputFields:`input`,rejectExplicitUndefined:true})});function validateOperationOption(operationName,descriptor,key,allowedValues){const value=descriptor[key];if(!allowedValues.includes(value))throw new Error(`Operation "${operationName}" must define ${key} as one of: ${allowedValues.join(`, `)}.`)}function validateBooleanOperationOption(operationName,descriptor,key,required=true){const value=descriptor[key];if(value===void 0&&!required)return;if(typeof value!==`boolean`)throw new Error(`Operation "${operationName}" must define ${key} as a boolean.`)}function normalizeOperationDescriptor(operationName,descriptor){if(typeof descriptor!==`object`||descriptor===null||Array.isArray(descriptor))throw new Error(`Operation "${operationName}" must be an object.`);validateOperationOption(operationName,descriptor,`targetFields`,[`schema`,`input`]);validateBooleanOperationOption(operationName,descriptor,`enforceRequired`);validateBooleanOperationOption(operationName,descriptor,`applyDefaults`);validateOperationOption(operationName,descriptor,`outputFields`,[`validated`,`input`]);validateBooleanOperationOption(operationName,descriptor,`rejectExplicitUndefined`,false);return Object.freeze({targetFields:descriptor.targetFields,enforceRequired:descriptor.enforceRequired,applyDefaults:descriptor.applyDefaults,outputFields:descriptor.outputFields,rejectExplicitUndefined:descriptor.rejectExplicitUndefined===void 0?true:descriptor.rejectExplicitUndefined})}function normalizeOperations(operations={}){if(typeof operations!==`object`||operations===null||Array.isArray(operations))throw new Error(`Schema operations must be an object.`);const normalizedOperations=Object.create(null);for(const[operationName,descriptor]of Object.entries(DEFAULT_OPERATIONS))setOwnProperty(normalizedOperations,operationName,descriptor);for(const[operationName,descriptor]of Object.entries(operations))setOwnProperty(normalizedOperations,operationName,normalizeOperationDescriptor(operationName,descriptor));return Object.freeze(normalizedOperations)}function freezeOwnMap(source){const map=Object.create(null);for(const[key,value]of Object.entries(source))setOwnProperty(map,key,value);return Object.freeze(map)}function cloneValidationOptions(options){const validationOptions={...options};delete validationOptions.operation;delete validationOptions.mode;return validationOptions}var Schema=class{constructor(structure,types,validators,operations={}){this.structure=structure;this.types=freezeOwnMap(types);this.validators=freezeOwnMap(validators);this.operations=normalizeOperations(operations);this._installOperationMethods()}_typeError(field){return this._paramError(field,`TYPE_CAST_FAILED`,`Value could not be cast to the required type.`)}_paramError(field,code,message,params={}){const e=new Error(message);e.errorObject={field,code,message,params};return e}_paramToBeSkipped(parameterName,skipParams,fieldName){if(typeof skipParams!==`object`||skipParams===null)return false;if(Array.isArray(skipParams[fieldName])&&skipParams[fieldName].includes(parameterName))return true;return false}_fieldToBeSkipped(fieldPath,options){return Array.isArray(options.skipFields)&&options.skipFields.includes(fieldPath)}_mergeErrors(target,source){for(const[fieldPath,error]of Object.entries(source))setOwnProperty(target,fieldPath,error)}_singleErrorMap(error){const errors={};setOwnProperty(errors,error.field,error);return errors}_assertSupportedOptions(options={}){if(Object.hasOwn(options,`onlyObjectValues`))throw new Error("Unsupported validation option `onlyObjectValues`. Call `patch()` directly.");if(Object.hasOwn(options,`mode`))throw new Error("Unsupported validation option `mode`. Call `validateWith()` or an operation method directly.");if(Object.hasOwn(options,`operation`))throw new Error("Unsupported validation option `operation`. Call `validateWith()` or an operation method directly.")}_buildOperationSettings(operationName,operation,object){return{operationName,operation,targetFieldNames:operation.targetFields===`input`?Object.keys(object):Object.keys(this.structure),outputFieldNames:operation.outputFields===`input`?Object.keys(object):Object.keys(this.structure),enforceRequired:operation.enforceRequired,applyDefaults:operation.applyDefaults,rejectExplicitUndefined:operation.rejectExplicitUndefined,defaultedFields:new Set,isFieldPresent:fieldName=>Object.hasOwn(object,fieldName)}}_assertPlainObjectInput(methodName,object){if(!isPlainObject(object))throw new Error(`${methodName}() expects a plain object input.`)}_resolvePathValidationRequest(options={}){const operationName=options.operation??options.mode??`patch`;if(Object.hasOwn(options,`operation`)&&Object.hasOwn(options,`mode`)&&options.operation!==options.mode)throw new Error("Path validation options `operation` and `mode` must match when both are provided.");if(!Object.hasOwn(this.operations,operationName))throw new Error(`Unknown operation "${operationName}".`);return{operationName,operation:this.operations[operationName],validationOptions:cloneValidationOptions(options)}}_buildOperationResult(object,workingObject,settings){const validatedObject={};for(const fieldName of settings.outputFieldNames){if(!Object.hasOwn(this.structure,fieldName))continue;const fieldPresent=settings.isFieldPresent(fieldName);if(!(workingObject[fieldName]!==void 0||fieldPresent&&object[fieldName]===null||settings.defaultedFields.has(fieldName)))continue;if(!fieldPresent&&!settings.defaultedFields.has(fieldName))continue;setOwnProperty(validatedObject,fieldName,workingObject[fieldName])}return validatedObject}_resolveObjectFieldMode(fieldPath,definition){return resolveObjectFieldMode(fieldPath,definition)}_resolveArrayItemsConfig(fieldPath,definition){return resolveArrayItemsConfig(fieldPath,definition)}_resolveObjectValuesConfig(fieldPath,definition){return resolveObjectValuesConfig(fieldPath,definition)}_buildArrayItemSettings(definition,settings){if(definition.type===`object`&&Object.hasOwn(definition,`schema`))return{...settings,operationName:`replace`,operation:this.operations.replace};return settings}_castValue(definition,rawValue,fieldPath,currentObject,containerKey,objectBeforeCast,options,settings){const nullable=definition.nullable===true||options.nullable===true;const nullOnEmpty=definition.nullOnEmpty===true||options.nullOnEmpty===true;if(!Object.hasOwn(this.types,definition.type))throw new Error(`No casting function for type: ${definition.type}`);const typeHandler=this.types[definition.type];if(rawValue===null){if(nullable){setOwnProperty(currentObject,containerKey,null);return{errors:{},shouldContinue:false}}return{errors:this._singleErrorMap({field:fieldPath,code:`NOT_NULLABLE`,message:`Field cannot be null`,params:{}}),shouldContinue:false}}if(rawValue===``&&nullOnEmpty){setOwnProperty(currentObject,containerKey,null);return{errors:{},shouldContinue:false}}const context={schema:this,definition,value:rawValue,fieldName:fieldPath,object:currentObject,objectBeforeCast,valueBeforeCast:rawValue,options,mode:settings.operationName,operation:settings.operationName,fieldPresent:true,computedOptions:{nullable:nullable||nullOnEmpty,nullOnEmpty},throwTypeError:()=>{throw this._typeError(fieldPath)},throwParamError:(code,message,params)=>{throw this._paramError(fieldPath,code,message,params)}};try{const castResult=typeHandler(context);if(isThenable$1(castResult))throw new Error(`Type handler for "${definition.type}" must be synchronous.`);if(castResult!==void 0){setOwnProperty(currentObject,containerKey,castResult);context.value=castResult}}catch(e){if(e.errorObject)return{errors:this._singleErrorMap(e.errorObject),shouldContinue:false};throw e}return{errors:{},context,shouldContinue:true}}_runFieldValidators(definition,fieldPath,currentObject,containerKey,context,options){for(const paramName of Object.keys(definition)){if(paramName===`type`)continue;if(this._paramToBeSkipped(paramName,options.skipParams,fieldPath))continue;if(!Object.hasOwn(this.validators,paramName))continue;const validatorHandler=this.validators[paramName];try{context.parameterName=paramName;context.parameterValue=definition[paramName];const validatorResult=validatorHandler(context);if(isThenable$1(validatorResult))throw new Error(`Validator handler for "${paramName}" must be synchronous.`);if(validatorResult!==void 0){setOwnProperty(currentObject,containerKey,validatorResult);context.value=validatorResult}}catch(e){if(e.errorObject)return this._singleErrorMap(e.errorObject);throw e}}return{}}_normalizeAndValidateValue(definition,rawValue,fieldPath,currentObject,containerKey,objectBeforeCast,options,settings){const castResult=this._castValue(definition,rawValue,fieldPath,currentObject,containerKey,objectBeforeCast,options,settings);if(Object.keys(castResult.errors).length>0)return castResult.errors;if(!castResult.shouldContinue)return{};const{context}=castResult;const nestedErrors=this._validateNestedValue(definition,fieldPath,currentObject,containerKey,options,settings);if(Object.keys(nestedErrors).length>0)return nestedErrors;context.value=currentObject[containerKey];return this._runFieldValidators(definition,fieldPath,currentObject,containerKey,context,options)}_normalizeDefault(definition,defaultValue,{fieldPath,currentObject,containerKey,objectBeforeCast,options,settings}){const defaultObject={...currentObject};setOwnProperty(defaultObject,containerKey,defaultValue);return{errors:this._normalizeAndValidateValue(definition,defaultValue,fieldPath,defaultObject,containerKey,objectBeforeCast,options,settings),value:defaultObject[containerKey]}}_validateNestedValue(definition,fieldPath,currentObject,containerKey,options,settings){if(definition.type===`object`){const objectMode=this._resolveObjectFieldMode(fieldPath,definition);if(objectMode.kind===`nested`)return this._validateNestedObjectSchema(objectMode,fieldPath,currentObject,containerKey,options,settings);if(objectMode.kind===`map`)return this._validateObjectValues(fieldPath,currentObject,containerKey,objectMode.valuesConfig,options,settings);return{}}if(definition.type!==`array`)return{};const itemsConfig=this._resolveArrayItemsConfig(fieldPath,definition);if(!itemsConfig)return{};return this._validateArrayItems(fieldPath,currentObject,containerKey,itemsConfig,options,settings)}_validateNestedObjectSchema(objectMode,fieldPath,currentObject,containerKey,options,settings){const sourceObject=currentObject[containerKey];const nestedInput=objectMode.allowAdditionalProperties?this._extractKnownObjectFields(sourceObject,objectMode.schema):sourceObject;const nestedResult=objectMode.schema._validateWithOperation(settings.operationName,settings.operation,nestedInput,buildNestedOptions(options,fieldPath));setOwnProperty(currentObject,containerKey,objectMode.allowAdditionalProperties?this._mergeKnownAndPassthroughObjectFields(sourceObject,objectMode.schema,nestedResult.validatedObject):nestedResult.validatedObject);return prefixErrorMap(nestedResult.errors,fieldPath)}_extractKnownObjectFields(sourceObject,nestedSchema){const knownObject={};for(const[key,value]of Object.entries(sourceObject))if(Object.hasOwn(nestedSchema.structure,key))setOwnProperty(knownObject,key,value);return knownObject}_mergeKnownAndPassthroughObjectFields(sourceObject,nestedSchema,validatedObject){const mergedObject={};for(const key of Object.keys(sourceObject)){if(!Object.hasOwn(nestedSchema.structure,key)){setOwnProperty(mergedObject,key,sourceObject[key]);continue}if(Object.hasOwn(validatedObject,key))setOwnProperty(mergedObject,key,validatedObject[key])}for(const[key,value]of Object.entries(validatedObject))if(!Object.hasOwn(mergedObject,key))setOwnProperty(mergedObject,key,value);return mergedObject}_validateObjectValues(fieldPath,currentObject,containerKey,valuesConfig,options,settings){const originalEntries=currentObject[containerKey];const normalizedEntries={...originalEntries};const errors={};setOwnProperty(currentObject,containerKey,normalizedEntries);for(const key of Object.keys(originalEntries)){const valuePath=joinPath(fieldPath,key);if(this._fieldToBeSkipped(valuePath,options))continue;const rawValue=normalizedEntries[key];if(rawValue===void 0){if(settings.rejectExplicitUndefined)this._mergeErrors(errors,this._singleErrorMap(this._typeError(valuePath).errorObject));else delete normalizedEntries[key];continue}if(valuesConfig.kind===`schema`){const valueResult=valuesConfig.schema._validateWithOperation(`replace`,valuesConfig.schema.operations.replace,rawValue,buildNestedOptions(options,valuePath));setOwnProperty(normalizedEntries,key,valueResult.validatedObject);this._mergeErrors(errors,prefixErrorMap(valueResult.errors,valuePath));continue}const valueErrors=this._normalizeAndValidateValue(valuesConfig.definition,rawValue,valuePath,normalizedEntries,key,originalEntries,options,this._buildArrayItemSettings(valuesConfig.definition,settings));this._mergeErrors(errors,valueErrors)}return errors}_validateArrayItems(fieldPath,currentObject,containerKey,itemsConfig,options,settings){const originalItems=currentObject[containerKey];const normalizedItems=originalItems.slice();const errors={};setOwnProperty(currentObject,containerKey,normalizedItems);for(let index=0;index<normalizedItems.length;index++){const itemPath=joinPath(fieldPath,index);if(this._fieldToBeSkipped(itemPath,options))continue;if(!Object.hasOwn(originalItems,index)||normalizedItems[index]===void 0){if(settings.rejectExplicitUndefined)this._mergeErrors(errors,this._singleErrorMap(this._typeError(itemPath).errorObject));else delete normalizedItems[index];continue}if(itemsConfig.kind===`schema`){const itemResult=itemsConfig.schema._validateWithOperation(`replace`,itemsConfig.schema.operations.replace,normalizedItems[index],buildNestedOptions(options,itemPath));setOwnProperty(normalizedItems,index,itemResult.validatedObject);this._mergeErrors(errors,prefixErrorMap(itemResult.errors,itemPath));continue}const itemErrors=this._normalizeAndValidateValue(itemsConfig.definition,normalizedItems[index],itemPath,normalizedItems,index,originalItems,options,this._buildArrayItemSettings(itemsConfig.definition,settings));this._mergeErrors(errors,itemErrors)}return errors}_validateField(fieldName,object,validatedObject,options,settings){if(!Object.hasOwn(this.structure,fieldName))return{};const definition=this.structure[fieldName];if(this._fieldToBeSkipped(fieldName,options))return{};const fieldPresent=settings.isFieldPresent(fieldName);const rawValue=object[fieldName];const valueMissing=rawValue===void 0;if(settings.enforceRequired&&definition.required&&(!fieldPresent||valueMissing)){if(!this._paramToBeSkipped(`required`,options.skipParams,fieldName))return this._singleErrorMap({field:fieldName,code:`REQUIRED`,message:`Field is required`,params:{}})}if(!fieldPresent)return{};if(valueMissing){if(settings.rejectExplicitUndefined)return this._singleErrorMap(this._typeError(fieldName).errorObject);return{}}return this._normalizeAndValidateValue(definition,rawValue,fieldName,validatedObject,fieldName,object,options,settings)}_validateWithOperation(operationName,operation,object,options){this._assertSupportedOptions(options);const errors={};const workingObject={...object};const settings=this._buildOperationSettings(operationName,operation,object);for(const fieldName of Object.keys(object))if(!Object.hasOwn(this.structure,fieldName))setOwnProperty(errors,fieldName,{field:fieldName,code:`FIELD_NOT_ALLOWED`,message:`Field not allowed`,params:{}});for(const fieldName of settings.targetFieldNames){const fieldErrors=this._validateField(fieldName,object,workingObject,options,settings);this._mergeErrors(errors,fieldErrors)}if(settings.applyDefaults)for(const fieldName of Object.keys(this.structure)){if(settings.isFieldPresent(fieldName))continue;if(this.structure[fieldName].defaultTo!==void 0){const definition=this.structure[fieldName];const defaultValue=typeof definition.defaultTo===`function`?definition.defaultTo():definition.defaultTo;const defaultResult=this._normalizeDefault(definition,defaultValue,{fieldPath:fieldName,currentObject:workingObject,containerKey:fieldName,objectBeforeCast:object,options,settings});this._mergeErrors(errors,defaultResult.errors);if(Object.keys(defaultResult.errors).length>0)continue;setOwnProperty(workingObject,fieldName,defaultResult.value);settings.defaultedFields.add(fieldName)}}return{validatedObject:this._buildOperationResult(object,workingObject,settings),errors}}_validateSelectedTree(selectionTree,object,options,settings,basePath=``){const errors={};const validatedObject={};for(const fieldName of sortSelectionKeys(Object.keys(selectionTree))){const fieldPath=buildFieldPath(basePath,fieldName);if(!Object.hasOwn(this.structure,fieldName))throw new Error(`Unknown schema path "${fieldPath}".`);const fieldErrors=this._validateSelectedField(fieldName,selectionTree[fieldName],object,validatedObject,options,settings,fieldPath);this._mergeErrors(errors,fieldErrors)}return{validatedObject,errors}}_validateSelectedField(fieldName,selectionNode,object,validatedObject,options,settings,fieldPath){if(!Object.hasOwn(this.structure,fieldName))return{};const definition=this.structure[fieldName];const exactSelected=selectionNode.self===true;const hasChildren=hasSelectionChildren(selectionNode);if(this._fieldToBeSkipped(fieldPath,options))return{};const fieldPresent=Object.hasOwn(object,fieldName);const rawValue=object[fieldName];const errors={};if(!fieldPresent){if(exactSelected&&settings.enforceRequired&&definition.required&&!this._paramToBeSkipped(`required`,options.skipParams,fieldPath))this._mergeErrors(errors,this._singleErrorMap({field:fieldPath,code:`REQUIRED`,message:`Field is required`,params:{}}));if(exactSelected&&settings.applyDefaults&&definition.defaultTo!==void 0){const defaultValue=typeof definition.defaultTo===`function`?definition.defaultTo():definition.defaultTo;const defaultResult=this._normalizeDefault(definition,defaultValue,{fieldPath,currentObject:validatedObject,containerKey:fieldName,objectBeforeCast:object,options,settings});this._mergeErrors(errors,defaultResult.errors);if(Object.keys(defaultResult.errors).length===0)setOwnProperty(validatedObject,fieldName,defaultResult.value)}return errors}if(rawValue===void 0){if(exactSelected&&settings.rejectExplicitUndefined)return this._singleErrorMap(this._typeError(fieldPath).errorObject);return{}}const currentObject={[fieldName]:rawValue};if(exactSelected){const fieldErrors=this._normalizeAndValidateValue(definition,rawValue,fieldPath,currentObject,fieldName,object,options,settings);if(Object.hasOwn(currentObject,fieldName)&&currentObject[fieldName]!==void 0)setOwnProperty(validatedObject,fieldName,currentObject[fieldName]);else if(currentObject[fieldName]===null)setOwnProperty(validatedObject,fieldName,null);return fieldErrors}if(!hasChildren)return{};const castResult=this._castValue(definition,rawValue,fieldPath,currentObject,fieldName,object,options,settings);if(Object.keys(castResult.errors).length>0)return castResult.errors;if(!castResult.shouldContinue)return{};const nestedResult=this._validateSelectedDescendants(definition,selectionNode.children,fieldPath,currentObject,fieldName,options,settings);if(hasSelectedValue(currentObject[fieldName]))setOwnProperty(validatedObject,fieldName,currentObject[fieldName]);return nestedResult}_validateSelectedDescendants(definition,selectionTree,fieldPath,currentObject,containerKey,options,settings){if(definition.type===`object`){const objectMode=this._resolveObjectFieldMode(fieldPath,definition);if(objectMode.kind!==`nested`)throw new Error(`Schema path "${fieldPath}" does not support nested field selection.`);const nestedValue=currentObject[containerKey];if(!isPlainObject(nestedValue))return{};const nestedResult=objectMode.schema._validateSelectedTree(selectionTree,nestedValue,buildNestedOptions(options,fieldPath),{...settings,defaultedFields:new Set});setOwnProperty(currentObject,containerKey,nestedResult.validatedObject);return prefixErrorMap(nestedResult.errors,fieldPath)}if(definition.type===`array`){const itemsConfig=this._resolveArrayItemsConfig(fieldPath,definition);if(!itemsConfig)throw new Error(`Schema path "${fieldPath}" does not define array items for nested selection.`);return this._validateSelectedArrayItems(fieldPath,currentObject,containerKey,itemsConfig,selectionTree,options,settings)}throw new Error(`Schema path "${fieldPath}" does not support nested field selection.`)}_validateSelectedArrayItems(fieldPath,currentObject,containerKey,itemsConfig,selectionTree,options,settings){const normalizedItems=[];const sourceItems=currentObject[containerKey];const errors={};setOwnProperty(currentObject,containerKey,normalizedItems);for(const indexKey of sortSelectionKeys(Object.keys(selectionTree))){if(!/^[0-9]+$/.test(indexKey))throw new Error(`Schema path "${joinPath(fieldPath,indexKey)}" is invalid because array segments must use numeric indexes.`);const index=Number(indexKey);const itemPath=joinPath(fieldPath,index);const selectionNode=selectionTree[indexKey];const exactSelected=selectionNode.self===true;const hasChildren=hasSelectionChildren(selectionNode);if(this._fieldToBeSkipped(itemPath,options))continue;if(!Object.hasOwn(sourceItems,index)){if(exactSelected&&settings.rejectExplicitUndefined)setOwnProperty(errors,itemPath,this._typeError(itemPath).errorObject);continue}const rawValue=sourceItems[index];if(rawValue===void 0){if(exactSelected&&settings.rejectExplicitUndefined)setOwnProperty(errors,itemPath,this._typeError(itemPath).errorObject);continue}if(itemsConfig.kind===`schema`){if(exactSelected){const itemResult=itemsConfig.schema._validateWithOperation(`replace`,itemsConfig.schema.operations.replace,rawValue,buildNestedOptions(options,itemPath));if(hasSelectedValue(itemResult.validatedObject))setOwnProperty(normalizedItems,index,itemResult.validatedObject);this._mergeErrors(errors,prefixErrorMap(itemResult.errors,itemPath));continue}if(!hasChildren)continue;const itemResult=itemsConfig.schema._validateSelectedTree(selectionNode.children,rawValue,buildNestedOptions(options,itemPath),{...settings,operationName:`replace`,operation:itemsConfig.schema.operations.replace,defaultedFields:new Set});if(hasSelectedValue(itemResult.validatedObject))setOwnProperty(normalizedItems,index,itemResult.validatedObject);this._mergeErrors(errors,prefixErrorMap(itemResult.errors,itemPath));continue}const itemSettings=this._buildArrayItemSettings(itemsConfig.definition,settings);const itemHolder=[rawValue];if(exactSelected){const itemErrors=this._normalizeAndValidateValue(itemsConfig.definition,rawValue,itemPath,itemHolder,0,sourceItems,options,itemSettings);if(Object.hasOwn(itemHolder,0)&&itemHolder[0]!==void 0)setOwnProperty(normalizedItems,index,itemHolder[0]);else if(itemHolder[0]===null)setOwnProperty(normalizedItems,index,null);this._mergeErrors(errors,itemErrors);continue}if(!hasChildren)continue;const castResult=this._castValue(itemsConfig.definition,rawValue,itemPath,itemHolder,0,sourceItems,options,itemSettings);if(Object.keys(castResult.errors).length>0){this._mergeErrors(errors,castResult.errors);continue}if(!castResult.shouldContinue)continue;const itemErrors=this._validateSelectedDescendants(itemsConfig.definition,selectionNode.children,itemPath,itemHolder,0,options,itemSettings);if(hasSelectedValue(itemHolder[0]))setOwnProperty(normalizedItems,index,itemHolder[0]);this._mergeErrors(errors,itemErrors)}return errors}validateWith(operationName,object,options={}){if(!Object.hasOwn(this.operations,operationName))throw new Error(`Unknown operation "${operationName}".`);const operation=this.operations[operationName];this._assertPlainObjectInput(operationName,object);return this._validateWithOperation(operationName,operation,object,options)}validateAt(path,object,options={}){this._assertPlainObjectInput(`validateAt`,object);const pathSegments=buildPathSegments(path);const{operationName,operation,validationOptions}=this._resolvePathValidationRequest(options);const result=this._validateSelectedTree(buildSelectionTree([path]),object,validationOptions,this._buildOperationSettings(operationName,operation,object));return{validatedValue:getValueAtPath(result.validatedObject,pathSegments),errors:result.errors}}validatePaths(paths,object,options={}){this._assertPlainObjectInput(`validatePaths`,object);if(!Array.isArray(paths)||paths.length===0)throw new Error(`validatePaths() expects a non-empty array of schema paths.`);const{operationName,operation,validationOptions}=this._resolvePathValidationRequest(options);return this._validateSelectedTree(buildSelectionTree(paths),object,validationOptions,this._buildOperationSettings(operationName,operation,object))}_installOperationMethods(){for(const operationName of Object.keys(this.operations)){if(operationName in this)throw new Error(`Operation name "${operationName}" is reserved and cannot be used as a schema method.`);this[operationName]=(object,options={})=>this.validateWith(operationName,object,options)}}toJsonSchema(options={}){return buildJsonSchema(this,options)}getFieldDefinitions(){return createIntrospectionSnapshot(this.structure)}getFieldDefinition(path){if(typeof path!==`string`||path.trim()===``)throw new Error(`Field path must be a non-empty string.`);const definition=resolveDefinitionFromSchemaPath(this,buildPathSegments(path.trim()));return definition===null?null:createIntrospectionSnapshot(definition)}getFieldMessages(path){const definition=this.getFieldDefinition(path);if(!definition||typeof definition.messages!==`object`||definition.messages===null)return Object.freeze({});return createIntrospectionSnapshot(definition.messages)}cleanup(object,parameterName){const newObject={};for(const k of Object.keys(object))if(Object.hasOwn(this.structure,k)&&this.structure[k][parameterName])setOwnProperty(newObject,k,object[k]);return newObject}};var{parse:$parse,stringify:$stringify}=JSON;var{keys}=Object;var Primitive=String;var primitive=`string`;var object=`object`;var noop=(_,value)=>value;var set=(known,input,value)=>{const index=Primitive(input.push(value)-1);known.set(value,index);return index};var stringify=(value,replacer,space)=>{const $=replacer&&typeof replacer===object?(k,v)=>k===``||-1<replacer.indexOf(k)?v:void 0:replacer||noop;const known=new Map;const input=[];const output=[];let i=+set(known,input,$.call({"":value},``,value));let firstRun=!i;while(i<input.length){firstRun=true;output[i]=$stringify(input[i++],replace,space)}return`[`+output.join(`,`)+`]`;function replace(key,value){if(firstRun){firstRun=!firstRun;return value}const after=$.call(this,key,value);switch(typeof after){case object:if(after===null)return after;case primitive:return known.get(after)||set(known,input,after)}return after}};var DEFAULT_BOOLEAN_TRUE_VALUES=new Set([`true`,`1`,`yes`,`y`,`on`]);var DEFAULT_BOOLEAN_FALSE_VALUES=new Set([`false`,`0`,`no`,`n`,`off`]);function isThenable(value){return value!==null&&(typeof value===`object`||typeof value===`function`)&&typeof value.then===`function`}function normalizeFiniteNumberInput(value){if(typeof value===`number`)return Number.isFinite(value)?value:null;if(typeof value===`bigint`){const numberValue=Number(value);return Number.isSafeInteger(numberValue)?numberValue:null}if(typeof value===`string`){const trimmed=value.trim();if(trimmed===``)return null;const numberValue=Number(trimmed);return Number.isFinite(numberValue)?numberValue:null}return null}function deepEqual(left,right){if(Object.is(left,right))return true;if(left instanceof Date&&right instanceof Date)return left.getTime()===right.getTime();if(left instanceof RegExp&&right instanceof RegExp)return left.source===right.source&&left.flags===right.flags;if(Array.isArray(left)||Array.isArray(right)){if(!Array.isArray(left)||!Array.isArray(right))return false;if(left.length!==right.length)return false;for(let index=0;index<left.length;index++)if(!deepEqual(left[index],right[index]))return false;return true}if(left===null||right===null||typeof left!==`object`||typeof right!==`object`)return false;if(Object.getPrototypeOf(left)!==Object.getPrototypeOf(right))return false;const leftKeys=Object.keys(left);const rightKeys=Object.keys(right);if(leftKeys.length!==rightKeys.length)return false;for(const key of leftKeys){if(!Object.hasOwn(right,key))return false;if(!deepEqual(left[key],right[key]))return false}return true}var CorePlugin={install(api){const{addType,addValidator}=api;addType(`none`,context=>context.value);addType(`file`,context=>{const val=context.value;if(val===void 0||val===null)context.throwTypeError();const valType=typeof val;if(valType===`string`||valType===`number`||valType===`boolean`){const s=val.toString();return context.definition.noTrim?s:s.trim()}context.throwTypeError()});addType(`string`,context=>{const val=context.value;if(val===void 0||val===null)return``;const valType=typeof val;if(valType===`string`||valType===`number`||valType===`boolean`){const s=val.toString();return context.definition.noTrim?s:s.trim()}context.throwTypeError()});addType(`blob`,context=>context.value);addType(`number`,context=>{const numberValue=normalizeFiniteNumberInput(context.value);if(numberValue===null)context.throwTypeError();return numberValue});addType(`integer`,context=>{const numberValue=normalizeFiniteNumberInput(context.value);if(numberValue===null||!Number.isInteger(numberValue))context.throwTypeError();return numberValue});addType(`epochMilliseconds`,context=>{const epochMilliseconds=castEpochInteger(context.value,EPOCH_MILLISECONDS_LIMIT);if(epochMilliseconds===null)context.throwTypeError();return epochMilliseconds});addType(`epochSeconds`,context=>{const epochSeconds=castEpochInteger(context.value,EPOCH_SECONDS_LIMIT);if(epochSeconds===null)context.throwTypeError();return epochSeconds});addType(`dateTime`,context=>{const temporalPrecision=resolveTemporalPrecision(context.definition,context.fieldName);if(!isValidDateTime(context.value,temporalPrecision))context.throwTypeError();return context.value});addType(`date`,context=>{if(!isValidDate(context.value))context.throwTypeError();return context.value});addType(`time`,context=>{const temporalPrecision=resolveTemporalPrecision(context.definition,context.fieldName);if(!isValidTime(context.value,temporalPrecision))context.throwTypeError();return context.value});addType(`array`,context=>{if(context.definition.type===`array`&&!Array.isArray(context.value))return[context.value];return context.value});addType(`object`,context=>{if(!isPlainObject(context.value))context.throwTypeError();return context.value});addType(`serialize`,context=>{try{return JSON.stringify(context.value)}catch(e){try{return stringify(context.value)}catch(e2){context.throwTypeError()}}});addType(`boolean`,context=>{if(typeof context.value===`boolean`)return context.value;if(typeof context.value===`number`){if(context.value===1)return true;if(context.value===0)return false;context.throwTypeError()}if(typeof context.value===`bigint`){if(context.value===1n)return true;if(context.value===0n)return false;context.throwTypeError()}if(typeof context.value===`string`){const falseVal=String(context.definition.stringFalseWhen||`false`).trim().toLowerCase();const trueVal=String(context.definition.stringTrueWhen||`true`).trim().toLowerCase();const lowerValue=context.value.trim().toLowerCase();const falseValues=new Set([...DEFAULT_BOOLEAN_FALSE_VALUES,falseVal]);const trueValues=new Set([...DEFAULT_BOOLEAN_TRUE_VALUES,trueVal]);if(falseValues.has(lowerValue))return false;if(trueValues.has(lowerValue))return true}context.throwTypeError()});addType(`id`,context=>{if(typeof context.value===`number`){if(Number.isSafeInteger(context.value)&&context.value>0)return context.value;context.throwTypeError()}if(typeof context.value===`bigint`){if(context.value>0n&&context.value<=BigInt(Number.MAX_SAFE_INTEGER))return Number(context.value);context.throwTypeError()}if(typeof context.value===`string`){const trimmed=context.value.trim();if(!/^[1-9][0-9]*$/.test(trimmed))context.throwTypeError();const numberValue=Number(trimmed);if(!Number.isSafeInteger(numberValue))context.throwTypeError();return numberValue}context.throwTypeError()});addValidator(`minLength`,context=>{if(context.value===void 0)return;if(context.definition.type===`string`&&context.value.toString&&context.value.toString().length<context.parameterValue)context.throwParamError(`MIN_LENGTH`,`Length must be at least ${context.parameterValue} characters.`,{min:context.parameterValue,actual:context.value.toString().length})});addValidator(`min`,context=>{if(context.value===void 0)return;if(isNumericDefinition(context.definition)&&typeof context.value===`number`&&context.value<context.parameterValue)context.throwParamError(`MIN_VALUE`,`Value must be at least ${context.parameterValue}.`,{min:context.parameterValue,actual:context.value})});addValidator(`maxLength`,context=>{if(context.value===void 0)return;if(context.definition.type===`string`&&context.value.toString&&context.value.toString().length>context.parameterValue)context.throwParamError(`MAX_LENGTH`,`Length must be no more than ${context.parameterValue} characters.`,{max:context.parameterValue,actual:context.value.toString().length})});addValidator(`max`,context=>{if(context.value===void 0)return;if(isNumericDefinition(context.definition)&&typeof context.value===`number`&&context.value>context.parameterValue)context.throwParamError(`MAX_VALUE`,`Value must be no more than ${context.parameterValue}.`,{max:context.parameterValue,actual:context.value})});addValidator(`enum`,context=>{if(!Array.isArray(context.parameterValue))throw new Error(`Enum for ${context.fieldName} must be an array.`);if(!context.parameterValue.some(allowedValue=>deepEqual(allowedValue,context.value)))context.throwParamError(`ENUM_VALUE`,`Value must match one of the allowed enum values.`,{allowed:context.parameterValue})});addValidator(`pattern`,context=>{if(context.value===void 0)return;if(context.definition.type!==`string`||typeof context.value!==`string`)return;const patternValue=context.parameterValue;const matcher=patternValue instanceof RegExp?new RegExp(patternValue.source,patternValue.flags):typeof patternValue===`string`?new RegExp(patternValue):null;if(!matcher)throw new Error(`Pattern for ${context.fieldName} must be a string or RegExp.`);if(!matcher.test(context.value))context.throwParamError(`PATTERN`,`Value does not match the required pattern.`,{pattern:matcher.source})});addValidator(`strictBoolean`,context=>{if(!context.parameterValue)return;if(context.definition.type!==`boolean`)throw new Error(`strictBoolean can only be used on boolean fields (${context.fieldName}).`);if(typeof context.valueBeforeCast!==`boolean`)context.throwParamError(`STRICT_BOOLEAN`,`Value must be a boolean.`)});addValidator(`validator`,context=>{if(typeof context.parameterValue!==`function`)throw new Error(`Validator for ${context.fieldName} must be a function.`);const r=context.parameterValue(context.value,context.object,context);if(isThenable(r))throw new Error(`Custom validator for "${context.fieldName}" must be synchronous.`);if(typeof r===`string`)context.throwParamError(`CUSTOM_VALIDATOR_FAILED`,r)});addValidator(`uppercase`,context=>{if(typeof context.value===`string`)return context.value.toUpperCase()});addValidator(`lowercase`,context=>{if(typeof context.value===`string`)return context.value.toLowerCase()});addValidator(`length`,context=>{if(typeof context.value===`string`)return context.value.substr(0,context.parameterValue);else if(Number.isInteger(Number(context.valueBeforeCast))&&String(context.valueBeforeCast).length>context.parameterValue)context.throwParamError(`RANGE_EXCEEDED`,`Numeric value is out of the allowed character range.`,{max:context.parameterValue,actual:String(context.valueBeforeCast).length})});addValidator(`notEmpty`,context=>{if(context.parameterValue&&typeof context.value===`string`&&context.value===``)context.throwParamError(`NOT_EMPTY`,`Field cannot be empty.`)});addValidator(`required`,()=>{});addValidator(`unsigned`,()=>{});addValidator(`precision`,()=>{});addValidator(`scale`,()=>{});addValidator(`temporalPrecision`,context=>{if(context.definition.type!==`time`&&context.definition.type!==`dateTime`)throw new Error(`temporalPrecision can only be used on time or dateTime fields (${context.fieldName}).`)});addValidator(`nullable`,()=>{});addValidator(`nullOnEmpty`,()=>{});addValidator(`defaultTo`,()=>{})}};var factoryTypesBySource=new WeakMap;var factoryValidatorsBySource=new WeakMap;var registryMetadataSymbol=Symbol.for(`json-rest-schema.registry-metadata`);function registerTypeHandler(types,name,handler){if(typeof handler!==`function`)throw new Error(`Type handler for '${name}' must be a function.`);setOwnProperty(types,name,handler)}function registerValidatorHandler(validators,name,handler){if(typeof handler!==`function`)throw new Error(`Validator handler for '${name}' must be a function.`);setOwnProperty(validators,name,handler)}function createHandlerRegistry(source={}){const registry=Object.create(null);for(const[name,handler]of Object.entries(source))setOwnProperty(registry,name,handler);return registry}function installPlugin(plugin,api){if(typeof plugin.install!==`function`)throw new Error(`Plugin must have an install method.`);plugin.install(api)}function attachRegistryMetadata(target,types,validators){factoryTypesBySource.set(target,types);factoryValidatorsBySource.set(target,validators);Object.defineProperty(target,registryMetadataSymbol,{value:Object.freeze({getTypes:()=>types,getValidators:()=>validators}),enumerable:false,configurable:false,writable:false})}function extractRegistryMetadata(source){if(!source||typeof source!==`object`&&typeof source!==`function`)return null;const types=factoryTypesBySource.get(source);const validators=factoryValidatorsBySource.get(source);if(types&&validators)return{types,validators};const symbolMetadata=source[registryMetadataSymbol];if(symbolMetadata&&typeof symbolMetadata.getTypes===`function`&&typeof symbolMetadata.getValidators===`function`)return{types:symbolMetadata.getTypes(),validators:symbolMetadata.getValidators()};if(typeof source===`object`&&source.types&&typeof source.types===`object`&&source.validators&&typeof source.validators===`object`&&typeof source.create===`function`&&typeof source.replace===`function`&&typeof source.patch===`function`&&typeof source.toJsonSchema===`function`)return{types:source.types,validators:source.validators};return null}function normalizeFactorySources(sources){if(sources.length===1&&Array.isArray(sources[0]))return sources[0];return sources}function areEquivalentHandlers(left,right){return left===right}function mergeRegistryHandlers(target,source,kind){for(const[name,handler]of Object.entries(source)){if(Object.hasOwn(target,name)&&!areEquivalentHandlers(target[name],handler))throw new Error(`Cannot merge schema factories with conflicting ${kind} "${name}".`);setOwnProperty(target,name,handler)}}function resolveMergedRegistries(fallbackTypes,fallbackValidators,sources){const normalizedSources=normalizeFactorySources(sources).filter(Boolean);if(normalizedSources.length<1)return{types:createHandlerRegistry(fallbackTypes),validators:createHandlerRegistry(fallbackValidators)};const mergedTypes=Object.create(null);const mergedValidators=Object.create(null);for(const source of normalizedSources){const metadata=extractRegistryMetadata(source);if(!metadata)throw new Error(`Factory sources must be schema instances or schema factories created by json-rest-schema.`);mergeRegistryHandlers(mergedTypes,metadata.types,`type`);mergeRegistryHandlers(mergedValidators,metadata.validators,`validator`)}return{types:mergedTypes,validators:mergedValidators}}function createSchemaFactory({types={},validators={},installCore=true}={}){const factoryTypes=createHandlerRegistry(types);const factoryValidators=createHandlerRegistry(validators);const factory=(structure,options={})=>{const schema=new Schema(structure,factoryTypes,factoryValidators,options.operations);attachRegistryMetadata(schema,factoryTypes,factoryValidators);return schema};attachRegistryMetadata(factory,factoryTypes,factoryValidators);factory.addType=(name,handler)=>{registerTypeHandler(factoryTypes,name,handler)};factory.addValidator=(name,handler)=>{registerValidatorHandler(factoryValidators,name,handler)};factory.use=plugin=>{installPlugin(plugin,{addType:factory.addType,addValidator:factory.addValidator})};factory.createFactory=(...sources)=>{const mergedRegistries=resolveMergedRegistries(factoryTypes,factoryValidators,sources);return createSchemaFactory({types:mergedRegistries.types,validators:mergedRegistries.validators,installCore:false})};if(installCore)factory.use(CorePlugin);return factory}var createSchema=createSchemaFactory({installCore:true});var JSON_REST_SCHEMA_MODES=new Set([`create`,`replace`,`patch`]);var JSON_REST_SCHEMA_ERROR_MESSAGE_KEYS=Object.freeze({REQUIRED:`required`,TYPE_CAST_FAILED:`default`,NOT_NULLABLE:`default`,MIN_LENGTH:`minLength`,MAX_LENGTH:`maxLength`,MIN_VALUE:`min`,MAX_VALUE:`max`,PATTERN:`pattern`,ENUM_VALUE:`enum`,FIELD_NOT_ALLOWED:`additionalProperties`,CUSTOM_VALIDATOR_FAILED:`default`});function isJsonRestSchemaInstance(value){return Boolean(value)&&typeof value===`object`&&typeof value.create===`function`&&typeof value.replace===`function`&&typeof value.patch===`function`&&typeof value.toJsonSchema===`function`}function requireJsonRestSchemaInstance(schemaDefinition=null,{context=`schema definition.schema`}={}){const schema=normalizeObject(schemaDefinition).schema;if(!isJsonRestSchemaInstance(schema))throw new TypeError(`${context} must be a json-rest-schema schema instance.`);return schema}function resolveSchemaDefinitionMode(schemaDefinition=null,{defaultMode=`create`,context=`schema definition.mode`}={}){const source=normalizeObject(schemaDefinition);const fallbackMode=normalizeText(defaultMode).toLowerCase()||`create`;const rawMode=Object.prototype.hasOwnProperty.call(source,`mode`)?normalizeText(source.mode).toLowerCase():``;if(!rawMode)return fallbackMode;if(!JSON_REST_SCHEMA_MODES.has(rawMode))throw new TypeError(`${context} must be one of: create, replace, patch.`);return rawMode}function resolveSchemaDefinitionTransportSchema(schemaDefinition=null,options={}){const schema=requireJsonRestSchemaInstance(schemaDefinition,{context:`${options?.context||`schema definition`}.schema`});const mode=resolveSchemaDefinitionMode(schemaDefinition,options);return schema.toJsonSchema({mode})}function executeSchemaDefinition(schemaDefinition=null,payload,options={}){return requireJsonRestSchemaInstance(schemaDefinition,{context:`${options?.context||`schema definition`}.schema`})[resolveSchemaDefinitionMode(schemaDefinition,options)](payload)}function resolveJsonRestSchemaFieldMessages(schemaDefinition=null,fieldName=``){const normalizedFieldName=normalizeText(fieldName);if(!normalizedFieldName)return{};const source=normalizeObject(schemaDefinition);if(!isJsonRestSchemaInstance(source.schema))return{};return normalizeObject(source.schema.getFieldMessages(normalizedFieldName))}function resolveJsonRestSchemaParentFieldMessages(schemaDefinition=null,fieldName=``){const segments=normalizeText(fieldName).split(`.`).filter(Boolean);if(segments.length<2)return{};segments.pop();return resolveJsonRestSchemaFieldMessages(schemaDefinition,segments.join(`.`))}function resolveJsonRestSchemaFieldErrorMessage(fieldName,entry,schemaDefinition=null){const errorCode=normalizeText(entry?.code).toUpperCase();const directMessages=resolveJsonRestSchemaFieldMessages(schemaDefinition,fieldName);const messages=errorCode===`FIELD_NOT_ALLOWED`&&Object.keys(directMessages).length<1?resolveJsonRestSchemaParentFieldMessages(schemaDefinition,fieldName):directMessages;const messageKey=JSON_REST_SCHEMA_ERROR_MESSAGE_KEYS[errorCode];if(messageKey&&typeof messages[messageKey]===`string`){const overrideMessage=normalizeText(messages[messageKey]);if(overrideMessage)return overrideMessage}if(typeof messages.default===`string`){const defaultMessage=normalizeText(messages.default);if(defaultMessage)return defaultMessage}return normalizeText(entry?.message||entry?.code||`Invalid value.`)}function normalizeJsonRestSchemaFieldErrors(errors={},schemaDefinition=null){const source=normalizeObject(errors);const fieldErrors={};for(const[fieldName,entry]of Object.entries(source)){const normalizedFieldName=normalizeText(fieldName);if(!normalizedFieldName)continue;if(typeof entry===`string`){fieldErrors[normalizedFieldName]=entry;continue}fieldErrors[normalizedFieldName]=resolveJsonRestSchemaFieldErrorMessage(normalizedFieldName,entry,schemaDefinition)||`Invalid value.`}return fieldErrors}function isSchemaDefinitionObject(value){return Boolean(value)&&typeof value===`object`&&!Array.isArray(value)&&(Object.prototype.hasOwnProperty.call(value,`schema`)||Object.prototype.hasOwnProperty.call(value,`mode`))}function normalizeSingleSchemaDefinition(value,{context=`schema definition`,defaultMode=``}={}){if(value==null)return null;if(!isSchemaDefinitionObject(value))throw new TypeError(`${context} must be a schema definition object.`);const source=normalizeObject(value);if(!Object.prototype.hasOwnProperty.call(source,`schema`))throw new TypeError(`${context}.schema is required.`);if(!isJsonRestSchemaInstance(source.schema))throw new TypeError(`${context}.schema must be a json-rest-schema schema instance.`);const normalized={schema:source.schema};const resolvedDefaultMode=normalizeText(defaultMode).toLowerCase();normalized.mode=resolveSchemaDefinitionMode(source,{defaultMode:resolvedDefaultMode||`patch`,context:`${context}.mode`});return Object.freeze(normalized)}function normalizeSchemaDefinition(value,{context=`schema definition`,defaultMode=``}={}){return normalizeSingleSchemaDefinition(value,{context,defaultMode})}function resolveSchemaTransportSchemaDefinition(value,{context=`schema definition`,defaultMode=``}={}){const normalized=normalizeSchemaDefinition(value,{context,defaultMode});if(!normalized)return;return resolveSchemaDefinitionTransportSchema(normalized,{defaultMode:defaultMode||`patch`,context:`${context}.mode`})}function executeJsonRestSchemaDefinition(value,payload,{context=`schema definition`,defaultMode=``}={}){const normalized=normalizeSchemaDefinition(value,{context,defaultMode});if(!normalized)return null;return executeSchemaDefinition(normalized,payload,{defaultMode:defaultMode||`patch`,context:`${context}.mode`})}function createCursorListValidator(itemValidator){const itemDefinition=normalizeSingleSchemaDefinition(itemValidator,{context:`cursor list item`,defaultMode:`replace`});return deepFreeze({schema:createSchema({items:{type:`array`,required:true,items:itemDefinition.schema},nextCursor:{type:`string`,required:false,nullable:true,minLength:1}}),mode:`replace`})}var cursorPaginationQuerySchema=createSchema({cursor:{type:`id`,required:false},limit:{type:`number`,required:false,min:1,unsigned:true}});var cursorPaginationQueryValidator=Object.freeze({schema:cursorPaginationQuerySchema,mode:`patch`});var HTML_TIME_STRING_SCHEMA=Object.freeze({type:`string`,pattern:`^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$`,minLength:5});var NULLABLE_HTML_TIME_STRING_SCHEMA=Object.freeze({...HTML_TIME_STRING_SCHEMA,nullable:true});function buildSchemaValidationError({message=`Schema validation failed.`,fieldErrors=null,errors=null,cause,statusCode=null}={}){const error=new Error(message,cause?{cause}:void 0);if(Number.isInteger(statusCode)&&statusCode>=400&&statusCode<=599)error.statusCode=statusCode;if(fieldErrors&&typeof fieldErrors===`object`){error.fieldErrors=fieldErrors;error.details={...error.details||{},fieldErrors}}else if(errors!==null&&errors!==void 0)error.details={...error.details||{},errors};return error}function validateSchemaPayload(schemaDefinition,payload,{phase=`input`,context=`schema definition`,statusCode=null}={}){if(schemaDefinition==null)return payload;const result=executeJsonRestSchemaDefinition(schemaDefinition,payload,{defaultMode:phase===`output`?`replace`:`patch`,context});if(!result)throw new TypeError(`${context}.schema must be a json-rest-schema schema instance.`);const fieldErrors=normalizeJsonRestSchemaFieldErrors(result?.errors,schemaDefinition);if(Object.keys(fieldErrors).length>0)throw buildSchemaValidationError({fieldErrors,statusCode});return result?.validatedObject??payload}var RECORD_ID_PATTERN=`^[1-9][0-9]*$`;var recordIdSchema=deepFreeze({type:`string`,minLength:1,pattern:RECORD_ID_PATTERN});var nullableRecordIdSchema=deepFreeze({...recordIdSchema,nullable:true});var recordIdParamsValidator=deepFreeze({schema:createSchema({recordId:{...recordIdSchema,required:true,messages:{pattern:`Record id must be a canonical positive integer string.`}}}),mode:`patch`});var JSON_API_QUERY_PAGE_CURSOR_KEY=`page[cursor]`;var JSON_API_QUERY_PAGE_LIMIT_KEY=`page[limit]`;var JSON_API_QUERY_INCLUDE_KEY=`include`;var JSON_API_QUERY_SORT_KEY=`sort`;var JSON_API_FILTER_PREFIX=`filter[`;var JSON_API_FIELDS_PREFIX=`fields[`;function isRecord$2(value){return Boolean(value)&&typeof value===`object`&&!Array.isArray(value)}function normalizeQueryKey(key=``){return String(key||``).trim()}function buildFieldsTransportKey(responseType=``){const normalizedResponseType=normalizeText(responseType);return normalizedResponseType?`${JSON_API_FIELDS_PREFIX}${normalizedResponseType}]`:``}function parseFieldsTransportType(key=``){const normalizedKey=normalizeQueryKey(key);if(!normalizedKey.startsWith(JSON_API_FIELDS_PREFIX)||!normalizedKey.endsWith(`]`))return``;return normalizeText(normalizedKey.slice(7,-1))}function addJsonApiFieldset(fieldsets,type=``,value=[]){const normalizedType=normalizeText(type);const fields=normalizeJsonApiFieldList(value);if(!normalizedType||fields.length<1)return;fieldsets.set(normalizedType,normalizeJsonApiFieldList([...fieldsets.get(normalizedType)||[],...fields]))}function createJsonApiFieldsTransportValueSchema(){return{anyOf:[{type:`string`,minLength:1},{type:`array`,minItems:1,items:{type:`string`,minLength:1}}]}}function mapPlainQueryKeyToTransportKey(key=``,{responseType=``}={}){const normalizedKey=normalizeQueryKey(key);if(!normalizedKey)return``;if(normalizedKey===`cursor`)return JSON_API_QUERY_PAGE_CURSOR_KEY;if(normalizedKey===`limit`)return JSON_API_QUERY_PAGE_LIMIT_KEY;if(normalizedKey===`q`)return`${JSON_API_FILTER_PREFIX}q]`;if(normalizedKey===`include`)return JSON_API_QUERY_INCLUDE_KEY;if(normalizedKey===`sort`)return JSON_API_QUERY_SORT_KEY;if(normalizedKey===`fields`)return buildFieldsTransportKey(responseType);return`${JSON_API_FILTER_PREFIX}${normalizedKey}]`}function mapTransportQueryKeyToPlainKey(key=``,{responseType=``}={}){const normalizedKey=normalizeQueryKey(key);if(!normalizedKey)return``;if(normalizedKey===`page[cursor]`)return`cursor`;if(normalizedKey===`page[limit]`)return`limit`;if(normalizedKey===`include`)return`include`;if(normalizedKey===`sort`)return`sort`;if(normalizedKey===`${JSON_API_FILTER_PREFIX}q]`)return`q`;const fieldsTransportKey=buildFieldsTransportKey(responseType);if(fieldsTransportKey&&normalizedKey===fieldsTransportKey)return`fields`;if(normalizedKey.startsWith(JSON_API_FILTER_PREFIX)&&normalizedKey.endsWith(`]`))return normalizedKey.slice(7,-1);if(normalizedKey.startsWith(JSON_API_FIELDS_PREFIX)&&normalizedKey.endsWith(`]`))return`fields`;return normalizedKey}function normalizeTransportQueryScalar(value){if(Array.isArray(value)){const normalizedValues=value.map(entry=>String(entry??``).trim()).filter(Boolean);if(normalizedValues.length<1)return``;return normalizedValues.join(`,`)}return String(value??``).trim()}function encodeJsonApiResourceQueryObject(query={},{responseType=``}={}){if(!isRecord$2(query))return Object.freeze({});const source=normalizeObject(query);const encoded={};for(const[rawKey,rawValue]of Object.entries(source)){if(normalizeQueryKey(rawKey)===`fields`){for(const[type,fields]of Object.entries(normalizeJsonApiFieldsets(rawValue,{primaryType:responseType})))encoded[buildFieldsTransportKey(type)]=fields.join(`,`);continue}const transportKey=mapPlainQueryKeyToTransportKey(rawKey,{responseType});if(!transportKey)continue;const normalizedValues=(Array.isArray(rawValue)?rawValue:[rawValue]).map(entry=>String(entry??``).trim()).filter(Boolean);if(normalizedValues.length<1)continue;encoded[transportKey]=normalizedValues.length===1?normalizedValues[0]:normalizedValues}return Object.freeze(encoded)}function decodeJsonApiResourceQueryObject(query={},{responseType=``}={}){if(!isRecord$2(query))return Object.freeze({});const source=normalizeObject(query);const decoded={};const fieldsets=new Map;for(const[rawKey,rawValue]of Object.entries(source)){if(normalizeQueryKey(rawKey)===`fields`){addJsonApiFieldset(fieldsets,responseType,rawValue);continue}const fieldsetType=parseFieldsTransportType(rawKey);if(fieldsetType){addJsonApiFieldset(fieldsets,fieldsetType,rawValue);continue}const plainKey=mapTransportQueryKeyToPlainKey(rawKey,{responseType});if(!plainKey)continue;const normalizedValue=normalizeTransportQueryScalar(rawValue);if(!normalizedValue)continue;decoded[plainKey]=normalizedValue}const normalizedFieldsets=normalizeJsonApiFieldsets(Object.fromEntries(fieldsets));if(Object.keys(normalizedFieldsets).length>0)decoded.fields=normalizedFieldsets;return Object.freeze(decoded)}function createJsonApiResourceQueryTransportSchema({query,responseType=``}={}){const transportSchema=resolveSchemaTransportSchemaDefinition(query,{context:`JSON:API resource query`,defaultMode:`patch`});if(!transportSchema||typeof transportSchema!==`object`||Array.isArray(transportSchema))throw new TypeError(`JSON:API resource query transport schema must resolve to an object schema.`);const sourceSchema=normalizeObject(transportSchema);const sourceProperties=normalizeObject(sourceSchema.properties);const properties={};const patternProperties={};for(const[plainKey,propertySchema]of Object.entries(sourceProperties)){if(plainKey===`fields`){properties.fields=createJsonApiFieldsTransportValueSchema();patternProperties[`^fields\\[[^\\[\\]]+\\]$`]=createJsonApiFieldsTransportValueSchema();continue}const transportKey=mapPlainQueryKeyToTransportKey(plainKey,{responseType});if(!transportKey)continue;properties[transportKey]=propertySchema}const schema={type:`object`,additionalProperties:false,properties};if(Object.keys(patternProperties).length>0)schema.patternProperties=patternProperties;if(isRecord$2(sourceSchema.definitions)&&Object.keys(sourceSchema.definitions).length>0)schema.definitions=normalizeObject(sourceSchema.definitions);return schema}function isRecord$1(value){return Boolean(value)&&typeof value===`object`&&!Array.isArray(value)}function normalizeTransportKind(transport=null){return String(transport?.kind||``).trim().toLowerCase()}function isJsonApiResourceTransport(transport=null){return normalizeTransportKind(transport)===`jsonapi-resource`}function normalizeJsonApiClientTransport(transport=null){if(!isJsonApiResourceTransport(transport))return null;const resolvedTypes=resolveJsonApiTransportTypes(transport,{context:`JSON:API client transport`});return Object.freeze({kind:`jsonapi-resource`,requestType:resolvedTypes.requestType,responseType:resolvedTypes.responseType,responseKind:normalizeText(transport?.responseKind,{fallback:`record`}).toLowerCase(),includeBodyId:transport?.includeBodyId===true,lookupContainerKey:normalizeText(transport?.lookupContainerKey,{fallback:`lookups`}),lookupFieldMap:Object.freeze(Object.fromEntries(Object.entries(normalizeObject(transport?.lookupFieldMap)).map(([relationshipName,fieldKey])=>[normalizeText(relationshipName),normalizeText(fieldKey)]).filter(([relationshipName,fieldKey])=>relationshipName&&fieldKey).sort(([left],[right])=>left.localeCompare(right))))})}function defaultEncodeAttributes(body={}){const attributes={...normalizeObject(body)};delete attributes.id;return attributes}function encodeJsonApiResourceRequestBody(body,transport=null){const normalizedTransport=normalizeJsonApiClientTransport(transport);if(!normalizedTransport)return body;if(!isRecord$1(body))throw new TypeError(`JSON:API resource request body must be an object.`);if(!normalizedTransport.requestType)throw new TypeError(`JSON:API resource request body requires requestType.`);const source=normalizeObject(body);return createJsonApiDocument({data:createJsonApiResourceObject({type:normalizedTransport.requestType,...normalizedTransport.includeBodyId&&source.id!=null?{id:source.id}:{},attributes:defaultEncodeAttributes(source)})})}function encodeJsonApiResourceQuery(query,transport=null){const normalizedTransport=normalizeJsonApiClientTransport(transport);if(!normalizedTransport)return query;return encodeJsonApiResourceQueryObject(query,{responseType:normalizedTransport.responseType})}function createIncludedResourceIndex(document={}){const index=new Map;for(const resource of normalizeArray(document?.included)){const type=normalizeText(resource?.type);const id=normalizeText(resource?.id);if(!type||!id)continue;index.set(`${type}:${id}`,resource)}return index}function simplifyRelationshipResource(linkage={},options={}){const normalizedLinkage=isRecord$1(linkage)?normalizeObject(linkage):{};const type=normalizeText(normalizedLinkage.type);const id=normalizeText(normalizedLinkage.id);if(!type||!id)return null;const resourceKey=`${type}:${id}`;const includedResource=options.includedResourceIndex?.get(resourceKey);if(!includedResource)return null;return simplifyResourceObject(includedResource,options)}function simplifyResourceObject(resource={},options={}){const normalizedResource=isRecord$1(resource)?normalizeObject(resource):{};const simplified=simplifyJsonApiResourceWithRelationshipIds(normalizedResource,{lookupFieldMap:options.lookupFieldMap||null});const lookupContainerKey=normalizeText(options.lookupContainerKey,{fallback:`lookups`});const lookupFieldMap=options.lookupFieldMap||null;const resourceKey=`${normalizeText(normalizedResource.type)}:${normalizeText(normalizedResource.id)}`;if(resourceKey&&options.inFlightKeys?.has(resourceKey))return simplified;if(resourceKey&&options.resourceCache?.has(resourceKey))return options.resourceCache.get(resourceKey);if(resourceKey)options.inFlightKeys?.add(resourceKey);const lookups={};for(const[relationshipName,relationshipValue]of Object.entries(normalizeObject(normalizedResource.relationships))){const relationshipData=relationshipValue?.data;if(Array.isArray(relationshipData)){const items=relationshipData.map(entry=>simplifyRelationshipResource(entry,{...options,lookupFieldMap:null})).filter(Boolean);if(items.length>0)lookups[relationshipName]=items;continue}const fieldKey=resolveRelationshipFieldKey(relationshipName,lookupFieldMap);if(!Object.hasOwn(simplified,fieldKey))simplified[fieldKey]=relationshipData?.id==null?null:String(relationshipData.id);const lookupRecord=relationshipData==null?null:simplifyRelationshipResource(relationshipData,{...options,lookupFieldMap:null});if(lookupRecord){lookups[fieldKey]=lookupRecord;if(relationshipName!==fieldKey)lookups[relationshipName]=lookupRecord}}if(Object.keys(lookups).length>0)simplified[lookupContainerKey]=lookups;if(resourceKey){options.inFlightKeys?.delete(resourceKey);options.resourceCache?.set(resourceKey,simplified)}return simplified}function assertPrimaryDataType(resource={},expectedType=``){const normalizedExpectedType=normalizeText(expectedType);if(!normalizedExpectedType)return;const actualType=normalizeText(resource?.type);if(actualType&&actualType!==normalizedExpectedType)throw new Error(`Expected JSON:API resource type ${normalizedExpectedType}, received ${actualType}.`)}function resolveCollectionPageMeta(document={}){return{nextCursor:normalizeText(document?.meta?.page?.nextCursor||document?.meta?.pagination?.cursor?.next)||null,...isRecord$1(document?.meta)?{meta:document.meta}:{},...isRecord$1(document?.links)?{links:document.links}:{}}}function decodeJsonApiResourceResponse(payload,transport=null){const normalizedTransport=normalizeJsonApiClientTransport(transport);if(!normalizedTransport)return payload;const document=normalizeJsonApiDocument(payload);const simplifyOptions={lookupContainerKey:normalizedTransport.lookupContainerKey,lookupFieldMap:normalizedTransport.lookupFieldMap,includedResourceIndex:createIncludedResourceIndex(document),resourceCache:new Map,inFlightKeys:new Set};if(document.kind===`unknown`)throw new Error(`Expected JSON:API response document.`);if(normalizedTransport.responseKind===`collection`){if(document.kind!==`collection`)throw new Error(`Expected JSON:API collection document.`);for(const entry of document.data)assertPrimaryDataType(entry,normalizedTransport.responseType);return{items:document.data.map(entry=>simplifyResourceObject(entry,simplifyOptions)),...resolveCollectionPageMeta(document)}}if(normalizedTransport.responseKind===`meta`){if(document.kind!==`meta`)throw new Error(`Expected JSON:API meta document.`);return isRecord$1(document.meta)?document.meta:{}}if(normalizedTransport.responseKind===`nullable-record`){if(document.kind!==`resource`)throw new Error(`Expected JSON:API resource document.`);if(document.data!=null)assertPrimaryDataType(document.data,normalizedTransport.responseType);return document.data==null?null:simplifyResourceObject(document.data,simplifyOptions)}if(document.kind!==`resource`)throw new Error(`Expected JSON:API resource document.`);if(document.data!=null)assertPrimaryDataType(document.data,normalizedTransport.responseType);return document.data==null?null:simplifyResourceObject(document.data,simplifyOptions)}function decodeJsonApiErrorFieldErrors(payload={}){const document=normalizeJsonApiDocument(payload);if(document.kind!==`errors`)return{};const fieldErrors={};for(const error of normalizeArray(document.errors)){const pointer=normalizeText(error?.source?.pointer);const parameter=normalizeText(error?.source?.parameter);const detail=normalizeText(error?.detail||error?.title,{fallback:`Invalid value.`});if(parameter&&!Object.hasOwn(fieldErrors,parameter)){fieldErrors[parameter]=detail;continue}if(!pointer.startsWith(`/data/attributes/`))continue;const fieldName=normalizeText(pointer.slice(17).split(`/`)[0]);if(fieldName&&!Object.hasOwn(fieldErrors,fieldName))fieldErrors[fieldName]=detail}return fieldErrors}function createJsonApiClientErrorPayload(payload={}){const document=normalizeJsonApiDocument(payload);if(document.kind!==`errors`)return null;const firstError=normalizeArray(document.errors)[0]||{};const fieldErrors=decodeJsonApiErrorFieldErrors(payload);const transactionOutcome=normalizeTransactionOutcome(firstError.meta?.transactionOutcome);return{error:normalizeText(firstError.detail||firstError.title,{fallback:`Request failed.`}),code:normalizeText(firstError.code)||null,...transactionOutcome?{transactionOutcome}:{},...Object.keys(fieldErrors).length>0?{fieldErrors,details:{fieldErrors}}:{}}}function standardErrorMessage(payload={}){const nestedMessage=Array.isArray(payload.errors)?payload.errors.find(entry=>isRecord$4(entry)&&String(entry.message||``).trim())?.message:``;return String(payload.error||payload.message||nestedMessage||``).trim()}function createHttpError(response,data={}){const payload=isRecord$4(data)?data:{};const message=standardErrorMessage(payload);const jsonApiPayload=message?null:createJsonApiClientErrorPayload(payload);if(jsonApiPayload)return createHttpError(response,jsonApiPayload);const error=new Error(message||`Request failed with status ${response.status}.`);const normalizedFieldErrors=resolveFieldErrors(payload);error.status=Number(response?.status||0);error.code=String(payload.code||``).trim()||null;const transactionOutcome=normalizeTransactionOutcome(payload.transactionOutcome);if(transactionOutcome)error.transactionOutcome=transactionOutcome;error.fieldErrors=Object.keys(normalizedFieldErrors).length>0?normalizedFieldErrors:null;if(isRecord$4(payload.details))error.details=payload.details;else if(error.fieldErrors)error.details={fieldErrors:error.fieldErrors};else error.details=null;return error}function createNetworkError(cause){const error=new Error(`Network request failed.`);error.status=0;error.code=null;error.fieldErrors=null;error.details=null;error.cause=cause;return error}function normalizeHeaderName(name){return String(name||``).trim().toLowerCase()}function hasHeader(headers,name){const normalizedTarget=normalizeHeaderName(name);if(!normalizedTarget||!headers||typeof headers!==`object`)return false;return Object.keys(headers).some(key=>normalizeHeaderName(key)===normalizedTarget)}function setHeaderIfMissing(headers,name,value){if(!headers||typeof headers!==`object`||!name||value==null)return;if(hasHeader(headers,name))return;headers[name]=value}var DEFAULT_RETRYABLE_CSRF_ERROR_CODES=Object.freeze([`FST_CSRF_INVALID_TOKEN`,`FST_CSRF_MISSING_SECRET`]);function toUpperStringSet(values,fallback=[]){return new Set((Array.isArray(values)?values:fallback).map(value=>String(value||``).trim().toUpperCase()).filter(Boolean))}function shouldRetryForCsrfFailure({response,method,state,data,unsafeMethods,retryableErrorCodes=DEFAULT_RETRYABLE_CSRF_ERROR_CODES}){const methodValue=String(method||``).trim().toUpperCase();if(Number(response?.status)!==403||!unsafeMethods?.has(methodValue)||state?.csrfRetried)return false;const payload=createJsonApiClientErrorPayload(data)||data;const transactionOutcome=normalizeTransactionOutcome(payload?.transactionOutcome);if([`pending`,`committed`,`unknown`].includes(transactionOutcome))return false;const code=String(payload?.details?.code||payload?.code||``).trim().toUpperCase();return toUpperStringSet(retryableErrorCodes,DEFAULT_RETRYABLE_CSRF_ERROR_CODES).has(code)}function normalizePermissionList(value){const source=Array.isArray(value)?value:[value];const unique=new Set;for(const entry of source){const normalizedEntry=normalizeText(entry);if(!normalizedEntry)continue;unique.add(normalizedEntry)}return[...unique]}function hasPermission(permissionSet=[],permission=``){const requiredPermission=normalizeText(permission);if(!requiredPermission)return true;const permissions=normalizePermissionList(permissionSet);if(permissions.includes(`*`)||permissions.includes(requiredPermission))return true;for(const grantedPermission of permissions){if(!grantedPermission.endsWith(`.*`))continue;const wildcardNamespace=grantedPermission.slice(0,-2);if(!wildcardNamespace)continue;if(requiredPermission.startsWith(`${wildcardNamespace}.`))return true}return false}var TRANSIENT_QUERY_ERROR_STATUSES=Object.freeze(new Set([0,502,503,504]));var MAX_TRANSIENT_QUERY_RETRIES=2;var MAX_TRANSIENT_RETRY_DELAY_MS=3e3;function normalizeQueryErrorStatus(error){const status=Number(error?.status||error?.statusCode||0);return Number.isInteger(status)?status:0}function isTransientQueryError(error){return TRANSIENT_QUERY_ERROR_STATUSES.has(normalizeQueryErrorStatus(error))}function shouldRetryTransientQueryFailure(failureCount,error){if(!isTransientQueryError(error))return false;return Number(failureCount)<2}function transientQueryRetryDelay(attemptIndex){const normalizedAttempt=Number.isInteger(Number(attemptIndex))?Number(attemptIndex):1;return Math.min(1e3*2**Math.max(0,normalizedAttempt-1),MAX_TRANSIENT_RETRY_DELAY_MS)}var DEFAULT_UNSAFE_METHODS=Object.freeze([`POST`,`PUT`,`PATCH`,`DELETE`]);var DEFAULT_NDJSON_CONTENT_TYPE=`application/x-ndjson`;var DEFAULT_READ_TIMEOUT_MS=3e4;function requestSignalWithDeadline(signal,timeoutMs){if(!Number.isSafeInteger(timeoutMs)||timeoutMs<=0)throw new TypeError(`Request timeoutMs must be a positive finite integer.`);const deadline=AbortSignal.timeout(timeoutMs);return signal?AbortSignal.any([signal,deadline]):deadline}function normalizeMethod(method){return String(method||`GET`).trim().toUpperCase()}function resolveUnsafeMethods(value){return new Set((Array.isArray(value)?value:DEFAULT_UNSAFE_METHODS).map(method=>normalizeMethod(method)).filter(Boolean))}function resolveFetch(){if(typeof fetch===`function`)return fetch;throw new Error(`createHttpClient requires fetchImpl when global fetch is unavailable.`)}function normalizeResolvedRequestUrl(value,fallback=``){if(value===void 0||value===null||value===``)return fallback;return String(value)}function isObjectBody(value){return Boolean(value)&&typeof value===`object`&&!(value instanceof FormData)}function isQueryValuePresent(value){if(Array.isArray(value))return value.some(entry=>String(entry??``).trim());return String(value??``).trim().length>0}function appendRequestQueryToUrl(url,query=null,transport=null){const normalizedUrl=String(url||``).trim();if(!normalizedUrl)return``;const encodedQuery=transport?encodeJsonApiResourceQuery(query,transport):query&&typeof query===`object`&&!Array.isArray(query)?query:null;if(!encodedQuery||typeof encodedQuery!==`object`||Array.isArray(encodedQuery))return normalizedUrl;const searchParams=new URLSearchParams;for(const[key,rawValue]of Object.entries(encodedQuery)){const normalizedKey=String(key||``).trim();if(!normalizedKey||!isQueryValuePresent(rawValue))continue;const values=Array.isArray(rawValue)?rawValue:[rawValue];for(const value of values){const normalizedValue=String(value??``).trim();if(!normalizedValue)continue;searchParams.append(normalizedKey,normalizedValue)}}const serializedQuery=searchParams.toString();if(!serializedQuery)return normalizedUrl;return appendQueryString(normalizedUrl,serializedQuery)}function parseJsonSafely(response,signal){const contentType=String(response?.headers?.get?.(`content-type`)||``);const isJson=isJsonContentType(contentType);if(!isJson)return Promise.resolve({contentType,isJson,data:{}});return Promise.resolve(response?.json?.()).catch(error=>{signal?.throwIfAborted();if(error?.name===`AbortError`)throw error;return{}}).then(data=>({contentType,isJson,data:data&&typeof data===`object`?data:{}}))}function emitNdjsonLine(line,handlers){const normalizedLine=String(line||``).trim();if(!normalizedLine)return;try{const payload=JSON.parse(normalizedLine);if(typeof handlers?.onEvent===`function`)handlers.onEvent(payload)}catch(error){if(typeof handlers?.onMalformedLine===`function`)handlers.onMalformedLine(normalizedLine,error)}}async function readNdjsonStream(response,handlers={}){if(!response?.body||typeof response.body.getReader!==`function`){if(typeof response?.text===`function`){const rawText=await response.text().catch(()=>``);for(const line of String(rawText||``).split(/\r?\n/g))emitNdjsonLine(line,handlers)}return}const reader=response.body.getReader();const decoder=new TextDecoder;let buffered=``;while(true){const{value,done}=await reader.read();if(done)break;buffered+=decoder.decode(value,{stream:true});const lines=buffered.split(/\r?\n/g);buffered=lines.pop()||``;for(const line of lines)emitNdjsonLine(line,handlers)}buffered+=decoder.decode();if(buffered)emitNdjsonLine(buffered,handlers)}function createHttpClient(options={}){const configuredFetchImpl=typeof options.fetchImpl===`function`?options.fetchImpl:null;const configuredResolveRequestUrl=typeof options.resolveRequestUrl===`function`?options.resolveRequestUrl:null;const unsafeMethods=resolveUnsafeMethods(options.unsafeMethods);const hooks=options?.hooks&&typeof options.hooks===`object`?options.hooks:{};const csrf={enabled:options?.csrf?.enabled!==false,sessionPath:String(options?.csrf?.sessionPath||`/api/session`),headerName:String(options?.csrf?.headerName||`csrf-token`),tokenField:String(options?.csrf?.tokenField||`csrfToken`),retryableErrorCodes:Array.isArray(options?.csrf?.retryableErrorCodes)?options.csrf.retryableErrorCodes:DEFAULT_RETRYABLE_CSRF_ERROR_CODES};let csrfTokenCache=``;let csrfFetchPromise=null;function updateCsrfTokenFromPayload(data){const token=String(data?.[csrf.tokenField]||``);if(token)csrfTokenCache=token}async function fetchSessionForCsrf(){const activeFetch=configuredFetchImpl||resolveFetch();const signal=requestSignalWithDeadline(null,options.readTimeoutMs??DEFAULT_READ_TIMEOUT_MS);const requestUrl=await resolveRequestUrl(csrf.sessionPath,{originalUrl:csrf.sessionPath,method:`GET`,requestOptions:{method:`GET`},state:null,stream:false,csrfSession:true});let response;try{response=await activeFetch(requestUrl,{method:`GET`,credentials:String(options?.credentials||`same-origin`),signal})}catch(cause){signal.throwIfAborted();throw createNetworkError(cause)}const{data}=await parseJsonSafely(response,signal);signal.throwIfAborted();updateCsrfTokenFromPayload(data);if(!response.ok)throw createHttpError(response,data);return data}async function ensureCsrfToken(forceRefresh=false){if(!csrf.enabled)return``;if(!forceRefresh&&csrfTokenCache)return csrfTokenCache;if(!csrfFetchPromise||forceRefresh)csrfFetchPromise=fetchSessionForCsrf().finally(()=>{csrfFetchPromise=null});await csrfFetchPromise;return csrfTokenCache}function decorateHeaders({url,method,headers,requestOptions,state,stream}){if(typeof hooks.decorateHeaders!==`function`)return null;return hooks.decorateHeaders({url,method,headers,requestOptions,state,stream})}async function notifyFailure(payload){if(typeof hooks.onFailure===`function`)await hooks.onFailure(payload)}async function notifySuccess(payload){if(typeof hooks.onSuccess===`function`)await hooks.onSuccess(payload)}async function resolveRequestUrl(url,context={}){const normalizedUrl=String(url||``).trim();if(!configuredResolveRequestUrl)return normalizedUrl;return normalizeResolvedRequestUrl(await configuredResolveRequestUrl(normalizedUrl,{...context,url:normalizedUrl}),normalizedUrl)}async function maybeRetry({response,method,state,data,stream,csrfEnabled=csrf.enabled}){if(!csrfEnabled)return false;const customShouldRetry=typeof hooks.shouldRetryRequest===`function`?await hooks.shouldRetryRequest({response,method,state,data,stream}):null;if(!(customShouldRetry==null?shouldRetryForCsrfFailure({response,method,state,data,unsafeMethods,retryableErrorCodes:csrf.retryableErrorCodes}):Boolean(customShouldRetry)))return false;if(typeof hooks.onRetryableFailure===`function`)await hooks.onRetryableFailure({response,method,state,data,stream});csrfTokenCache=``;await ensureCsrfToken(true);state.csrfRetried=true;return true}function resolveRequestState(state){const resolvedState=state&&typeof state===`object`?state:{};if(typeof resolvedState.csrfRetried!==`boolean`)resolvedState.csrfRetried=false;return resolvedState}async function prepareRequestConfig(url,requestOptions,state,stream){const resolvedState=resolveRequestState(state);const method=normalizeMethod(requestOptions.method);const transport=normalizeJsonApiClientTransport(requestOptions.transport);const{transport:_transport,query:requestQuery,csrf:requestCsrf,timeoutMs:requestTimeoutMs,...forwardedRequestOptions}=requestOptions&&typeof requestOptions===`object`?requestOptions:{};const csrfEnabled=csrf.enabled&&requestCsrf!==false;const resolvedRequestUrl=await resolveRequestUrl(appendRequestQueryToUrl(url,requestQuery,transport),{originalUrl:url,method,requestOptions,state:resolvedState,stream:Boolean(stream),csrfSession:false});const headers=requestOptions.headers&&typeof requestOptions.headers===`object`?{...requestOptions.headers}:{};const decorateHeadersResult=decorateHeaders({url:resolvedRequestUrl,method,headers,requestOptions,state:resolvedState,stream:Boolean(stream)});if(decorateHeadersResult&&typeof decorateHeadersResult.then===`function`)await decorateHeadersResult;const config={credentials:String(options?.credentials||`same-origin`),...forwardedRequestOptions,method,headers};const ordinaryRead=!stream&&[`GET`,`HEAD`].includes(method);const timeoutMs=requestTimeoutMs??(ordinaryRead?options.readTimeoutMs??DEFAULT_READ_TIMEOUT_MS:void 0);if(timeoutMs!==void 0)config.signal=requestSignalWithDeadline(config.signal,timeoutMs);if(transport)setHeaderIfMissing(headers,`Accept`,JSON_API_CONTENT_TYPE);if(transport&&isObjectBody(config.body)){setHeaderIfMissing(headers,`Content-Type`,JSON_API_CONTENT_TYPE);config.body=encodeJsonApiResourceRequestBody(config.body,transport)}if(isObjectBody(config.body)){setHeaderIfMissing(headers,`Content-Type`,`application/json`);config.body=JSON.stringify(config.body)}if(csrfEnabled&&unsafeMethods.has(method)&&!hasHeader(headers,csrf.headerName)){const token=await ensureCsrfToken();if(token)setHeaderIfMissing(headers,csrf.headerName,token)}return{method,config,state:resolvedState,csrfEnabled,transport,url:resolvedRequestUrl}}async function executePreparedRequest(url,config,{method,state},onNetworkFailure){config.signal?.throwIfAborted();let response;try{response=await(configuredFetchImpl||resolveFetch())(url,config)}catch(cause){config.signal?.throwIfAborted();return onNetworkFailure(cause)}const{contentType,isJson,data}=await parseJsonSafely(response,config.signal);config.signal?.throwIfAborted();updateCsrfTokenFromPayload(data);return{response,data,contentType,isJson,method,state}}async function handleHttpFailure({url,method,state,response,data,contentType,isJson,stream,csrfEnabled,retryRequest}){if(await maybeRetry({response,method,state,data,stream,csrfEnabled}))return retryRequest();const error=createHttpError(response,data);if(Number(response.status)===401&&typeof hooks.onUnauthorized===`function`)await hooks.onUnauthorized(error);await notifyFailure({url,method,state,reason:`http_${response.status}`,error,response,data,contentType,isJson,stream});throw error}async function executeRequestLifecycle({url,requestOptions={},state=null,stream=false,handleNetworkFailure,retryRequest}={}){if(typeof handleNetworkFailure!==`function`)throw new TypeError(`executeRequestLifecycle requires handleNetworkFailure().`);if(typeof retryRequest!==`function`)throw new TypeError(`executeRequestLifecycle requires retryRequest().`);const requestContext=await prepareRequestConfig(url,requestOptions,state,stream);const{method,state:resolvedState}=requestContext;const result=await executePreparedRequest(requestContext.url,requestContext.config,requestContext,cause=>handleNetworkFailure({cause,url,method,state:resolvedState,stream}));if(!result.response.ok)return{handled:true,value:await handleHttpFailure({url,method,state:resolvedState,response:result.response,data:result.data,contentType:result.contentType,isJson:result.isJson,stream,csrfEnabled:requestContext.csrfEnabled,retryRequest(){return retryRequest(resolvedState)}})};return{handled:false,value:{method,state:resolvedState,result,transport:requestContext.transport}}}async function request(url,requestOptions={},state=null){const execution=await executeRequestLifecycle({url,requestOptions,state,stream:false,async handleNetworkFailure({cause,method,state:resolvedState}){if(cause?.name===`AbortError`)throw cause;const error=createNetworkError(cause);await notifyFailure({url,method,state:resolvedState,reason:`network_error`,error,stream:false});throw error},retryRequest(nextState){return request(url,requestOptions,nextState)}});if(execution.handled)return execution.value;const{method,state:resolvedState,result,transport}=execution.value;if(Number(result.response?.status||200)===204){await notifySuccess({url,method,state:resolvedState,response:result.response,data:null,rawData:null,contentType:result.contentType,isJson:result.isJson,stream:false});return null}let responseData=result.data;if(transport)try{responseData=decodeJsonApiResourceResponse(result.data,transport)}catch(cause){const error=createNetworkError(cause);error.message=`JSON:API response decoding failed.`;await notifyFailure({url,method,state:resolvedState,reason:`transport_decode_error`,error,response:result.response,data:result.data,contentType:result.contentType,isJson:result.isJson,stream:false});throw error}await notifySuccess({url,method,state:resolvedState,response:result.response,data:responseData,rawData:result.data,contentType:result.contentType,isJson:result.isJson,stream:false});return responseData}async function requestStream(url,requestOptions={},handlers={},state=null){const execution=await executeRequestLifecycle({url,requestOptions,state,stream:true,async handleNetworkFailure({cause,method,state:resolvedState}){const aborted=String(cause?.name||``)===`AbortError`;await notifyFailure({url,method,state:resolvedState,reason:aborted?`aborted`:`network_error`,error:cause,stream:true});if(aborted)throw cause;throw createNetworkError(cause)},retryRequest(nextState){return requestStream(url,requestOptions,handlers,nextState)}});if(execution.handled)return execution.value;const{method,state:resolvedState,result}=execution.value;try{let shouldParseAsNdjson=result.contentType.includes(DEFAULT_NDJSON_CONTENT_TYPE);if(!shouldParseAsNdjson&&typeof hooks.shouldTreatAsNdjsonStream===`function`)shouldParseAsNdjson=Boolean(await hooks.shouldTreatAsNdjsonStream({url,method,state:resolvedState,contentType:result.contentType,isJson:result.isJson,data:result.data,response:result.response}));if(shouldParseAsNdjson)await readNdjsonStream(result.response,handlers);else if(typeof handlers?.onEvent===`function`&&Object.keys(result.data).length>0)handlers.onEvent(result.data);else if(typeof handlers?.onEvent===`function`&&typeof result.response?.text===`function`){const rawText=await result.response.text().catch(()=>``);for(const line of String(rawText||``).split(/\r?\n/g))emitNdjsonLine(line,handlers)}}catch(error){await notifyFailure({url,method,state:resolvedState,reason:`stream_error`,error,response:result.response,data:result.data,contentType:result.contentType,isJson:result.isJson,stream:true});throw error}await notifySuccess({url,method,state:resolvedState,response:result.response,data:result.data,contentType:result.contentType,isJson:result.isJson,stream:true})}function clearCsrfTokenCache(){csrfTokenCache=``}function resetForTests(){csrfTokenCache=``;csrfFetchPromise=null}function get(url,requestOptions={}){return request(url,{...requestOptions,method:`GET`})}function post(url,body,requestOptions={}){return request(url,{...requestOptions,method:`POST`,body})}function put(url,body,requestOptions={}){return request(url,{...requestOptions,method:`PUT`,body})}function patch(url,body,requestOptions={}){return request(url,{...requestOptions,method:`PATCH`,body})}function del(url,requestOptions={}){return request(url,{...requestOptions,method:`DELETE`})}return{request,requestStream,ensureCsrfToken,clearCsrfTokenCache,resetForTests,get,post,put,patch,delete:del,__testables:{fetchSessionForCsrf,updateCsrfTokenFromPayload,createHttpError,createNetworkError,readNdjsonStream}}}var SAFE_RETRY_METHODS=Object.freeze(new Set([`GET`,`HEAD`]));var MAX_TRANSIENT_HTTP_RETRIES=2;function sleep(delayMs){return new Promise(resolve=>{setTimeout(resolve,delayMs)})}function shouldRetryTransientHttpFailure(error,method,attemptIndex){if(error?.name===`AbortError`||error?.name===`TimeoutError`)return false;if(!SAFE_RETRY_METHODS.has(String(method||`GET`).toUpperCase()))return false;if(!isTransientQueryError(error))return false;return Number(attemptIndex)<MAX_TRANSIENT_HTTP_RETRIES}async function requestWithTransientRetry(executor,method,signal){let attemptIndex=0;while(true){signal?.throwIfAborted();try{return await executor()}catch(error){signal?.throwIfAborted();if(!shouldRetryTransientHttpFailure(error,method,attemptIndex))throw error;attemptIndex+=1;await sleep(transientQueryRetryDelay(attemptIndex))}}}function createTransientRetryHttpClient(options={}){const baseHttpClient=createHttpClient(options);return Object.freeze({...baseHttpClient,request(url,requestOptions={},state=null){return requestWithTransientRetry(()=>baseHttpClient.request(url,requestOptions,state),String(requestOptions?.method||`GET`).toUpperCase(),requestOptions?.signal)},requestStream(url,requestOptions={},handlers={},state=null){return requestWithTransientRetry(()=>baseHttpClient.requestStream(url,requestOptions,handlers,state),String(requestOptions?.method||`GET`).toUpperCase(),requestOptions?.signal)}})}function createValidationFailure({error=`Validation failed.`,code=`validation_failed`,fieldErrors={}}={}){const normalizedFieldErrors=normalizeFieldErrors(fieldErrors);return{error:String(error||`Validation failed.`).trim()||`Validation failed.`,code:String(code||`validation_failed`).trim()||`validation_failed`,fieldErrors:normalizedFieldErrors,details:{fieldErrors:normalizedFieldErrors}}}var ARCHITECTURE_ID_PATTERN=/^[a-z][a-z0-9_.-]*$/u;var LOCAL_NAME_PATTERN=/^[A-Za-z_$][A-Za-z0-9_$]*$/u;function normalizeArchitectureId(value,label){const normalized=String(value||``).trim().toLowerCase();if(!ARCHITECTURE_ID_PATTERN.test(normalized))throw new TypeError(`${label} must match ${ARCHITECTURE_ID_PATTERN.toString()}.`);return normalized}function normalizeCapabilityMap(value,label){if(value==null)return Object.freeze({});if(!isRecord$4(value))throw new TypeError(`${label} must be an object mapping local names to capability ids.`);const normalized={};const seenCapabilityIds=new Set;for(const[rawLocalName,rawCapabilityId]of Object.entries(value)){const localName=String(rawLocalName||``).trim();if(!LOCAL_NAME_PATTERN.test(localName))throw new TypeError(`${label} local name "${localName}" must be a JavaScript identifier.`);const capabilityId=normalizeArchitectureId(rawCapabilityId,`${label}.${localName}`);if(seenCapabilityIds.has(capabilityId))throw new TypeError(`${label} declares capability "${capabilityId}" more than once.`);seenCapabilityIds.add(capabilityId);normalized[localName]=capabilityId}return Object.freeze(normalized)}function assertDistinctLocalNames(maps){const owners=new Map;for(const[kind,entries]of Object.entries(maps))for(const localName of Object.keys(entries)){if(owners.has(localName))throw new TypeError(`Provider local name "${localName}" is declared by both ${owners.get(localName)} and ${kind}.`);owners.set(localName,kind)}}function normalizeLifecycleMethod(value,label){if(value==null)return null;if(typeof value!==`function`)throw new TypeError(`${label} must be a function when provided.`);return value}function defineProvider({id,requires={},optional={},provides={},setup,boot=null,shutdown=null}={}){const providerId=normalizeArchitectureId(id,`Provider id`);const normalizedRequires=normalizeCapabilityMap(requires,`${providerId}.requires`);const normalizedOptional=normalizeCapabilityMap(optional,`${providerId}.optional`);const normalizedProvides=normalizeCapabilityMap(provides,`${providerId}.provides`);assertDistinctLocalNames({requires:normalizedRequires,optional:normalizedOptional,provides:normalizedProvides});const setupMethod=normalizeLifecycleMethod(setup,`${providerId}.setup`);if(!setupMethod)throw new TypeError(`${providerId}.setup is required.`);return Object.freeze({id:providerId,requires:normalizedRequires,optional:normalizedOptional,provides:normalizedProvides,setup:setupMethod,boot:normalizeLifecycleMethod(boot,`${providerId}.boot`),shutdown:normalizeLifecycleMethod(shutdown,`${providerId}.shutdown`)})}function normalizeProviderDefinition(value){if(!isRecord$4(value))throw new TypeError(`Capability runtime providers must be provider definitions.`);return defineProvider(value)}function normalizeInputCapabilities(value){if(value==null)return new Map;if(!isRecord$4(value))throw new TypeError(`Capability runtime inputs must be an object keyed by capability id.`);return new Map(Object.entries(value).map(([id,capability])=>[normalizeArchitectureId(id,`Runtime input capability id`),capability]))}function providerCapabilityIds(provider,field){return Object.values(provider[field]||{})}function buildProviderOrder(providers,inputCapabilities){const normalizedProviders=providers.map(normalizeProviderDefinition);const providersById=new Map;const providerByCapability=new Map;for(const provider of normalizedProviders){if(providersById.has(provider.id))throw new Error(`Provider "${provider.id}" is duplicated.`);providersById.set(provider.id,provider);for(const capabilityId of providerCapabilityIds(provider,`provides`)){if(inputCapabilities.has(capabilityId))throw new Error(`Capability "${capabilityId}" is supplied both as a runtime input and by ${provider.id}.`);if(providerByCapability.has(capabilityId))throw new Error(`Capability "${capabilityId}" is provided by both ${providerByCapability.get(capabilityId).id} and ${provider.id}.`);providerByCapability.set(capabilityId,provider)}}for(const provider of normalizedProviders)for(const capabilityId of providerCapabilityIds(provider,`requires`)){if(!inputCapabilities.has(capabilityId)&&!providerByCapability.has(capabilityId))throw new Error(`Provider "${provider.id}" requires missing capability "${capabilityId}".`);if(providerByCapability.get(capabilityId)?.id===provider.id)throw new Error(`Provider "${provider.id}" cannot require capability "${capabilityId}" that it provides.`)}const visited=new Set;const visiting=new Set;const ordered=[];function visit(provider,lineage=[]){if(visited.has(provider.id))return;if(visiting.has(provider.id))throw new Error(`Provider capability cycle detected: ${[...lineage,provider.id].join(` -> `)}.`);visiting.add(provider.id);const dependencyProviders=[...providerCapabilityIds(provider,`requires`),...providerCapabilityIds(provider,`optional`)].map(capabilityId=>providerByCapability.get(capabilityId)||null).filter(Boolean).sort((left,right)=>left.id.localeCompare(right.id));for(const dependencyProvider of dependencyProviders)visit(dependencyProvider,[...lineage,provider.id]);visiting.delete(provider.id);visited.add(provider.id);ordered.push(provider)}for(const provider of[...normalizedProviders].sort((left,right)=>left.id.localeCompare(right.id)))visit(provider);return Object.freeze(ordered)}function resolveProviderDependencies(provider,capabilities){const dependencies={};for(const[localName,capabilityId]of Object.entries(provider.requires)){if(!capabilities.has(capabilityId))throw new Error(`Provider "${provider.id}" requires unavailable capability "${capabilityId}".`);dependencies[localName]=capabilities.get(capabilityId)}for(const[localName,capabilityId]of Object.entries(provider.optional))dependencies[localName]=capabilities.has(capabilityId)?capabilities.get(capabilityId):null;return Object.freeze(dependencies)}function normalizeProviderOutputs(provider,value){const expectedNames=Object.keys(provider.provides);if(expectedNames.length===0){if(value!=null&&(!isRecord$4(value)||Object.keys(value).length>0))throw new Error(`Provider "${provider.id}" declares no capabilities but setup() returned outputs.`);return Object.freeze({})}if(!isRecord$4(value))throw new Error(`Provider "${provider.id}" setup() must return its declared capability outputs.`);const actualNames=Object.keys(value).sort();const sortedExpectedNames=[...expectedNames].sort();if(actualNames.length!==sortedExpectedNames.length||actualNames.some((name,index)=>name!==sortedExpectedNames[index]))throw new Error(`Provider "${provider.id}" setup() outputs must be exactly: ${sortedExpectedNames.join(`, `)||`<none>`}.`);return Object.freeze({...value})}function createCapabilityRuntime({providers=[],inputs={},profile=``}={}){const capabilities=normalizeInputCapabilities(inputs);const providerOrder=buildProviderOrder(Array.isArray(providers)?providers:[],capabilities);const providerStates=new Map;const normalizedProfile=String(profile||``).trim();let lifecycleState=`created`;async function stopInitializedProviders(){const stopped=[];let firstError=null;for(const provider of[...providerOrder].reverse()){if(!providerStates.has(provider.id))continue;if(provider.shutdown){const state=providerStates.get(provider.id);try{await provider.shutdown(state.dependencies,Object.freeze({outputs:state.outputs,profile:normalizedProfile}))}catch(error){firstError||=error}}stopped.push(provider.id)}if(firstError)throw firstError;return Object.freeze(stopped)}async function start(){if(lifecycleState!==`created`)throw new Error(`Capability runtime cannot start from state "${lifecycleState}".`);lifecycleState=`starting`;try{for(const provider of providerOrder){const dependencies=resolveProviderDependencies(provider,capabilities);const outputs=normalizeProviderOutputs(provider,await provider.setup(dependencies,Object.freeze({profile:normalizedProfile})));for(const[localName,capabilityId]of Object.entries(provider.provides))capabilities.set(capabilityId,outputs[localName]);providerStates.set(provider.id,Object.freeze({dependencies,outputs}))}for(const provider of providerOrder)if(provider.boot){const state=providerStates.get(provider.id);await provider.boot(state.dependencies,Object.freeze({outputs:state.outputs,profile:normalizedProfile}))}lifecycleState=`started`;return api}catch(error){lifecycleState=`failed`;try{await stopInitializedProviders()}catch(shutdownError){throw new AggregateError([error,shutdownError],`Capability runtime startup failed and cleanup also failed.`,{cause:error})}throw error}}async function shutdown(){if(lifecycleState===`stopped`)return Object.freeze([]);if(lifecycleState!==`started`)throw new Error(`Capability runtime cannot shut down from state "${lifecycleState}".`);lifecycleState=`stopping`;try{return await stopInitializedProviders()}finally{lifecycleState=`stopped`}}function diagnostics(){return Object.freeze({profile:normalizedProfile,lifecycleState,providerOrder:Object.freeze(providerOrder.map(provider=>provider.id)),capabilityIds:Object.freeze([...capabilities.keys()].sort())})}const api=Object.freeze({start,shutdown,diagnostics});return api}function createPaginationQuerySchema({defaultPage=1,defaultPageSize=10,minPage=1,minPageSize=1,maxPageSize=100}={}){return createSchema({page:{type:`integer`,required:false,min:minPage,default:defaultPage},pageSize:{type:`integer`,required:false,min:minPageSize,max:maxPageSize,default:defaultPageSize}})}function rewriteEmbeddedTransportSchemaRefs(value,{rootRef=`#`,definitionRefByName={}}={}){if(Array.isArray(value))return value.map(entry=>rewriteEmbeddedTransportSchemaRefs(entry,{rootRef,definitionRefByName}));if(!value||typeof value!==`object`)return value;const rewritten={};for(const[key,entry]of Object.entries(value)){if(key===`$ref`&&typeof entry===`string`){if(entry===`#`){rewritten[key]=rootRef;continue}if(entry.startsWith(`#/definitions/`)){rewritten[key]=definitionRefByName[entry.slice(14)]||entry;continue}}rewritten[key]=rewriteEmbeddedTransportSchemaRefs(entry,{rootRef,definitionRefByName})}return rewritten}function createEmbeddableTransportSchemaDocument(schemaDocument={},rootDefinitionName=`TransportSchema`){const{$schema:_jsonSchemaDraft,definitions:sourceDefinitions={},...rootSchema}=schemaDocument||{};const rootRef=`#/definitions/${rootDefinitionName}`;const definitionRefByName={};const definitions={};for(const definitionName of Object.keys(sourceDefinitions))definitionRefByName[definitionName]=`#/definitions/${rootDefinitionName}__${definitionName}`;definitions[rootDefinitionName]=rewriteEmbeddedTransportSchemaRefs(rootSchema,{rootRef,definitionRefByName});for(const[definitionName,definitionSchema]of Object.entries(sourceDefinitions))definitions[`${rootDefinitionName}__${definitionName}`]=rewriteEmbeddedTransportSchemaRefs(definitionSchema,{rootRef,definitionRefByName});return{schema:{allOf:[{$ref:rootRef}]},definitions}}var fieldErrorsFieldDefinition=deepFreeze({type:`object`,values:{type:`string`,minLength:1}});var apiErrorDetailsSchema=createSchema({fieldErrors:{...fieldErrorsFieldDefinition,required:false}});var apiValidationErrorDetailsSchema=createSchema({fieldErrors:{...fieldErrorsFieldDefinition,required:true}});var apiErrorOutputValidator=deepFreeze({schema:createSchema({error:{type:`string`,required:true,minLength:1},code:{type:`string`,required:false,minLength:1},transactionOutcome:{type:`string`,required:false,enum:TRANSACTION_OUTCOMES},details:{type:`object`,required:false,schema:apiErrorDetailsSchema,additionalProperties:true},fieldErrors:{...fieldErrorsFieldDefinition,required:false}}),mode:`replace`});var apiValidationErrorOutputValidator=deepFreeze({schema:createSchema({error:{type:`string`,required:true,minLength:1},code:{type:`string`,required:false,minLength:1},transactionOutcome:{type:`string`,required:false,enum:TRANSACTION_OUTCOMES},fieldErrors:{...fieldErrorsFieldDefinition,required:true},details:{type:`object`,required:true,schema:apiValidationErrorDetailsSchema,additionalProperties:true}}),mode:`replace`});var apiErrorTransportSchema=apiErrorOutputValidator.schema.toJsonSchema({mode:apiErrorOutputValidator.mode});var apiValidationErrorTransportSchema=apiValidationErrorOutputValidator.schema.toJsonSchema({mode:apiValidationErrorOutputValidator.mode});var fastifyDefaultErrorTransportSchema={type:`object`,additionalProperties:true,required:[`statusCode`,`error`,`message`],properties:{statusCode:{type:`integer`,minimum:400,maximum:599},error:{type:`string`,minLength:1},message:{type:`string`,minLength:1},code:{type:`string`,minLength:1},transactionOutcome:{type:`string`,enum:TRANSACTION_OUTCOMES},details:{},fieldErrors:{type:`object`,additionalProperties:{type:`string`}}}};var STANDARD_ERROR_STATUS_CODES=[400,401,403,404,409,422,429,500,503];function createTransportResponseSchema(schema={}){return{transportSchema:schema}}var embeddedApiErrorTransportSchema=createEmbeddableTransportSchemaDocument(apiErrorTransportSchema,`ApiErrorOutput`);var embeddedApiValidationErrorTransportSchema=createEmbeddableTransportSchemaDocument(apiValidationErrorTransportSchema,`ApiValidationErrorOutput`);var sharedErrorTransportDefinitions={...embeddedApiValidationErrorTransportSchema.definitions,...embeddedApiErrorTransportSchema.definitions};function passthroughErrorResponses(successResponses){return successResponses}function withStandardErrorResponses(successResponses,{includeValidation400=false}={}){const responses={...successResponses};for(const statusCode of STANDARD_ERROR_STATUS_CODES){if(responses[statusCode])continue;if(statusCode===400&&includeValidation400){responses[statusCode]=createTransportResponseSchema({anyOf:[embeddedApiValidationErrorTransportSchema.schema,embeddedApiErrorTransportSchema.schema,fastifyDefaultErrorTransportSchema],definitions:sharedErrorTransportDefinitions});continue}responses[statusCode]=createTransportResponseSchema({anyOf:[embeddedApiErrorTransportSchema.schema,fastifyDefaultErrorTransportSchema],definitions:embeddedApiErrorTransportSchema.definitions})}return responses}function enumSchema(values){return{anyOf:values.map(value=>({const:value}))}}function asSchemaDefinition(value,label,defaultMode,{required=true}={}){if(value==null){if(!required)return null;throw new TypeError(`${label} is required.`)}try{return normalizeSingleSchemaDefinition(value,{context:label,defaultMode})}catch(error){throw new TypeError(error?.message||`${label} must be a schema definition object.`)}}function createCursorPagedListResponseSchema(itemSchema){return createCursorListValidator(itemSchema)}function createResource({record,create,replace,patch,list=null,listItem=null}={}){const normalizedRecordSchema=asSchemaDefinition(record,`record`,`replace`);const normalizedCreateSchema=asSchemaDefinition(create,`create`,`create`);const normalizedReplaceSchema=asSchemaDefinition(replace,`replace`,`replace`);const normalizedPatchSchema=asSchemaDefinition(patch,`patch`,`patch`);const normalizedListItemSchema=listItem?asSchemaDefinition(listItem,`listItem`,`replace`):normalizedRecordSchema;const normalizedListSchema=list?asSchemaDefinition(list,`list`,`replace`):createCursorPagedListResponseSchema(normalizedListItemSchema);return deepFreeze({record:normalizedRecordSchema,create:normalizedCreateSchema,replace:normalizedReplaceSchema,patch:normalizedPatchSchema,listItem:normalizedListItemSchema,list:normalizedListSchema})}function createCommand({input,output,idempotent=null,invalidates=[]}={}){const command={input:asSchemaDefinition(input,`input`,`patch`),output:asSchemaDefinition(output,`output`,`replace`),invalidates:Object.freeze(normalizeUniqueTextList(invalidates))};if(typeof idempotent===`boolean`)command.idempotent=idempotent;return deepFreeze(command)}function resolveIssueField(issue={}){const instancePath=normalizeText(issue.instancePath);if(instancePath){const segments=instancePath.replace(/^\//,``).split(`/`).map(entry=>normalizeText(entry)).filter(Boolean);if(segments.length>0)return segments[0]}const params=isRecord$4(issue.params)?issue.params:{};const missingProperty=normalizeText(params.missingProperty);if(missingProperty)return missingProperty;const requiredProperties=Array.isArray(params.requiredProperties)?params.requiredProperties:[];if(requiredProperties.length>0)return normalizeText(requiredProperties[0]);const additionalProperties=Array.isArray(params.additionalProperties)?params.additionalProperties:[];if(additionalProperties.length>0)return normalizeText(additionalProperties[0]);const additionalProperty=normalizeText(params.additionalProperty);if(additionalProperty)return additionalProperty;return``}function decodePointerSegment(value=``){return String(value).replace(/~1/g,`/`).replace(/~0/g,`~`)}function resolveSchemaPathSegments(schemaPath=``){const normalizedSchemaPath=normalizeText(schemaPath);if(!normalizedSchemaPath.startsWith(`#`))return[];const pointer=normalizedSchemaPath.slice(1);if(!pointer)return[];return pointer.replace(/^\//,``).split(`/`).map(segment=>decodePointerSegment(segment)).filter(segment=>segment.length>0)}function resolveFieldFromSchemaPath(schemaPath=``){const segments=resolveSchemaPathSegments(schemaPath);for(let index=0;index<segments.length-1;index+=1){if(segments[index]!==`properties`)continue;const field=normalizeText(segments[index+1]);if(field)return field}return``}function resolveSchemaNode(schema={},schemaPath=``){const source=isRecord$4(schema)?schema:{};const segments=resolveSchemaPathSegments(schemaPath);let current=source;for(const segment of segments){if(Array.isArray(current)){const index=Number.parseInt(segment,10);if(!Number.isInteger(index)||index<0||index>=current.length)return null;current=current[index];continue}if(!isRecord$4(current)||!Object.hasOwn(current,segment))return null;current=current[segment]}return current}function collectSchemaFieldCandidates(schema={}){if(!isRecord$4(schema))return[];const fields=[];const seenFields=new Set;const addField=value=>{const normalized=normalizeText(value);if(!normalized||seenFields.has(normalized))return;seenFields.add(normalized);fields.push(normalized)};const properties=isRecord$4(schema.properties)?schema.properties:{};for(const field of Object.keys(properties))addField(field);const required=Array.isArray(schema.required)?schema.required:[];for(const field of required)addField(field);const addFromSchema=entry=>{if(!isRecord$4(entry))return;const entryProperties=isRecord$4(entry.properties)?entry.properties:{};for(const field of Object.keys(entryProperties))addField(field);const entryRequired=Array.isArray(entry.required)?entry.required:[];for(const field of entryRequired)addField(field)};for(const keyword of[`anyOf`,`oneOf`,`allOf`]){const branches=Array.isArray(schema[keyword])?schema[keyword]:[];for(const branch of branches)addFromSchema(branch)}for(const keyword of[`if`,`then`,`else`])addFromSchema(schema[keyword]);return fields}function resolveConditionalIssueField(issue={},schema={}){const params=isRecord$4(issue.params)?issue.params:{};const failingKeyword=normalizeText(params.failingKeyword).toLowerCase();if(failingKeyword!==`then`&&failingKeyword!==`else`)return``;const scopeSchema=resolveSchemaNode(schema,issue.schemaPath)||schema;if(!isRecord$4(scopeSchema))return``;const conditionalSchema=scopeSchema[failingKeyword];return collectSchemaFieldCandidates(conditionalSchema)[0]||``}function resolveFallbackIssueField(issue={},schema={}){const fromSchemaPath=resolveFieldFromSchemaPath(issue.schemaPath);if(fromSchemaPath)return fromSchemaPath;if(normalizeText(issue.keyword).toLowerCase()===`if`)return resolveConditionalIssueField(issue,schema);return``}function shouldSuppressRootUnionGlobalIssue(issue={},fieldErrors={}){if(Object.keys(fieldErrors).length<1)return false;const keyword=normalizeText(issue.keyword).toLowerCase();if(keyword!==`anyof`&&keyword!==`oneof`&&keyword!==`allof`)return false;const instancePath=normalizeText(issue.instancePath);const schemaPath=normalizeText(issue.schemaPath);return!instancePath&&(schemaPath===`#`||schemaPath===`#/`)}function resolveMissingRequiredFields(issue={}){const params=isRecord$4(issue.params)?issue.params:{};return(Array.isArray(params.requiredProperties)?params.requiredProperties:[]).map(entry=>normalizeText(entry)).filter(Boolean)}function resolveSchemaMessages(schema={}){const messages=(isRecord$4(schema)?schema:{}).messages;return isRecord$4(messages)?messages:{}}function resolveFieldSchema(schema={},field=``){const source=isRecord$4(schema)?schema:{};const fieldSchema=(isRecord$4(source.properties)?source.properties:{})[field];return isRecord$4(fieldSchema)?fieldSchema:null}function resolveIssueMessageFromSchema(field,issue,schema={}){const keyword=normalizeText(issue?.keyword);if(field){const fieldMessages=resolveSchemaMessages(resolveFieldSchema(schema,field));const fieldKeywordMessage=normalizeText(fieldMessages[keyword]);if(fieldKeywordMessage)return fieldKeywordMessage;const fieldDefaultMessage=normalizeText(fieldMessages.default);if(fieldDefaultMessage)return fieldDefaultMessage}const schemaMessages=resolveSchemaMessages(schema);const schemaKeywordMessage=normalizeText(schemaMessages[keyword]);if(schemaKeywordMessage)return schemaKeywordMessage;const schemaDefaultMessage=normalizeText(schemaMessages.default);if(schemaDefaultMessage)return schemaDefaultMessage;const issueMessage=normalizeText(issue?.message);if(issueMessage)return issueMessage;return`Invalid value.`}function mapOperationIssues(issues=[],schema={}){const source=Array.isArray(issues)?issues:[];const fieldErrors={};const globalErrors=[];for(const issue of source){const missingRequiredFields=resolveMissingRequiredFields(issue);if(missingRequiredFields.length>0){for(const field of missingRequiredFields){if(Object.hasOwn(fieldErrors,field))continue;fieldErrors[field]=resolveIssueMessageFromSchema(field,issue,schema)}continue}const field=resolveIssueField(issue)||resolveFallbackIssueField(issue,schema);if(field){if(!Object.hasOwn(fieldErrors,field))fieldErrors[field]=resolveIssueMessageFromSchema(field,issue,schema);continue}if(shouldSuppressRootUnionGlobalIssue(issue,fieldErrors))continue;globalErrors.push(resolveIssueMessageFromSchema(``,issue,schema))}return{fieldErrors,globalErrors}}function resolveOperationSection(operation={},section=`body`){if(!operation||typeof operation!==`object`||Array.isArray(operation))return null;return operation[section]==null?null:operation[section]}function buildValidationSuccessResult(value){return{ok:true,value,normalized:value,fieldErrors:{},globalErrors:[],issues:[]}}function isFieldValidationError(error){return Boolean(error?.fieldErrors&&typeof error.fieldErrors===`object`)}function buildValidationFailureResult(error,normalized){return{ok:false,value:null,normalized,fieldErrors:error.fieldErrors,globalErrors:[],issues:[]}}function validateOperationSection({operation={},section=`body`,value,context={}}={}){const sectionDefinition=resolveOperationSection(operation,section);if(!sectionDefinition)return buildValidationSuccessResult(value);try{return buildValidationSuccessResult(validateSchemaPayload(sectionDefinition,value,{phase:`input`,context:`operation section "${section}"`}))}catch(error){if(!isFieldValidationError(error))throw error;return buildValidationFailureResult(error,value)}}function validateOperationInput({operation={},input={},context={}}={}){const source=input&&typeof input===`object`&&!Array.isArray(input)?input:{};const sectionResults={params:validateOperationSection({operation,section:`params`,value:source.params,context}),query:validateOperationSection({operation,section:`query`,value:source.query,context}),body:validateOperationSection({operation,section:`body`,value:source.body,context})};const fieldErrors={...sectionResults.params.fieldErrors,...sectionResults.query.fieldErrors,...sectionResults.body.fieldErrors};const globalErrors=[...sectionResults.params.globalErrors,...sectionResults.query.globalErrors,...sectionResults.body.globalErrors];return{ok:sectionResults.params.ok&&sectionResults.query.ok&&sectionResults.body.ok,value:{params:sectionResults.params.value,query:sectionResults.query.value,body:sectionResults.body.value},normalized:{params:sectionResults.params.normalized,query:sectionResults.query.normalized,body:sectionResults.body.normalized},fieldErrors,globalErrors,issues:[...sectionResults.params.issues,...sectionResults.query.issues,...sectionResults.body.issues]}}var JSON_API_RESULT_MARKER=`__jskitJsonApiResult`;var JSON_API_RESULT_KINDS=Object.freeze([`data`,`document`,`meta`]);function normalizeJsonApiResultKind(kind=``){const normalizedKind=String(kind||``).trim().toLowerCase();if(!JSON_API_RESULT_KINDS.includes(normalizedKind))throw new TypeError(`Unsupported JSON:API result kind: ${normalizedKind||`<empty>`}.`);return normalizedKind}function isJsonApiResult(value){return Boolean(value)&&typeof value===`object`&&!Array.isArray(value)&&value[`__jskitJsonApiResult`]===true&&JSON_API_RESULT_KINDS.includes(String(value.kind||``).trim().toLowerCase())}function isJsonApiResultKind(value,kind){return isJsonApiResult(value)&&value.kind===normalizeJsonApiResultKind(kind)}function isJsonApiDataResult(value){return isJsonApiResultKind(value,`data`)}function isJsonApiDocumentResult(value){return isJsonApiResultKind(value,`document`)}function isJsonApiMetaResult(value){return isJsonApiResultKind(value,`meta`)}function unwrapJsonApiResult(value){if(!isJsonApiResult(value))return null;return value}var JSON_API_ID_SCHEMA=Object.freeze({anyOf:[{type:`string`,minLength:1},{type:`number`}]});var JSON_API_LINK_VALUE_SCHEMA=Object.freeze({anyOf:[{type:`string`,minLength:1},{type:`object`,additionalProperties:true}]});var JSON_API_LINKS_SCHEMA=Object.freeze({type:`object`,additionalProperties:JSON_API_LINK_VALUE_SCHEMA});var JSON_API_META_SCHEMA=Object.freeze({type:`object`,additionalProperties:true});var JSON_API_RESOURCE_IDENTIFIER_SCHEMA=Object.freeze({type:`object`,additionalProperties:false,required:[`type`,`id`],properties:{type:{type:`string`,minLength:1},id:JSON_API_ID_SCHEMA}});var JSON_API_RELATIONSHIP_OBJECT_SCHEMA=Object.freeze({type:`object`,additionalProperties:false,required:[`data`],properties:{data:{anyOf:[JSON_API_RESOURCE_IDENTIFIER_SCHEMA,{type:`array`,items:JSON_API_RESOURCE_IDENTIFIER_SCHEMA},{type:`null`}]}}});var JSON_API_INCLUDED_RESOURCE_SCHEMA=Object.freeze({type:`object`,additionalProperties:false,required:[`type`,`id`],properties:{type:{type:`string`,minLength:1},id:JSON_API_ID_SCHEMA,attributes:{type:`object`,additionalProperties:true},relationships:{type:`object`,additionalProperties:JSON_API_RELATIONSHIP_OBJECT_SCHEMA},links:JSON_API_LINKS_SCHEMA,meta:JSON_API_META_SCHEMA}});var JSON_API_ERROR_OBJECT_SCHEMA=Object.freeze({type:`object`,additionalProperties:false,properties:{status:{type:`string`,minLength:1},code:{type:`string`,minLength:1},title:{type:`string`,minLength:1},detail:{type:`string`,minLength:1},source:{type:`object`,additionalProperties:true},links:JSON_API_LINKS_SCHEMA,meta:JSON_API_META_SCHEMA}});var JSON_API_ERROR_DOCUMENT_SCHEMA=Object.freeze({type:`object`,additionalProperties:false,required:[`errors`],properties:{errors:{type:`array`,minItems:1,items:JSON_API_ERROR_OBJECT_SCHEMA},links:JSON_API_LINKS_SCHEMA,meta:JSON_API_META_SCHEMA}});function isRecord(value){return Boolean(value)&&typeof value===`object`&&!Array.isArray(value)}function createJsonApiTransportError(statusCode,message,code){const error=new Error(String(message||`JSON:API transport error.`));error.status=Number(statusCode)||500;error.statusCode=error.status;error.code=String(code||`jsonapi_transport_error`).trim()||`jsonapi_transport_error`;return error}function resolveRouteType(type=``){const normalizedType=String(type||``).trim();if(!normalizedType)throw new TypeError(`JSON:API resource transport requires a non-empty type.`);return normalizedType}function resolveRouteTypes(value={}){const resolvedTypes=resolveJsonApiTransportTypes(value,{context:`JSON:API resource transport`});return Object.freeze({requestType:resolvedTypes.requestType?resolveRouteType(resolvedTypes.requestType):``,responseType:resolvedTypes.responseType?resolveRouteType(resolvedTypes.responseType):``})}function resolveEmbeddedAttributesTransportSchema(definition,{context=`JSON:API resource`,defaultMode=`replace`,removeId=false,removeKeys=[],allowSparseFields=false}={}){const transportSchema=resolveSchemaTransportSchemaDefinition(definition,{context,defaultMode});if(!transportSchema||typeof transportSchema!==`object`||Array.isArray(transportSchema))throw new TypeError(`${context} transport schema must resolve to an object schema.`);const sourceSchema=normalizeObject(transportSchema);const nextProperties={...normalizeObject(sourceSchema.properties)};const excludedKeys=new Set(normalizeArray(removeKeys).map(entry=>String(entry||``).trim()).filter(Boolean));if(removeId)excludedKeys.add(`id`);for(const key of excludedKeys)delete nextProperties[key];const schemaFieldDefinitions=(()=>{const fieldDefinitions=definition?.schema?.getFieldDefinitions?.();return isRecord(fieldDefinitions)?fieldDefinitions:{}})();const required=allowSparseFields!==true&&Array.isArray(sourceSchema.required)?sourceSchema.required.filter(entry=>{const normalizedEntry=String(entry||``).trim();if(!normalizedEntry||excludedKeys.has(normalizedEntry))return false;return normalizeObject(schemaFieldDefinitions[normalizedEntry]).nullable!==true}):[];const attributeSchema={...sourceSchema,type:`object`,properties:nextProperties};if(required.length>0)attributeSchema.required=required;else delete attributeSchema.required;return createEmbeddableTransportSchemaDocument(attributeSchema,`${normalizeText(context,{fallback:`JsonApiAttributes`}).replace(/[^a-z0-9]+/gi,`_`)}`)}function normalizeRelationshipSchemaEntries(entries=[]){const normalizedEntries=[];for(const entry of normalizeArray(entries)){const source=normalizeObject(entry);const relationshipName=normalizeText(source.relationshipName||source.name);const relationshipType=normalizeText(source.relationshipType||source.type);const attributeKey=normalizeText(source.attributeKey||source.fieldKey);if(!relationshipName)continue;normalizedEntries.push(Object.freeze({relationshipName,relationshipType,attributeKey,many:source.many===true,required:source.required===true,nullable:source.nullable===true}))}return Object.freeze(normalizedEntries)}function createJsonApiRelationshipDataSchema(relationshipType=``,{many=false,nullable=false}={}){const normalizedRelationshipType=normalizeText(relationshipType);const resourceIdentifierSchema=normalizedRelationshipType?{type:`object`,additionalProperties:false,required:[`type`,`id`],properties:{type:{const:normalizedRelationshipType},id:JSON_API_ID_SCHEMA}}:JSON_API_RESOURCE_IDENTIFIER_SCHEMA;const linkageSchema=many?{type:`array`,items:resourceIdentifierSchema}:resourceIdentifierSchema;return{anyOf:nullable?[linkageSchema,{type:`null`}]:[linkageSchema]}}function createJsonApiRelationshipsTransportSchema(entries=[],{includeRequired=false}={}){const relationshipEntries=normalizeRelationshipSchemaEntries(entries);if(relationshipEntries.length<1)return null;const properties={};const required=[];for(const entry of relationshipEntries){properties[entry.relationshipName]={type:`object`,additionalProperties:false,required:[`data`],properties:{data:createJsonApiRelationshipDataSchema(entry.relationshipType,{many:entry.many,nullable:entry.nullable})}};if(includeRequired&&entry.required)required.push(entry.relationshipName)}const schema={type:`object`,additionalProperties:false,properties};if(required.length>0)schema.required=required;return Object.freeze({schema,entries:relationshipEntries})}function createJsonApiResourceObjectTransportSchema({type=``,attributes,requireId=true,includeLinks=false,includeMeta=false,excludeAttributeKeys=[],relationshipEntries=[],relationshipMembersRequired=false,allowSparseFields=false}={}){const normalizedType=resolveRouteType(type);const relationshipsTransport=createJsonApiRelationshipsTransportSchema(relationshipEntries,{includeRequired:relationshipMembersRequired});const relationFieldKeys=relationshipsTransport?relationshipsTransport.entries.map(entry=>entry.attributeKey).filter(Boolean):[];const embeddedAttributes=resolveEmbeddedAttributesTransportSchema(attributes,{context:`${normalizedType} resource attributes`,defaultMode:`replace`,removeId:true,removeKeys:[...normalizeArray(excludeAttributeKeys),...relationFieldKeys],allowSparseFields});const properties={type:{const:normalizedType},attributes:embeddedAttributes.schema};const required=allowSparseFields===true?[`type`]:[`type`,`attributes`];if(requireId){properties.id=JSON_API_ID_SCHEMA;required.push(`id`)}if(relationshipsTransport)properties.relationships=relationshipsTransport.schema;if(includeLinks)properties.links=JSON_API_LINKS_SCHEMA;if(includeMeta)properties.meta=JSON_API_META_SCHEMA;return{schema:{type:`object`,additionalProperties:false,required,properties},definitions:embeddedAttributes.definitions,hasRelationships:Boolean(relationshipsTransport)}}function createJsonApiResourceRequestBodyTransportSchema({type=``,attributes,requireId=false,excludeAttributeKeys=[],relationshipEntries=[]}={}){const resourceTransport=createJsonApiResourceObjectTransportSchema({type,attributes,requireId,excludeAttributeKeys,relationshipEntries,relationshipMembersRequired:true});const embeddedResource=createEmbeddableTransportSchemaDocument({...resourceTransport.schema,definitions:resourceTransport.definitions},`${resolveRouteType(type)}RequestResource`);return{type:`object`,additionalProperties:false,required:[`data`],properties:{data:embeddedResource.schema},definitions:embeddedResource.definitions}}function createJsonApiMetaSuccessTransportSchema({meta}={}){const embeddedMeta=resolveEmbeddedAttributesTransportSchema(meta,{context:`JSON:API success meta`,defaultMode:`replace`,removeId:false});return{type:`object`,additionalProperties:false,required:[`meta`],properties:{meta:embeddedMeta.schema},definitions:embeddedMeta.definitions}}function createJsonApiResourceSuccessTransportSchema({type=``,attributes,kind=`record`,includeLinks=false,includeMeta=false,includeIncluded=false,allowSparseFields=false,excludeAttributeKeys=[],relationshipEntries=[]}={}){const normalizedKind=String(kind||`record`).trim().toLowerCase();if(![`record`,`nullable-record`,`collection`,`meta`].includes(normalizedKind))throw new TypeError(`Unsupported JSON:API success schema kind: ${normalizedKind||`<empty>`}.`);if(normalizedKind===`meta`)return createJsonApiMetaSuccessTransportSchema({meta:attributes});const resourceTransport=createJsonApiResourceObjectTransportSchema({type,attributes,requireId:true,allowSparseFields,excludeAttributeKeys,relationshipEntries});const embeddedResource=createEmbeddableTransportSchemaDocument({...resourceTransport.schema,definitions:resourceTransport.definitions},`${resolveRouteType(type)}SuccessResource`);const documentProperties={};const documentDefinitions={...resourceTransport.definitions,...embeddedResource.definitions};if(normalizedKind===`collection`)documentProperties.data={type:`array`,items:embeddedResource.schema};else if(normalizedKind===`nullable-record`)documentProperties.data={anyOf:[{type:`null`},embeddedResource.schema]};else documentProperties.data=embeddedResource.schema;if(includeIncluded||resourceTransport.hasRelationships)documentProperties.included={type:`array`,items:JSON_API_INCLUDED_RESOURCE_SCHEMA};if(includeLinks)documentProperties.links=JSON_API_LINKS_SCHEMA;if(includeMeta)documentProperties.meta=JSON_API_META_SCHEMA;return{type:`object`,additionalProperties:false,required:[`data`],properties:documentProperties,definitions:documentDefinitions}}function withJsonApiErrorResponses(successResponses,{includeValidation400=false}={}){const responses={...normalizeObject(successResponses)};for(const statusCode of STANDARD_ERROR_STATUS_CODES){if(responses[statusCode])continue;if(statusCode===400&&!includeValidation400)continue;responses[statusCode]=createTransportResponseSchema(JSON_API_ERROR_DOCUMENT_SCHEMA)}return responses}function defaultRecordTypeResolver(type){return function resolveRecordType(){return type}}function defaultRecordIdResolver(record={}){if(!isRecord(record)||record.id==null||String(record.id).trim()===``)throw createJsonApiTransportError(500,`JSON:API resource response requires record.id.`,`jsonapi_record_id_missing`);return record.id}function defaultRecordAttributesResolver(record={}){if(!isRecord(record))return{};const attributes={...record};delete attributes.id;return attributes}function defaultCollectionItemsResolver(payload){if(Array.isArray(payload))return payload;return Array.isArray(payload?.items)?payload.items:[]}function defaultCollectionMetaResolver(payload){const nextCursor=String(payload?.nextCursor||``).trim();if(!nextCursor)return;return{page:{nextCursor}}}function assertJsonApiSuccessResult(payload){const result=unwrapJsonApiResult(payload);if(!result)throw createJsonApiTransportError(500,`JSON:API route success payload must be returned with an explicit JSON:API result wrapper.`,`jsonapi_success_result_missing`);return result}function createJsonApiResourceRouteTransport({type=``,requestType=``,responseType=``,query=null,allowBodyId=false,successKind=`record`,pointerPrefix=`/data/attributes`,mapRequestRelationships=null,getRecordType=null,getRecordId=null,getRecordAttributes=null,getRecordRelationships=null,getRecordLinks=null,getRecordMeta=null,getIncluded=null,getDocumentLinks=null,getDocumentMeta=null,getCollectionItems=null}={}){const resolvedTypes=resolveRouteTypes({type,requestType,responseType});const normalizedRequestType=resolvedTypes.requestType;const normalizedResponseType=resolvedTypes.responseType;const normalizedSuccessKind=String(successKind||`record`).trim().toLowerCase();const resolveRecordType=typeof getRecordType===`function`?getRecordType:defaultRecordTypeResolver(normalizedResponseType);const resolveRecordId=typeof getRecordId===`function`?getRecordId:defaultRecordIdResolver;const resolveRecordAttributes=typeof getRecordAttributes===`function`?getRecordAttributes:defaultRecordAttributesResolver;const resolveCollectionItems=typeof getCollectionItems===`function`?getCollectionItems:defaultCollectionItemsResolver;const resolveDocumentMeta=typeof getDocumentMeta===`function`?getDocumentMeta:defaultCollectionMetaResolver;function buildResourceObject(record,context){if(!isRecord(record))throw createJsonApiTransportError(500,`JSON:API resource response requires an object record.`,`jsonapi_record_invalid`);const resourceOptions={type:resolveRecordType(record,context),id:resolveRecordId(record,context),attributes:resolveRecordAttributes(record,context)};if(typeof getRecordRelationships===`function`){const relationships=getRecordRelationships(record,context);if(relationships!==void 0)resourceOptions.relationships=relationships}if(typeof getRecordLinks===`function`){const links=getRecordLinks(record,context);if(links!==void 0)resourceOptions.links=links}if(typeof getRecordMeta===`function`){const meta=getRecordMeta(record,context);if(meta!==void 0)resourceOptions.meta=meta}return createJsonApiResourceObject(resourceOptions)}return Object.freeze({kind:`jsonapi-resource`,contentType:JSON_API_CONTENT_TYPE,request:{body(payload){if(!normalizedRequestType)throw createJsonApiTransportError(500,`JSON:API request transport requires requestType for body parsing.`,`jsonapi_request_type_missing`);const document=normalizeJsonApiDocument(payload);if(document.kind!==`resource`||document.data==null)throw createJsonApiTransportError(400,`JSON:API request body must contain a resource document.`,`jsonapi_request_body_invalid`);if(String(document.data.type||``).trim()!==normalizedRequestType)throw createJsonApiTransportError(409,`JSON:API resource type must be ${normalizedRequestType}.`,`jsonapi_request_type_mismatch`);const nextBody={...document.data.attributes||{}};if(allowBodyId&&document.data.id!=null&&String(document.data.id).trim())nextBody.id=document.data.id;if(typeof mapRequestRelationships===`function`)Object.assign(nextBody,mapRequestRelationships(document.data.relationships||{},{payload,document})||{});return nextBody},query(payload){if(!query)return payload;return decodeJsonApiResourceQueryObject(payload,{responseType:normalizedResponseType})}},response(payload,context={}){if(normalizedSuccessKind===`no-content`||Number(context?.statusCode||200)===204)return;const result=assertJsonApiSuccessResult(payload);if(isJsonApiDocumentResult(result)){const document=normalizeJsonApiDocument(result.value);if(document.kind===`unknown`)throw createJsonApiTransportError(500,`JSON:API document result must contain a valid JSON:API document.`,`jsonapi_document_result_invalid`);if(normalizedSuccessKind===`collection`&&document.kind!==`collection`)throw createJsonApiTransportError(500,`JSON:API collection route requires a collection document result.`,`jsonapi_document_result_kind_mismatch`);if((normalizedSuccessKind===`record`||normalizedSuccessKind===`nullable-record`)&&document.kind!==`resource`)throw createJsonApiTransportError(500,`JSON:API record route requires a resource document result.`,`jsonapi_document_result_kind_mismatch`);if(normalizedSuccessKind===`meta`&&document.kind!==`meta`)throw createJsonApiTransportError(500,`JSON:API meta route requires a meta-only document result.`,`jsonapi_document_result_kind_mismatch`);return result.value}if(normalizedSuccessKind===`meta`){if(isJsonApiMetaResult(result))return createJsonApiDocument({meta:result.value});throw createJsonApiTransportError(500,`JSON:API meta route requires a meta result.`,`jsonapi_meta_result_missing`)}if(!isJsonApiDataResult(result))throw createJsonApiTransportError(500,`JSON:API resource route requires a data or document result.`,`jsonapi_success_result_kind_invalid`);const sourcePayload=result.value;if(normalizedSuccessKind===`collection`){const documentOptions={data:normalizeArray(resolveCollectionItems(sourcePayload,context)).map(entry=>buildResourceObject(entry,context))};if(typeof getIncluded===`function`){const included=normalizeArray(getIncluded(sourcePayload,context));if(included.length>0)documentOptions.included=included}const links=typeof getDocumentLinks===`function`?getDocumentLinks(sourcePayload,context):void 0;if(links!==void 0)documentOptions.links=links;const meta=resolveDocumentMeta(sourcePayload,context);if(meta!==void 0)documentOptions.meta=meta;return createJsonApiDocument(documentOptions)}if(sourcePayload==null){if(normalizedSuccessKind===`nullable-record`)return createJsonApiDocument({data:null});throw createJsonApiTransportError(500,`JSON:API resource response requires a record payload.`,`jsonapi_record_missing`)}const documentOptions={data:buildResourceObject(sourcePayload,context)};if(typeof getIncluded===`function`){const included=normalizeArray(getIncluded(sourcePayload,context));if(included.length>0)documentOptions.included=included}if(typeof getDocumentLinks===`function`){const links=getDocumentLinks(sourcePayload,context);if(links!==void 0)documentOptions.links=links}if(typeof getDocumentMeta===`function`){const meta=getDocumentMeta(sourcePayload,context);if(meta!==void 0)documentOptions.meta=meta}return createJsonApiDocument(documentOptions)},error(error,{statusCode=500,code=``,message=error?.message,exposeDetails=true}={}){const fieldErrors=!exposeDetails?{}:isRecord(error?.fieldErrors)?error.fieldErrors:isRecord(error?.details?.fieldErrors)?error.details.fieldErrors:{};return createJsonApiErrorDocumentFromFailure({statusCode,code,message,transactionOutcome:error?.transactionOutcome,fieldErrors,validationIssues:exposeDetails&&Array.isArray(error?.validation)?error.validation:[],validationContext:String(error?.validationContext||``).trim(),pointerPrefix})}})}function createJsonApiResourceRouteContract({type=``,requestType=``,responseType=``,body=null,query=null,output=null,outputKind=`record`,successStatus=200,includeValidation400=false,allowSparseFields=false,allowBodyId=false,pointerPrefix=`/data/attributes`,bodyAttributeExcludeKeys=[],outputAttributeExcludeKeys=[],bodyRelationshipEntries=[],outputRelationshipEntries=[],getRecordType=null,getRecordId=null,getRecordAttributes=null,getRecordRelationships=null,getRecordLinks=null,getRecordMeta=null,getIncluded=null,getDocumentLinks=null,getDocumentMeta=null,getCollectionItems=null,mapRequestRelationships=null}={}){const resolvedTypes=resolveRouteTypes({type,requestType,responseType});const normalizedRequestType=resolvedTypes.requestType;const normalizedResponseType=resolvedTypes.responseType;const normalizedOutputKind=String(outputKind||`record`).trim().toLowerCase();const statusCode=Number(successStatus);if(!Number.isInteger(statusCode)||statusCode<200||statusCode>299)throw new TypeError(`JSON:API resource route contract requires a 2xx successStatus.`);const contract={transport:createJsonApiResourceRouteTransport({requestType:normalizedRequestType,responseType:normalizedResponseType,query,allowBodyId,successKind:normalizedOutputKind,pointerPrefix,getRecordType,getRecordId,getRecordAttributes,getRecordRelationships,getRecordLinks,getRecordMeta,getIncluded,getDocumentLinks,getDocumentMeta,getCollectionItems,mapRequestRelationships})};const fastifySchema={};if(body){contract.body=body;fastifySchema.body=createJsonApiResourceRequestBodyTransportSchema({type:normalizedRequestType,attributes:body,requireId:allowBodyId,excludeAttributeKeys:bodyAttributeExcludeKeys,relationshipEntries:bodyRelationshipEntries})}if(query){contract.query=query;fastifySchema.querystring=createJsonApiResourceQueryTransportSchema({query,responseType:normalizedResponseType})}if(Object.keys(fastifySchema).length>0)contract.advanced={fastifySchema};const successResponses={};if(normalizedOutputKind!==`no-content`){if(!output)throw new TypeError(`JSON:API resource route contract for ${normalizedResponseType} requires output schema.`);successResponses[statusCode]=createTransportResponseSchema(createJsonApiResourceSuccessTransportSchema({type:normalizedResponseType,attributes:output,kind:normalizedOutputKind,includeLinks:typeof getDocumentLinks===`function`,includeMeta:typeof getDocumentMeta===`function`||normalizedOutputKind===`collection`,includeIncluded:typeof getIncluded===`function`,allowSparseFields,excludeAttributeKeys:outputAttributeExcludeKeys,relationshipEntries:outputRelationshipEntries}))}contract.responses=withJsonApiErrorResponses(successResponses,{includeValidation400});return Object.freeze(contract)}var HTTP_VALIDATORS_API=Object.freeze({createPaginationQuerySchema,fieldErrorsFieldDefinition,apiErrorDetailsSchema,apiValidationErrorDetailsSchema,apiErrorOutputValidator,apiValidationErrorOutputValidator,apiErrorTransportSchema,apiValidationErrorTransportSchema,fastifyDefaultErrorTransportSchema,STANDARD_ERROR_STATUS_CODES,createTransportResponseSchema,passthroughErrorResponses,withStandardErrorResponses,enumSchema,createCursorPagedListResponseSchema,createResource,createCommand,resolveSchemaMessages,resolveFieldSchema,resolveIssueField,resolveMissingRequiredFields,resolveIssueMessageFromSchema,mapOperationIssues,validateOperationSection,validateOperationInput,JSON_API_CONTENT_TYPE,createJsonApiDocument,createJsonApiErrorDocumentFromFailure,createJsonApiErrorObject,createJsonApiResourceObject,isJsonApiCollectionDocument,isJsonApiContentType,isJsonApiErrorDocument,isJsonApiResourceDocument,isJsonContentType,normalizeJsonApiDocument,normalizeJsonApiResourceObject,resolveJsonApiTransportTypes,simplifyJsonApiDocument,JSON_API_QUERY_PAGE_CURSOR_KEY,JSON_API_QUERY_PAGE_LIMIT_KEY,JSON_API_QUERY_INCLUDE_KEY,JSON_API_QUERY_SORT_KEY,mapPlainQueryKeyToTransportKey,mapTransportQueryKeyToPlainKey,encodeJsonApiResourceQueryObject,decodeJsonApiResourceQueryObject,createJsonApiResourceQueryTransportSchema,JSON_API_ERROR_DOCUMENT_SCHEMA,createJsonApiResourceObjectTransportSchema,createJsonApiResourceRequestBodyTransportSchema,createJsonApiResourceSuccessTransportSchema,withJsonApiErrorResponses,createJsonApiResourceRouteTransport,createJsonApiResourceRouteContract});var HttpValidatorsClientProvider=defineProvider({id:`validators.http.client`,provides:{validators:`validators.http.client`},setup(){return{validators:HTTP_VALIDATORS_API}}});var clientRuntime_exports=__exportAll({DEFAULT_RETRYABLE_CSRF_ERROR_CODES:()=>DEFAULT_RETRYABLE_CSRF_ERROR_CODES,createHttpClient:()=>createHttpClient,createHttpError:()=>createHttpError,createNetworkError:()=>createNetworkError,hasHeader:()=>hasHeader,normalizeHeaderName:()=>normalizeHeaderName,setHeaderIfMissing:()=>setHeaderIfMissing,shouldRetryForCsrfFailure:()=>shouldRetryForCsrfFailure});var HTTP_CLIENT_RUNTIME_CLIENT_API=Object.freeze({...clientRuntime_exports});var HttpClientRuntimeClientProvider=defineProvider({id:`runtime.http-client.client`,provides:{httpClient:`runtime.http-client.client`},setup(){return{httpClient:HTTP_CLIENT_RUNTIME_CLIENT_API}}});var client_exports=__exportAll({DEFAULT_RETRYABLE_CSRF_ERROR_CODES:()=>DEFAULT_RETRYABLE_CSRF_ERROR_CODES,HttpClientRuntimeClientProvider:()=>HttpClientRuntimeClientProvider,HttpValidatorsClientProvider:()=>HttpValidatorsClientProvider,createHttpClient:()=>createHttpClient,createHttpError:()=>createHttpError,createNetworkError:()=>createNetworkError,createTransientRetryHttpClient:()=>createTransientRetryHttpClient,createValidationFailure:()=>createValidationFailure,hasHeader:()=>hasHeader,normalizeFieldErrors:()=>normalizeFieldErrors,normalizeHeaderName:()=>normalizeHeaderName,resolveFieldErrors:()=>resolveFieldErrors,setHeaderIfMissing:()=>setHeaderIfMissing,shouldRetryForCsrfFailure:()=>shouldRetryForCsrfFailure});function normalizeOptions(value=null){return value&&typeof value===`object`&&!Array.isArray(value)?value:{}}function createHttpWebClient(options={}){const source=normalizeOptions(options);const sourceCsrf=normalizeOptions(source.csrf);return createTransientRetryHttpClient({...source,credentials:source.credentials??`include`,csrf:{sessionPath:`/api/session`,...sourceCsrf}})}var httpWebClient=createHttpWebClient();function configureHttpWebClient(optionsOrClient={}){const source=normalizeOptions(optionsOrClient);httpWebClient=typeof source.request===`function`?source:createHttpWebClient(source);return httpWebClient}function getHttpWebClient(){return httpWebClient}function firstRouteParam(value){const rawValue=Array.isArray(value)?value[0]:value;return String(rawValue||``).trim()}var VIBE64_PROJECT_APP_PATH_PREFIX=`/app/project`;function normalizedProjectRouteSuffix(suffix=``){const normalized=String(suffix||``).trim();if(!normalized)return``;return normalized.startsWith(`/`)?normalized:`/${normalized}`}function normalizeProjectRoutePath(path=``){const normalized=String(path||``).trim();if(!normalized||normalized===`/`)return`/`;const compacted=(normalized.startsWith(`/`)?normalized:`/${normalized}`).replace(/\/{2,}/gu,`/`);if(compacted===`/`)return`/`;return compacted.replace(/\/+$/u,``)||`/`}function projectAppPath(slug=``,suffix=``){const projectSlug=String(slug||``).trim();if(!projectSlug)return`/app`;return`${VIBE64_PROJECT_APP_PATH_PREFIX}/${encodeURIComponent(projectSlug)}${normalizedProjectRouteSuffix(suffix)}`}function projectSlugFromPathname(pathname=``){const match=/^\/app\/project\/([^/?#]+)/u.exec(String(pathname||``));return decodeURIComponent(match?.[1]||``).trim()||``}function currentProjectSlugFromLocation(browserWindow=globalThis.window){return projectSlugFromPathname(browserWindow?.location?.pathname||``)}function projectSlugFromRoute(route={}){return firstRouteParam(route?.params?.slug)||currentProjectSlugFromLocation()}function projectScopeValue(slug=currentProjectSlugFromLocation()){return String(slug||``).trim()||`unscoped`}function vibe64ProjectQueryScope(slug=currentProjectSlugFromLocation()){return[`project`,projectScopeValue(slug)]}function vibe64ProjectScopedStorageKey(baseKey=``,slug=currentProjectSlugFromLocation()){const normalizedBaseKey=String(baseKey||``).trim();if(!normalizedBaseKey)return``;return`${normalizedBaseKey}:project:${encodeURIComponent(projectScopeValue(slug))}`}var EMPTY_REALTIME_SOCKET=Object.freeze({on(){},off(){},onAny(){},offAny(){}});function isRealtimeSocket(socket){return Boolean(socket&&typeof socket===`object`&&typeof socket.on===`function`&&typeof socket.off===`function`)}function resolveEnabled(value){if(value===void 0)return true;return Boolean(unref(value))}function resolveEventName(value){return normalizeText(unref(value))||`*`}function useRealtimeSocket({required=false}={}){const socket=inject(`jskit.realtime.runtime.client.socket`,null);if(isRealtimeSocket(socket))return socket;if(required)throw new Error(`Realtime client socket is not available in Vue injection context.`);return EMPTY_REALTIME_SOCKET}function useRealtimeEvent({event=`*`,enabled=true,matches=null,onEvent}={}){if(typeof onEvent!==`function`)throw new TypeError(`useRealtimeEvent requires onEvent().`);const socket=useRealtimeSocket({required:false});const active=ref(false);let release=null;function detach(){if(typeof release===`function`)try{release()}catch{}release=null;active.value=false}function runHandler(eventName,payload){const context=Object.freeze({event:eventName,payload,socket});if(typeof matches===`function`&&matches(context)!==true)return;Promise.resolve(onEvent(context)).catch(error=>{console.error({event:eventName,error:String(error?.message||error||`unknown error`)},`Realtime event handler failed.`)})}function attach(){detach();if(socket===EMPTY_REALTIME_SOCKET)return;if(!resolveEnabled(enabled))return;const eventName=resolveEventName(event);if(eventName===`*`){if(typeof socket.onAny!==`function`)return;const onAny=(nextEventName,payload)=>runHandler(nextEventName,payload);socket.onAny(onAny);release=()=>{if(typeof socket.offAny===`function`)socket.offAny(onAny)};active.value=true;return}const onEventMessage=payload=>runHandler(eventName,payload);socket.on(eventName,onEventMessage);release=()=>{socket.off(eventName,onEventMessage)};active.value=true}watch(()=>[resolveEnabled(enabled),resolveEventName(event)],()=>{attach()},{immediate:true});onScopeDispose(detach);return Object.freeze({active})}export{buildJsonApiFieldsetsToken as A,hasPermission as C,validateSchemaPayload as D,RECORD_ID_PATTERN as E,resolveFieldErrors as M,appendQueryString as N,createCursorListValidator as O,splitPathQueryAndHash as P,transientQueryRetryDelay as S,encodeJsonApiResourceQueryObject as T,createCapabilityRuntime as _,normalizeProjectRoutePath as a,createHttpClient as b,projectSlugFromRoute as c,configureHttpWebClient as d,createHttpWebClient as f,validateOperationSection as g,client_exports as h,currentProjectSlugFromLocation as i,normalizeJsonApiFieldsets as j,createSchema as k,vibe64ProjectQueryScope as l,httpWebClient as m,useRealtimeEvent as n,projectAppPath as o,getHttpWebClient as p,useRealtimeSocket as r,projectSlugFromPathname as s,EMPTY_REALTIME_SOCKET as t,vibe64ProjectScopedStorageKey as u,defineProvider as v,normalizePermissionList as w,shouldRetryTransientQueryFailure as x,createValidationFailure as y};