vibe64 0.1.47 → 0.1.49

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 (150) hide show
  1. package/bin/run.js +1734 -1687
  2. package/bin/server.js +75 -75
  3. package/bin/upgrade-state.js +4539 -4471
  4. package/dist/assets/GithubBrowserTabs-BwpiRS2u.js +1 -0
  5. package/dist/assets/{LocalDatabaseServer-6VzPWZxG.js → LocalDatabaseServer-u_Ky7bNS.js} +1 -1
  6. package/dist/assets/{Vibe64AuthSettingsButton-TLwqAxDo.js → Vibe64AuthSettingsButton-BCwswT1G.js} +1 -1
  7. package/dist/assets/{Vibe64DashboardShell-B4dQ-oHD.js → Vibe64DashboardShell-CWlgrR2B.js} +1 -1
  8. package/dist/assets/{Vibe64DatabaseWorkspace-Bh5WIPOj.js → Vibe64DatabaseWorkspace-Dhs8_H0P.js} +1 -1
  9. package/dist/assets/Vibe64OutputControls-Dn548CZa.js +8 -0
  10. package/dist/assets/{Vibe64RepositoryWorkspace-idDg94lc.js → Vibe64RepositoryWorkspace-C-8S4JUF.js} +1 -1
  11. package/dist/assets/{Vibe64SessionFiles-Z9zxosyl.js → Vibe64SessionFiles-Cx6J7DDN.js} +2 -3
  12. package/dist/assets/{Vibe64UiStoryboardView-CrCDWMdR.js → Vibe64UiStoryboardView-DHyhJiWS.js} +1 -1
  13. package/dist/assets/{Vibe64UnavailableSessions-TqsxvGSf.js → Vibe64UnavailableSessions-Da4RxIhA.js} +1 -1
  14. package/dist/assets/{_sessionId_-7F1VGOou.js → _sessionId_-DCpgDPSI.js} +1 -1
  15. package/dist/assets/_slug_-BbEWp01a.js +25 -0
  16. package/dist/assets/{_slug_-B16mTWjj.css → _slug_-DerKOisL.css} +1 -1
  17. package/dist/assets/{access-Cx9RH95J.js → access-D4di2sCr.js} +1 -1
  18. package/dist/assets/{app-DPx4KKOa.js → app-Adr9Iz8p.js} +1 -1
  19. package/dist/assets/asyncModuleRecovery-DJsn5NrL.js +1 -0
  20. package/dist/assets/{changes-DYsuQLFW.js → changes-3Dd1O8Lu.js} +1 -1
  21. package/dist/assets/client-BAXHGUOC.js +1 -0
  22. package/dist/assets/{client-BYsDPxR3.js → client-CCZIu6yc.js} +1 -1
  23. package/dist/assets/{conversation-3ln-WnbL.css → conversation-CSDHdGDb.css} +1 -1
  24. package/dist/assets/conversation-DG9lp25w.js +8 -0
  25. package/dist/assets/conversation-ErAO1CmH.js +13 -0
  26. package/dist/assets/{dashboard-CWswAbYP.js → dashboard-0tCzDYCX.js} +1 -1
  27. package/dist/assets/english-definitions-DeiQ-jTT.js +1 -0
  28. package/dist/assets/env-DsyQ2MFX.js +1 -0
  29. package/dist/assets/{health-C0f6s-G1.js → health-DyTXU-nb.js} +1 -1
  30. package/dist/assets/{history-BQjETNB9.js → history-BXGAdPMI.js} +1 -1
  31. package/dist/assets/{incoming-COpY201m.js → incoming-yajkdGBY.js} +1 -1
  32. package/dist/assets/{index-MWACm8Pp.css → index-B-dukXUB.css} +1 -1
  33. package/dist/assets/index-CGz4Yow6.js +136 -0
  34. package/dist/assets/{integrations-BBkvNRHu.js → integrations-BMrXET36.js} +10 -2
  35. package/dist/assets/issues-kc1XBZCK.js +1 -0
  36. package/dist/assets/{learning-B8_wHoe1.js → learning-CIE5ghYv.js} +1 -1
  37. package/dist/assets/linkPath-Ch9eft18.js +1 -0
  38. package/dist/assets/{placement-DXvgK433.js → placement-BNmlke_j.js} +1 -1
  39. package/dist/assets/placement-DYM3JJ-F.js +1 -0
  40. package/dist/assets/publish-DTh6amqi.js +3 -0
  41. package/dist/assets/pull-requests-CbfGSSIh.js +1 -0
  42. package/dist/assets/{repository-BNPt7UWc.js → repository-BstMh-bG.js} +1 -1
  43. package/dist/assets/settings-Bf8C6dls.js +1 -0
  44. package/dist/assets/{studioGateApi-BVdclhPL.js → studioGateApi-mkX1eOTX.js} +1 -1
  45. package/dist/assets/{studioUrls-CGKCbM_d.js → studioUrls-B0-GdWh8.js} +1 -1
  46. package/dist/assets/useArchivedVibe64Sessions-DIOpfUxD.js +1 -0
  47. package/dist/assets/useCommand-CVuya6vG.js +1 -0
  48. package/dist/assets/useEndpointResource-7-YDfAxX.js +1 -0
  49. package/dist/assets/usePaths-Y6UuQxmI.js +1 -0
  50. package/dist/assets/{useUiFeedback-B51xtCAK.js → useUiFeedback-Bd3rao6E.js} +1 -1
  51. package/dist/assets/useVibe64ConversationLog-ChJOU2SD.js +1 -0
  52. package/dist/assets/{useVibe64DatabaseTools-BE_yXZFn.js → useVibe64DatabaseTools-DKV-TeNJ.js} +1 -1
  53. package/dist/assets/{useVibe64ProjectScope-D7b8n1gx.js → useVibe64ProjectScope-DXjsKKhl.js} +1 -1
  54. package/dist/assets/useVibe64SessionData-BkIHUrP5.js +1 -0
  55. package/dist/assets/useVibe64SessionSelection-N8wX5oqo.js +1 -0
  56. package/dist/assets/{useVibe64SystemGraph-CDDcsye4.js → useVibe64SystemGraph-Db_eD-X8.js} +1 -1
  57. package/dist/assets/{useVibe64Terminal-Zr3Mig2L.js → useVibe64Terminal-B9EWJ9Ba.js} +2 -2
  58. package/dist/assets/vibe64ProjectScope.local-l5_-E6pq.js +1 -0
  59. package/dist/assets/vibe64RepositoryRealtime-CHT4-6VN.js +1 -0
  60. package/dist/assets/vibe64SessionFocus-CS6Ex53G.js +1 -0
  61. package/dist/assets/vibe64SessionFocus-CSm4YJQD.css +1 -0
  62. package/dist/assets/vibe64SessionRequestConfig-xIx-5jxQ.js +1 -0
  63. package/dist/index.html +26 -22
  64. package/docs/colleague-usage/ai-accounts.md +6 -2
  65. package/docs/colleague-usage/ai-balance-and-allowance.md +15 -2
  66. package/docs/colleague-usage/coding-agent-failures.md +2 -1
  67. package/docs/colleague-usage/coding-agent-goals.md +8 -3
  68. package/docs/colleague-usage/coding-agents.md +16 -0
  69. package/docs/colleague-usage/github-work.md +14 -0
  70. package/docs/colleague-usage/preview-browser-checks.md +5 -3
  71. package/docs/colleague-usage/project-setup.md +6 -3
  72. package/docs/colleague-usage/running-vibe64-on-your-computer.md +3 -1
  73. package/docs/colleague-usage/sessions.md +35 -7
  74. package/docs/colleague-usage/starter-apps.md +3 -0
  75. package/docs/colleague-usage/temporary-chat-context.md +2 -1
  76. package/docs/colleague-usage/temporary-chats.md +17 -5
  77. package/node_modules/@jskit-ai/assistant-core/CHANGELOG.md +539 -0
  78. package/node_modules/@jskit-ai/assistant-core/locales/en.json +383 -0
  79. package/node_modules/@jskit-ai/assistant-core/package.json +3 -2
  80. package/node_modules/@jskit-ai/assistant-runtime/CHANGELOG.md +138 -0
  81. package/node_modules/@jskit-ai/assistant-runtime/README.md +2 -1
  82. package/node_modules/@jskit-ai/assistant-runtime/locales/en.json +137 -0
  83. package/node_modules/@jskit-ai/assistant-runtime/package.json +3 -2
  84. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/assistantConfigRepository.js +223 -203
  85. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/conversationsRepository.js +286 -266
  86. package/node_modules/@jskit-ai/assistant-runtime/src/server/repositories/messagesRepository.js +270 -250
  87. package/node_modules/@jskit-ai/assistant-voice/locales/en.json +182 -0
  88. package/node_modules/@jskit-ai/assistant-voice/package.json +3 -2
  89. package/node_modules/@jskit-ai/connector-google-calendar/CHANGELOG.md +83 -0
  90. package/node_modules/@jskit-ai/connector-google-calendar/locales/en.json +91 -0
  91. package/node_modules/@jskit-ai/connector-google-calendar/package.json +4 -3
  92. package/node_modules/@jskit-ai/connectors-catalog/CHANGELOG.md +1722 -0
  93. package/node_modules/@jskit-ai/connectors-catalog/README.md +11 -0
  94. package/node_modules/@jskit-ai/connectors-catalog/locales/en.json +3139 -0
  95. package/node_modules/@jskit-ai/connectors-catalog/package.json +5 -4
  96. package/node_modules/@jskit-ai/connectors-core/CHANGELOG.md +183 -0
  97. package/node_modules/@jskit-ai/connectors-core/locales/en.json +92 -0
  98. package/node_modules/@jskit-ai/connectors-core/package.json +3 -2
  99. package/node_modules/@jskit-ai/http-runtime/CHANGELOG.md +31 -0
  100. package/node_modules/@jskit-ai/http-runtime/locales/en.json +14 -0
  101. package/node_modules/@jskit-ai/http-runtime/package.json +3 -2
  102. package/node_modules/@jskit-ai/kernel/CHANGELOG.md +182 -0
  103. package/node_modules/@jskit-ai/kernel/locales/en.json +94 -0
  104. package/node_modules/@jskit-ai/kernel/package.json +6 -2
  105. package/node_modules/@jskit-ai/payments-core/CHANGELOG.md +128 -0
  106. package/node_modules/@jskit-ai/payments-core/locales/en.json +77 -0
  107. package/node_modules/@jskit-ai/payments-core/package.json +3 -2
  108. package/node_modules/@jskit-ai/realtime/CHANGELOG.md +20 -0
  109. package/node_modules/@jskit-ai/realtime/locales/en.json +14 -0
  110. package/node_modules/@jskit-ai/realtime/package.json +3 -2
  111. package/node_modules/@jskit-ai/resource-core/package.json +1 -1
  112. package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
  113. package/node_modules/@jskit-ai/uploads-runtime/CHANGELOG.md +35 -0
  114. package/node_modules/@jskit-ai/uploads-runtime/locales/en.json +15 -0
  115. package/node_modules/@jskit-ai/uploads-runtime/package.json +3 -2
  116. package/node_modules/@local/vibe64-execution/src/host/execHelper.js +49 -48
  117. package/node_modules/@local/vibe64-execution/src/server/gitTurnCheckpointCommand.js +1327 -0
  118. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +430 -390
  119. package/node_modules/@local/vibe64-genesis/src/server/index.js +45 -45
  120. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +119 -119
  121. package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +57 -57
  122. package/node_modules/@local/vibe64-sessions/package.json +2 -1
  123. package/node_modules/@local/vibe64-terminals/src/server/opencodeSessionEnvironmentPlugin.js +195 -175
  124. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1385 -1362
  125. package/package.json +15 -15
  126. package/server.bundle.mjs +44206 -42825
  127. package/dist/assets/GithubBrowserTabs-D-Z3TlA8.js +0 -1
  128. package/dist/assets/Vibe64OutputControls-DtybwgL3.js +0 -8
  129. package/dist/assets/_slug_-Bq84T_Iv.js +0 -24
  130. package/dist/assets/conversation-Bn7wpATa.js +0 -2
  131. package/dist/assets/conversation-CNcCrV-R.js +0 -16
  132. package/dist/assets/definitions-CEbi4qae.js +0 -1
  133. package/dist/assets/env-X7EOFLtl.js +0 -1
  134. package/dist/assets/index-CBo1BEk6.js +0 -138
  135. package/dist/assets/issues-BiSiUd5o.js +0 -1
  136. package/dist/assets/placement-B5T1LR7m.js +0 -1
  137. package/dist/assets/publish-CeLZE2AG.js +0 -3
  138. package/dist/assets/pull-requests-pTdQOT7i.js +0 -1
  139. package/dist/assets/settings-lecRzZ-r.js +0 -1
  140. package/dist/assets/useArchivedVibe64Sessions-DHYRnyJD.js +0 -1
  141. package/dist/assets/useCommand-Epd2yHhQ.js +0 -1
  142. package/dist/assets/useEndpointResource-DBRQISI_.js +0 -1
  143. package/dist/assets/usePaths-DdAnjVDj.js +0 -1
  144. package/dist/assets/useVibe64ConversationLog-DboM3tYN.js +0 -1
  145. package/dist/assets/useVibe64SessionData-CreWtQAO.js +0 -1
  146. package/dist/assets/useVibe64SessionSelection-CDaX4uwY.js +0 -1
  147. package/dist/assets/vibe64ProjectScope.local-BxTBYuRg.js +0 -1
  148. package/dist/assets/vibe64RepositoryRealtime-C-J0I5jY.js +0 -1
  149. package/dist/assets/vibe64SessionFocus-DSW5Irm6.css +0 -1
  150. package/dist/assets/vibe64SessionFocus-DzqbVq60.js +0 -1
