@mastra/server 1.67.0-alpha.1 → 1.67.0-alpha.4

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 (229) hide show
  1. package/dist/_types/@internal_voice/dist/_types/@internal_core/dist/request-context/index.d.ts +21 -0
  2. package/dist/_types/@mastra_schema-compat/dist/schema.types.d.ts +20 -1
  3. package/dist/{a2a-CW4FVjHx.cjs → a2a-DQ8GeDz4.cjs} +3 -3
  4. package/dist/{a2a-CW4FVjHx.cjs.map → a2a-DQ8GeDz4.cjs.map} +1 -1
  5. package/dist/{a2a-Di7S6YaM.js → a2a-DUBjstWk.js} +3 -3
  6. package/dist/{a2a-Di7S6YaM.js.map → a2a-DUBjstWk.js.map} +1 -1
  7. package/dist/{api-schema-manifest-BkKHbFJi.js → api-schema-manifest-B8uyCfJp.js} +3 -3
  8. package/dist/{api-schema-manifest-BkKHbFJi.js.map → api-schema-manifest-B8uyCfJp.js.map} +1 -1
  9. package/dist/{api-schema-manifest-Cpw4nIVv.cjs → api-schema-manifest-nIt4xi1r.cjs} +3 -3
  10. package/dist/{api-schema-manifest-Cpw4nIVv.cjs.map → api-schema-manifest-nIt4xi1r.cjs.map} +1 -1
  11. package/dist/{background-tasks-Bl7Hn8h9.js → background-tasks-B4yoNDY_.js} +2 -2
  12. package/dist/{background-tasks-Bl7Hn8h9.js.map → background-tasks-B4yoNDY_.js.map} +1 -1
  13. package/dist/{background-tasks-BJhziawt.cjs → background-tasks-BarPeyNJ.cjs} +2 -2
  14. package/dist/{background-tasks-BJhziawt.cjs.map → background-tasks-BarPeyNJ.cjs.map} +1 -1
  15. package/dist/{builder-registry-Bcpr74BB.js → builder-registry-DI3Ysclf.js} +3 -3
  16. package/dist/{builder-registry-Bcpr74BB.js.map → builder-registry-DI3Ysclf.js.map} +1 -1
  17. package/dist/{builder-registry-BINitddV.cjs → builder-registry-r71f11_E.cjs} +3 -3
  18. package/dist/{builder-registry-BINitddV.cjs.map → builder-registry-r71f11_E.cjs.map} +1 -1
  19. package/dist/{channels-CnEljW9e.js → channels-B_K1oJ7S.js} +2 -2
  20. package/dist/{channels-CnEljW9e.js.map → channels-B_K1oJ7S.js.map} +1 -1
  21. package/dist/{channels-D8e5YDTn.cjs → channels-CGDo0Prv.cjs} +2 -2
  22. package/dist/{channels-D8e5YDTn.cjs.map → channels-CGDo0Prv.cjs.map} +1 -1
  23. package/dist/{conversations-D89Io31L.js → conversations-Bs-k9f9N.js} +2 -2
  24. package/dist/{conversations-D89Io31L.js.map → conversations-Bs-k9f9N.js.map} +1 -1
  25. package/dist/{conversations-DJybpnE5.cjs → conversations-o3AEJjRo.cjs} +2 -2
  26. package/dist/{conversations-DJybpnE5.cjs.map → conversations-o3AEJjRo.cjs.map} +1 -1
  27. package/dist/{datasets-C-_ZWnxR.cjs → datasets-BqCRJLYH.cjs} +25 -2
  28. package/dist/datasets-BqCRJLYH.cjs.map +1 -0
  29. package/dist/{datasets-B4qPHzEy.js → datasets-Dhk4CUat.js} +20 -3
  30. package/dist/datasets-Dhk4CUat.js.map +1 -0
  31. package/dist/{dist-B8gYiHIX.js → dist-8iDh9UbP.js} +185 -30
  32. package/dist/dist-8iDh9UbP.js.map +1 -0
  33. package/dist/{dist-CaVro31X.cjs → dist-CBDJtAr5.cjs} +189 -34
  34. package/dist/dist-CBDJtAr5.cjs.map +1 -0
  35. package/dist/docs/SKILL.md +1 -1
  36. package/dist/docs/assets/SOURCE_MAP.json +1 -1
  37. package/dist/{dynamic-workflows-Cn9MXevC.js → dynamic-workflows-C3DXgmSP.js} +2 -2
  38. package/dist/{dynamic-workflows-Cn9MXevC.js.map → dynamic-workflows-C3DXgmSP.js.map} +1 -1
  39. package/dist/{dynamic-workflows-DSg9_yec.cjs → dynamic-workflows-DeUG3lA2.cjs} +2 -2
  40. package/dist/{dynamic-workflows-DSg9_yec.cjs.map → dynamic-workflows-DeUG3lA2.cjs.map} +1 -1
  41. package/dist/{editor-builder-DeFo8Kl5.cjs → editor-builder-DFh_-7Id.cjs} +2 -2
  42. package/dist/{editor-builder-DeFo8Kl5.cjs.map → editor-builder-DFh_-7Id.cjs.map} +1 -1
  43. package/dist/{editor-builder-DzpPA6dp.js → editor-builder-QRcP8-SQ.js} +2 -2
  44. package/dist/{editor-builder-DzpPA6dp.js.map → editor-builder-QRcP8-SQ.js.map} +1 -1
  45. package/dist/{memory-CVODqy7m.cjs → memory-CE6rUGmo.cjs} +22 -1
  46. package/dist/memory-CE6rUGmo.cjs.map +1 -0
  47. package/dist/{memory-CjWJYFVI.js → memory-Cp3Yo-OX.js} +11 -2
  48. package/dist/{memory-CjWJYFVI.js.map → memory-Cp3Yo-OX.js.map} +1 -1
  49. package/dist/{observability-new-endpoints-BNPjbEXf.cjs → observability-new-endpoints-I2OxQzfY.cjs} +2 -2
  50. package/dist/{observability-new-endpoints-BNPjbEXf.cjs.map → observability-new-endpoints-I2OxQzfY.cjs.map} +1 -1
  51. package/dist/{observability-new-endpoints-CSiMF_Kf.js → observability-new-endpoints-pIq_OWa8.js} +2 -2
  52. package/dist/{observability-new-endpoints-CSiMF_Kf.js.map → observability-new-endpoints-pIq_OWa8.js.map} +1 -1
  53. package/dist/{route-builder-BveLN9LU.js → route-builder-BukcT_Kp.js} +2 -2
  54. package/dist/{route-builder-BveLN9LU.js.map → route-builder-BukcT_Kp.js.map} +1 -1
  55. package/dist/{route-builder-C8n4ugUf.cjs → route-builder-DupY8fkI.cjs} +4 -4
  56. package/dist/{route-builder-C8n4ugUf.cjs.map → route-builder-DupY8fkI.cjs.map} +1 -1
  57. package/dist/{routes-DCwOOz84.js → routes-BSAA4PVg.js} +15 -11
  58. package/dist/routes-BSAA4PVg.js.map +1 -0
  59. package/dist/{routes-Dgd2S9av.cjs → routes-D5r7qWgZ.cjs} +14 -10
  60. package/dist/routes-D5r7qWgZ.cjs.map +1 -0
  61. package/dist/{schedules-BcEUUuX_.js → schedules-BzymFGR_.js} +2 -2
  62. package/dist/{schedules-BcEUUuX_.js.map → schedules-BzymFGR_.js.map} +1 -1
  63. package/dist/{schedules-fj9U0_tA.cjs → schedules-DaEv0Usj.cjs} +2 -2
  64. package/dist/{schedules-fj9U0_tA.cjs.map → schedules-DaEv0Usj.cjs.map} +1 -1
  65. package/dist/schema-BF_cZG0Y.js +2 -0
  66. package/dist/schema-C7CvwM1d.cjs +1 -0
  67. package/dist/{schema-Bv9OdW1f-DLSJSqQv.js → schema-D_ikovK6-BzTeMhWf.js} +467 -131
  68. package/dist/schema-D_ikovK6-BzTeMhWf.js.map +1 -0
  69. package/dist/{schema-Bv9OdW1f-CxTiW8RD.cjs → schema-D_ikovK6-DQrOVw5N.cjs} +467 -131
  70. package/dist/schema-D_ikovK6-DQrOVw5N.cjs.map +1 -0
  71. package/dist/server/handlers/a2a.cjs +1 -1
  72. package/dist/server/handlers/a2a.js +1 -1
  73. package/dist/server/handlers/agent-builder.cjs +3 -3
  74. package/dist/server/handlers/agent-builder.js +3 -3
  75. package/dist/server/handlers/agent-controller.cjs +3 -3
  76. package/dist/server/handlers/agent-controller.js +3 -3
  77. package/dist/server/handlers/agent-versions.cjs +2 -2
  78. package/dist/server/handlers/agent-versions.js +2 -2
  79. package/dist/server/handlers/agents.cjs +14 -21
  80. package/dist/server/handlers/agents.cjs.map +1 -1
  81. package/dist/server/handlers/agents.d.ts.map +1 -1
  82. package/dist/server/handlers/agents.js +6 -13
  83. package/dist/server/handlers/agents.js.map +1 -1
  84. package/dist/server/handlers/auth.cjs +1 -1
  85. package/dist/server/handlers/auth.js +1 -1
  86. package/dist/server/handlers/background-tasks.cjs +1 -1
  87. package/dist/server/handlers/background-tasks.js +1 -1
  88. package/dist/server/handlers/builder-registry.cjs +1 -1
  89. package/dist/server/handlers/builder-registry.js +1 -1
  90. package/dist/server/handlers/channels.cjs +1 -1
  91. package/dist/server/handlers/channels.js +1 -1
  92. package/dist/server/handlers/conversations.cjs +3 -3
  93. package/dist/server/handlers/conversations.js +3 -3
  94. package/dist/server/handlers/datasets.cjs +18 -9
  95. package/dist/server/handlers/datasets.cjs.map +1 -1
  96. package/dist/server/handlers/datasets.d.ts +27 -0
  97. package/dist/server/handlers/datasets.d.ts.map +1 -1
  98. package/dist/server/handlers/datasets.js +18 -9
  99. package/dist/server/handlers/datasets.js.map +1 -1
  100. package/dist/server/handlers/dynamic-workflows.cjs +1 -1
  101. package/dist/server/handlers/dynamic-workflows.js +1 -1
  102. package/dist/server/handlers/editor-builder.cjs +1 -1
  103. package/dist/server/handlers/editor-builder.js +1 -1
  104. package/dist/server/handlers/favorites-enrichment.cjs +1 -1
  105. package/dist/server/handlers/favorites-enrichment.js +1 -1
  106. package/dist/server/handlers/logs.cjs +2 -2
  107. package/dist/server/handlers/logs.js +2 -2
  108. package/dist/server/handlers/mcp-client-versions.cjs +2 -2
  109. package/dist/server/handlers/mcp-client-versions.js +2 -2
  110. package/dist/server/handlers/mcp.cjs +1 -1
  111. package/dist/server/handlers/mcp.js +1 -1
  112. package/dist/server/handlers/memory.cjs +64 -3
  113. package/dist/server/handlers/memory.cjs.map +1 -1
  114. package/dist/server/handlers/memory.d.ts +47 -0
  115. package/dist/server/handlers/memory.d.ts.map +1 -1
  116. package/dist/server/handlers/memory.js +64 -4
  117. package/dist/server/handlers/memory.js.map +1 -1
  118. package/dist/server/handlers/observability-new-endpoints.cjs +1 -1
  119. package/dist/server/handlers/observability-new-endpoints.js +1 -1
  120. package/dist/server/handlers/observability-shared.cjs +1 -1
  121. package/dist/server/handlers/observability-shared.js +1 -1
  122. package/dist/server/handlers/observability.cjs +2 -2
  123. package/dist/server/handlers/observability.js +2 -2
  124. package/dist/server/handlers/plans.cjs +2 -2
  125. package/dist/server/handlers/plans.js +2 -2
  126. package/dist/server/handlers/processor-providers.cjs +1 -1
  127. package/dist/server/handlers/processor-providers.js +1 -1
  128. package/dist/server/handlers/processors.cjs +1 -1
  129. package/dist/server/handlers/processors.js +1 -1
  130. package/dist/server/handlers/prompt-block-versions.cjs +2 -2
  131. package/dist/server/handlers/prompt-block-versions.js +2 -2
  132. package/dist/server/handlers/responses.cjs +2 -2
  133. package/dist/server/handlers/responses.d.ts +11 -11
  134. package/dist/server/handlers/responses.js +2 -2
  135. package/dist/server/handlers/responses.storage.cjs +1 -1
  136. package/dist/server/handlers/responses.storage.js +1 -1
  137. package/dist/server/handlers/schedules.cjs +1 -1
  138. package/dist/server/handlers/schedules.js +1 -1
  139. package/dist/server/handlers/scorer-versions.cjs +2 -2
  140. package/dist/server/handlers/scorer-versions.js +2 -2
  141. package/dist/server/handlers/scores.cjs +1 -1
  142. package/dist/server/handlers/scores.js +1 -1
  143. package/dist/server/handlers/stored-agent-favorites.cjs +3 -3
  144. package/dist/server/handlers/stored-agent-favorites.js +3 -3
  145. package/dist/server/handlers/stored-agents.cjs +3 -3
  146. package/dist/server/handlers/stored-agents.js +3 -3
  147. package/dist/server/handlers/stored-mcp-clients.cjs +2 -2
  148. package/dist/server/handlers/stored-mcp-clients.js +2 -2
  149. package/dist/server/handlers/stored-prompt-blocks.cjs +2 -2
  150. package/dist/server/handlers/stored-prompt-blocks.js +2 -2
  151. package/dist/server/handlers/stored-scorers.cjs +2 -2
  152. package/dist/server/handlers/stored-scorers.js +2 -2
  153. package/dist/server/handlers/stored-skill-favorites.cjs +3 -3
  154. package/dist/server/handlers/stored-skill-favorites.js +3 -3
  155. package/dist/server/handlers/stored-skills.cjs +3 -3
  156. package/dist/server/handlers/stored-skills.js +3 -3
  157. package/dist/server/handlers/stored-workspaces.cjs +2 -2
  158. package/dist/server/handlers/stored-workspaces.js +2 -2
  159. package/dist/server/handlers/system.cjs +2 -2
  160. package/dist/server/handlers/system.js +2 -2
  161. package/dist/server/handlers/tool-providers.cjs +1 -1
  162. package/dist/server/handlers/tool-providers.js +1 -1
  163. package/dist/server/handlers/tools.cjs +6 -6
  164. package/dist/server/handlers/tools.js +5 -5
  165. package/dist/server/handlers/utils.cjs +3 -1
  166. package/dist/server/handlers/utils.d.ts +13 -0
  167. package/dist/server/handlers/utils.d.ts.map +1 -1
  168. package/dist/server/handlers/utils.js +2 -2
  169. package/dist/server/handlers/validate-agent-instructions.cjs +1 -1
  170. package/dist/server/handlers/validate-agent-instructions.js +1 -1
  171. package/dist/server/handlers/vector.cjs +1 -1
  172. package/dist/server/handlers/vector.js +1 -1
  173. package/dist/server/handlers/workflow-builder.cjs +5 -0
  174. package/dist/server/handlers/workflow-builder.d.ts +322 -0
  175. package/dist/server/handlers/workflow-builder.d.ts.map +1 -0
  176. package/dist/server/handlers/workflow-builder.js +2 -0
  177. package/dist/server/handlers/workflows.cjs +3 -3
  178. package/dist/server/handlers/workflows.js +3 -3
  179. package/dist/server/handlers/workspace.cjs +1 -1
  180. package/dist/server/handlers/workspace.js +1 -1
  181. package/dist/server/handlers.cjs +2 -2
  182. package/dist/server/handlers.js +2 -2
  183. package/dist/server/schemas/datasets.d.ts +18 -0
  184. package/dist/server/schemas/datasets.d.ts.map +1 -1
  185. package/dist/server/schemas/index.cjs +6 -3
  186. package/dist/server/schemas/index.js +4 -4
  187. package/dist/server/schemas/memory.d.ts +18 -0
  188. package/dist/server/schemas/memory.d.ts.map +1 -1
  189. package/dist/server/schemas/workflow-builder.d.ts +26 -0
  190. package/dist/server/schemas/workflow-builder.d.ts.map +1 -0
  191. package/dist/server/server-adapter/index.cjs +13 -3
  192. package/dist/server/server-adapter/index.cjs.map +1 -1
  193. package/dist/server/server-adapter/index.d.ts.map +1 -1
  194. package/dist/server/server-adapter/index.js +13 -3
  195. package/dist/server/server-adapter/index.js.map +1 -1
  196. package/dist/server/server-adapter/routes/conversations.d.ts +3 -3
  197. package/dist/server/server-adapter/routes/datasets.d.ts +27 -0
  198. package/dist/server/server-adapter/routes/datasets.d.ts.map +1 -1
  199. package/dist/server/server-adapter/routes/editor-builder.d.ts +319 -0
  200. package/dist/server/server-adapter/routes/editor-builder.d.ts.map +1 -1
  201. package/dist/server/server-adapter/routes/memory.d.ts +46 -0
  202. package/dist/server/server-adapter/routes/memory.d.ts.map +1 -1
  203. package/dist/server/server-adapter/routes/workspace.d.ts +23 -23
  204. package/dist/{utils-B2vd77Fi.js → utils-Duk4hfT_.js} +3 -3
  205. package/dist/{utils-B2vd77Fi.js.map → utils-Duk4hfT_.js.map} +1 -1
  206. package/dist/{utils-Hz8Hc2cd.js → utils-KsERfbhc.js} +24 -3
  207. package/dist/utils-KsERfbhc.js.map +1 -0
  208. package/dist/{utils-CmYnjLcY.cjs → utils-WcR0QSUB.cjs} +5 -5
  209. package/dist/{utils-CmYnjLcY.cjs.map → utils-WcR0QSUB.cjs.map} +1 -1
  210. package/dist/{utils-DJMUhfvY.cjs → utils-aIu3gkhJ.cjs} +35 -2
  211. package/dist/utils-aIu3gkhJ.cjs.map +1 -0
  212. package/dist/workflow-builder-C9DVk9Tw.js +102 -0
  213. package/dist/workflow-builder-C9DVk9Tw.js.map +1 -0
  214. package/dist/workflow-builder-_rQWs1B6.cjs +115 -0
  215. package/dist/workflow-builder-_rQWs1B6.cjs.map +1 -0
  216. package/package.json +6 -6
  217. package/dist/datasets-B4qPHzEy.js.map +0 -1
  218. package/dist/datasets-C-_ZWnxR.cjs.map +0 -1
  219. package/dist/dist-B8gYiHIX.js.map +0 -1
  220. package/dist/dist-CaVro31X.cjs.map +0 -1
  221. package/dist/memory-CVODqy7m.cjs.map +0 -1
  222. package/dist/routes-DCwOOz84.js.map +0 -1
  223. package/dist/routes-Dgd2S9av.cjs.map +0 -1
  224. package/dist/schema-Bv9OdW1f-CxTiW8RD.cjs.map +0 -1
  225. package/dist/schema-Bv9OdW1f-DLSJSqQv.js.map +0 -1
  226. package/dist/schema-CGeYTFwm.js +0 -2
  227. package/dist/schema-CNKnRmv1.cjs +0 -1
  228. package/dist/utils-DJMUhfvY.cjs.map +0 -1
  229. package/dist/utils-Hz8Hc2cd.js.map +0 -1