@@ -1 +0,0 @@
1
- import{r as __exportAll}from"./rolldown-runtime-DBalRfVu.js";import"./returnToPath-gKtcu91D.js";import{f as normalizeText,i as normalizeArray,l as normalizeObject,p as normalizeTransactionOutcome,r as isRecord}from"./normalize-BNAdWJYg.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(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(value)?value:{};if(isRecord(source.fieldErrors))return normalizeFieldErrors(source.fieldErrors);if(isRecord(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(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 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 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(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(source.attributes))normalized.attributes=normalizeObject(source.attributes);if(isRecord(source.relationships))normalized.relationships=normalizeObject(source.relationships);if(isRecord(source.links))normalized.links=normalizeObject(source.links);if(isRecord(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(value)?Object.freeze(normalizeObject(value)):void 0}function normalizeJsonApiMeta(value){return isRecord(value)?Object.freeze(normalizeObject(value)):void 0}function normalizeJsonApiErrors(value){return Array.isArray(value)?Object.freeze(value.map(entry=>isRecord(entry)?normalizeObject(entry):{})):void 0}function isJsonApiResourceDocument(payload={}){return isRecord(payload)&&isRecord(payload.data)&&!Array.isArray(payload.data)}function isJsonApiCollectionDocument(payload={}){return isRecord(payload)&&Array.isArray(payload.data)}function isJsonApiErrorDocument(payload={}){return isRecord(payload)&&Array.isArray(payload.errors)}function normalizeJsonApiDocument(payload={}){const source=isRecord(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(attributes))throw new TypeError(`createJsonApiResourceObject attributes must be an object.`);resource.attributes=normalizeObject(attributes)}if(relationships!==void 0){if(!isRecord(relationships))throw new TypeError(`createJsonApiResourceObject relationships must be an object.`);resource.relationships=normalizeObject(relationships)}if(links!==void 0){if(!isRecord(links))throw new TypeError(`createJsonApiResourceObject links must be an object.`);resource.links=normalizeObject(links)}if(meta!==void 0){if(!isRecord(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(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(links))throw new TypeError(`createJsonApiDocument links must be an object.`);document.links=Object.freeze(normalizeObject(links))}if(meta!==void 0){if(!isRecord(meta))throw new TypeError(`createJsonApiDocument meta must be an object.`);document.meta=Object.freeze(normalizeObject(meta))}return Object.freeze(document)}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 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 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 executeJsonRestSchemaDefinition(value,payload,{context=`schema definition`,defaultMode=``}={}){const normalized=normalizeSingleSchemaDefinition(value,{context,defaultMode});if(!normalized)return null;return normalized.schema[normalized.mode](payload)}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});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 normalizeQueryKey(key=``){return String(key||``).trim()}function buildFieldsTransportKey(responseType=``){const normalizedResponseType=normalizeText(responseType);return normalizedResponseType?`${JSON_API_FIELDS_PREFIX}${normalizedResponseType}]`:``}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 encodeJsonApiResourceQueryObject(query={},{responseType=``}={}){if(!isRecord(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 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(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(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(resource)?normalizeObject(resource):{};const type=normalizeText(normalizedResource.type);const id=normalizeText(normalizedResource.id);const resourceKey=type&&id?`${type}:${id}`:``;if(resourceKey&&options.resourceCache?.has(resourceKey))return options.resourceCache.get(resourceKey);const lookupFieldMap=options.lookupFieldMap||null;const simplified=simplifyJsonApiResourceWithRelationshipIds(normalizedResource,{lookupFieldMap});if(resourceKey&&options.inFlightKeys?.has(resourceKey))return simplified;if(resourceKey)options.inFlightKeys?.add(resourceKey);const lookupContainerKey=normalizeText(options.lookupContainerKey,{fallback:`lookups`});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(document?.meta)?{meta:document.meta}:{},...isRecord(document?.links)?{links:document.links}:{}}}function decodeJsonApiResourceResponse(payload,transport=null){const normalizedTransport=normalizeJsonApiClientTransport(transport);if(!normalizedTransport)return payload;const document=normalizeJsonApiDocument(payload);if(document.kind===`unknown`)throw new Error(`Expected JSON:API response document.`);if(normalizedTransport.responseKind===`meta`){if(document.kind!==`meta`)throw new Error(`Expected JSON:API meta document.`);return isRecord(document.meta)?document.meta:{}}const simplifyOptions={lookupContainerKey:normalizedTransport.lookupContainerKey,lookupFieldMap:normalizedTransport.lookupFieldMap,includedResourceIndex:createIncludedResourceIndex(document),resourceCache:new Map,inFlightKeys:new Set};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(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(entry)&&String(entry.message||``).trim())?.message:``;return String(payload.error||payload.message||nestedMessage||``).trim()}function genericHttpErrorMessage(status){return`Request failed with status ${status}.`}function resolveErrorStatus(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 isGenericHttpErrorMessage(error){const normalizedMessage=String(error?.message||``).trim();if(!normalizedMessage)return false;const status=resolveErrorStatus(error);if(status===0)return true;return status!=null&&status>=400&&normalizedMessage===genericHttpErrorMessage(status)}function createHttpError(response,data={}){const payload=isRecord(data)?data:{};const message=standardErrorMessage(payload);const jsonApiPayload=message?null:createJsonApiClientErrorPayload(payload);if(jsonApiPayload)return createHttpError(response,jsonApiPayload);const error=new Error(message||genericHttpErrorMessage(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(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=``}return{request,requestStream,ensureCsrfToken,clearCsrfTokenCache}}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 client_exports=__exportAll({DEFAULT_RETRYABLE_CSRF_ERROR_CODES:()=>DEFAULT_RETRYABLE_CSRF_ERROR_CODES,createHttpClient:()=>createHttpClient,createHttpError:()=>createHttpError,createNetworkError:()=>createNetworkError,createTransientRetryHttpClient:()=>createTransientRetryHttpClient,createValidationFailure:()=>createValidationFailure,hasHeader:()=>hasHeader,isGenericHttpErrorMessage:()=>isGenericHttpErrorMessage,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 projectListPath(){return``}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))}`}export{resolveFieldErrors as A,validateSchemaPayload as C,createSchema as D,isJsonRestSchemaInstance as E,splitPathQueryAndHash as M,buildJsonApiFieldsetsToken as O,RECORD_ID_PATTERN as S,normalizeSingleSchemaDefinition as T,transientQueryRetryDelay as _,projectSlugFromPathname as a,isGenericHttpErrorMessage as b,vibe64ProjectScopedStorageKey as c,getHttpWebClient as d,httpWebClient as f,shouldRetryTransientQueryFailure as g,createHttpClient as h,projectListPath as i,appendQueryString as j,normalizeJsonApiFieldsets as k,configureHttpWebClient as l,createValidationFailure as m,normalizeProjectRoutePath as n,projectSlugFromRoute as o,client_exports as p,projectAppPath as r,vibe64ProjectQueryScope as s,currentProjectSlugFromLocation as t,createHttpWebClient as u,hasPermission as v,createCursorListValidator as w,encodeJsonApiResourceQueryObject as x,normalizePermissionList as y};
@@ -1 +0,0 @@
1
- var REPOSITORY_STATUS_SESSION_REASONS=new Set([`claude-stream-turn-idle`,`codex-app-server-turn-idle`,`opencode-server-turn-idle`,`repository-canonical-changed`,`session-pull-request`,`session-repository-checked`,`session-save-completed`,`session-save-failed`,`session-save-started`,`session-save-update-required`,`session-turn-checkpoint-failed`,`session-turn-checkpoint-updated`,`session-update-completed`,`session-update-failed`,`session-update-started`]);var REPOSITORY_CANONICAL_RECHECK_REASONS=new Set([`repository-canonical-changed`,`session-pull-request`,`session-save-failed`,`session-save-update-required`,`session-update-failed`]);function repositoryStatusSessionId(payload={}){return String(payload?.sessionId||payload?.session?.sessionId||``).trim()}function repositoryStatusRealtimeShouldRefresh(payload={}){return REPOSITORY_STATUS_SESSION_REASONS.has(String(payload?.reason||``).trim())}function repositoryStatusRealtimeNeedsCanonicalCheck(payload={}){return REPOSITORY_CANONICAL_RECHECK_REASONS.has(String(payload?.reason||``).trim())}export{repositoryStatusRealtimeShouldRefresh as n,repositoryStatusSessionId as r,repositoryStatusRealtimeNeedsCanonicalCheck as t};
@@ -1 +0,0 @@
1
- .pr-destination[data-v-07c592d1]{overflow-wrap:anywhere}.pr-details summary[data-v-07c592d1]{cursor:pointer;min-height:48px}.vibe64-assistant-dialog__progress[data-v-b92cd66b]{gap:.5rem;padding:0 1.5rem .5rem;display:grid}.vibe64-assistant-dialog[data-v-b92cd66b]{border:1px solid rgba(var(--v-theme-outline), .18)}.vibe64-assistant-dialog__title[data-v-b92cd66b]{justify-content:space-between;align-items:center;padding:1rem 1.25rem .75rem;display:flex}.vibe64-assistant-dialog__title-copy[data-v-b92cd66b]{gap:.15rem;display:grid}.vibe64-assistant-dialog__title-copy small[data-v-b92cd66b]{color:rgba(var(--v-theme-on-surface), .66);white-space:normal}.vibe64-assistant-dialog__body[data-v-b92cd66b]{padding:.25rem 1.25rem 1rem!important}.vibe64-assistant-dialog__actions[data-v-b92cd66b]{border-top:1px solid rgba(var(--v-theme-outline), .14);justify-content:flex-end;gap:.5rem;padding:.75rem 1.25rem}@media (width<=600px){.vibe64-assistant-dialog__body[data-v-b92cd66b],.vibe64-assistant-dialog__actions[data-v-b92cd66b],.vibe64-assistant-dialog__title[data-v-b92cd66b]{padding-inline:1rem!important}}
@@ -1 +0,0 @@
1
- import{D as createVNode,E as createTextVNode,Ht as watch,On as unref,_ as createBaseVNode,b as createElementBlock,g as computed,mt as openBlock,o as Fragment,qt as withCtx,tr as toDisplayString,tt as nextTick,v as createBlock,vn as ref,y as createCommentVNode}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{_ as VIcon,p as VProgressLinear}from"./VAvatar-H2hyOWlB.js";import{t as useEndpointResource}from"./useEndpointResource-DBRQISI_.js";import{t as VSelect}from"./VSelect-Dqnp_CFi.js";import{t as VTextField}from"./VTextField-CnkGeXaT.js";import{r as scopedDevelopmentApiUrl}from"./studioUrls-CGKCbM_d.js";import{X as mdiClose,xr as mdiSourcePull}from"./mdi-X9prU-DG.js";import{t as VBtn}from"./VBtn-Sj5jAuOx.js";import{t as VAlert}from"./VAlert-7_VM9EUm.js";import{t as VSheet}from"./VSheet-CMhyReNa.js";import{t as VDialog}from"./VDialog-Drp3yzSH.js";import{i as VCardTitle,n as VCardText,o as VCardActions,t as VCard}from"./VCard-DExT9Cji.js";import{t as VSpacer}from"./VSpacer-BSTt0_VA.js";import{u as requestVibe64AiOnboarding,x as useModelRouting}from"./client-BYsDPxR3.js";import{t as VSkeletonLoader}from"./VSkeletonLoader-pc4bBTxv.js";import{t as VSwitch}from"./VSwitch-B_DmcTxG.js";import{t as VTextarea}from"./VTextarea-wqoRFl1K.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{c as vibe64AssistantSelectionLabel}from"./shared-TUhK_uYM.js";import{t as useUiFeedback}from"./useUiFeedback-B51xtCAK.js";import{D as VIBE64_SESSIONS_API_SUFFIX,K as vibe64RepositoryApiPath,S as requestVibe64AccountConnectionsDialog,b as readRefOrGetterValue,et as vibe64SessionPath}from"./index-CBo1BEk6.js";import{a as vibe64SessionPullRequest,i as vibe64SessionDisplayTitle}from"./vibe64SessionViewModel-B0cCumM8.js";import{a as githubProjectRepositoryName,t as GITHUB_BODY_MAX_LENGTH}from"./vibe64GithubProject-Bct-bzKq.js";var _hoisted_1$1={class:`d-flex align-center justify-space-between ga-2 pa-5 pb-2`};var _hoisted_2$1={class:`d-flex align-center ga-3`};var _hoisted_3$1={class:`text-label-large`};var _hoisted_4$1={class:`text-body-medium mt-1`};var _hoisted_5$1={key:0,role:`status`};var _sfc_main$1={__name:`Vibe64CreatePullRequestDialog`,props:{modelValue:Boolean,dashboardContext:{type:Object,default:()=>({})}},emits:[`update:modelValue`,`created`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const title=ref(``);const body=ref(``);const draft=ref(true);const pending=ref(false);const destinationReview=ref(null);const feedback=useUiFeedback({source:`vibe64.pullRequests.create`});const session=computed(()=>props.dashboardContext.session||{});const source=computed(()=>vibe64SessionPullRequest(session.value));const repository=computed(()=>githubProjectRepositoryName(props.dashboardContext.projectContext));const branch=computed(()=>{if(source.value?.headBranch)return source.value.headBranch;const destination=props.dashboardContext.workState?.destination;if(destination?.mode===`github`&&destination.branch!==props.dashboardContext.projectContext?.repository?.defaultBranch)return destination.branch;return`vibe64/pr-${props.dashboardContext.sessionId}`});const base=computed(()=>source.value?.baseBranch||props.dashboardContext.projectContext?.repository?.defaultBranch||``);const path=computed(()=>vibe64SessionPath(readRefOrGetterValue(props.dashboardContext.sessionsApiPath),props.dashboardContext.sessionId,`/pull-request`));const resource=useEndpointResource({path,queryKey:computed(()=>[`vibe64.createPullRequest`,path.value]),enabled:false});watch(()=>props.modelValue,open=>{if(open)destinationReview.value=props.dashboardContext.workState?.destination?{...props.dashboardContext.workState.destination}:null},{immediate:true});watch(()=>props.dashboardContext.sessionId,()=>{title.value=source.value?.title||vibe64SessionDisplayTitle(session.value);body.value=source.value?.body||``;draft.value=true},{immediate:true});async function submit(){if(pending.value||!title.value.trim())return;pending.value=true;try{const result=await resource.save({title:title.value.trim(),body:body.value,draft:draft.value,destinationReview:destinationReview.value},{method:`POST`});feedback.success(`Pull request created. Future commits update its source branch.`);emit(`created`,result.pullRequest);emit(`update:modelValue`,false);props.dashboardContext.refreshSessionWork?.()}catch(error){feedback.error(error,`The pull request could not be confirmed. Retry to check GitHub and continue.`)}finally{pending.value=false}}return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":__props.modelValue,"max-width":`38rem`,scrollable:``,persistent:pending.value,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>emit(`update:modelValue`,$event))},{default:withCtx(()=>[createVNode(VCard,{rounded:`xl`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_1$1,[createBaseVNode(`div`,_hoisted_2$1,[createVNode(VIcon,{icon:unref(mdiSourcePull),color:`primary`},null,8,[`icon`]),_cache[6]||(_cache[6]=createBaseVNode(`h2`,{class:`text-title-large`},`Create pull request`,-1))]),createVNode(VBtn,{icon:unref(mdiClose),size:`48`,variant:`text`,"aria-label":`Close pull request dialog`,disabled:pending.value,onClick:_cache[0]||(_cache[0]=$event=>emit(`update:modelValue`,false))},null,8,[`icon`,`disabled`])]),createVNode(VCardText,{class:`d-flex flex-column ga-3`},{default:withCtx(()=>[createVNode(VSheet,{color:`surface-light`,rounded:`lg`,class:`pa-3 pr-destination`},{default:withCtx(()=>[createBaseVNode(`div`,_hoisted_3$1,toDisplayString(repository.value),1),createBaseVNode(`div`,_hoisted_4$1,toDisplayString(branch.value)+` → `+toDisplayString(base.value),1),_cache[7]||(_cache[7]=createBaseVNode(`p`,{class:`text-body-small text-medium-emphasis mt-2 mb-0`},`The base branch stays unchanged.`,-1))]),_:1}),_cache[8]||(_cache[8]=createBaseVNode(`p`,{class:`text-body-small ma-0`},`Save open file edits first.`,-1)),!destinationReview.value?(openBlock(),createElementBlock(`p`,_hoisted_5$1,`Refresh repository status before creating a pull request.`)):createCommentVNode(``,true),createVNode(VTextField,{modelValue:title.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>title.value=$event),label:`Title`,variant:`outlined`,maxlength:`256`,disabled:pending.value,"hide-details":``},null,8,[`modelValue`,`disabled`]),createVNode(VTextarea,{modelValue:body.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>body.value=$event),label:`Description`,placeholder:`What changed, and how did you check it?`,variant:`outlined`,rows:`3`,"auto-grow":``,maxlength:unref(GITHUB_BODY_MAX_LENGTH),disabled:pending.value,"hide-details":``},null,8,[`modelValue`,`maxlength`,`disabled`]),createVNode(VSwitch,{modelValue:draft.value,"onUpdate:modelValue":_cache[3]||(_cache[3]=$event=>draft.value=$event),color:`primary`,label:`Create as draft`,disabled:pending.value,"hide-details":``},null,8,[`modelValue`,`disabled`]),_cache[9]||(_cache[9]=createBaseVNode(`details`,{class:`pr-details text-body-small`},[createBaseVNode(`summary`,{class:`py-3`},`What gets pushed`),createBaseVNode(`p`,null,`All saved file changes are committed and pushed to the PR branch. Database data and chat history are separate. GitHub automation may run; this does not deploy the app.`)],-1))]),_:1}),createVNode(VCardActions,{class:`pa-5 pt-2`},{default:withCtx(()=>[createVNode(VSpacer),createVNode(VBtn,{variant:`text`,height:`48`,disabled:pending.value,onClick:_cache[4]||(_cache[4]=$event=>emit(`update:modelValue`,false))},{default:withCtx(()=>[..._cache[10]||(_cache[10]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{color:`primary`,variant:`flat`,rounded:`pill`,height:`48`,disabled:pending.value||!title.value.trim()||!destinationReview.value||__props.dashboardContext.sourceOperationsSuspended,"aria-busy":pending.value,onClick:submit},{default:withCtx(()=>[createTextVNode(toDisplayString(pending.value?`Creating…`:draft.value?`Create draft PR`:`Create pull request`),1)]),_:1},8,[`disabled`,`aria-busy`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])}}};var Vibe64CreatePullRequestDialog_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-07c592d1`]]);var _hoisted_1={key:2,class:`text-body-medium mb-0`};var _hoisted_2={key:3,class:`d-flex flex-column ga-2`};var _hoisted_3={key:0,class:`d-flex flex-column ga-3 mt-3`};var _hoisted_4={key:0,class:`text-body-small`,style:{"overflow-wrap":`anywhere`}};var _hoisted_5={key:0,class:`vibe64-assistant-dialog__progress`,role:`status`,"aria-live":`polite`};var _sfc_main={__name:`Vibe64AssistantSessionDialog`,props:{modelValue:Boolean,toolbar:{type:Object,default:()=>({})}},emits:[`created`,`update:model-value`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const routing=useModelRouting({enabled:computed(()=>props.modelValue)});const mainSelection=routing.mainChatSelection;const openConnectionSettings=()=>requestVibe64AccountConnectionsDialog({section:`ai`});function setUpAi(){close();requestVibe64AiOnboarding()}const submitButton=ref(null);const submitting=computed(()=>props.toolbar.createSessionRunning===true);const branchMode=ref(`project`);const chooseBranch=computed(()=>branchMode.value!==`project`);const createBranch=computed(()=>branchMode.value===`new`);const branchName=ref(``);const newBranchName=ref(``);const branchProject=computed(()=>props.toolbar.projectContext||{});const branchSelectionAvailable=computed(()=>!props.toolbar.repositoryBranchSelectionDisabled&&[`github`,`managed_git`].includes(branchProject.value.repositoryMode||branchProject.value.repository?.mode));const branchChoices=computed(()=>[{title:`Project branch (${branchProject.value.repository?.defaultBranch||`main`})`,value:`project`},{title:`Create a new branch`,value:`new`},{title:`Use an existing branch`,value:`existing`}]);const branchRepository=computed(()=>branchProject.value.githubRepository?.fullName||branchProject.value.repository?.github?.fullName||branchProject.value.slug);const branchPath=computed(()=>scopedDevelopmentApiUrl(`${vibe64RepositoryApiPath(`/api${VIBE64_SESSIONS_API_SUFFIX}`)}/branches`,branchProject.value.slug));const branches=useEndpointResource({path:branchPath,queryKey:computed(()=>[`vibe64.branches`,branchPath.value]),enabled:computed(()=>props.modelValue&&branchSelectionAvailable.value&&chooseBranch.value),queryOptions:{retry:false},fallbackLoadError:`Repository branches could not load.`});const selectedBranch=computed(()=>branches.data.value?.branches?.find(item=>item.name===branchName.value));const branchAlreadyExists=computed(()=>branches.data.value?.branches?.some(item=>item.name===newBranchName.value.trim()));const branchSelectionReady=computed(()=>{if(!chooseBranch.value)return true;if(!selectedBranch.value||branches.isLoading.value||branches.loadError.value)return false;return!createBranch.value||Boolean(newBranchName.value.trim())&&!branchAlreadyExists.value});watch(()=>branches.data.value,value=>{if(!value?.branches?.some(item=>item.name===branchName.value))branchName.value=value?.defaultBranch||``},{immediate:true});function close(){if(!submitting.value)emit(`update:model-value`,false)}async function submit(){if(!mainSelection.value||submitting.value||!branchSelectionReady.value)return;let response;try{const options={};if(chooseBranch.value)options.repositoryBranch={name:createBranch.value?newBranchName.value.trim():branchName.value,...createBranch.value?{fromBranch:branchName.value}:{},expectedCommit:selectedBranch.value.commit};response=await props.toolbar.createSession?.({},options)}catch{return}if(response?.ok!==false&&response?.sessionId){emit(`created`,response);emit(`update:model-value`,false)}}watch(()=>props.modelValue,open=>{if(!open)return;branchMode.value=`project`;branchName.value=branches.data.value?.defaultBranch||``;newBranchName.value=``},{immediate:true});watch(submitting,async(running,wasRunning)=>{if(running||!wasRunning||!props.modelValue)return;await nextTick();const target=submitButton.value?.$el||submitButton.value;if(target?.isConnected===true&&typeof target.focus===`function`)target.focus({preventScroll:true})});return(_ctx,_cache)=>{return openBlock(),createBlock(VDialog,{"model-value":__props.modelValue,persistent:submitting.value,"max-width":`38rem`,scrollable:``,"onUpdate:modelValue":_cache[5]||(_cache[5]=$event=>!$event&&close())},{default:withCtx(()=>[createVNode(VCard,{class:`vibe64-assistant-dialog`,rounded:`xl`},{default:withCtx(()=>[createVNode(VCardTitle,{class:`vibe64-assistant-dialog__title`},{default:withCtx(()=>[_cache[6]||(_cache[6]=createBaseVNode(`span`,{class:`vibe64-assistant-dialog__title-copy`},[createBaseVNode(`strong`,{class:`text-title-large`},`Start an AI session`),createBaseVNode(`small`,{class:`text-body-small`},`Start with Senior. Choose Junior or Auto from chat.`)],-1)),createVNode(VBtn,{"aria-label":`Close AI session dialog`,disabled:submitting.value,icon:unref(mdiClose),title:`Close`,variant:`text`,onClick:close},null,8,[`disabled`,`icon`])]),_:1}),createVNode(VCardText,{class:`vibe64-assistant-dialog__body`},{default:withCtx(()=>[unref(routing).resource.isInitialLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:0,type:`list-item-two-line`})):unref(routing).loadError.value?(openBlock(),createBlock(VAlert,{key:1,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(routing).loadError.value)+` `,1),createVNode(VBtn,{variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>unref(routing).resource.reload())},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(`Try again`,-1)])]),_:1})]),_:1})):unref(mainSelection)?(openBlock(),createElementBlock(`p`,_hoisted_1,[createTextVNode(` Runs on your main AI: `+toDisplayString(unref(vibe64AssistantSelectionLabel)(unref(mainSelection)))+` `,1),createVNode(VBtn,{variant:`text`,size:`small`,onClick:openConnectionSettings},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(`Change`,-1)])]),_:1})])):(openBlock(),createElementBlock(`div`,_hoisted_2,[_cache[10]||(_cache[10]=createBaseVNode(`strong`,null,`No AI is set up yet`,-1)),_cache[11]||(_cache[11]=createBaseVNode(`span`,{class:`text-body-small`},`Set up your AI, then come back to start a session.`,-1)),createVNode(VBtn,{color:`primary`,variant:`flat`,class:`align-self-start`,onClick:setUpAi},{default:withCtx(()=>[..._cache[9]||(_cache[9]=[createTextVNode(`Set up your AI`,-1)])]),_:1})])),branchSelectionAvailable.value?(openBlock(),createElementBlock(Fragment,{key:4},[createVNode(VSelect,{modelValue:branchMode.value,"onUpdate:modelValue":_cache[1]||(_cache[1]=$event=>branchMode.value=$event),items:branchChoices.value,label:`Work on`,disabled:submitting.value,"hide-details":``,class:`mt-4`},null,8,[`modelValue`,`items`,`disabled`]),chooseBranch.value?(openBlock(),createElementBlock(`div`,_hoisted_3,[createBranch.value?(openBlock(),createBlock(VTextField,{key:0,modelValue:newBranchName.value,"onUpdate:modelValue":_cache[2]||(_cache[2]=$event=>newBranchName.value=$event),label:`New branch name`,placeholder:`e.g. improve-booking`,maxlength:`255`,disabled:submitting.value,"error-messages":newBranchName.value.trim()&&branchAlreadyExists.value?`That branch already exists. Choose an existing branch instead.`:[],"hide-details":`auto`},null,8,[`modelValue`,`disabled`,`error-messages`])):createCommentVNode(``,true),unref(branches).isLoading.value?(openBlock(),createBlock(VSkeletonLoader,{key:1,type:`list-item-two-line, paragraph`})):unref(branches).loadError.value?(openBlock(),createBlock(VAlert,{key:2,type:`error`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(unref(branches).loadError.value)+` `,1),createVNode(VBtn,{variant:`text`,onClick:_cache[3]||(_cache[3]=$event=>unref(branches).reload())},{default:withCtx(()=>[..._cache[12]||(_cache[12]=[createTextVNode(`Try again`,-1)])]),_:1})]),_:1})):(openBlock(),createElementBlock(Fragment,{key:3},[createVNode(VSelect,{modelValue:branchName.value,"onUpdate:modelValue":_cache[4]||(_cache[4]=$event=>branchName.value=$event),items:unref(branches).data.value?.branches||[],"item-title":`name`,"item-value":`name`,label:createBranch.value?`Create from`:`Branch`,disabled:submitting.value,"hide-details":``},null,8,[`modelValue`,`items`,`label`,`disabled`]),selectedBranch.value?(openBlock(),createElementBlock(`p`,_hoisted_4,toDisplayString(createBranch.value?`Creates the branch and opens a new session.`:`Opens a new session on this branch.`)+` Your changes will be saved to `+toDisplayString(branchRepository.value)+`:`+toDisplayString(createBranch.value?newBranchName.value.trim()||`your new branch`:branchName.value)+`. `,1)):createCommentVNode(``,true),_cache[13]||(_cache[13]=createBaseVNode(`p`,{class:`text-body-small`},`Deploying the app still uses the project branch.`,-1))],64))])):createCommentVNode(``,true)],64)):createCommentVNode(``,true)]),_:1}),submitting.value?(openBlock(),createElementBlock(`div`,_hoisted_5,[createVNode(VProgressLinear,{indeterminate:``,color:`primary`,rounded:``}),_cache[14]||(_cache[14]=createBaseVNode(`p`,{class:`text-body-small mb-0`},` Copying the project source for the new session. This can take a little while for a large project. Any connected projects and workspace setup then continue in the session, which shows their progress. `,-1))])):createCommentVNode(``,true),createVNode(VCardActions,{class:`vibe64-assistant-dialog__actions`},{default:withCtx(()=>[createVNode(VBtn,{disabled:submitting.value,variant:`text`,onClick:close},{default:withCtx(()=>[..._cache[15]||(_cache[15]=[createTextVNode(`Cancel`,-1)])]),_:1},8,[`disabled`]),createVNode(VBtn,{ref_key:`submitButton`,ref:submitButton,"aria-busy":submitting.value?`true`:void 0,color:`primary`,disabled:!unref(mainSelection)||submitting.value||!branchSelectionReady.value,variant:`flat`,onClick:submit},{default:withCtx(()=>[createTextVNode(toDisplayString(submitting.value?`Creating session…`:chooseBranch.value&&createBranch.value?`Create branch & session`:`Create session`),1)]),_:1},8,[`aria-busy`,`disabled`])]),_:1})]),_:1})]),_:1},8,[`model-value`,`persistent`])}}};var Vibe64AssistantSessionDialog_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-b92cd66b`]]);var CREATED_SESSION_FOCUS_TIMEOUT_MS=2e3;async function focusCreatedVibe64SessionTab(sessionId=``){const normalizedSessionId=String(sessionId||``).trim();if(!normalizedSessionId||typeof document===`undefined`)return false;const deadline=Date.now()+CREATED_SESSION_FOCUS_TIMEOUT_MS;while(Date.now()<deadline){const dialogVisible=[...document.querySelectorAll(`.vibe64-assistant-dialog`)].some(element=>element.getClientRects().length>0);const target=[...document.querySelectorAll(`[data-vibe64-session-id]`)].find(element=>element.getAttribute(`data-vibe64-session-id`)===normalizedSessionId&&element.getClientRects().length>0);if(!dialogVisible&&target&&typeof target.focus===`function`){target.focus({preventScroll:true});return document.activeElement===target}await new Promise(resolve=>{(globalThis.requestAnimationFrame||(callback=>setTimeout(callback,16)))(resolve)})}return false}export{Vibe64AssistantSessionDialog_default as n,Vibe64CreatePullRequestDialog_default as r,focusCreatedVibe64SessionTab as t};