@@ -1318,7 +1318,7 @@ function toStandardSchema$4(schema) {
1318
1318
  return new AiSdkSchemaWrapper(schema);
1319
1319
  }
1320
1320
  //#endregion
1321
- //#region ../schema-compat/dist/json-schema-BstKYbJi.js
1321
+ //#region ../schema-compat/dist/json-schema-BKit3LVN.js
1322
1322
  var require_code$1 = /* @__PURE__ */ __commonJSMin(((exports) => {
1323
1323
  Object.defineProperty(exports, "__esModule", { value: true });
1324
1324
  exports.regexpCode = exports.getEsmExportName = exports.getProperty = exports.safeStringify = exports.stringify = exports.strConcat = exports.addCodeArg = exports.str = exports._ = exports.nil = exports._Code = exports.Name = exports.IDENTIFIER = exports._CodeOrName = void 0;
@@ -3924,11 +3924,27 @@ var require_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
3924
3924
  /** @type {(value: string) => boolean} */
3925
3925
  const isIPv4 = RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);
3926
3926
  /** @type {(value: string) => boolean} */
3927
+ const isPort = RegExp.prototype.test.bind(/^\d*$/u);
3928
+ /** @type {(value: string) => boolean} */
3927
3929
  const isHexPair = RegExp.prototype.test.bind(/^[\da-f]{2}$/iu);
3928
3930
  /** @type {(value: string) => boolean} */
3929
3931
  const isUnreserved = RegExp.prototype.test.bind(/^[\da-z\-._~]$/iu);
3930
3932
  /** @type {(value: string) => boolean} */
3931
- const isPathCharacter = RegExp.prototype.test.bind(/^[\da-z\-._~!$&'()*+,;=:@/]$/iu);
3933
+ const isPathCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/]$/u);
3934
+ /** @type {(value: string) => boolean} */
3935
+ const isQueryFragmentCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:@/?]$/u);
3936
+ /** @type {(value: string) => boolean} */
3937
+ const isUserinfoCharacter = RegExp.prototype.test.bind(/^[A-Za-z0-9\-._~!$&'()*+,;=:]$/u);
3938
+ const BYTE_HEX = new Array(256);
3939
+ {
3940
+ const HEX_DIGITS = "0123456789ABCDEF";
3941
+ for (let i = 0; i < 256; i++) BYTE_HEX[i] = "%" + HEX_DIGITS[i >> 4] + HEX_DIGITS[i & 15];
3942
+ }
3943
+ function percentEncodeNonAscii(cp) {
3944
+ if (cp < 2048) return BYTE_HEX[192 | cp >> 6] + BYTE_HEX[128 | cp & 63];
3945
+ if (cp < 65536) return BYTE_HEX[224 | cp >> 12] + BYTE_HEX[128 | cp >> 6 & 63] + BYTE_HEX[128 | cp & 63];
3946
+ return BYTE_HEX[240 | cp >> 18] + BYTE_HEX[128 | cp >> 12 & 63] + BYTE_HEX[128 | cp >> 6 & 63] + BYTE_HEX[128 | cp & 63];
3947
+ }
3932
3948
  /**
3933
3949
  * @param {Array<string>} input
3934
3950
  * @returns {string}
@@ -3951,119 +3967,162 @@ var require_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
3951
3967
  }
3952
3968
  return acc;
3953
3969
  }
3954
- /**
3955
- * @typedef {Object} GetIPV6Result
3956
- * @property {boolean} error - Indicates if there was an error parsing the IPv6 address.
3957
- * @property {string} address - The parsed IPv6 address.
3958
- * @property {string} [zone] - The zone identifier, if present.
3959
- */
3970
+ /** @type {(value: string) => boolean} */
3971
+ const isHextet = RegExp.prototype.test.bind(/^[\dA-Fa-f]{1,4}$/);
3972
+ /** @type {(value: string) => boolean} */
3973
+ const isIPvFuture = RegExp.prototype.test.bind(/^[vV][\dA-Fa-f]+\.[A-Za-z\d\-._~!$&'()*+,;=:]+$/);
3974
+ /** @type {(value: string) => boolean} */
3975
+ const isZoneCharacter = RegExp.prototype.test.bind(/^[A-Za-z\d\-._~]$/);
3960
3976
  /**
3961
3977
  * @param {string} value
3962
3978
  * @returns {boolean}
3963
3979
  */
3964
3980
  const nonSimpleDomain = RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);
3965
3981
  /**
3966
- * @param {Array<string>} buffer
3982
+ * @param {string} zone
3967
3983
  * @returns {boolean}
3968
3984
  */
3969
- function consumeIsZone(buffer) {
3970
- buffer.length = 0;
3985
+ function isZoneIdentifier(zone) {
3986
+ if (zone.length === 0) return false;
3987
+ for (let i = 0; i < zone.length; i++) {
3988
+ if (isZoneCharacter(zone[i])) continue;
3989
+ if (zone[i] === "%" && i + 2 < zone.length && isHexPair(zone.slice(i + 1, i + 3))) {
3990
+ i += 2;
3991
+ continue;
3992
+ }
3993
+ return false;
3994
+ }
3971
3995
  return true;
3972
3996
  }
3973
3997
  /**
3974
- * @param {Array<string>} buffer
3975
- * @param {Array<string>} address
3976
- * @param {GetIPV6Result} output
3977
- * @returns {boolean}
3998
+ * Compresses the longest run of zero hextets to "::" per RFC 5952. A run of a
3999
+ * single zero hextet is left uncompressed. On ties the leftmost run wins.
4000
+ *
4001
+ * @param {string[]} hextets
4002
+ * @returns {string}
3978
4003
  */
3979
- function consumeHextets(buffer, address, output) {
3980
- if (buffer.length) {
3981
- const hex = stringArrayToHexStripped(buffer);
3982
- if (hex !== "") address.push(hex);
3983
- else {
3984
- output.error = true;
3985
- return false;
4004
+ function compressIPv6ZeroRun(hextets) {
4005
+ let bestStart = -1;
4006
+ let bestLength = 0;
4007
+ let runStart = -1;
4008
+ let runLength = 0;
4009
+ for (let i = 0; i < hextets.length; i++) if (hextets[i] === "0") {
4010
+ if (runStart === -1) runStart = i;
4011
+ runLength++;
4012
+ if (runLength > bestLength) {
4013
+ bestLength = runLength;
4014
+ bestStart = runStart;
3986
4015
  }
3987
- buffer.length = 0;
4016
+ } else {
4017
+ runStart = -1;
4018
+ runLength = 0;
3988
4019
  }
3989
- return true;
4020
+ if (bestLength < 2) return hextets.join(":");
4021
+ const head = hextets.slice(0, bestStart).join(":");
4022
+ const tail = hextets.slice(bestStart + bestLength).join(":");
4023
+ return head + "::" + tail;
3990
4024
  }
3991
4025
  /**
4026
+ * Validates an IPv6 address against the alternatives in RFC 3986 section
4027
+ * 3.2.2 and returns the same address with leading hextet zeroes removed.
4028
+ * An embedded IPv4 address counts as two hextets and is only valid at the end.
4029
+ *
3992
4030
  * @param {string} input
3993
- * @returns {GetIPV6Result}
4031
+ * @returns {string|undefined}
3994
4032
  */
3995
- function getIPV6(input) {
3996
- let tokenCount = 0;
3997
- const output = {
3998
- error: false,
3999
- address: "",
4000
- zone: ""
4001
- };
4002
- /** @type {Array<string>} */
4003
- const address = [];
4004
- /** @type {Array<string>} */
4005
- const buffer = [];
4006
- let endipv6Encountered = false;
4007
- let endIpv6 = false;
4008
- let consume = consumeHextets;
4009
- for (let i = 0; i < input.length; i++) {
4010
- const cursor = input[i];
4011
- if (cursor === "[" || cursor === "]") continue;
4012
- if (cursor === ":") {
4013
- if (endipv6Encountered === true) endIpv6 = true;
4014
- if (!consume(buffer, address, output)) break;
4015
- if (++tokenCount > 7) {
4016
- output.error = true;
4017
- break;
4018
- }
4019
- if (i > 0 && input[i - 1] === ":") endipv6Encountered = true;
4020
- address.push(":");
4021
- continue;
4022
- } else if (cursor === "%") {
4023
- if (!consume(buffer, address, output)) break;
4024
- consume = consumeIsZone;
4025
- } else {
4026
- buffer.push(cursor);
4033
+ function normalizeIPv6Address(input) {
4034
+ const compression = input.indexOf("::");
4035
+ if (compression !== -1 && input.indexOf("::", compression + 1) !== -1) return void 0;
4036
+ const left = compression === -1 ? input.split(":") : input.slice(0, compression).split(":");
4037
+ const right = compression === -1 ? [] : input.slice(compression + 2).split(":");
4038
+ if (compression !== -1) {
4039
+ if (left.length === 1 && left[0] === "") left.length = 0;
4040
+ if (right.length === 1 && right[0] === "") right.length = 0;
4041
+ }
4042
+ const parts = left.concat(right);
4043
+ let hextetCount = 0;
4044
+ for (let i = 0; i < parts.length; i++) {
4045
+ const part = parts[i];
4046
+ if (part === "") return void 0;
4047
+ if (part.indexOf(".") !== -1) {
4048
+ if (i !== parts.length - 1 || compression !== -1 && right.length === 0 || !isIPv4(part)) return void 0;
4049
+ hextetCount += 2;
4027
4050
  continue;
4028
4051
  }
4052
+ if (!isHextet(part)) return void 0;
4053
+ parts[i] = parseInt(part, 16).toString(16);
4054
+ hextetCount++;
4029
4055
  }
4030
- if (buffer.length) if (consume === consumeIsZone) output.zone = buffer.join("");
4031
- else if (endIpv6) address.push(buffer.join(""));
4032
- else address.push(stringArrayToHexStripped(buffer));
4033
- output.address = address.join("");
4034
- return output;
4056
+ if (compression === -1) {
4057
+ if (hextetCount !== 8) return void 0;
4058
+ return compressIPv6ZeroRun(parts);
4059
+ }
4060
+ if (hextetCount >= 8) return void 0;
4061
+ const expanded = parts.slice(0, left.length);
4062
+ for (let i = hextetCount; i < 8; i++) expanded.push("0");
4063
+ for (let i = left.length; i < parts.length; i++) expanded.push(parts[i]);
4064
+ return compressIPv6ZeroRun(expanded);
4035
4065
  }
4036
4066
  /**
4037
4067
  * @typedef {Object} NormalizeIPv6Result
4038
4068
  * @property {string} host - The normalized host.
4039
4069
  * @property {string} [escapedHost] - The escaped host.
4040
4070
  * @property {boolean} isIPV6 - Indicates if the host is an IPv6 address.
4071
+ * @property {boolean} [isIPVFuture] - Indicates if the host is an IPvFuture literal.
4072
+ * @property {boolean} [error] - Indicates if a bracketed IP literal is malformed.
4041
4073
  */
4042
4074
  /**
4075
+ * Validates and normalizes a bracketed IP literal. Raw zone separators remain
4076
+ * accepted for backwards compatibility, while encoded separators and zone
4077
+ * contents follow RFC 6874.
4078
+ *
4043
4079
  * @param {string} host
4044
4080
  * @returns {NormalizeIPv6Result}
4045
4081
  */
4046
4082
  function normalizeIPv6(host) {
4047
- if (findToken(host, ":") < 2) return {
4083
+ const bracketed = host[0] === "[" && host[host.length - 1] === "]";
4084
+ if ((host[0] === "[" || host[host.length - 1] === "]") && !bracketed) return {
4048
4085
  host,
4049
- isIPV6: false
4086
+ isIPV6: false,
4087
+ error: true
4050
4088
  };
4051
- const ipv6 = getIPV6(host);
4052
- if (!ipv6.error) {
4053
- let newHost = ipv6.address;
4054
- let escapedHost = ipv6.address;
4055
- if (ipv6.zone) {
4056
- newHost += "%" + ipv6.zone;
4057
- escapedHost += "%25" + ipv6.zone;
4058
- }
4089
+ let input = bracketed ? host.slice(1, -1) : host;
4090
+ if (bracketed && isIPvFuture(input)) {
4091
+ input = input.toLowerCase();
4059
4092
  return {
4060
- host: newHost,
4061
- isIPV6: true,
4062
- escapedHost
4093
+ host: `[${input}]`,
4094
+ escapedHost: input,
4095
+ isIPV6: false,
4096
+ isIPVFuture: true
4063
4097
  };
4064
- } else return {
4098
+ }
4099
+ if (findToken(input, ":") < 2) return {
4100
+ host,
4101
+ isIPV6: false,
4102
+ error: bracketed
4103
+ };
4104
+ let zoneIdentifier = "";
4105
+ const zoneSeparator = input.indexOf("%");
4106
+ if (zoneSeparator !== -1) {
4107
+ const separatorLength = input.slice(zoneSeparator, zoneSeparator + 3).toLowerCase() === "%25" ? 3 : 1;
4108
+ zoneIdentifier = input.slice(zoneSeparator + separatorLength);
4109
+ if (!isZoneIdentifier(zoneIdentifier)) return {
4110
+ host,
4111
+ isIPV6: false,
4112
+ error: true
4113
+ };
4114
+ input = input.slice(0, zoneSeparator);
4115
+ }
4116
+ const address = normalizeIPv6Address(input);
4117
+ if (address === void 0) return {
4065
4118
  host,
4066
- isIPV6: false
4119
+ isIPV6: false,
4120
+ error: true
4121
+ };
4122
+ return {
4123
+ host: address + (zoneIdentifier ? "%" + zoneIdentifier : ""),
4124
+ escapedHost: address + (zoneIdentifier ? "%25" + zoneIdentifier : ""),
4125
+ isIPV6: true
4067
4126
  };
4068
4127
  }
4069
4128
  /**
@@ -4176,7 +4235,7 @@ var require_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4176
4235
  }
4177
4236
  /**
4178
4237
  * Normalizes percent escapes and optionally decodes only unreserved ASCII bytes.
4179
- * Reserved delimiters such as `%2F` and `%2E` stay escaped.
4238
+ * Reserved delimiters such as `%2F` stay escaped; `%2E` is unreserved.
4180
4239
  *
4181
4240
  * @param {string} input
4182
4241
  * @param {boolean} [decodeUnreserved=false]
@@ -4212,7 +4271,8 @@ var require_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4212
4271
  function normalizePathEncoding(input) {
4213
4272
  let output = "";
4214
4273
  for (let i = 0; i < input.length; i++) {
4215
- if (input[i] === "%" && i + 2 < input.length) {
4274
+ const ch = input[i];
4275
+ if (ch === "%" && i + 2 < input.length) {
4216
4276
  const hex = input.slice(i + 1, i + 3);
4217
4277
  if (isHexPair(hex)) {
4218
4278
  const normalizedHex = hex.toUpperCase();
@@ -4223,8 +4283,168 @@ var require_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4223
4283
  continue;
4224
4284
  }
4225
4285
  }
4226
- if (isPathCharacter(input[i])) output += input[i];
4227
- else output += escape(input[i]);
4286
+ if (isPathCharacter(ch)) output += ch;
4287
+ else {
4288
+ const code = input.charCodeAt(i);
4289
+ if (code < 128) output += isEscapeSafe(code) ? ch : BYTE_HEX[code];
4290
+ else if (code < 55296 || code > 57343) output += percentEncodeNonAscii(code);
4291
+ else if (code <= 56319 && i + 1 < input.length) {
4292
+ const low = input.charCodeAt(i + 1);
4293
+ if (low >= 56320 && low <= 57343) {
4294
+ output += percentEncodeNonAscii(65536 + (code - 55296 << 10) + (low - 56320));
4295
+ i++;
4296
+ } else output += percentEncodeNonAscii(65533);
4297
+ } else output += percentEncodeNonAscii(65533);
4298
+ }
4299
+ }
4300
+ return output;
4301
+ }
4302
+ /**
4303
+ * Serializes a path without rewriting reserved data. Raw RFC 3986 path
4304
+ * characters remain literal, valid escapes are preserved and uppercased, and
4305
+ * everything else is UTF-8 percent-encoded. In a path-noscheme, a colon in the
4306
+ * first segment must be escaped so the result cannot be parsed as a scheme.
4307
+ *
4308
+ * @param {string} input
4309
+ * @param {boolean} [pathNoScheme=false]
4310
+ * @returns {string}
4311
+ */
4312
+ function serializePathEncoding(input, pathNoScheme = false) {
4313
+ let output = "";
4314
+ let firstSegment = pathNoScheme && input[0] !== "/";
4315
+ for (let i = 0; i < input.length; i++) {
4316
+ const ch = input[i];
4317
+ if (ch === "%" && i + 2 < input.length) {
4318
+ const hex = input.slice(i + 1, i + 3);
4319
+ if (isHexPair(hex)) {
4320
+ output += "%" + hex.toUpperCase();
4321
+ i += 2;
4322
+ continue;
4323
+ }
4324
+ }
4325
+ if (ch === "/") firstSegment = false;
4326
+ if (isPathCharacter(ch) && (ch !== ":" || !firstSegment)) output += ch;
4327
+ else {
4328
+ const code = input.charCodeAt(i);
4329
+ if (code < 128) output += BYTE_HEX[code];
4330
+ else if (code < 55296 || code > 57343) output += percentEncodeNonAscii(code);
4331
+ else if (code <= 56319 && i + 1 < input.length) {
4332
+ const low = input.charCodeAt(i + 1);
4333
+ if (low >= 56320 && low <= 57343) {
4334
+ output += percentEncodeNonAscii(65536 + (code - 55296 << 10) + (low - 56320));
4335
+ i++;
4336
+ } else output += percentEncodeNonAscii(65533);
4337
+ } else output += percentEncodeNonAscii(65533);
4338
+ }
4339
+ }
4340
+ return output;
4341
+ }
4342
+ /**
4343
+ * Percent-encodes a URI component using its RFC 3986 literal character set.
4344
+ * Existing valid escapes are preserved and normalized to uppercase hex.
4345
+ *
4346
+ * @param {string} input
4347
+ * @param {(value: string) => boolean} isAllowed
4348
+ * @returns {string}
4349
+ */
4350
+ function encodeComponent(input, isAllowed) {
4351
+ let output = "";
4352
+ for (let i = 0; i < input.length; i++) {
4353
+ const ch = input[i];
4354
+ if (ch === "%" && i + 2 < input.length) {
4355
+ const hex = input.slice(i + 1, i + 3);
4356
+ if (isHexPair(hex)) {
4357
+ output += "%" + hex.toUpperCase();
4358
+ i += 2;
4359
+ continue;
4360
+ }
4361
+ }
4362
+ if (isAllowed(ch)) output += ch;
4363
+ else {
4364
+ const code = input.charCodeAt(i);
4365
+ if (code < 128) output += BYTE_HEX[code];
4366
+ else if (code < 55296 || code > 57343) output += percentEncodeNonAscii(code);
4367
+ else if (code <= 56319 && i + 1 < input.length) {
4368
+ const low = input.charCodeAt(i + 1);
4369
+ if (low >= 56320 && low <= 57343) {
4370
+ output += percentEncodeNonAscii(65536 + (code - 55296 << 10) + (low - 56320));
4371
+ i++;
4372
+ } else output += percentEncodeNonAscii(65533);
4373
+ } else output += percentEncodeNonAscii(65533);
4374
+ }
4375
+ }
4376
+ return output;
4377
+ }
4378
+ /**
4379
+ * Encodes userinfo while preserving its RFC 3986 §3.2.1 literal characters.
4380
+ * In particular, authority delimiters such as `@`, `/`, `?`, and `#` are data.
4381
+ *
4382
+ * @param {string} input
4383
+ * @returns {string}
4384
+ */
4385
+ function encodeUserinfo(input) {
4386
+ return encodeComponent(input, isUserinfoCharacter);
4387
+ }
4388
+ /**
4389
+ * Encodes query data using the RFC 3986 §3.4 grammar. A literal `#` must be
4390
+ * escaped because it would otherwise begin the fragment component.
4391
+ *
4392
+ * @param {string} input
4393
+ * @returns {string}
4394
+ */
4395
+ function encodeQuery(input) {
4396
+ return encodeComponent(input, isQueryFragmentCharacter);
4397
+ }
4398
+ /**
4399
+ * Encodes fragment data using the RFC 3986 §3.5 grammar.
4400
+ *
4401
+ * @param {string} input
4402
+ * @returns {string}
4403
+ */
4404
+ function encodeFragment(input) {
4405
+ return encodeComponent(input, isQueryFragmentCharacter);
4406
+ }
4407
+ function isEscapeSafe(cp) {
4408
+ return cp >= 48 && cp <= 57 || cp >= 65 && cp <= 90 || cp >= 97 && cp <= 122 || cp === 42 || cp === 43 || cp === 45 || cp === 46 || cp === 47 || cp === 64 || cp === 95;
4409
+ }
4410
+ /**
4411
+ * Normalizes the percent-encoding of a query or fragment component.
4412
+ *
4413
+ * Like `normalizePathEncoding`, but uses the query/fragment character set
4414
+ * (which additionally allows `?`) and decodes `.` since it has no dot-segment
4415
+ * meaning outside of a path.
4416
+ *
4417
+ * @param {string} input
4418
+ * @returns {string}
4419
+ */
4420
+ function normalizeQueryFragmentEncoding(input) {
4421
+ let output = "";
4422
+ for (let i = 0; i < input.length; i++) {
4423
+ const ch = input[i];
4424
+ if (ch === "%" && i + 2 < input.length) {
4425
+ const hex = input.slice(i + 1, i + 3);
4426
+ if (isHexPair(hex)) {
4427
+ const normalizedHex = hex.toUpperCase();
4428
+ const decoded = String.fromCharCode(parseInt(normalizedHex, 16));
4429
+ if (isUnreserved(decoded)) output += decoded;
4430
+ else output += "%" + normalizedHex;
4431
+ i += 2;
4432
+ continue;
4433
+ }
4434
+ }
4435
+ if (isQueryFragmentCharacter(ch)) output += ch;
4436
+ else {
4437
+ const code = input.charCodeAt(i);
4438
+ if (code < 128) output += isEscapeSafe(code) ? ch : BYTE_HEX[code];
4439
+ else if (code < 55296 || code > 57343) output += percentEncodeNonAscii(code);
4440
+ else if (code <= 56319 && i + 1 < input.length) {
4441
+ const low = input.charCodeAt(i + 1);
4442
+ if (low >= 56320 && low <= 57343) {
4443
+ output += percentEncodeNonAscii(65536 + (code - 55296 << 10) + (low - 56320));
4444
+ i++;
4445
+ } else output += percentEncodeNonAscii(65533);
4446
+ } else output += percentEncodeNonAscii(65533);
4447
+ }
4228
4448
  }
4229
4449
  return output;
4230
4450
  }
@@ -4256,21 +4476,27 @@ var require_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4256
4476
  function recomposeAuthority(component) {
4257
4477
  const uriTokens = [];
4258
4478
  if (component.userinfo !== void 0) {
4259
- uriTokens.push(component.userinfo);
4479
+ uriTokens.push(encodeUserinfo(component.userinfo));
4260
4480
  uriTokens.push("@");
4261
4481
  }
4262
4482
  if (component.host !== void 0) {
4263
- let host = unescape(component.host);
4483
+ let host = component.host;
4264
4484
  if (!isIPv4(host)) {
4265
- const ipV6res = normalizeIPv6(host);
4266
- if (ipV6res.isIPV6 === true) host = `[${ipV6res.escapedHost}]`;
4485
+ let ipV6res = normalizeIPv6(host);
4486
+ if (ipV6res.isIPV6 !== true && ipV6res.isIPVFuture !== true) {
4487
+ host = normalizePercentEncoding(host, true);
4488
+ ipV6res = normalizeIPv6(host);
4489
+ }
4490
+ if (ipV6res.isIPV6 === true || ipV6res.isIPVFuture === true) host = `[${ipV6res.escapedHost}]`;
4267
4491
  else host = reescapeHostDelimiters(host, false);
4268
4492
  }
4269
4493
  uriTokens.push(host);
4270
4494
  }
4271
4495
  if (typeof component.port === "number" || typeof component.port === "string") {
4496
+ const port = String(component.port);
4497
+ if (!isPort(port)) throw new TypeError("URI port is malformed.");
4272
4498
  uriTokens.push(":");
4273
- uriTokens.push(String(component.port));
4499
+ uriTokens.push(port);
4274
4500
  }
4275
4501
  return uriTokens.length ? uriTokens.join("") : void 0;
4276
4502
  }
@@ -4280,6 +4506,11 @@ var require_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4280
4506
  reescapeHostDelimiters,
4281
4507
  normalizePercentEncoding,
4282
4508
  normalizePathEncoding,
4509
+ serializePathEncoding,
4510
+ normalizeQueryFragmentEncoding,
4511
+ encodeUserinfo,
4512
+ encodeQuery,
4513
+ encodeFragment,
4283
4514
  escapePreservingEscapes,
4284
4515
  removeDotSegments,
4285
4516
  isIPv4,
@@ -4290,7 +4521,7 @@ var require_utils = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4290
4521
  }));
4291
4522
  var require_schemes = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4292
4523
  const { isUUID } = require_utils();
4293
- const URN_REG = /([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu;
4524
+ const URN_REG = /^([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-./:;=@]|%[\da-f]{2})+)$/iu;
4294
4525
  const supportedSchemeNames = [
4295
4526
  "http",
4296
4527
  "https",
@@ -4361,9 +4592,10 @@ var require_schemes = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4361
4592
  wsComponent.secure = void 0;
4362
4593
  }
4363
4594
  if (wsComponent.resourceName) {
4364
- const [path, query] = wsComponent.resourceName.split("?");
4595
+ const queryIndex = wsComponent.resourceName.indexOf("?");
4596
+ const path = queryIndex === -1 ? wsComponent.resourceName : wsComponent.resourceName.slice(0, queryIndex);
4365
4597
  wsComponent.path = path && path !== "/" ? path : void 0;
4366
- wsComponent.query = query;
4598
+ wsComponent.query = queryIndex === -1 ? void 0 : wsComponent.resourceName.slice(queryIndex + 1);
4367
4599
  wsComponent.resourceName = void 0;
4368
4600
  }
4369
4601
  wsComponent.fragment = void 0;
@@ -4376,7 +4608,7 @@ var require_schemes = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4376
4608
  return urnComponent;
4377
4609
  }
4378
4610
  const matches = urnComponent.path.match(URN_REG);
4379
- if (matches) {
4611
+ if (matches && matches[0] === urnComponent.path) {
4380
4612
  const scheme = options.scheme || urnComponent.scheme || "urn";
4381
4613
  urnComponent.nid = matches[1].toLowerCase();
4382
4614
  urnComponent.nss = matches[2];
@@ -4470,8 +4702,19 @@ var require_schemes = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4470
4702
  };
4471
4703
  }));
4472
4704
  var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4473
- const { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, escapePreservingEscapes, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require_utils();
4705
+ const { normalizeIPv6, removeDotSegments, recomposeAuthority, normalizePercentEncoding, normalizePathEncoding, serializePathEncoding, normalizeQueryFragmentEncoding, encodeQuery, encodeFragment, reescapeHostDelimiters, isIPv4, nonSimpleDomain } = require_utils();
4474
4706
  const { SCHEMES, getSchemeHandler } = require_schemes();
4707
+ const VALID_SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*$/u;
4708
+ const MALFORMED_SCHEME_ERROR = "URI scheme is malformed.";
4709
+ /**
4710
+ * @param {string} scheme
4711
+ * @returns {string}
4712
+ */
4713
+ function decodeValidScheme(scheme) {
4714
+ const decodedScheme = unescape(String(scheme));
4715
+ if (!VALID_SCHEME.test(decodedScheme)) throw new TypeError(MALFORMED_SCHEME_ERROR);
4716
+ return decodedScheme;
4717
+ }
4475
4718
  /**
4476
4719
  * @template {import('./types/index').URIComponent|string} T
4477
4720
  * @param {T} uri
@@ -4491,10 +4734,16 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4491
4734
  */
4492
4735
  function resolve(baseURI, relativeURI, options) {
4493
4736
  const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
4494
- const { parsed: baseParsed, malformedAuthorityOrPort: baseMalformed } = parseWithStatus(baseURI, schemelessOptions);
4495
- const { parsed: relativeParsed, malformedAuthorityOrPort: relativeMalformed } = parseWithStatus(relativeURI, schemelessOptions);
4496
- if (baseMalformed || relativeMalformed) throw new Error(baseParsed.error || relativeParsed.error || "URI is malformed.");
4737
+ const { parsed: baseParsed, malformedAuthorityOrPort: baseMalformed, malformedPercentEncoding: baseMalformedPercentEncoding, malformedSchemeSpecific: baseMalformedSchemeSpecific, malformedHost: baseMalformedHost, malformedScheme: baseMalformedScheme } = parseWithStatus(baseURI, schemelessOptions);
4738
+ const { parsed: relativeParsed, malformedAuthorityOrPort: relativeMalformed, malformedPercentEncoding: relativeMalformedPercentEncoding, malformedSchemeSpecific: relativeMalformedSchemeSpecific, malformedHost: relativeMalformedHost, malformedScheme: relativeMalformedScheme } = parseWithStatus(relativeURI, schemelessOptions);
4739
+ if (baseMalformed || relativeMalformed || baseMalformedPercentEncoding || relativeMalformedPercentEncoding || baseMalformedSchemeSpecific || relativeMalformedSchemeSpecific || baseMalformedHost || relativeMalformedHost || baseMalformedScheme || relativeMalformedScheme) throw new Error(baseParsed.error || relativeParsed.error || "URI is malformed.");
4497
4740
  const resolved = resolveComponent(baseParsed, relativeParsed, schemelessOptions, true);
4741
+ const resolvedSchemeHandler = getSchemeHandler(options && options.scheme || resolved.scheme);
4742
+ const resolvedHost = resolved.host;
4743
+ const resolvedHostIsIP = resolvedHost !== void 0 && resolvedHost !== "" && (isIPv4(resolvedHost) || normalizeIPv6(resolvedHost).isIPV6);
4744
+ canonicalizeHost(resolved, options || {}, resolvedSchemeHandler, resolvedHostIsIP);
4745
+ const encodedASCIIHost = resolvedHost && resolvedHost.indexOf("%") !== -1 && !/\P{ASCII}/u.test(resolvedHost);
4746
+ if (resolved.error && !encodedASCIIHost) throw new Error(resolved.error);
4498
4747
  schemelessOptions.skipEscape = true;
4499
4748
  return serialize(resolved, schemelessOptions);
4500
4749
  }
@@ -4560,7 +4809,7 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4560
4809
  function equal(uriA, uriB, options) {
4561
4810
  const normalizedA = normalizeComparableURI(uriA, options);
4562
4811
  const normalizedB = normalizeComparableURI(uriB, options);
4563
- return normalizedA !== void 0 && normalizedB !== void 0 && normalizedA.toLowerCase() === normalizedB.toLowerCase();
4812
+ return normalizedA !== void 0 && normalizedB !== void 0 && normalizedA === normalizedB;
4564
4813
  }
4565
4814
  /**
4566
4815
  * @param {Readonly<import('./types/index').URIComponent>} cmpts
@@ -4586,13 +4835,17 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4586
4835
  };
4587
4836
  const options = Object.assign({}, opts);
4588
4837
  const uriTokens = [];
4838
+ if (component.scheme) component.scheme = decodeValidScheme(component.scheme);
4589
4839
  const schemeHandler = getSchemeHandler(options.scheme || component.scheme);
4590
4840
  if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(component, options);
4591
- if (component.path !== void 0) if (!options.skipEscape) {
4592
- component.path = escapePreservingEscapes(component.path);
4593
- if (component.scheme !== void 0) component.path = component.path.split("%3A").join(":");
4594
- } else component.path = normalizePercentEncoding(component.path);
4595
- if (options.reference !== "suffix" && component.scheme) uriTokens.push(component.scheme, ":");
4841
+ const hasAuthority = component.userinfo !== void 0 || component.host !== void 0 || component.port !== void 0;
4842
+ const pathNoScheme = !options.skipEscape && component.scheme === void 0 && !hasAuthority;
4843
+ if (component.path !== void 0) if (!options.skipEscape) component.path = serializePathEncoding(component.path, pathNoScheme);
4844
+ else component.path = normalizePercentEncoding(component.path);
4845
+ if (options.reference !== "suffix" && component.scheme) {
4846
+ component.scheme = decodeValidScheme(component.scheme);
4847
+ uriTokens.push(component.scheme, ":");
4848
+ }
4596
4849
  const authority = recomposeAuthority(component);
4597
4850
  if (authority !== void 0) {
4598
4851
  if (options.reference !== "suffix") uriTokens.push("//");
@@ -4602,11 +4855,12 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4602
4855
  if (component.path !== void 0) {
4603
4856
  let s = component.path;
4604
4857
  if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) s = removeDotSegments(s);
4858
+ if (pathNoScheme) s = serializePathEncoding(s, true);
4605
4859
  if (authority === void 0 && s[0] === "/" && s[1] === "/") s = "/%2F" + s.slice(2);
4606
4860
  uriTokens.push(s);
4607
4861
  }
4608
- if (component.query !== void 0) uriTokens.push("?", component.query);
4609
- if (component.fragment !== void 0) uriTokens.push("#", component.fragment);
4862
+ if (component.query !== void 0) uriTokens.push("?", encodeQuery(component.query));
4863
+ if (component.fragment !== void 0) uriTokens.push("#", encodeFragment(component.fragment));
4610
4864
  return uriTokens.join("");
4611
4865
  }
4612
4866
  const URI_PARSE = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;
@@ -4622,9 +4876,61 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4622
4876
  if (typeof parsed.port === "number" && (parsed.port < 0 || parsed.port > 65535)) return "URI port is malformed.";
4623
4877
  }
4624
4878
  /**
4879
+ * Checks percent syntax without decoding the represented octets. RFC 3986
4880
+ * percent-encoding is byte-oriented, so sequences such as `%FF` are valid even
4881
+ * though they are not independently valid UTF-8.
4882
+ *
4883
+ * @param {string|undefined} component
4884
+ * @returns {boolean}
4885
+ */
4886
+ function hasMalformedPercentEncoding(component) {
4887
+ if (component === void 0) return false;
4888
+ let percent = component.indexOf("%");
4889
+ while (percent !== -1) {
4890
+ if (percent + 2 >= component.length || !/^[\da-f]{2}$/iu.test(component.slice(percent + 1, percent + 3))) return true;
4891
+ percent = component.indexOf("%", percent + 3);
4892
+ }
4893
+ return false;
4894
+ }
4895
+ /**
4896
+ * Whether the host is a bracketed IP literal (RFC 3986 `IP-literal`).
4897
+ * An unterminated `[` is not a literal, so it must still be validated as a
4898
+ * reg-name instead of being waved through as an IP.
4899
+ *
4900
+ * @param {string} host
4901
+ * @returns {boolean}
4902
+ */
4903
+ function isIPLiteral(host) {
4904
+ return host[0] === "[" && host[host.length - 1] === "]";
4905
+ }
4906
+ /**
4907
+ * @param {RegExpMatchArray} matches
4908
+ * @returns {boolean}
4909
+ */
4910
+ function hasMalformedComponentPercentEncoding(matches) {
4911
+ const host = matches[4];
4912
+ return hasMalformedPercentEncoding(matches[3]) || host !== void 0 && !isIPLiteral(host) && hasMalformedPercentEncoding(host) || hasMalformedPercentEncoding(matches[6]) || hasMalformedPercentEncoding(matches[7]) || hasMalformedPercentEncoding(matches[8]);
4913
+ }
4914
+ /**
4915
+ * @param {import('./types/index').URIComponent} parsed
4916
+ * @param {import('./types/index').Options} options
4917
+ * @param {{ domainHost?: boolean, unicodeSupport?: boolean }|undefined} schemeHandler
4918
+ * @param {boolean} isIP
4919
+ * @returns {boolean} whether host conversion failed
4920
+ */
4921
+ function canonicalizeHost(parsed, options, schemeHandler, isIP) {
4922
+ if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport) && parsed.host && !isIPLiteral(parsed.host) && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP === false && nonSimpleDomain(parsed.host)) try {
4923
+ parsed.host = new URL("http://" + parsed.host).hostname;
4924
+ } catch (e) {
4925
+ parsed.error = parsed.error || "Host's domain name can not be converted to ASCII: " + e;
4926
+ return true;
4927
+ }
4928
+ return false;
4929
+ }
4930
+ /**
4625
4931
  * @param {string} uri
4626
4932
  * @param {import('./types/index').Options} [opts]
4627
- * @returns {{ parsed: import('./types/index').URIComponent, malformedAuthorityOrPort: boolean }}
4933
+ * @returns {{ parsed: import('./types/index').URIComponent, malformedAuthorityOrPort: boolean, malformedPercentEncoding: boolean, malformedSchemeSpecific: boolean, malformedHost: boolean, malformedScheme: boolean }}
4628
4934
  */
4629
4935
  function parseWithStatus(uri, opts) {
4630
4936
  const options = Object.assign({}, opts);
@@ -4639,6 +4945,11 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4639
4945
  fragment: void 0
4640
4946
  };
4641
4947
  let malformedAuthorityOrPort = false;
4948
+ let malformedPercentEncoding = false;
4949
+ let malformedSchemeSpecific = false;
4950
+ let malformedHost = false;
4951
+ let malformedIPLiteral = false;
4952
+ let malformedScheme = false;
4642
4953
  let isIP = false;
4643
4954
  if (options.reference === "suffix") if (options.scheme) uri = options.scheme + ":" + uri;
4644
4955
  else uri = "//" + uri;
@@ -4670,6 +4981,16 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4670
4981
  parsed.path = matches[6] || "";
4671
4982
  parsed.query = matches[7];
4672
4983
  parsed.fragment = matches[8];
4984
+ if (parsed.scheme !== void 0) {
4985
+ const decodedScheme = unescape(parsed.scheme);
4986
+ if (VALID_SCHEME.test(decodedScheme)) parsed.scheme = decodedScheme.toLowerCase();
4987
+ else {
4988
+ parsed.error = parsed.error || MALFORMED_SCHEME_ERROR;
4989
+ malformedScheme = true;
4990
+ }
4991
+ }
4992
+ malformedPercentEncoding = hasMalformedComponentPercentEncoding(matches);
4993
+ if (malformedPercentEncoding) parsed.error = parsed.error || "URI contains malformed percent-encoding.";
4673
4994
  if (isNaN(parsed.port)) parsed.port = matches[5];
4674
4995
  const parseError = getParseError(parsed, matches);
4675
4996
  if (parseError !== void 0) {
@@ -4677,9 +4998,16 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4677
4998
  malformedAuthorityOrPort = true;
4678
4999
  }
4679
5000
  if (parsed.host) if (isIPv4(parsed.host) === false) {
5001
+ const bracketedIPLiteral = isIPLiteral(parsed.host);
5002
+ const hasIPLiteralBracket = parsed.host.indexOf("[") !== -1 || parsed.host.indexOf("]") !== -1;
4680
5003
  const ipv6result = normalizeIPv6(parsed.host);
4681
- parsed.host = ipv6result.host.toLowerCase();
4682
- isIP = ipv6result.isIPV6;
5004
+ isIP = ipv6result.isIPV6 || ipv6result.isIPVFuture === true;
5005
+ malformedIPLiteral = hasIPLiteralBracket && (!bracketedIPLiteral || ipv6result.error === true);
5006
+ parsed.host = isIP ? ipv6result.host : ipv6result.host.toLowerCase();
5007
+ if (malformedIPLiteral) {
5008
+ parsed.error = parsed.error || "URI host is malformed.";
5009
+ malformedAuthorityOrPort = true;
5010
+ }
4683
5011
  } else isIP = true;
4684
5012
  if (parsed.scheme === void 0 && parsed.userinfo === void 0 && parsed.host === void 0 && parsed.port === void 0 && parsed.query === void 0 && !parsed.path) parsed.reference = "same-document";
4685
5013
  else if (parsed.scheme === void 0) parsed.reference = "relative";
@@ -4687,30 +5015,30 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4687
5015
  else parsed.reference = "uri";
4688
5016
  if (options.reference && options.reference !== "suffix" && options.reference !== parsed.reference) parsed.error = parsed.error || "URI is not a " + options.reference + " reference.";
4689
5017
  const schemeHandler = getSchemeHandler(options.scheme || parsed.scheme);
4690
- if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {
4691
- if (parsed.host && (options.domainHost || schemeHandler && schemeHandler.domainHost) && isIP === false && nonSimpleDomain(parsed.host)) try {
4692
- parsed.host = new URL("http://" + parsed.host).hostname;
4693
- } catch (e) {
4694
- parsed.error = parsed.error || "Host's domain name can not be converted to ASCII: " + e;
4695
- }
4696
- }
5018
+ if (!malformedIPLiteral) malformedHost = canonicalizeHost(parsed, options, schemeHandler, isIP);
4697
5019
  if (!schemeHandler || schemeHandler && !schemeHandler.skipNormalize) {
4698
5020
  if (uri.indexOf("%") !== -1) {
4699
- if (parsed.scheme !== void 0) parsed.scheme = unescape(parsed.scheme);
4700
- if (parsed.host !== void 0) parsed.host = reescapeHostDelimiters(unescape(parsed.host), isIP);
5021
+ if (parsed.host !== void 0 && !malformedIPLiteral) {
5022
+ const host = isIP ? parsed.host : normalizePercentEncoding(parsed.host, true);
5023
+ parsed.host = reescapeHostDelimiters(host, isIP);
5024
+ }
4701
5025
  }
4702
5026
  if (parsed.path) parsed.path = normalizePathEncoding(parsed.path);
4703
- if (parsed.fragment) try {
4704
- parsed.fragment = encodeURI(decodeURIComponent(parsed.fragment));
4705
- } catch {
4706
- parsed.error = parsed.error || "URI malformed";
4707
- }
5027
+ if (parsed.query) parsed.query = normalizeQueryFragmentEncoding(parsed.query);
5028
+ if (parsed.fragment) parsed.fragment = normalizeQueryFragmentEncoding(parsed.fragment);
5029
+ }
5030
+ if (schemeHandler && schemeHandler.parse) {
5031
+ schemeHandler.parse(parsed, options);
5032
+ if (schemeHandler === SCHEMES.urn && parsed.nid === void 0) malformedSchemeSpecific = true;
4708
5033
  }
4709
- if (schemeHandler && schemeHandler.parse) schemeHandler.parse(parsed, options);
4710
5034
  } else parsed.error = parsed.error || "URI can not be parsed.";
4711
5035
  return {
4712
5036
  parsed,
4713
- malformedAuthorityOrPort
5037
+ malformedAuthorityOrPort,
5038
+ malformedPercentEncoding,
5039
+ malformedSchemeSpecific,
5040
+ malformedHost,
5041
+ malformedScheme
4714
5042
  };
4715
5043
  }
4716
5044
  /**
@@ -4732,13 +5060,17 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4732
5060
  /**
4733
5061
  * @param {string} uri
4734
5062
  * @param {import('./types/index').Options} [opts]
4735
- * @returns {{ normalized: string, malformedAuthorityOrPort: boolean }}
5063
+ * @returns {{ normalized: string, malformedAuthorityOrPort: boolean, malformedPercentEncoding: boolean, malformedSchemeSpecific: boolean, malformedHost: boolean, malformedScheme: boolean }}
4736
5064
  */
4737
5065
  function normalizeStringWithStatus(uri, opts) {
4738
- const { parsed, malformedAuthorityOrPort } = parseWithStatus(uri, opts);
5066
+ const { parsed, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = parseWithStatus(uri, opts);
4739
5067
  return {
4740
- normalized: malformedAuthorityOrPort ? uri : serialize(parsed, opts),
4741
- malformedAuthorityOrPort
5068
+ normalized: malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? uri : serialize(parsed, opts),
5069
+ malformedAuthorityOrPort,
5070
+ malformedPercentEncoding,
5071
+ malformedSchemeSpecific,
5072
+ malformedHost,
5073
+ malformedScheme
4742
5074
  };
4743
5075
  }
4744
5076
  /**
@@ -4747,11 +5079,15 @@ var require_fast_uri = /* @__PURE__ */ __commonJSMin(((exports, module) => {
4747
5079
  * @returns {string|undefined}
4748
5080
  */
4749
5081
  function normalizeComparableURI(uri, opts) {
4750
- if (typeof uri === "string") {
4751
- const { normalized, malformedAuthorityOrPort } = normalizeStringWithStatus(uri, opts);
4752
- return malformedAuthorityOrPort ? void 0 : normalized;
5082
+ if (typeof uri !== "string" && typeof uri !== "object") return;
5083
+ let value;
5084
+ try {
5085
+ value = typeof uri === "string" ? uri : serialize(uri, opts);
5086
+ } catch {
5087
+ return;
4753
5088
  }
4754
- if (typeof uri === "object") return serialize(uri, opts);
5089
+ const { normalized, malformedAuthorityOrPort, malformedPercentEncoding, malformedSchemeSpecific, malformedHost, malformedScheme } = normalizeStringWithStatus(value, opts);
5090
+ return malformedAuthorityOrPort || malformedPercentEncoding || malformedSchemeSpecific || malformedHost || malformedScheme ? void 0 : normalized;
4755
5091
  }
4756
5092
  const fastUri = {
4757
5093
  SCHEMES,
@@ -8026,7 +8362,7 @@ function toStandardSchema$2(zodSchema) {
8026
8362
  return wrapper;
8027
8363
  }
8028
8364
  //#endregion
8029
- //#region ../schema-compat/dist/schema-Bv9OdW1f.js
8365
+ //#region ../schema-compat/dist/schema-D_ikovK6.js
8030
8366
  /**
8031
8367
  * Supported JSON Schema targets for z.toJSONSchema().
8032
8368
  * Works with both real Zod v4 and Zod 3.25's v4 compat layer.
@@ -8275,4 +8611,4 @@ function standardSchemaToJSONSchema(schema, options = {}) {
8275
8611
  //#endregion
8276
8612
  export { require_json_schema_traverse as a, __toESM as i, standardSchemaToJSONSchema as n, toStandardSchema as r, isStandardSchemaWithJSON as t };
8277
8613
 
8278
- //# sourceMappingURL=schema-Bv9OdW1f-DLSJSqQv.js.map
8614
+ //# sourceMappingURL=schema-D_ikovK6-BzTeMhWf.js.map