@bessemer/cornerstone 0.5.113 → 0.5.115

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 (255) hide show
  1. package/dist/array.d.ts.map +1 -1
  2. package/dist/array.js +28 -28
  3. package/dist/array.js.map +1 -1
  4. package/dist/aspect-ratio.d.ts +3 -3
  5. package/dist/aspect-ratio.d.ts.map +1 -1
  6. package/dist/aspect-ratio.js +13 -12
  7. package/dist/aspect-ratio.js.map +1 -1
  8. package/dist/assertion.d.ts.map +1 -1
  9. package/dist/assertion.js +5 -5
  10. package/dist/assertion.js.map +1 -1
  11. package/dist/async-value.js +2 -2
  12. package/dist/async-value.js.map +1 -1
  13. package/dist/async.d.ts.map +1 -1
  14. package/dist/async.js +2 -2
  15. package/dist/async.js.map +1 -1
  16. package/dist/cache.d.ts.map +1 -1
  17. package/dist/cache.js +11 -12
  18. package/dist/cache.js.map +1 -1
  19. package/dist/combinable.js +5 -5
  20. package/dist/combinable.js.map +1 -1
  21. package/dist/comparator.js +8 -8
  22. package/dist/comparator.js.map +1 -1
  23. package/dist/data-size.d.ts +2 -1
  24. package/dist/data-size.d.ts.map +1 -1
  25. package/dist/data-size.js +3 -3
  26. package/dist/data-size.js.map +1 -1
  27. package/dist/either.js +5 -5
  28. package/dist/either.js.map +1 -1
  29. package/dist/equalitor.d.ts.map +1 -1
  30. package/dist/equalitor.js +2 -2
  31. package/dist/equalitor.js.map +1 -1
  32. package/dist/error/error-cause.d.ts.map +1 -1
  33. package/dist/error/error-cause.js +14 -14
  34. package/dist/error/error-cause.js.map +1 -1
  35. package/dist/error/error-code.js +2 -2
  36. package/dist/error/error-code.js.map +1 -1
  37. package/dist/error/error-event.d.ts +3 -2
  38. package/dist/error/error-event.d.ts.map +1 -1
  39. package/dist/error/error-event.js +28 -28
  40. package/dist/error/error-event.js.map +1 -1
  41. package/dist/error/error-type.d.ts +2 -1
  42. package/dist/error/error-type.d.ts.map +1 -1
  43. package/dist/error/error-type.js +2 -2
  44. package/dist/error/error-type.js.map +1 -1
  45. package/dist/error/error.js +5 -5
  46. package/dist/error/error.js.map +1 -1
  47. package/dist/expression/array-expression.js +3 -3
  48. package/dist/expression/array-expression.js.map +1 -1
  49. package/dist/expression/core-expression.d.ts.map +1 -1
  50. package/dist/expression/core-expression.js +19 -19
  51. package/dist/expression/core-expression.js.map +1 -1
  52. package/dist/expression/expression-evaluator.js +2 -2
  53. package/dist/expression/expression-evaluator.js.map +1 -1
  54. package/dist/expression/expression-mapper.js +4 -4
  55. package/dist/expression/expression-mapper.js.map +1 -1
  56. package/dist/expression/internal.js +3 -3
  57. package/dist/expression/internal.js.map +1 -1
  58. package/dist/expression/numeric-expression.js +13 -13
  59. package/dist/expression/numeric-expression.js.map +1 -1
  60. package/dist/expression/string-expression.js +4 -4
  61. package/dist/expression/string-expression.js.map +1 -1
  62. package/dist/expression.d.ts +17 -1
  63. package/dist/expression.d.ts.map +1 -1
  64. package/dist/expression.js.map +1 -1
  65. package/dist/glob.d.ts +3 -3
  66. package/dist/glob.d.ts.map +1 -1
  67. package/dist/glob.js +11 -12
  68. package/dist/glob.js.map +1 -1
  69. package/dist/global-variable.d.ts.map +1 -1
  70. package/dist/global-variable.js +5 -5
  71. package/dist/global-variable.js.map +1 -1
  72. package/dist/hex-code.d.ts +3 -3
  73. package/dist/hex-code.d.ts.map +1 -1
  74. package/dist/hex-code.js +11 -10
  75. package/dist/hex-code.js.map +1 -1
  76. package/dist/index.d.ts +311 -1
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +4 -0
  79. package/dist/index.js.map +1 -1
  80. package/dist/intl/country-code.d.ts +3 -3
  81. package/dist/intl/country-code.d.ts.map +1 -1
  82. package/dist/intl/country-code.js +9 -10
  83. package/dist/intl/country-code.js.map +1 -1
  84. package/dist/intl/country-subdivision-code.d.ts +3 -3
  85. package/dist/intl/country-subdivision-code.d.ts.map +1 -1
  86. package/dist/intl/country-subdivision-code.js +13 -11
  87. package/dist/intl/country-subdivision-code.js.map +1 -1
  88. package/dist/intl/currency-code.d.ts +3 -3
  89. package/dist/intl/currency-code.d.ts.map +1 -1
  90. package/dist/intl/currency-code.js +9 -10
  91. package/dist/intl/currency-code.js.map +1 -1
  92. package/dist/intl/language-code.d.ts +3 -3
  93. package/dist/intl/language-code.d.ts.map +1 -1
  94. package/dist/intl/language-code.js +9 -10
  95. package/dist/intl/language-code.js.map +1 -1
  96. package/dist/intl/locale.d.ts +3 -3
  97. package/dist/intl/locale.d.ts.map +1 -1
  98. package/dist/intl/locale.js +18 -19
  99. package/dist/intl/locale.js.map +1 -1
  100. package/dist/json.d.ts.map +1 -1
  101. package/dist/json.js +2 -2
  102. package/dist/json.js.map +1 -1
  103. package/dist/logger.d.ts.map +1 -1
  104. package/dist/logger.js +12 -12
  105. package/dist/logger.js.map +1 -1
  106. package/dist/map.d.ts +306 -0
  107. package/dist/map.d.ts.map +1 -1
  108. package/dist/map.js +8 -8
  109. package/dist/map.js.map +1 -1
  110. package/dist/mime-type.d.ts +3 -3
  111. package/dist/mime-type.d.ts.map +1 -1
  112. package/dist/mime-type.js +9 -10
  113. package/dist/mime-type.js.map +1 -1
  114. package/dist/misc.js +4 -4
  115. package/dist/misc.js.map +1 -1
  116. package/dist/monetary-amount.d.ts +3 -2
  117. package/dist/monetary-amount.d.ts.map +1 -1
  118. package/dist/monetary-amount.js +16 -16
  119. package/dist/monetary-amount.js.map +1 -1
  120. package/dist/net/content-type.d.ts +2 -1
  121. package/dist/net/content-type.d.ts.map +1 -1
  122. package/dist/net/content-type.js +2 -2
  123. package/dist/net/content-type.js.map +1 -1
  124. package/dist/net/domain-name.d.ts +3 -3
  125. package/dist/net/domain-name.d.ts.map +1 -1
  126. package/dist/net/domain-name.js +10 -11
  127. package/dist/net/domain-name.js.map +1 -1
  128. package/dist/net/http-method.d.ts.map +1 -1
  129. package/dist/net/http-method.js +9 -9
  130. package/dist/net/http-method.js.map +1 -1
  131. package/dist/net/ipv4-address.d.ts +3 -3
  132. package/dist/net/ipv4-address.d.ts.map +1 -1
  133. package/dist/net/ipv4-address.js +10 -11
  134. package/dist/net/ipv4-address.js.map +1 -1
  135. package/dist/net/ipv6-address.d.ts +3 -3
  136. package/dist/net/ipv6-address.d.ts.map +1 -1
  137. package/dist/net/ipv6-address.js +10 -11
  138. package/dist/net/ipv6-address.js.map +1 -1
  139. package/dist/net/uri-host-name.d.ts +3 -3
  140. package/dist/net/uri-host-name.d.ts.map +1 -1
  141. package/dist/net/uri-host-name.js +15 -16
  142. package/dist/net/uri-host-name.js.map +1 -1
  143. package/dist/net/uri.d.ts +1 -2
  144. package/dist/net/uri.d.ts.map +1 -1
  145. package/dist/net/uri.js +5 -3
  146. package/dist/net/uri.js.map +1 -1
  147. package/dist/net/url.d.ts.map +1 -1
  148. package/dist/net/url.js +6 -7
  149. package/dist/net/url.js.map +1 -1
  150. package/dist/object/object-path.d.ts.map +1 -1
  151. package/dist/object/object-path.js +23 -28
  152. package/dist/object/object-path.js.map +1 -1
  153. package/dist/object/type-path.js +19 -19
  154. package/dist/object/type-path.js.map +1 -1
  155. package/dist/patch.js +4 -4
  156. package/dist/patch.js.map +1 -1
  157. package/dist/promise.js +2 -2
  158. package/dist/promise.js.map +1 -1
  159. package/dist/property.d.ts.map +1 -1
  160. package/dist/property.js +7 -7
  161. package/dist/property.js.map +1 -1
  162. package/dist/proxy.js +2 -2
  163. package/dist/proxy.js.map +1 -1
  164. package/dist/range.js +2 -2
  165. package/dist/range.js.map +1 -1
  166. package/dist/reference.d.ts +2 -1
  167. package/dist/reference.d.ts.map +1 -1
  168. package/dist/reference.js +13 -13
  169. package/dist/reference.js.map +1 -1
  170. package/dist/resource-key.js +2 -2
  171. package/dist/resource-key.js.map +1 -1
  172. package/dist/result.js +5 -5
  173. package/dist/result.js.map +1 -1
  174. package/dist/retry.d.ts.map +1 -1
  175. package/dist/retry.js +12 -12
  176. package/dist/retry.js.map +1 -1
  177. package/dist/rich-text.js +2 -2
  178. package/dist/rich-text.js.map +1 -1
  179. package/dist/signature.d.ts.map +1 -1
  180. package/dist/signature.js +9 -9
  181. package/dist/signature.js.map +1 -1
  182. package/dist/sql/sql-expression-parser.js +2 -2
  183. package/dist/sql/sql-expression-parser.js.map +1 -1
  184. package/dist/sql.d.ts +5 -1
  185. package/dist/sql.d.ts.map +1 -1
  186. package/dist/sql.js.map +1 -1
  187. package/dist/store.d.ts.map +1 -1
  188. package/dist/store.js +9 -9
  189. package/dist/store.js.map +1 -1
  190. package/dist/string.js +4 -4
  191. package/dist/string.js.map +1 -1
  192. package/dist/tag.d.ts.map +1 -1
  193. package/dist/tag.js +10 -10
  194. package/dist/tag.js.map +1 -1
  195. package/dist/temporal/clock.d.ts +13 -13
  196. package/dist/temporal/clock.d.ts.map +1 -1
  197. package/dist/temporal/clock.js +10 -10
  198. package/dist/temporal/clock.js.map +1 -1
  199. package/dist/temporal/duration.d.ts +15 -9
  200. package/dist/temporal/duration.d.ts.map +1 -1
  201. package/dist/temporal/duration.js +30 -31
  202. package/dist/temporal/duration.js.map +1 -1
  203. package/dist/temporal/instant.d.ts +18 -15
  204. package/dist/temporal/instant.d.ts.map +1 -1
  205. package/dist/temporal/instant.js +42 -43
  206. package/dist/temporal/instant.js.map +1 -1
  207. package/dist/temporal/plain-date-time.d.ts +16 -13
  208. package/dist/temporal/plain-date-time.d.ts.map +1 -1
  209. package/dist/temporal/plain-date-time.js +36 -38
  210. package/dist/temporal/plain-date-time.js.map +1 -1
  211. package/dist/temporal/plain-date.d.ts +16 -13
  212. package/dist/temporal/plain-date.d.ts.map +1 -1
  213. package/dist/temporal/plain-date.js +35 -37
  214. package/dist/temporal/plain-date.js.map +1 -1
  215. package/dist/temporal/plain-month-day.d.ts +37 -0
  216. package/dist/temporal/plain-month-day.d.ts.map +1 -0
  217. package/dist/temporal/plain-month-day.js +84 -0
  218. package/dist/temporal/plain-month-day.js.map +1 -0
  219. package/dist/temporal/plain-time.d.ts +19 -17
  220. package/dist/temporal/plain-time.d.ts.map +1 -1
  221. package/dist/temporal/plain-time.js +43 -42
  222. package/dist/temporal/plain-time.js.map +1 -1
  223. package/dist/temporal/plain-year-month.d.ts +57 -0
  224. package/dist/temporal/plain-year-month.d.ts.map +1 -0
  225. package/dist/temporal/plain-year-month.js +109 -0
  226. package/dist/temporal/plain-year-month.js.map +1 -0
  227. package/dist/temporal/time-zone-id.d.ts +5 -4
  228. package/dist/temporal/time-zone-id.d.ts.map +1 -1
  229. package/dist/temporal/time-zone-id.js +11 -11
  230. package/dist/temporal/time-zone-id.js.map +1 -1
  231. package/dist/temporal/time-zone-offset.d.ts +12 -11
  232. package/dist/temporal/time-zone-offset.d.ts.map +1 -1
  233. package/dist/temporal/time-zone-offset.js +42 -50
  234. package/dist/temporal/time-zone-offset.js.map +1 -1
  235. package/dist/temporal/zoned-date-time.d.ts +16 -13
  236. package/dist/temporal/zoned-date-time.d.ts.map +1 -1
  237. package/dist/temporal/zoned-date-time.js +35 -36
  238. package/dist/temporal/zoned-date-time.js.map +1 -1
  239. package/dist/uuid/ulid.d.ts +3 -3
  240. package/dist/uuid/ulid.d.ts.map +1 -1
  241. package/dist/uuid/ulid.js +9 -10
  242. package/dist/uuid/ulid.js.map +1 -1
  243. package/dist/uuid/uuid-v4.d.ts +3 -3
  244. package/dist/uuid/uuid-v4.d.ts.map +1 -1
  245. package/dist/uuid/uuid-v4.js +13 -14
  246. package/dist/uuid/uuid-v4.js.map +1 -1
  247. package/dist/uuid/uuid-v7.d.ts +1 -2
  248. package/dist/uuid/uuid-v7.d.ts.map +1 -1
  249. package/dist/uuid/uuid-v7.js +1 -2
  250. package/dist/uuid/uuid-v7.js.map +1 -1
  251. package/dist/zod-util.d.ts +4 -3
  252. package/dist/zod-util.d.ts.map +1 -1
  253. package/dist/zod-util.js +21 -11
  254. package/dist/zod-util.js.map +1 -1
  255. package/package.json +6 -4
package/dist/net/uri.d.ts CHANGED
@@ -2,7 +2,6 @@ import { NominalType, TaggedType } from '@bessemer/cornerstone/types';
2
2
  import * as ResourceKeys from '@bessemer/cornerstone/resource-key';
3
3
  import { Result } from '@bessemer/cornerstone/result';
4
4
  import { ErrorEvent } from '@bessemer/cornerstone/error/error-event';
5
- import Zod from 'zod';
6
5
  import { ValueOf } from 'type-fest';
7
6
  import { Equalitor } from '@bessemer/cornerstone/equalitor';
8
7
  import { UriHostName } from '@bessemer/cornerstone/net/uri-host-name';
@@ -149,7 +148,7 @@ export declare function toLiteral(likeValue: UriLike): UriLiteral;
149
148
  export declare function toLiteral(likeValue: UriLike | null): UriLiteral | null;
150
149
  export declare function toLiteral(likeValue: UriLike | undefined): UriLiteral | undefined;
151
150
  export declare function toLiteral(likeValue: UriLike | null | undefined): UriLiteral | null | undefined;
152
- export declare const SchemaLiteral: Zod.ZodPipe<Zod.ZodString, Zod.ZodTransform<UriLiteral, string>>;
151
+ export declare const SchemaLiteral: import("zod").ZodPipe<import("zod").ZodType<UriLiteral, UriLiteral, import("zod/v4/core").$ZodTypeInternals<UriLiteral, UriLiteral>>, import("zod").ZodTransform<UriLiteral, UriLiteral>>;
153
152
  export declare const empty: () => Uri;
154
153
  /**
155
154
  * Tests if the provided value is a Uri.
@@ -1 +1 @@
1
- {"version":3,"file":"uri.d.ts","sourceRoot":"","sources":["../../src/net/uri.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uri.d.ts","sourceRoot":"","sources":["../../src/net/uri.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAKrE,OAAO,KAAK,YAAY,MAAM,oCAAoC,CAAA;AAElE,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAErD,OAAO,EAAE,UAAU,EAAE,MAAM,yCAAyC,CAAA;AAGpE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAA;AAErE,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AACvD,MAAM,MAAM,YAAY,GAAG,MAAM,CAAA;AAEjC,MAAM,MAAM,SAAS,GAAG,MAAM,CAAA;AAE9B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,EAAE,WAAW,CAAA;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CACxB;AAED,eAAO,MAAM,SAAS,uCAAsC,CAAA;AAC5D,eAAO,MAAM,YAAY,uCAAsC,CAAA;AAC/D,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,GAAG,CAA4B,CAAA;AAE/D,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,CAAA;AAE9D,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,SAAS,GAAG,OAAO,YAAY,CAAA;IAC7C,MAAM,EAAE,SAAS,GAAG,IAAI,CAAA;IACxB,IAAI,EAAE,OAAO,GAAG,IAAI,CAAA;IACpB,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACxC,QAAQ,EAAE,WAAW,CAAA;CACtB;AAED,MAAM,WAAW,GAAI,SAAQ,YAAY;IACvC,IAAI,EAAE,UAAU,CAAA;CACjB;AAED,KAAK,wBAAwB,GACzB;IACE,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,GACD,MAAM,CAAA;AAEV,KAAK,cAAc,GACf;IACE,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB,GACD,MAAM,CAAA;AAEV,KAAK,kBAAkB,GACnB;IACE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACzB,GACD,MAAM,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAClC,cAAc,CAAC,EAAE,wBAAwB,GAAG,IAAI,GAAG,SAAS,CAAA;IAC5D,IAAI,CAAC,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,CAAA;IACxC,QAAQ,CAAC,EAAE,kBAAkB,GAAG,IAAI,GAAG,SAAS,CAAA;CACjD,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,GAAG,GAAG,UAAU,GAAG,UAAU,CAAA;AAEnD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,EAAE,OAAM,YAAkC,KAAG,MAAM,CAAC,GAAG,EAAE,UAAU,CA6C3G,CAAA;AAED,eAAO,MAAM,YAAY;;;CAKf,CAAA;AACV,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,YAAY,CAAC,CAAA;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,GAAG,CAAA;AAClD,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAA;AAChE,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS,CAAA;AAC1E,wBAAgB,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG,GAAG,IAAI,GAAG,SAAS,CAAA;AAexF;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,UAAU,CAAA;AACzD,wBAAgB,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,UAAU,GAAG,IAAI,CAAA;AACvE,wBAAgB,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAA;AACjF,wBAAgB,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,GAAG,UAAU,GAAG,IAAI,GAAG,SAAS,CAAA;AAU/F,eAAO,MAAM,aAAa,2LAEzB,CAAA;AAID,eAAO,MAAM,KAAK,QAAO,GAaxB,CAAA;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,OAAO,KAAG,KAAK,IAAI,GAO/C,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,OAAO,EAAE,SAAS,UAAU,KAAG,GAsB9D,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,KAAG,GAyB/C,CAAA;AA8VD,eAAO,MAAM,gBAAgB;;;;;;;;CAQnB,CAAA;AAEV,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAE/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,OAAO,EAAE,wBAAuB,KAAK,CAAC,gBAAgB,CAAM,KAAG,UAE9F,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,KAAK,GAAG,KAAG,OAErC,CAAA;AAwDD,eAAO,MAAM,MAAM,GAAI,cAAc,YAAY,WAEhD,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,cAAc,YAAY,WAEhD,CAAA"}
package/dist/net/uri.js CHANGED
@@ -5,8 +5,7 @@ import * as Arrays from "@bessemer/cornerstone/array";
5
5
  import * as ResourceKeys from "@bessemer/cornerstone/resource-key";
6
6
  import * as Results from "@bessemer/cornerstone/result";
7
7
  import * as ErrorEvents from "@bessemer/cornerstone/error/error-event";
8
- import { structuredTransform } from "@bessemer/cornerstone/zod-util";
9
- import Zod from "zod";
8
+ import * as ZodUtil from "@bessemer/cornerstone/zod-util";
10
9
  import * as IpV6Addresses from "@bessemer/cornerstone/net/ipv6-address";
11
10
  import * as Equalitors from "@bessemer/cornerstone/equalitor";
12
11
  import * as UriHostNames from "@bessemer/cornerstone/net/uri-host-name";
@@ -77,7 +76,10 @@ function toLiteral(likeValue) {
77
76
  const value = from2(likeValue);
78
77
  return format(value);
79
78
  }
80
- var SchemaLiteral = structuredTransform(Zod.string(), (it) => Results.map(parseString3(it), (it2) => toLiteral(it2)));
79
+ var SchemaLiteral = ZodUtil.structuredTransform(
80
+ ZodUtil.string(),
81
+ (it) => Results.map(parseString3(it), (it2) => toLiteral(it2))
82
+ );
81
83
  var empty = () => {
82
84
  return {
83
85
  _type: Namespace,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/net/uri.ts"],"sourcesContent":["import { NominalType, TaggedType } from '@bessemer/cornerstone/types'\nimport * as Strings from '@bessemer/cornerstone/string'\nimport { StringSplitResult } from '@bessemer/cornerstone/string'\nimport * as Objects from '@bessemer/cornerstone/object'\nimport * as Arrays from '@bessemer/cornerstone/array'\nimport * as ResourceKeys from '@bessemer/cornerstone/resource-key'\nimport * as Results from '@bessemer/cornerstone/result'\nimport { Result } from '@bessemer/cornerstone/result'\nimport * as ErrorEvents from '@bessemer/cornerstone/error/error-event'\nimport { ErrorEvent } from '@bessemer/cornerstone/error/error-event'\nimport { structuredTransform } from '@bessemer/cornerstone/zod-util'\nimport Zod from 'zod'\nimport * as IpV6Addresses from '@bessemer/cornerstone/net/ipv6-address'\nimport { ValueOf } from 'type-fest'\nimport * as Equalitors from '@bessemer/cornerstone/equalitor'\nimport { Equalitor } from '@bessemer/cornerstone/equalitor'\nimport * as UriHostNames from '@bessemer/cornerstone/net/uri-host-name'\nimport { UriHostName } from '@bessemer/cornerstone/net/uri-host-name'\n\nexport type UriString = TaggedType<string, 'UriString'>\nexport type UriComponent = string\n\nexport type UriScheme = string\n\nexport type UriAuthentication = {\n principal: string\n password: string | null\n}\n\nexport type UriHost = {\n value: UriHostName\n port: number | null\n}\n\nexport interface UriLocation {\n path: string | null\n query: string | null\n fragment: string | null\n}\n\nexport const Namespace = ResourceKeys.createNamespace('uri')\nexport const UrlNamespace = ResourceKeys.createNamespace('url')\nexport const EqualBy: Equalitor<Uri> = Equalitors.deepNatural()\n\nexport type UriLiteral = NominalType<string, typeof Namespace>\n\nexport interface UriStructure {\n _type: typeof Namespace | typeof UrlNamespace\n scheme: UriScheme | null\n host: UriHost | null\n authentication: UriAuthentication | null\n location: UriLocation\n}\n\nexport interface Uri extends UriStructure {\n href: UriLiteral\n}\n\ntype UriBuilderAuthentication =\n | {\n principal: string\n password?: string | null\n }\n | string\n\ntype UriBuilderHost =\n | {\n value: string\n port?: number | null\n }\n | string\n\ntype UriBuilderLocation =\n | {\n path?: string | null\n query?: string | null\n fragment?: string | null\n }\n | string\n\nexport type UriBuilder = {\n scheme?: string | null | undefined\n authentication?: UriBuilderAuthentication | null | undefined\n host?: UriBuilderHost | null | undefined\n location?: UriBuilderLocation | null | undefined\n}\n\nexport type UriLike = Uri | UriLiteral | UriBuilder\n\n/**\n * Parses a string into a Uri object, handling all URI components including scheme,\n * authority (host and authentication), and location (path, query, fragment).\n * Returns a Result containing either the parsed Uri or an ErrorEvent on failure.\n *\n * **Example**\n *\n * ```ts\n * import { Uris } from \"@bessemer/cornerstone\"\n *\n * // Parse a complete HTTPS URI\n * const result = Uris.parseString('https://user:pass@example.com:8080/api/v1?q=test#section')\n * if (result.isSuccess) {\n * console.log(result.value.scheme) // 'https'\n * console.log(result.value.host?.value) // 'example.com'\n * console.log(result.value.authentication?.principal) // 'user'\n * }\n *\n * // Parse a simple URI without authority\n * const urnResult = Uris.parseString('urn:isbn:0451450523')\n * if (urnResult.isSuccess) {\n * console.log(urnResult.value.scheme) // 'urn'\n * console.log(urnResult.value.location.path) // 'isbn:0451450523'\n * }\n * ```\n *\n * @category parsing\n */\nexport const parseString = (value: string, mode: UriParseMode = UriParseMode.Strict): Result<Uri, ErrorEvent> => {\n // JOHN we want to improve the syntax burden of handling a series of Result objects like this\n if (Strings.isBlank(value)) {\n return Results.success(empty())\n }\n\n const schemeResult = parseSchemePart(value)\n if (Results.isFailure(schemeResult)) {\n return Results.failure(\n ErrorEvents.invalidValue(value, {\n namespace: Namespace,\n message: `[${Namespace}]: Unable to parse Uri from string: [${value}]`,\n causes: schemeResult.value.causes,\n })\n )\n }\n\n const [scheme, rest1] = schemeResult\n\n const authorityPartResult = parseAuthorityPart(rest1, mode)\n if (Results.isFailure(authorityPartResult)) {\n return Results.failure(\n ErrorEvents.invalidValue(value, {\n namespace: Namespace,\n message: `[${Namespace}]: Unable to parse Uri from string: [${value}]`,\n causes: authorityPartResult.value.causes,\n })\n )\n }\n const [authority, rest2] = authorityPartResult\n\n const location = parseLocation(rest2)\n\n const structure: UriStructure = {\n _type: Namespace,\n scheme,\n host: authority.host,\n authentication: authority.authentication,\n location,\n }\n\n return Results.success({\n ...structure,\n href: formatInternal(structure),\n })\n}\n\nexport const UriParseMode = {\n // Normal href-style url parsing\n Strict: 'strict',\n // Will parse 'www.google.com' as a hostname rather than a path, but loses support for relative urls\n Permissive: 'permissive',\n} as const\nexport type UriParseMode = ValueOf<typeof UriParseMode>\n\n/**\n * Converts various URI-like inputs into a Uri object. Handles Uri instances,\n * string literals, and builder objects, returning them as-is when already a Uri\n * or converting them appropriately.\n *\n * **Example**\n *\n * ```ts\n * import { Uris } from \"@bessemer/cornerstone\"\n *\n * // String literal parsed into Uri\n * const fromString = Uris.from('https://api.example.com/v1')\n * console.log(fromString.scheme) // 'https'\n * console.log(fromString.host?.value) // 'api.example.com'\n *\n * // Builder object converted to Uri\n * const fromBuilder = Uris.from({\n * scheme: 'https',\n * host: { value: 'example.com', port: 8080 },\n * location: { path: '/api' }\n * })\n * console.log(fromBuilder.host?.port) // 8080\n *\n * @category conversion\n */\nexport function from(value: UriLike | string): Uri\nexport function from(value: UriLike | string | null): Uri | null\nexport function from(value: UriLike | string | undefined): Uri | undefined\nexport function from(value: UriLike | string | null | undefined): Uri | null | undefined\nexport function from(value: UriLike | string | null | undefined): Uri | null | undefined {\n if (Objects.isNil(value)) {\n return value\n }\n if (isUri(value)) {\n return value\n }\n if (Strings.isString(value)) {\n return ErrorEvents.unpackResult(parseString(value))\n }\n\n return build(value as UriBuilder)\n}\n\n/**\n * Converts various URI-like inputs into a normalized string literal representation.\n * Takes any URI-like value and returns its canonical string form\n *\n * **Example**\n *\n * ```ts\n * import { Uris } from \"@bessemer/cornerstone\"\n *\n * // Convert Uri instance to string literal\n * const uri = Uris.build({ scheme: 'https', host: 'example.com', location: { path: '/api' } })\n * const literal = Uris.toLiteral(uri)\n * console.log(literal) // \"https://example.com/api\"\n *\n * // Convert builder object to string literal\n * const fromBuilder = Uris.toLiteral({\n * scheme: 'https',\n * host: { value: 'api.example.com', port: 8080 },\n * authentication: { principal: 'user', password: 'pass' },\n * location: { path: '/v1', parameters: { q: 'search' } }\n * })\n * console.log(fromBuilder) // \"https://user:pass@api.example.com:8080/v1?q=search\"\n * ```\n *\n * @category serialization\n */\nexport function toLiteral(likeValue: UriLike): UriLiteral\nexport function toLiteral(likeValue: UriLike | null): UriLiteral | null\nexport function toLiteral(likeValue: UriLike | undefined): UriLiteral | undefined\nexport function toLiteral(likeValue: UriLike | null | undefined): UriLiteral | null | undefined\nexport function toLiteral(likeValue: UriLike | null | undefined): UriLiteral | null | undefined {\n if (Objects.isNil(likeValue)) {\n return likeValue\n }\n\n const value = from(likeValue)\n return format(value) as UriLiteral\n}\n\nexport const SchemaLiteral = structuredTransform(Zod.string(), (it: string) => Results.map(parseString(it), (it) => toLiteral(it)))\n// JOHN need a schema for the object version...\n// export const SchemaInstance = structuredTransform(Zod.string(), parseString)\n\nexport const empty = (): Uri => {\n return {\n _type: Namespace,\n href: '' as UriLiteral,\n scheme: null,\n authentication: null,\n host: null,\n location: {\n path: null,\n query: null,\n fragment: null,\n },\n }\n}\n\n/**\n * Tests if the provided value is a Uri.\n *\n * **Example**\n *\n * ```ts\n * import { Uris } from \"@bessemer/cornerstone\"\n *\n * // Check if unknown value is a Uri\n * function processValue(value: unknown) {\n * if (Uris.isUri(value)) {\n * console.log(value.scheme) // Type-safe access\n * console.log(value.location.path)\n * }\n * }\n * ```\n *\n * @category type-guards\n */\nexport const isUri = (value: unknown): value is Uri => {\n if (!Objects.isObject(value)) {\n return false\n }\n\n const uriValue = value as any as Uri\n return uriValue._type === Namespace || uriValue._type === UrlNamespace\n}\n\n/**\n * Updates an existing URI with partial changes to create a new URI instance.\n * Allows selective updates without replacing the entire URI.\n *\n * **Example**\n *\n * ```ts\n * import { Uris } from \"@bessemer/cornerstone\"\n *\n * // Start with a base URI\n * const baseUri = Uris.build({\n * scheme: 'https',\n * host: { value: 'api.example.com', port: 443 },\n * authentication: { principal: 'user', password: 'pass' },\n * location: { path: '/v1', parameters: { format: 'json' } }\n * })\n *\n * // Change just the host and add query parameter\n * const updatedUri = Uris.update(baseUri, {\n * host: { value: 'api.production.com' }, // Port preserved from original\n * location: {\n * parameters: { version: '2.0' } // Merges with existing parameters\n * }\n * })\n *\n * console.log(updatedUri.host?.value) // 'api.production.com'\n * console.log(updatedUri.host?.port) // 443 (preserved)\n * console.log(updatedUri.location.parameters) // { format: 'json', version: '2.0' }\n * ```\n *\n * @category transformation\n */\nexport const update = (element: UriLike, builder: UriBuilder): Uri => {\n const uri = from(element)\n\n let location: UriBuilderLocation | null | undefined\n if (Strings.isString(builder.location) || Objects.isNull(builder.location)) {\n location = builder.location\n } else {\n location = {\n path: Objects.isUndefined(builder.location?.path) ? uri.location.path : builder.location?.path,\n query: Objects.isUndefined(builder.location?.query) ? uri.location.query : builder.location?.query,\n fragment: Objects.isUndefined(builder.location?.fragment) ? uri.location.fragment : builder.location?.fragment,\n }\n }\n\n const uriBuilder: UriBuilder = {\n scheme: Objects.isUndefined(builder.scheme) ? uri.scheme : builder.scheme,\n host: Objects.isUndefined(builder.host) ? uri.host : builder.host,\n authentication: Objects.isUndefined(builder.authentication) ? uri.authentication : builder.authentication,\n location,\n }\n\n return from(uriBuilder)\n}\n\nexport const merge = (...uris: Array<UriLike>): Uri => {\n if (uris.length === 0) {\n return empty()\n }\n if (uris.length === 1) {\n return from(uris[0]!)\n }\n\n return uris.reduce<Uri>((aggregate, next) => {\n const nextUri = from(next)\n\n const builder: UriBuilder = {\n scheme: nextUri.scheme ?? undefined,\n host: nextUri.host ?? undefined,\n authentication: nextUri.authentication ?? undefined,\n location: {\n path: nextUri.location.path ?? undefined,\n query: nextUri.location.query ?? undefined,\n fragment: nextUri.location.fragment ?? undefined,\n },\n }\n\n const uri = update(aggregate, builder)\n return uri\n }, from(uris[0]!))\n}\n\nconst parseSchemePart = (url: UriComponent): Result<[UriScheme | null, UriComponent], ErrorEvent> => {\n // Search for the colon or double slash\n const schemeMatch = Strings.splitFirst(url, /(\\/\\/|:)/)\n\n // If we don't find either, or we hit the double slash before finding a colon, there is no scheme\n if (Objects.isNil(schemeMatch.selection) || schemeMatch.separator === '//') {\n return Results.success([null, url])\n }\n\n // This means the string started with :, so no protocol\n if (Strings.isEmpty(schemeMatch.selection)) {\n return Results.success([null, ':' + schemeMatch.rest])\n } else {\n const schemeResult = parseScheme(schemeMatch.selection)\n if (Results.isFailure(schemeResult)) {\n return schemeResult\n }\n\n return Results.success([schemeResult, schemeMatch.rest])\n }\n}\n\nconst parseScheme = (scheme: UriComponent): Result<UriScheme, ErrorEvent> => {\n // RFC 3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n const schemeRegex = /^[a-zA-Z][a-zA-Z0-9+.-]*$/\n if (!schemeRegex.test(scheme)) {\n return Results.failure(\n ErrorEvents.invalidValue(scheme, {\n namespace: Namespace,\n message: `[${Namespace}]: Invalid characters in Scheme.`,\n })\n )\n }\n\n return Results.success(scheme)\n}\n\nconst parseAuthorityPart = (\n initialUrl: UriComponent,\n mode: UriParseMode\n): Result<[{ host: UriHost | null; authentication: UriAuthentication | null }, UriComponent], ErrorEvent> => {\n if (mode === UriParseMode.Strict && !initialUrl.startsWith('//')) {\n return Results.success([{ host: null, authentication: null }, initialUrl])\n }\n if (mode === UriParseMode.Permissive && initialUrl.startsWith('/')) {\n return Results.success([{ host: null, authentication: null }, initialUrl])\n }\n\n const url = Strings.removeStart(initialUrl, '//')\n\n const authenticationPartResult = parseAuthenticationPart(url)\n if (Results.isFailure(authenticationPartResult)) {\n return authenticationPartResult\n }\n const [authentication, rest1] = authenticationPartResult\n\n const hostPartResult = parseHostPart(rest1)\n if (Results.isFailure(hostPartResult)) {\n return hostPartResult\n }\n const [host, rest2] = hostPartResult\n\n return Results.success([{ host, authentication }, rest2])\n}\n\nconst parseAuthenticationPart = (url: UriComponent): Result<[UriAuthentication | null, UriComponent], ErrorEvent> => {\n let targetPart = url\n const queryMatch = Strings.splitFirst(targetPart, '?')\n const fragmentMatch = Strings.splitFirst(targetPart, '#')\n if (Objects.isPresent(queryMatch.selection)) {\n targetPart = queryMatch.selection\n } else if (Objects.isPresent(fragmentMatch.selection)) {\n targetPart = fragmentMatch.selection\n }\n\n const { selection: authentication } = Strings.splitFirst(targetPart, '@')\n\n // If there is no @, then we don't have an authentication\n if (Objects.isNil(authentication)) {\n return Results.success([null, url])\n }\n\n const { rest } = Strings.splitFirst(url, '@')\n\n const authenticationParseResult = parseAuthentication(authentication)\n if (Results.isFailure(authenticationParseResult)) {\n return authenticationParseResult\n }\n\n return Results.success([authenticationParseResult, rest])\n}\n\nconst parseAuthentication = (authentication: UriComponent): Result<UriAuthentication, ErrorEvent> => {\n const { selection: principal, rest: authenticationRest } = Strings.splitFirst(authentication, ':')\n\n // If there isn't a colon, then there is no password but there is a username\n if (Objects.isNil(principal)) {\n if (!isAuthenticationComponentValid(authenticationRest)) {\n return Results.failure(\n ErrorEvents.invalidValue(authenticationRest, {\n namespace: Namespace,\n message: `[${Namespace}]: Invalid characters for UriAuthentication in principal string: [${authenticationRest}]`,\n })\n )\n }\n\n return Results.success({ principal: decode(authenticationRest), password: null })\n }\n\n // The authentication section started with a :, don't know what to make of this... password but no username?\n if (Strings.isEmpty(principal)) {\n return Results.failure(\n ErrorEvents.invalidValue(authentication, {\n namespace: Namespace,\n message: `[${Namespace}]: Unable to parse UriAuthentication from authentication string: [${authentication}]`,\n })\n )\n }\n\n if (!isAuthenticationComponentValid(principal)) {\n return Results.failure(\n ErrorEvents.invalidValue(principal, {\n namespace: Namespace,\n message: `[${Namespace}]: Invalid characters for UriAuthentication in principal string: [${principal}]`,\n })\n )\n }\n\n if (!isAuthenticationComponentValid(authenticationRest)) {\n return Results.failure(\n ErrorEvents.invalidValue(authenticationRest, {\n namespace: Namespace,\n message: `[${Namespace}]: Invalid characters for UriAuthentication in password string: [${authenticationRest}]`,\n })\n )\n }\n\n // Otherwise, we have both, so return the complete authentication object and the rest\n return Results.success({ principal: decode(principal), password: decode(authenticationRest) })\n}\n\nconst isAuthenticationComponentValid = (component: UriComponent): boolean => {\n const userinfoRegex = /^[A-Za-z0-9\\-._~!$&'()*+,;=%]*$/\n\n if (component.includes('%')) {\n const percentEncodingRegex = /%[0-9A-Fa-f]{2}/g\n const percentMatches = component.match(/%/g) || []\n const validEncodingMatches = component.match(percentEncodingRegex) || []\n\n if (percentMatches.length !== validEncodingMatches.length) {\n return false\n }\n }\n\n return userinfoRegex.test(component)\n}\n\nconst parseHostPart = (url: UriComponent): Result<[UriHost | null, UriComponent], ErrorEvent> => {\n // Check if the host is starting with reserved characters, if so we should just bail on trying to parse\n if (url.startsWith('?') || url.startsWith('#')) {\n return Results.success([null, url])\n }\n\n // Lets grab everything to the left of the first / ? or #, this is the remainder of our authority (if any)\n const urlMatch = Strings.splitFirst(url, /[\\/?#]/)\n let host = urlMatch.rest\n let rest = ''\n\n if (Objects.isPresent(urlMatch.selection)) {\n host = urlMatch.selection\n rest = urlMatch.separator + urlMatch.rest\n }\n\n if (Strings.isEmpty(host)) {\n return Results.success([null, rest])\n }\n\n const parseHostResult = parseHost(host)\n if (Results.isFailure(parseHostResult)) {\n return parseHostResult\n }\n\n return Results.success([parseHostResult, rest])\n}\n\nconst parseHost = (host: UriComponent): Result<UriHost, ErrorEvent> => {\n // Try to see if we have an ipv6 address like the form [2001:db8::7] and handle it\n if (host.startsWith('[')) {\n const ipMatch = Strings.splitFirst(Strings.removeStart(host, '['), ']')\n\n if (Objects.isPresent(ipMatch.selection)) {\n const ipV6Result = IpV6Addresses.parseString(ipMatch.selection)\n if (Results.isFailure(ipV6Result)) {\n return ipV6Result\n }\n\n const portMatch = Strings.splitFirst(ipMatch.rest, ':')\n if (Objects.isPresent(portMatch.selection) && Strings.isEmpty(portMatch.selection)) {\n if (!Strings.isNumber(portMatch.rest)) {\n return Results.failure(ErrorEvents.invalidValue(host, { namespace: Namespace, message: `[${Namespace}]: Unable to parse Host: [${host}]` }))\n }\n\n return Results.success({ value: `[${ipMatch.selection}]` as UriHostName, port: Number(portMatch.rest) })\n } else {\n return Results.success({ value: `[${ipMatch.selection}]` as UriHostName, port: null })\n }\n }\n }\n\n let hostMatch: StringSplitResult = Strings.splitFirst(host, ':')\n\n // We have no :, which means no port, so treat the rest as the hostname\n if (Objects.isNil(hostMatch.selection)) {\n const hostNameResult = UriHostNames.parseString(hostMatch.rest)\n if (Results.isFailure(hostNameResult)) {\n return Results.failure(\n ErrorEvents.invalidValue(host, {\n namespace: Namespace,\n message: `[${Namespace}]: Unable to parse Host from host string: [${host}]`,\n causes: hostNameResult.value.causes,\n })\n )\n }\n\n return Results.success({ value: hostNameResult, port: null })\n }\n\n // The host started with a :, this is odd\n if (Strings.isEmpty(hostMatch.selection)) {\n return Results.failure(\n ErrorEvents.invalidValue(host, { namespace: Namespace, message: `[${Namespace}]: Unable to parse Host from host string: [${host}]` })\n )\n }\n\n const hostName = hostMatch.selection\n\n if (!Strings.isNumber(hostMatch.rest)) {\n return Results.failure(\n ErrorEvents.invalidValue(host, { namespace: Namespace, message: `[${Namespace}]: Unable to parse Host from host string: [${host}]` })\n )\n }\n\n // Otherwise, we have both, so return the complete authentication object and the rest\n const hostNameResult = UriHostNames.parseString(hostName)\n if (Results.isFailure(hostNameResult)) {\n return Results.failure(\n ErrorEvents.invalidValue(host, {\n namespace: Namespace,\n message: `[${Namespace}]: Unable to parse Host from host string: [${host}]`,\n causes: hostNameResult.value.causes,\n })\n )\n }\n\n return Results.success({ value: hostNameResult, port: Number(hostMatch.rest) })\n}\n\nconst parseLocation = (url: UriComponent): UriLocation => {\n const location: UriLocation = { path: null, query: null, fragment: null }\n\n // Lets see if we have a fragment and parse it off the end\n const fragmentMatch = Strings.splitFirst(url, '#')\n if (Objects.isPresent(fragmentMatch.selection) && !Strings.isEmpty(fragmentMatch.rest)) {\n location.fragment = encodeWhitespace(fragmentMatch.rest)\n }\n\n // Lets see if we have a query string and parse it off the remainder\n const queryMatch = Strings.splitFirst(fragmentMatch.selection ?? fragmentMatch.rest, '?')\n if (Objects.isPresent(queryMatch.selection) && !Strings.isEmpty(queryMatch.rest)) {\n location.query = encodeWhitespace(queryMatch.rest)\n }\n\n const path = Strings.emptyToNull(queryMatch.selection ?? queryMatch.rest)\n if (Objects.isPresent(path)) {\n location.path = encodeWhitespace(path)\n }\n return location\n}\n\nconst build = (builder: UriBuilder): Uri => {\n const scheme = Objects.isPresent(builder.scheme) ? ErrorEvents.unpackResult(parseScheme(builder.scheme)) : null\n let host: UriHost | null = null\n let authentication: UriAuthentication | null = null\n\n if (Objects.isPresent(builder.host)) {\n if (Strings.isString(builder.host)) {\n host = ErrorEvents.unpackResult(parseHost(builder.host))\n } else {\n host = {\n value: UriHostNames.from(builder.host.value),\n port: builder.host.port ?? null,\n }\n }\n\n if (Objects.isPresent(builder.authentication)) {\n if (Strings.isString(builder.authentication)) {\n authentication = ErrorEvents.unpackResult(parseAuthentication(builder.authentication))\n } else {\n authentication = {\n principal: builder.authentication.principal,\n password: builder.authentication.password ?? null,\n }\n }\n }\n }\n\n let location: UriLocation = {\n path: null,\n query: null,\n fragment: null,\n }\n\n if (Objects.isPresent(builder.location)) {\n if (Strings.isString(builder.location)) {\n let locationString = builder.location\n if (Objects.isPresent(builder.host) && !locationString.startsWith('/') && !locationString.startsWith('?') && !locationString.startsWith('#')) {\n locationString = '/' + locationString\n }\n\n location = parseLocation(locationString)\n } else {\n let path = builder.location.path ?? null\n if (Objects.isPresent(path) && !path.startsWith('/') && Objects.isPresent(builder.host)) {\n path = '/' + path\n }\n\n location = {\n path: Objects.isPresent(path) ? encodeWhitespace(path) : null,\n query: Objects.isPresent(builder.location.query) ? encodeWhitespace(builder.location.query) : null,\n fragment: Objects.isPresent(builder.location.fragment) ? encodeWhitespace(builder.location.fragment) : null,\n }\n }\n }\n\n const structure: UriStructure = {\n _type: Namespace,\n scheme,\n host,\n authentication,\n location,\n }\n\n return {\n ...structure,\n href: formatInternal(structure),\n }\n}\n\nexport const UriComponentType = {\n Scheme: 'Scheme',\n Authentication: 'Authentication',\n Host: 'Host',\n Location: 'Location',\n Path: 'Path',\n Query: 'Query',\n Fragment: 'Fragment',\n} as const\n\nexport type UriComponentType = ValueOf<typeof UriComponentType>\n\n/**\n * Converts a URI object into its string representation, with optional exclusion of specific URI components.\n *\n * **Example**\n *\n * ```ts\n * import { Uris, UriComponentType } from \"@bessemer/cornerstone\"\n *\n * const uri = Uris.build({\n * scheme: 'https',\n * authentication: { principal: 'user', password: 'secret' },\n * host: { value: 'api.example.com', port: 8080 },\n * location: { path: '/v1/data', parameters: { format: 'json' }, fragment: 'results' }\n * })\n *\n * // Format complete URI\n * const fullUri = Uris.format(uri)\n * console.log(fullUri) // \"https://user:secret@api.example.com:8080/v1/data?format=json#results\"\n *\n * // Exclude authentication for public sharing\n * const publicUri = Uris.format(uri, [UriComponentType.Authentication])\n * console.log(publicUri) // \"https://api.example.com:8080/v1/data?format=json#results\"\n *\n * // Format path-only URI\n * const pathOnly = Uris.format(uri, [\n * UriComponentType.Scheme,\n * UriComponentType.Host,\n * UriComponentType.Authentication\n * ])\n * console.log(pathOnly) // \"/v1/data?format=json#results\"\n * ```\n *\n * @category serialization\n */\nexport const format = (uriLike: UriLike, excludedUriComponents: Array<UriComponentType> = []): UriLiteral => {\n return formatInternal(from(uriLike), excludedUriComponents)\n}\n\nexport const isComplete = (uri: Uri): boolean => {\n return Objects.isPresent(uri.scheme) && Objects.isPresent(uri.host)\n}\n\nconst formatInternal = (uri: UriStructure, excludedUriComponents: Array<UriComponentType> = []): UriLiteral => {\n let urlString = ''\n if (Objects.isPresent(uri.scheme) && !Arrays.contains(excludedUriComponents, UriComponentType.Scheme)) {\n urlString = urlString + uri.scheme + ':'\n }\n\n if (Objects.isPresent(uri.host) && !Arrays.contains(excludedUriComponents, UriComponentType.Host)) {\n urlString = urlString + '//'\n\n if (Objects.isPresent(uri.authentication) && !Arrays.contains(excludedUriComponents, UriComponentType.Authentication)) {\n urlString = urlString + encode(uri.authentication.principal)\n\n if (Objects.isPresent(uri.authentication.password)) {\n urlString = urlString + ':' + encode(uri.authentication.password)\n }\n\n urlString = urlString + '@'\n }\n\n urlString = urlString + uri.host.value\n if (Objects.isPresent(uri.host.port)) {\n urlString = urlString + ':' + uri.host.port\n }\n }\n\n if (!Arrays.contains(excludedUriComponents, UriComponentType.Location)) {\n urlString = urlString + formatLocation(uri.location, excludedUriComponents)\n }\n\n return urlString as UriLiteral\n}\n\nconst formatLocation = (location: UriLocation, excludedUriComponents: Array<UriComponentType> = []): string => {\n let urlString = ''\n\n if (Objects.isPresent(location.path) && !Arrays.contains(excludedUriComponents, UriComponentType.Path)) {\n urlString = urlString + location.path\n }\n\n if (Objects.isPresent(location.query) && !Arrays.contains(excludedUriComponents, UriComponentType.Query)) {\n urlString = urlString + '?' + location.query\n }\n\n if (Objects.isPresent(location.fragment) && !Arrays.contains(excludedUriComponents, UriComponentType.Fragment)) {\n urlString = urlString + '#' + location.fragment\n }\n\n return urlString\n}\n\nconst encodeWhitespace = (uriComponent: UriComponent) => {\n return uriComponent.replaceAll(' ', '%20')\n}\n\nexport const encode = (uriComponent: UriComponent) => {\n return encodeURIComponent(uriComponent)\n}\n\nexport const decode = (uriComponent: UriComponent) => {\n return decodeURIComponent(uriComponent)\n}\n"],"mappings":"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","names":["parseString","from","it","hostNameResult"]}
1
+ {"version":3,"sources":["../../src/net/uri.ts"],"sourcesContent":["import { NominalType, TaggedType } from '@bessemer/cornerstone/types'\nimport * as Strings from '@bessemer/cornerstone/string'\nimport { StringSplitResult } from '@bessemer/cornerstone/string'\nimport * as Objects from '@bessemer/cornerstone/object'\nimport * as Arrays from '@bessemer/cornerstone/array'\nimport * as ResourceKeys from '@bessemer/cornerstone/resource-key'\nimport * as Results from '@bessemer/cornerstone/result'\nimport { Result } from '@bessemer/cornerstone/result'\nimport * as ErrorEvents from '@bessemer/cornerstone/error/error-event'\nimport { ErrorEvent } from '@bessemer/cornerstone/error/error-event'\nimport * as ZodUtil from '@bessemer/cornerstone/zod-util'\nimport * as IpV6Addresses from '@bessemer/cornerstone/net/ipv6-address'\nimport { ValueOf } from 'type-fest'\nimport * as Equalitors from '@bessemer/cornerstone/equalitor'\nimport { Equalitor } from '@bessemer/cornerstone/equalitor'\nimport * as UriHostNames from '@bessemer/cornerstone/net/uri-host-name'\nimport { UriHostName } from '@bessemer/cornerstone/net/uri-host-name'\n\nexport type UriString = TaggedType<string, 'UriString'>\nexport type UriComponent = string\n\nexport type UriScheme = string\n\nexport type UriAuthentication = {\n principal: string\n password: string | null\n}\n\nexport type UriHost = {\n value: UriHostName\n port: number | null\n}\n\nexport interface UriLocation {\n path: string | null\n query: string | null\n fragment: string | null\n}\n\nexport const Namespace = ResourceKeys.createNamespace('uri')\nexport const UrlNamespace = ResourceKeys.createNamespace('url')\nexport const EqualBy: Equalitor<Uri> = Equalitors.deepNatural()\n\nexport type UriLiteral = NominalType<string, typeof Namespace>\n\nexport interface UriStructure {\n _type: typeof Namespace | typeof UrlNamespace\n scheme: UriScheme | null\n host: UriHost | null\n authentication: UriAuthentication | null\n location: UriLocation\n}\n\nexport interface Uri extends UriStructure {\n href: UriLiteral\n}\n\ntype UriBuilderAuthentication =\n | {\n principal: string\n password?: string | null\n }\n | string\n\ntype UriBuilderHost =\n | {\n value: string\n port?: number | null\n }\n | string\n\ntype UriBuilderLocation =\n | {\n path?: string | null\n query?: string | null\n fragment?: string | null\n }\n | string\n\nexport type UriBuilder = {\n scheme?: string | null | undefined\n authentication?: UriBuilderAuthentication | null | undefined\n host?: UriBuilderHost | null | undefined\n location?: UriBuilderLocation | null | undefined\n}\n\nexport type UriLike = Uri | UriLiteral | UriBuilder\n\n/**\n * Parses a string into a Uri object, handling all URI components including scheme,\n * authority (host and authentication), and location (path, query, fragment).\n * Returns a Result containing either the parsed Uri or an ErrorEvent on failure.\n *\n * **Example**\n *\n * ```ts\n * import { Uris } from \"@bessemer/cornerstone\"\n *\n * // Parse a complete HTTPS URI\n * const result = Uris.parseString('https://user:pass@example.com:8080/api/v1?q=test#section')\n * if (result.isSuccess) {\n * console.log(result.value.scheme) // 'https'\n * console.log(result.value.host?.value) // 'example.com'\n * console.log(result.value.authentication?.principal) // 'user'\n * }\n *\n * // Parse a simple URI without authority\n * const urnResult = Uris.parseString('urn:isbn:0451450523')\n * if (urnResult.isSuccess) {\n * console.log(urnResult.value.scheme) // 'urn'\n * console.log(urnResult.value.location.path) // 'isbn:0451450523'\n * }\n * ```\n *\n * @category parsing\n */\nexport const parseString = (value: string, mode: UriParseMode = UriParseMode.Strict): Result<Uri, ErrorEvent> => {\n // JOHN we want to improve the syntax burden of handling a series of Result objects like this\n if (Strings.isBlank(value)) {\n return Results.success(empty())\n }\n\n const schemeResult = parseSchemePart(value)\n if (Results.isFailure(schemeResult)) {\n return Results.failure(\n ErrorEvents.invalidValue(value, {\n namespace: Namespace,\n message: `[${Namespace}]: Unable to parse Uri from string: [${value}]`,\n causes: schemeResult.value.causes,\n })\n )\n }\n\n const [scheme, rest1] = schemeResult\n\n const authorityPartResult = parseAuthorityPart(rest1, mode)\n if (Results.isFailure(authorityPartResult)) {\n return Results.failure(\n ErrorEvents.invalidValue(value, {\n namespace: Namespace,\n message: `[${Namespace}]: Unable to parse Uri from string: [${value}]`,\n causes: authorityPartResult.value.causes,\n })\n )\n }\n const [authority, rest2] = authorityPartResult\n\n const location = parseLocation(rest2)\n\n const structure: UriStructure = {\n _type: Namespace,\n scheme,\n host: authority.host,\n authentication: authority.authentication,\n location,\n }\n\n return Results.success({\n ...structure,\n href: formatInternal(structure),\n })\n}\n\nexport const UriParseMode = {\n // Normal href-style url parsing\n Strict: 'strict',\n // Will parse 'www.google.com' as a hostname rather than a path, but loses support for relative urls\n Permissive: 'permissive',\n} as const\nexport type UriParseMode = ValueOf<typeof UriParseMode>\n\n/**\n * Converts various URI-like inputs into a Uri object. Handles Uri instances,\n * string literals, and builder objects, returning them as-is when already a Uri\n * or converting them appropriately.\n *\n * **Example**\n *\n * ```ts\n * import { Uris } from \"@bessemer/cornerstone\"\n *\n * // String literal parsed into Uri\n * const fromString = Uris.from('https://api.example.com/v1')\n * console.log(fromString.scheme) // 'https'\n * console.log(fromString.host?.value) // 'api.example.com'\n *\n * // Builder object converted to Uri\n * const fromBuilder = Uris.from({\n * scheme: 'https',\n * host: { value: 'example.com', port: 8080 },\n * location: { path: '/api' }\n * })\n * console.log(fromBuilder.host?.port) // 8080\n *\n * @category conversion\n */\nexport function from(value: UriLike | string): Uri\nexport function from(value: UriLike | string | null): Uri | null\nexport function from(value: UriLike | string | undefined): Uri | undefined\nexport function from(value: UriLike | string | null | undefined): Uri | null | undefined\nexport function from(value: UriLike | string | null | undefined): Uri | null | undefined {\n if (Objects.isNil(value)) {\n return value\n }\n if (isUri(value)) {\n return value\n }\n if (Strings.isString(value)) {\n return ErrorEvents.unpackResult(parseString(value))\n }\n\n return build(value as UriBuilder)\n}\n\n/**\n * Converts various URI-like inputs into a normalized string literal representation.\n * Takes any URI-like value and returns its canonical string form\n *\n * **Example**\n *\n * ```ts\n * import { Uris } from \"@bessemer/cornerstone\"\n *\n * // Convert Uri instance to string literal\n * const uri = Uris.build({ scheme: 'https', host: 'example.com', location: { path: '/api' } })\n * const literal = Uris.toLiteral(uri)\n * console.log(literal) // \"https://example.com/api\"\n *\n * // Convert builder object to string literal\n * const fromBuilder = Uris.toLiteral({\n * scheme: 'https',\n * host: { value: 'api.example.com', port: 8080 },\n * authentication: { principal: 'user', password: 'pass' },\n * location: { path: '/v1', parameters: { q: 'search' } }\n * })\n * console.log(fromBuilder) // \"https://user:pass@api.example.com:8080/v1?q=search\"\n * ```\n *\n * @category serialization\n */\nexport function toLiteral(likeValue: UriLike): UriLiteral\nexport function toLiteral(likeValue: UriLike | null): UriLiteral | null\nexport function toLiteral(likeValue: UriLike | undefined): UriLiteral | undefined\nexport function toLiteral(likeValue: UriLike | null | undefined): UriLiteral | null | undefined\nexport function toLiteral(likeValue: UriLike | null | undefined): UriLiteral | null | undefined {\n if (Objects.isNil(likeValue)) {\n return likeValue\n }\n\n const value = from(likeValue)\n return format(value) as UriLiteral\n}\n\nexport const SchemaLiteral = ZodUtil.structuredTransform<UriLiteral>(ZodUtil.string(), (it: string) =>\n Results.map(parseString(it), (it) => toLiteral(it))\n)\n// JOHN need a schema for the object version...\n// export const SchemaInstance = structuredTransform(Zod.string(), parseString)\n\nexport const empty = (): Uri => {\n return {\n _type: Namespace,\n href: '' as UriLiteral,\n scheme: null,\n authentication: null,\n host: null,\n location: {\n path: null,\n query: null,\n fragment: null,\n },\n }\n}\n\n/**\n * Tests if the provided value is a Uri.\n *\n * **Example**\n *\n * ```ts\n * import { Uris } from \"@bessemer/cornerstone\"\n *\n * // Check if unknown value is a Uri\n * function processValue(value: unknown) {\n * if (Uris.isUri(value)) {\n * console.log(value.scheme) // Type-safe access\n * console.log(value.location.path)\n * }\n * }\n * ```\n *\n * @category type-guards\n */\nexport const isUri = (value: unknown): value is Uri => {\n if (!Objects.isObject(value)) {\n return false\n }\n\n const uriValue = value as any as Uri\n return uriValue._type === Namespace || uriValue._type === UrlNamespace\n}\n\n/**\n * Updates an existing URI with partial changes to create a new URI instance.\n * Allows selective updates without replacing the entire URI.\n *\n * **Example**\n *\n * ```ts\n * import { Uris } from \"@bessemer/cornerstone\"\n *\n * // Start with a base URI\n * const baseUri = Uris.build({\n * scheme: 'https',\n * host: { value: 'api.example.com', port: 443 },\n * authentication: { principal: 'user', password: 'pass' },\n * location: { path: '/v1', parameters: { format: 'json' } }\n * })\n *\n * // Change just the host and add query parameter\n * const updatedUri = Uris.update(baseUri, {\n * host: { value: 'api.production.com' }, // Port preserved from original\n * location: {\n * parameters: { version: '2.0' } // Merges with existing parameters\n * }\n * })\n *\n * console.log(updatedUri.host?.value) // 'api.production.com'\n * console.log(updatedUri.host?.port) // 443 (preserved)\n * console.log(updatedUri.location.parameters) // { format: 'json', version: '2.0' }\n * ```\n *\n * @category transformation\n */\nexport const update = (element: UriLike, builder: UriBuilder): Uri => {\n const uri = from(element)\n\n let location: UriBuilderLocation | null | undefined\n if (Strings.isString(builder.location) || Objects.isNull(builder.location)) {\n location = builder.location\n } else {\n location = {\n path: Objects.isUndefined(builder.location?.path) ? uri.location.path : builder.location?.path,\n query: Objects.isUndefined(builder.location?.query) ? uri.location.query : builder.location?.query,\n fragment: Objects.isUndefined(builder.location?.fragment) ? uri.location.fragment : builder.location?.fragment,\n }\n }\n\n const uriBuilder: UriBuilder = {\n scheme: Objects.isUndefined(builder.scheme) ? uri.scheme : builder.scheme,\n host: Objects.isUndefined(builder.host) ? uri.host : builder.host,\n authentication: Objects.isUndefined(builder.authentication) ? uri.authentication : builder.authentication,\n location,\n }\n\n return from(uriBuilder)\n}\n\nexport const merge = (...uris: Array<UriLike>): Uri => {\n if (uris.length === 0) {\n return empty()\n }\n if (uris.length === 1) {\n return from(uris[0]!)\n }\n\n return uris.reduce<Uri>((aggregate, next) => {\n const nextUri = from(next)\n\n const builder: UriBuilder = {\n scheme: nextUri.scheme ?? undefined,\n host: nextUri.host ?? undefined,\n authentication: nextUri.authentication ?? undefined,\n location: {\n path: nextUri.location.path ?? undefined,\n query: nextUri.location.query ?? undefined,\n fragment: nextUri.location.fragment ?? undefined,\n },\n }\n\n const uri = update(aggregate, builder)\n return uri\n }, from(uris[0]!))\n}\n\nconst parseSchemePart = (url: UriComponent): Result<[UriScheme | null, UriComponent], ErrorEvent> => {\n // Search for the colon or double slash\n const schemeMatch = Strings.splitFirst(url, /(\\/\\/|:)/)\n\n // If we don't find either, or we hit the double slash before finding a colon, there is no scheme\n if (Objects.isNil(schemeMatch.selection) || schemeMatch.separator === '//') {\n return Results.success([null, url])\n }\n\n // This means the string started with :, so no protocol\n if (Strings.isEmpty(schemeMatch.selection)) {\n return Results.success([null, ':' + schemeMatch.rest])\n } else {\n const schemeResult = parseScheme(schemeMatch.selection)\n if (Results.isFailure(schemeResult)) {\n return schemeResult\n }\n\n return Results.success([schemeResult, schemeMatch.rest])\n }\n}\n\nconst parseScheme = (scheme: UriComponent): Result<UriScheme, ErrorEvent> => {\n // RFC 3986: scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n const schemeRegex = /^[a-zA-Z][a-zA-Z0-9+.-]*$/\n if (!schemeRegex.test(scheme)) {\n return Results.failure(\n ErrorEvents.invalidValue(scheme, {\n namespace: Namespace,\n message: `[${Namespace}]: Invalid characters in Scheme.`,\n })\n )\n }\n\n return Results.success(scheme)\n}\n\nconst parseAuthorityPart = (\n initialUrl: UriComponent,\n mode: UriParseMode\n): Result<[{ host: UriHost | null; authentication: UriAuthentication | null }, UriComponent], ErrorEvent> => {\n if (mode === UriParseMode.Strict && !initialUrl.startsWith('//')) {\n return Results.success([{ host: null, authentication: null }, initialUrl])\n }\n if (mode === UriParseMode.Permissive && initialUrl.startsWith('/')) {\n return Results.success([{ host: null, authentication: null }, initialUrl])\n }\n\n const url = Strings.removeStart(initialUrl, '//')\n\n const authenticationPartResult = parseAuthenticationPart(url)\n if (Results.isFailure(authenticationPartResult)) {\n return authenticationPartResult\n }\n const [authentication, rest1] = authenticationPartResult\n\n const hostPartResult = parseHostPart(rest1)\n if (Results.isFailure(hostPartResult)) {\n return hostPartResult\n }\n const [host, rest2] = hostPartResult\n\n return Results.success([{ host, authentication }, rest2])\n}\n\nconst parseAuthenticationPart = (url: UriComponent): Result<[UriAuthentication | null, UriComponent], ErrorEvent> => {\n let targetPart = url\n const queryMatch = Strings.splitFirst(targetPart, '?')\n const fragmentMatch = Strings.splitFirst(targetPart, '#')\n if (Objects.isPresent(queryMatch.selection)) {\n targetPart = queryMatch.selection\n } else if (Objects.isPresent(fragmentMatch.selection)) {\n targetPart = fragmentMatch.selection\n }\n\n const { selection: authentication } = Strings.splitFirst(targetPart, '@')\n\n // If there is no @, then we don't have an authentication\n if (Objects.isNil(authentication)) {\n return Results.success([null, url])\n }\n\n const { rest } = Strings.splitFirst(url, '@')\n\n const authenticationParseResult = parseAuthentication(authentication)\n if (Results.isFailure(authenticationParseResult)) {\n return authenticationParseResult\n }\n\n return Results.success([authenticationParseResult, rest])\n}\n\nconst parseAuthentication = (authentication: UriComponent): Result<UriAuthentication, ErrorEvent> => {\n const { selection: principal, rest: authenticationRest } = Strings.splitFirst(authentication, ':')\n\n // If there isn't a colon, then there is no password but there is a username\n if (Objects.isNil(principal)) {\n if (!isAuthenticationComponentValid(authenticationRest)) {\n return Results.failure(\n ErrorEvents.invalidValue(authenticationRest, {\n namespace: Namespace,\n message: `[${Namespace}]: Invalid characters for UriAuthentication in principal string: [${authenticationRest}]`,\n })\n )\n }\n\n return Results.success({ principal: decode(authenticationRest), password: null })\n }\n\n // The authentication section started with a :, don't know what to make of this... password but no username?\n if (Strings.isEmpty(principal)) {\n return Results.failure(\n ErrorEvents.invalidValue(authentication, {\n namespace: Namespace,\n message: `[${Namespace}]: Unable to parse UriAuthentication from authentication string: [${authentication}]`,\n })\n )\n }\n\n if (!isAuthenticationComponentValid(principal)) {\n return Results.failure(\n ErrorEvents.invalidValue(principal, {\n namespace: Namespace,\n message: `[${Namespace}]: Invalid characters for UriAuthentication in principal string: [${principal}]`,\n })\n )\n }\n\n if (!isAuthenticationComponentValid(authenticationRest)) {\n return Results.failure(\n ErrorEvents.invalidValue(authenticationRest, {\n namespace: Namespace,\n message: `[${Namespace}]: Invalid characters for UriAuthentication in password string: [${authenticationRest}]`,\n })\n )\n }\n\n // Otherwise, we have both, so return the complete authentication object and the rest\n return Results.success({ principal: decode(principal), password: decode(authenticationRest) })\n}\n\nconst isAuthenticationComponentValid = (component: UriComponent): boolean => {\n const userinfoRegex = /^[A-Za-z0-9\\-._~!$&'()*+,;=%]*$/\n\n if (component.includes('%')) {\n const percentEncodingRegex = /%[0-9A-Fa-f]{2}/g\n const percentMatches = component.match(/%/g) || []\n const validEncodingMatches = component.match(percentEncodingRegex) || []\n\n if (percentMatches.length !== validEncodingMatches.length) {\n return false\n }\n }\n\n return userinfoRegex.test(component)\n}\n\nconst parseHostPart = (url: UriComponent): Result<[UriHost | null, UriComponent], ErrorEvent> => {\n // Check if the host is starting with reserved characters, if so we should just bail on trying to parse\n if (url.startsWith('?') || url.startsWith('#')) {\n return Results.success([null, url])\n }\n\n // Lets grab everything to the left of the first / ? or #, this is the remainder of our authority (if any)\n const urlMatch = Strings.splitFirst(url, /[\\/?#]/)\n let host = urlMatch.rest\n let rest = ''\n\n if (Objects.isPresent(urlMatch.selection)) {\n host = urlMatch.selection\n rest = urlMatch.separator + urlMatch.rest\n }\n\n if (Strings.isEmpty(host)) {\n return Results.success([null, rest])\n }\n\n const parseHostResult = parseHost(host)\n if (Results.isFailure(parseHostResult)) {\n return parseHostResult\n }\n\n return Results.success([parseHostResult, rest])\n}\n\nconst parseHost = (host: UriComponent): Result<UriHost, ErrorEvent> => {\n // Try to see if we have an ipv6 address like the form [2001:db8::7] and handle it\n if (host.startsWith('[')) {\n const ipMatch = Strings.splitFirst(Strings.removeStart(host, '['), ']')\n\n if (Objects.isPresent(ipMatch.selection)) {\n const ipV6Result = IpV6Addresses.parseString(ipMatch.selection)\n if (Results.isFailure(ipV6Result)) {\n return ipV6Result\n }\n\n const portMatch = Strings.splitFirst(ipMatch.rest, ':')\n if (Objects.isPresent(portMatch.selection) && Strings.isEmpty(portMatch.selection)) {\n if (!Strings.isNumber(portMatch.rest)) {\n return Results.failure(ErrorEvents.invalidValue(host, { namespace: Namespace, message: `[${Namespace}]: Unable to parse Host: [${host}]` }))\n }\n\n return Results.success({ value: `[${ipMatch.selection}]` as UriHostName, port: Number(portMatch.rest) })\n } else {\n return Results.success({ value: `[${ipMatch.selection}]` as UriHostName, port: null })\n }\n }\n }\n\n let hostMatch: StringSplitResult = Strings.splitFirst(host, ':')\n\n // We have no :, which means no port, so treat the rest as the hostname\n if (Objects.isNil(hostMatch.selection)) {\n const hostNameResult = UriHostNames.parseString(hostMatch.rest)\n if (Results.isFailure(hostNameResult)) {\n return Results.failure(\n ErrorEvents.invalidValue(host, {\n namespace: Namespace,\n message: `[${Namespace}]: Unable to parse Host from host string: [${host}]`,\n causes: hostNameResult.value.causes,\n })\n )\n }\n\n return Results.success({ value: hostNameResult, port: null })\n }\n\n // The host started with a :, this is odd\n if (Strings.isEmpty(hostMatch.selection)) {\n return Results.failure(\n ErrorEvents.invalidValue(host, { namespace: Namespace, message: `[${Namespace}]: Unable to parse Host from host string: [${host}]` })\n )\n }\n\n const hostName = hostMatch.selection\n\n if (!Strings.isNumber(hostMatch.rest)) {\n return Results.failure(\n ErrorEvents.invalidValue(host, { namespace: Namespace, message: `[${Namespace}]: Unable to parse Host from host string: [${host}]` })\n )\n }\n\n // Otherwise, we have both, so return the complete authentication object and the rest\n const hostNameResult = UriHostNames.parseString(hostName)\n if (Results.isFailure(hostNameResult)) {\n return Results.failure(\n ErrorEvents.invalidValue(host, {\n namespace: Namespace,\n message: `[${Namespace}]: Unable to parse Host from host string: [${host}]`,\n causes: hostNameResult.value.causes,\n })\n )\n }\n\n return Results.success({ value: hostNameResult, port: Number(hostMatch.rest) })\n}\n\nconst parseLocation = (url: UriComponent): UriLocation => {\n const location: UriLocation = { path: null, query: null, fragment: null }\n\n // Lets see if we have a fragment and parse it off the end\n const fragmentMatch = Strings.splitFirst(url, '#')\n if (Objects.isPresent(fragmentMatch.selection) && !Strings.isEmpty(fragmentMatch.rest)) {\n location.fragment = encodeWhitespace(fragmentMatch.rest)\n }\n\n // Lets see if we have a query string and parse it off the remainder\n const queryMatch = Strings.splitFirst(fragmentMatch.selection ?? fragmentMatch.rest, '?')\n if (Objects.isPresent(queryMatch.selection) && !Strings.isEmpty(queryMatch.rest)) {\n location.query = encodeWhitespace(queryMatch.rest)\n }\n\n const path = Strings.emptyToNull(queryMatch.selection ?? queryMatch.rest)\n if (Objects.isPresent(path)) {\n location.path = encodeWhitespace(path)\n }\n return location\n}\n\nconst build = (builder: UriBuilder): Uri => {\n const scheme = Objects.isPresent(builder.scheme) ? ErrorEvents.unpackResult(parseScheme(builder.scheme)) : null\n let host: UriHost | null = null\n let authentication: UriAuthentication | null = null\n\n if (Objects.isPresent(builder.host)) {\n if (Strings.isString(builder.host)) {\n host = ErrorEvents.unpackResult(parseHost(builder.host))\n } else {\n host = {\n value: UriHostNames.from(builder.host.value),\n port: builder.host.port ?? null,\n }\n }\n\n if (Objects.isPresent(builder.authentication)) {\n if (Strings.isString(builder.authentication)) {\n authentication = ErrorEvents.unpackResult(parseAuthentication(builder.authentication))\n } else {\n authentication = {\n principal: builder.authentication.principal,\n password: builder.authentication.password ?? null,\n }\n }\n }\n }\n\n let location: UriLocation = {\n path: null,\n query: null,\n fragment: null,\n }\n\n if (Objects.isPresent(builder.location)) {\n if (Strings.isString(builder.location)) {\n let locationString = builder.location\n if (Objects.isPresent(builder.host) && !locationString.startsWith('/') && !locationString.startsWith('?') && !locationString.startsWith('#')) {\n locationString = '/' + locationString\n }\n\n location = parseLocation(locationString)\n } else {\n let path = builder.location.path ?? null\n if (Objects.isPresent(path) && !path.startsWith('/') && Objects.isPresent(builder.host)) {\n path = '/' + path\n }\n\n location = {\n path: Objects.isPresent(path) ? encodeWhitespace(path) : null,\n query: Objects.isPresent(builder.location.query) ? encodeWhitespace(builder.location.query) : null,\n fragment: Objects.isPresent(builder.location.fragment) ? encodeWhitespace(builder.location.fragment) : null,\n }\n }\n }\n\n const structure: UriStructure = {\n _type: Namespace,\n scheme,\n host,\n authentication,\n location,\n }\n\n return {\n ...structure,\n href: formatInternal(structure),\n }\n}\n\nexport const UriComponentType = {\n Scheme: 'Scheme',\n Authentication: 'Authentication',\n Host: 'Host',\n Location: 'Location',\n Path: 'Path',\n Query: 'Query',\n Fragment: 'Fragment',\n} as const\n\nexport type UriComponentType = ValueOf<typeof UriComponentType>\n\n/**\n * Converts a URI object into its string representation, with optional exclusion of specific URI components.\n *\n * **Example**\n *\n * ```ts\n * import { Uris, UriComponentType } from \"@bessemer/cornerstone\"\n *\n * const uri = Uris.build({\n * scheme: 'https',\n * authentication: { principal: 'user', password: 'secret' },\n * host: { value: 'api.example.com', port: 8080 },\n * location: { path: '/v1/data', parameters: { format: 'json' }, fragment: 'results' }\n * })\n *\n * // Format complete URI\n * const fullUri = Uris.format(uri)\n * console.log(fullUri) // \"https://user:secret@api.example.com:8080/v1/data?format=json#results\"\n *\n * // Exclude authentication for public sharing\n * const publicUri = Uris.format(uri, [UriComponentType.Authentication])\n * console.log(publicUri) // \"https://api.example.com:8080/v1/data?format=json#results\"\n *\n * // Format path-only URI\n * const pathOnly = Uris.format(uri, [\n * UriComponentType.Scheme,\n * UriComponentType.Host,\n * UriComponentType.Authentication\n * ])\n * console.log(pathOnly) // \"/v1/data?format=json#results\"\n * ```\n *\n * @category serialization\n */\nexport const format = (uriLike: UriLike, excludedUriComponents: Array<UriComponentType> = []): UriLiteral => {\n return formatInternal(from(uriLike), excludedUriComponents)\n}\n\nexport const isComplete = (uri: Uri): boolean => {\n return Objects.isPresent(uri.scheme) && Objects.isPresent(uri.host)\n}\n\nconst formatInternal = (uri: UriStructure, excludedUriComponents: Array<UriComponentType> = []): UriLiteral => {\n let urlString = ''\n if (Objects.isPresent(uri.scheme) && !Arrays.contains(excludedUriComponents, UriComponentType.Scheme)) {\n urlString = urlString + uri.scheme + ':'\n }\n\n if (Objects.isPresent(uri.host) && !Arrays.contains(excludedUriComponents, UriComponentType.Host)) {\n urlString = urlString + '//'\n\n if (Objects.isPresent(uri.authentication) && !Arrays.contains(excludedUriComponents, UriComponentType.Authentication)) {\n urlString = urlString + encode(uri.authentication.principal)\n\n if (Objects.isPresent(uri.authentication.password)) {\n urlString = urlString + ':' + encode(uri.authentication.password)\n }\n\n urlString = urlString + '@'\n }\n\n urlString = urlString + uri.host.value\n if (Objects.isPresent(uri.host.port)) {\n urlString = urlString + ':' + uri.host.port\n }\n }\n\n if (!Arrays.contains(excludedUriComponents, UriComponentType.Location)) {\n urlString = urlString + formatLocation(uri.location, excludedUriComponents)\n }\n\n return urlString as UriLiteral\n}\n\nconst formatLocation = (location: UriLocation, excludedUriComponents: Array<UriComponentType> = []): string => {\n let urlString = ''\n\n if (Objects.isPresent(location.path) && !Arrays.contains(excludedUriComponents, UriComponentType.Path)) {\n urlString = urlString + location.path\n }\n\n if (Objects.isPresent(location.query) && !Arrays.contains(excludedUriComponents, UriComponentType.Query)) {\n urlString = urlString + '?' + location.query\n }\n\n if (Objects.isPresent(location.fragment) && !Arrays.contains(excludedUriComponents, UriComponentType.Fragment)) {\n urlString = urlString + '#' + location.fragment\n }\n\n return urlString\n}\n\nconst encodeWhitespace = (uriComponent: UriComponent) => {\n return uriComponent.replaceAll(' ', '%20')\n}\n\nexport const encode = (uriComponent: UriComponent) => {\n return encodeURIComponent(uriComponent)\n}\n\nexport const decode = (uriComponent: UriComponent) => {\n return decodeURIComponent(uriComponent)\n}\n"],"mappings":"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","names":["parseString","from","it","hostNameResult"]}
@@ -1 +1 @@
1
- {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/net/url.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/net/url.ts"],"names":[],"mappings":"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"}
package/dist/net/url.js CHANGED
@@ -2,11 +2,10 @@
2
2
  import * as Uris from "@bessemer/cornerstone/net/uri";
3
3
  import { UriParseMode } from "@bessemer/cornerstone/net/uri";
4
4
  import * as Results from "@bessemer/cornerstone/result";
5
- import { unpackResult } from "@bessemer/cornerstone/error/error-event";
5
+ import * as ErrorEvents from "@bessemer/cornerstone/error/error-event";
6
6
  import * as Strings from "@bessemer/cornerstone/string";
7
7
  import * as Arrays from "@bessemer/cornerstone/array";
8
- import { first, isEmpty as isEmpty2 } from "@bessemer/cornerstone/array";
9
- import { structuredTransform } from "@bessemer/cornerstone/zod-util";
8
+ import * as ZodUtil from "@bessemer/cornerstone/zod-util";
10
9
  import Zod from "zod";
11
10
  import * as Equalitors from "@bessemer/cornerstone/equalitor";
12
11
  import * as Objects from "@bessemer/cornerstone/object";
@@ -28,7 +27,7 @@ function from2(value) {
28
27
  return fromUri(value);
29
28
  }
30
29
  if (Strings.isString(value)) {
31
- return unpackResult(parseString2(value));
30
+ return ErrorEvents.unpackResult(parseString2(value));
32
31
  }
33
32
  return build(value);
34
33
  }
@@ -39,7 +38,7 @@ function toLiteral(likeValue) {
39
38
  const value = from2(likeValue);
40
39
  return format2(value);
41
40
  }
42
- var SchemaLiteral = structuredTransform(Zod.string(), (it) => Results.map(parseString2(it), (it2) => toLiteral(it2)));
41
+ var SchemaLiteral = ZodUtil.structuredTransform(Zod.string(), (it) => Results.map(parseString2(it), (it2) => toLiteral(it2)));
43
42
  var empty2 = () => {
44
43
  const result = Uris.empty();
45
44
  return {
@@ -156,7 +155,7 @@ var fromUri = (uri) => {
156
155
  if (Objects.isPresent(uri.location.query)) {
157
156
  uri.location.query.split("&").forEach((parameterPair) => {
158
157
  let splitParameters = parameterPair.split("=");
159
- if (!Strings.isBlank(first(splitParameters))) {
158
+ if (!Strings.isBlank(Arrays.first(splitParameters))) {
160
159
  let key = decode2(splitParameters[0]);
161
160
  let value = "";
162
161
  if (splitParameters.length === 2) {
@@ -202,7 +201,7 @@ var formatPathSegments = (pathSegments, hasHost, relative) => {
202
201
  };
203
202
  var formatQueryParameters = (parameters) => {
204
203
  const parameterEntries = Object.entries(parameters);
205
- if (isEmpty2(parameterEntries)) {
204
+ if (Arrays.isEmpty(parameterEntries)) {
206
205
  return null;
207
206
  }
208
207
  return Object.entries(parameters).flatMap(([key, value]) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/net/url.ts"],"sourcesContent":["import { Dictionary, NominalType } from '@bessemer/cornerstone/types'\nimport * as Uris from '@bessemer/cornerstone/net/uri'\nimport { Uri, UriBuilder, UriComponent, UriLiteral, UriLocation, UriParseMode } from '@bessemer/cornerstone/net/uri'\nimport * as Results from '@bessemer/cornerstone/result'\nimport { Result } from '@bessemer/cornerstone/result'\nimport { ErrorEvent, unpackResult } from '@bessemer/cornerstone/error/error-event'\nimport * as Strings from '@bessemer/cornerstone/string'\nimport * as Arrays from '@bessemer/cornerstone/array'\nimport { first, isEmpty } from '@bessemer/cornerstone/array'\nimport { structuredTransform } from '@bessemer/cornerstone/zod-util'\nimport Zod from 'zod'\nimport * as Equalitors from '@bessemer/cornerstone/equalitor'\nimport { Equalitor } from '@bessemer/cornerstone/equalitor'\nimport { MergeExclusive } from 'type-fest'\nimport * as Objects from '@bessemer/cornerstone/object'\n\nexport const encode = Uris.encode\n\nexport const decode = Uris.decode\n\nexport type UrlLiteral = NominalType<UriLiteral, typeof Namespace>\n\nexport interface UrlLocation extends UriLocation {\n pathSegments: Array<string>\n parameters: Dictionary<string | Array<string>>\n}\n\nexport interface Url extends Uri {\n _type: typeof Namespace\n location: UrlLocation\n href: UrlLiteral\n relative: boolean\n}\n\nexport const Namespace = Uris.UrlNamespace\nexport const EqualBy: Equalitor<Url> = Equalitors.deepNatural()\n\ntype UrlBuilderPathPart = MergeExclusive<{ path?: string | null }, { pathSegments?: Array<string> }>\ntype UrlBuilderQueryPart = MergeExclusive<{ query?: string | null }, { parameters?: Dictionary<string | Array<string>> }>\ntype UrlBuilderLocationPart = UrlBuilderPathPart &\n UrlBuilderQueryPart & {\n fragment?: string | null\n }\n\nexport type UrlBuilder = UriBuilder & {\n location?: UrlBuilderLocationPart | null | undefined\n relative?: boolean\n}\n\nexport type UrlLike = Url | Uri | UrlBuilder | UriLiteral | UrlLiteral\n\nexport const parseString = (value: string, mode: UriParseMode = UriParseMode.Strict): Result<Url, ErrorEvent> => {\n return Results.map(Uris.parseString(value, mode), (it) => Results.success(fromUri(it)))\n}\n\nexport function from(value: UrlLike | string): Url\nexport function from(value: UrlLike | string | null): Url | null\nexport function from(value: UrlLike | string | undefined): Url | undefined\nexport function from(value: UrlLike | string | null | undefined): Url | null | undefined\nexport function from(value: UrlLike | string | null | undefined): Url | null | undefined {\n if (Objects.isNil(value)) {\n return value\n }\n if (isUrl(value)) {\n return value\n }\n if (Uris.isUri(value)) {\n return fromUri(value)\n }\n if (Strings.isString(value)) {\n return unpackResult(parseString(value))\n }\n\n return build(value as UrlBuilder)\n}\n\nexport function toLiteral(likeValue: UrlLike): UrlLiteral\nexport function toLiteral(likeValue: UrlLike | null): UrlLiteral | null\nexport function toLiteral(likeValue: UrlLike | undefined): UrlLiteral | undefined\nexport function toLiteral(likeValue: UrlLike | null | undefined): UrlLiteral | null | undefined\nexport function toLiteral(likeValue: UrlLike | null | undefined): UrlLiteral | null | undefined {\n if (Objects.isNil(likeValue)) {\n return likeValue\n }\n\n const value = from(likeValue)\n return format(value) as UrlLiteral\n}\n\nexport const SchemaLiteral = structuredTransform(Zod.string(), (it: string) => Results.map(parseString(it), (it) => toLiteral(it)))\n// JOHN need a schema for the object version...\n// export const SchemaInstance = structuredTransform(Zod.string(), parseString)\n\nexport const empty = (): Url => {\n const result = Uris.empty()\n\n return {\n ...result,\n _type: Namespace,\n href: result.href as UrlLiteral,\n location: {\n ...result.location,\n pathSegments: [],\n parameters: {},\n },\n relative: true,\n }\n}\n\nexport const isUrl = (value: unknown): value is Url => {\n if (!Objects.isObject(value)) {\n return false\n }\n\n const uriValue = value as any as Url\n return uriValue._type === Namespace\n}\n\nexport const update = (element: UrlLike, builder: UrlBuilder): Url => {\n const url = from(element)\n\n const buildRelative = builder.relative === true\n\n let location: UrlBuilderLocationPart | null | undefined\n if (Strings.isString(builder.location) || Objects.isNull(builder.location)) {\n location = builder.location\n } else {\n const usePathSegments = !Objects.isUndefined(builder.location?.pathSegments)\n const useParameters = !Objects.isUndefined(builder.location?.parameters)\n\n location = {\n ...(usePathSegments\n ? { pathSegments: builder.location?.pathSegments }\n : { path: Objects.isUndefined(builder.location?.path) ? url.location.path : builder.location.path }),\n ...(useParameters\n ? { parameters: builder.location?.parameters }\n : { query: Objects.isUndefined(builder.location?.query) ? url.location.query : builder.location.query }),\n fragment: Objects.isUndefined(builder.location?.fragment) ? url.location.fragment : builder.location.fragment,\n }\n }\n\n const uriBuilder: UrlBuilder = {\n scheme: Objects.isUndefined(builder.scheme) && !buildRelative ? url.scheme : builder.scheme,\n host: Objects.isUndefined(builder.host) && !buildRelative ? url.host : builder.host,\n authentication: Objects.isUndefined(builder.authentication) && !buildRelative ? url.authentication : builder.authentication,\n location,\n relative: buildRelative,\n }\n\n return from(uriBuilder)\n}\n\nexport const navigate = (base: UrlLike, next: UrlLike): Url => {\n const baseUrl = from(base)\n const nextUrl = from(next)\n\n const isOnlyFragment = nextUrl.relative && Objects.isNil(nextUrl.location.path) && Objects.isNil(nextUrl.location.query)\n\n const builder: UrlBuilder = {\n scheme: nextUrl.scheme ?? undefined,\n host: nextUrl.host ?? undefined,\n authentication: Objects.isPresent(nextUrl.host) ? nextUrl.authentication : undefined,\n location: {\n pathSegments: nextUrl.relative ? [...baseUrl.location.pathSegments, ...nextUrl.location.pathSegments] : nextUrl.location.pathSegments,\n query: isOnlyFragment ? undefined : nextUrl.location.query,\n fragment: nextUrl.location.fragment,\n },\n }\n\n const uri = update(baseUrl, builder)\n return uri\n}\n\nexport const format = Uris.format\nexport const isComplete = Uris.isComplete\n\nconst build = (builder: UrlBuilder): Url => {\n if ((builder.relative ?? false) && Objects.isPresent(builder.host)) {\n throw new Error(`[${Namespace}]: Unable to construct a relative url with a non-null host: ${builder}`)\n }\n\n const uriBuilder = convertUrlBuilderToUriBuilder(builder)\n const uri = Uris.from(uriBuilder)\n return fromUri(uri)\n}\n\nconst convertUrlBuilderToUriBuilder = (builder: UrlBuilder): UriBuilder => {\n if (Objects.isNil(builder.location)) {\n if (Objects.isNil(builder.host)) {\n return {\n ...builder,\n location: { path: builder.relative === true ? '' : '/' },\n }\n }\n\n return builder\n }\n\n if (Strings.isString(builder.location)) {\n return builder\n }\n\n const relative = builder.relative ?? false\n let path = relative ? Strings.removeStart(builder.location.path ?? '', '/') : builder.location.path\n if (Objects.isPresent(builder.location.pathSegments)) {\n path = formatPathSegments(builder.location.pathSegments, Objects.isPresent(builder.host), relative)\n }\n\n let query = builder.location.query\n if (Objects.isPresent(builder.location.parameters)) {\n query = formatQueryParameters(builder.location.parameters)\n }\n\n return {\n ...builder,\n location: { path, query, fragment: builder.location.fragment },\n }\n}\n\nconst fromUri = (uri: Uri): Url => {\n let relative: boolean = false\n let pathSegments: Array<string> = []\n const parameters: Dictionary<string | Array<string>> = {}\n\n if (Objects.isPresent(uri.location.path)) {\n if (!uri.location.path.startsWith('/')) {\n relative = true\n }\n\n pathSegments = Strings.removeStart(uri.location.path, '/')\n .split('/')\n .filter((it) => !Strings.isBlank(it))\n .map((urlPathPart) => decode(urlPathPart))\n } else {\n if (Objects.isNil(uri.host)) {\n relative = true\n }\n }\n\n if (Objects.isPresent(uri.location.query)) {\n uri.location.query.split('&').forEach((parameterPair) => {\n let splitParameters = parameterPair.split('=')\n\n if (!Strings.isBlank(first(splitParameters))) {\n let key = decode(splitParameters[0]!)\n let value = ''\n if (splitParameters.length === 2) {\n value = splitParameters[1]!\n }\n if (Objects.isNil(parameters[key])) {\n parameters[key] = decode(value)\n } else if (!Array.isArray(parameters[key])) {\n let paramList = [parameters[key]]\n paramList.push(decode(value))\n parameters[key] = paramList\n } else {\n parameters[key].push(decode(value))\n }\n }\n })\n }\n\n const url: Url = {\n ...uri,\n _type: Namespace,\n location: {\n path: formatPathSegments(pathSegments, Objects.isPresent(uri.host), relative),\n pathSegments,\n query: formatQueryParameters(parameters),\n parameters,\n fragment: uri.location.fragment,\n },\n href: uri.href as UrlLiteral,\n relative,\n }\n\n url.href = format(url) as UrlLiteral\n return url\n}\n\nconst formatPathSegments = (pathSegments: Array<string>, hasHost: boolean, relative: boolean): UriComponent | null => {\n if (Arrays.isEmpty(pathSegments)) {\n if (!hasHost && !relative) {\n return '/'\n } else {\n return null\n }\n }\n\n return (relative ? '' : '/') + pathSegments.map((it) => encode(it)).join('/')\n}\n\nconst formatQueryParameters = (parameters: Dictionary<string | Array<string>>): UriComponent | null => {\n const parameterEntries = Object.entries(parameters)\n if (isEmpty(parameterEntries)) {\n return null\n }\n\n return Object.entries(parameters)\n .flatMap(([key, value]) => {\n if (Array.isArray(value)) {\n return value.map((it) => `${encode(key)}=${encode(it)}`)\n } else {\n return [`${encode(key)}=${encode(value)}`]\n }\n })\n .join('&')\n}\n\n// JOHN I don't know about these two methods...\nexport const getParameter = (url: UrlLike, name: string): string | undefined => {\n const parameter = from(url).location.parameters[name]\n if (Objects.isNil(parameter)) {\n return undefined\n }\n\n if (Array.isArray(parameter)) {\n throw new Error(`Expected a single parameter value but found multiple for parameter: ${name}`)\n }\n\n return parameter\n}\n\nexport const getJsonParameter = <T>(url: UrlLike, name: string): T | undefined => {\n const value = getParameter(url, name)\n return Objects.isPresent(value) ? JSON.parse(value) : undefined\n}\n"],"mappings":";AACA,YAAY,UAAU;AACtB,SAAiE,oBAAoB;AACrF,YAAY,aAAa;AAEzB,SAAqB,oBAAoB;AACzC,YAAY,aAAa;AACzB,YAAY,YAAY;AACxB,SAAS,OAAO,WAAAA,gBAAe;AAC/B,SAAS,2BAA2B;AACpC,OAAO,SAAS;AAChB,YAAY,gBAAgB;AAG5B,YAAY,aAAa;AAElB,IAAMC,UAAc;AAEpB,IAAMC,UAAc;AAgBpB,IAAM,YAAiB;AACvB,IAAM,UAAqC,uBAAY;AAgBvD,IAAMC,eAAc,CAAC,OAAe,OAAqB,aAAa,WAAoC;AAC/G,SAAe,YAAS,iBAAY,OAAO,IAAI,GAAG,CAAC,OAAe,gBAAQ,QAAQ,EAAE,CAAC,CAAC;AACxF;AAMO,SAASC,MAAK,OAAoE;AACvF,MAAY,cAAM,KAAK,GAAG;AACxB,WAAO;AAAA,EACT;AACA,MAAI,MAAM,KAAK,GAAG;AAChB,WAAO;AAAA,EACT;AACA,MAAS,WAAM,KAAK,GAAG;AACrB,WAAO,QAAQ,KAAK;AAAA,EACtB;AACA,MAAY,iBAAS,KAAK,GAAG;AAC3B,WAAO,aAAaD,aAAY,KAAK,CAAC;AAAA,EACxC;AAEA,SAAO,MAAM,KAAmB;AAClC;AAMO,SAAS,UAAU,WAAsE;AAC9F,MAAY,cAAM,SAAS,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,QAAQC,MAAK,SAAS;AAC5B,SAAOC,QAAO,KAAK;AACrB;AAEO,IAAM,gBAAgB,oBAAoB,IAAI,OAAO,GAAG,CAAC,OAAuB,YAAIF,aAAY,EAAE,GAAG,CAACG,QAAO,UAAUA,GAAE,CAAC,CAAC;AAI3H,IAAMC,SAAQ,MAAW;AAC9B,QAAM,SAAc,WAAM;AAE1B,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO;AAAA,IACP,MAAM,OAAO;AAAA,IACb,UAAU;AAAA,MACR,GAAG,OAAO;AAAA,MACV,cAAc,CAAC;AAAA,MACf,YAAY,CAAC;AAAA,IACf;AAAA,IACA,UAAU;AAAA,EACZ;AACF;AAEO,IAAM,QAAQ,CAAC,UAAiC;AACrD,MAAI,CAAS,iBAAS,KAAK,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,WAAW;AACjB,SAAO,SAAS,UAAU;AAC5B;AAEO,IAAM,SAAS,CAAC,SAAkB,YAA6B;AACpE,QAAM,MAAMH,MAAK,OAAO;AAExB,QAAM,gBAAgB,QAAQ,aAAa;AAE3C,MAAI;AACJ,MAAY,iBAAS,QAAQ,QAAQ,KAAa,eAAO,QAAQ,QAAQ,GAAG;AAC1E,eAAW,QAAQ;AAAA,EACrB,OAAO;AACL,UAAM,kBAAkB,CAAS,oBAAY,QAAQ,UAAU,YAAY;AAC3E,UAAM,gBAAgB,CAAS,oBAAY,QAAQ,UAAU,UAAU;AAEvE,eAAW;AAAA,MACT,GAAI,kBACA,EAAE,cAAc,QAAQ,UAAU,aAAa,IAC/C,EAAE,MAAc,oBAAY,QAAQ,UAAU,IAAI,IAAI,IAAI,SAAS,OAAO,QAAQ,SAAS,KAAK;AAAA,MACpG,GAAI,gBACA,EAAE,YAAY,QAAQ,UAAU,WAAW,IAC3C,EAAE,OAAe,oBAAY,QAAQ,UAAU,KAAK,IAAI,IAAI,SAAS,QAAQ,QAAQ,SAAS,MAAM;AAAA,MACxG,UAAkB,oBAAY,QAAQ,UAAU,QAAQ,IAAI,IAAI,SAAS,WAAW,QAAQ,SAAS;AAAA,IACvG;AAAA,EACF;AAEA,QAAM,aAAyB;AAAA,IAC7B,QAAgB,oBAAY,QAAQ,MAAM,KAAK,CAAC,gBAAgB,IAAI,SAAS,QAAQ;AAAA,IACrF,MAAc,oBAAY,QAAQ,IAAI,KAAK,CAAC,gBAAgB,IAAI,OAAO,QAAQ;AAAA,IAC/E,gBAAwB,oBAAY,QAAQ,cAAc,KAAK,CAAC,gBAAgB,IAAI,iBAAiB,QAAQ;AAAA,IAC7G;AAAA,IACA,UAAU;AAAA,EACZ;AAEA,SAAOA,MAAK,UAAU;AACxB;AAEO,IAAM,WAAW,CAAC,MAAe,SAAuB;AAC7D,QAAM,UAAUA,MAAK,IAAI;AACzB,QAAM,UAAUA,MAAK,IAAI;AAEzB,QAAM,iBAAiB,QAAQ,YAAoB,cAAM,QAAQ,SAAS,IAAI,KAAa,cAAM,QAAQ,SAAS,KAAK;AAEvH,QAAM,UAAsB;AAAA,IAC1B,QAAQ,QAAQ,UAAU;AAAA,IAC1B,MAAM,QAAQ,QAAQ;AAAA,IACtB,gBAAwB,kBAAU,QAAQ,IAAI,IAAI,QAAQ,iBAAiB;AAAA,IAC3E,UAAU;AAAA,MACR,cAAc,QAAQ,WAAW,CAAC,GAAG,QAAQ,SAAS,cAAc,GAAG,QAAQ,SAAS,YAAY,IAAI,QAAQ,SAAS;AAAA,MACzH,OAAO,iBAAiB,SAAY,QAAQ,SAAS;AAAA,MACrD,UAAU,QAAQ,SAAS;AAAA,IAC7B;AAAA,EACF;AAEA,QAAM,MAAM,OAAO,SAAS,OAAO;AACnC,SAAO;AACT;AAEO,IAAMC,UAAc;AACpB,IAAMG,cAAkB;AAE/B,IAAM,QAAQ,CAAC,YAA6B;AAC1C,OAAK,QAAQ,YAAY,UAAkB,kBAAU,QAAQ,IAAI,GAAG;AAClE,UAAM,IAAI,MAAM,IAAI,SAAS,+DAA+D,OAAO,EAAE;AAAA,EACvG;AAEA,QAAM,aAAa,8BAA8B,OAAO;AACxD,QAAM,MAAW,UAAK,UAAU;AAChC,SAAO,QAAQ,GAAG;AACpB;AAEA,IAAM,gCAAgC,CAAC,YAAoC;AACzE,MAAY,cAAM,QAAQ,QAAQ,GAAG;AACnC,QAAY,cAAM,QAAQ,IAAI,GAAG;AAC/B,aAAO;AAAA,QACL,GAAG;AAAA,QACH,UAAU,EAAE,MAAM,QAAQ,aAAa,OAAO,KAAK,IAAI;AAAA,MACzD;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,MAAY,iBAAS,QAAQ,QAAQ,GAAG;AACtC,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,QAAQ,YAAY;AACrC,MAAI,OAAO,WAAmB,oBAAY,QAAQ,SAAS,QAAQ,IAAI,GAAG,IAAI,QAAQ,SAAS;AAC/F,MAAY,kBAAU,QAAQ,SAAS,YAAY,GAAG;AACpD,WAAO,mBAAmB,QAAQ,SAAS,cAAsB,kBAAU,QAAQ,IAAI,GAAG,QAAQ;AAAA,EACpG;AAEA,MAAI,QAAQ,QAAQ,SAAS;AAC7B,MAAY,kBAAU,QAAQ,SAAS,UAAU,GAAG;AAClD,YAAQ,sBAAsB,QAAQ,SAAS,UAAU;AAAA,EAC3D;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,UAAU,EAAE,MAAM,OAAO,UAAU,QAAQ,SAAS,SAAS;AAAA,EAC/D;AACF;AAEA,IAAM,UAAU,CAAC,QAAkB;AACjC,MAAI,WAAoB;AACxB,MAAI,eAA8B,CAAC;AACnC,QAAM,aAAiD,CAAC;AAExD,MAAY,kBAAU,IAAI,SAAS,IAAI,GAAG;AACxC,QAAI,CAAC,IAAI,SAAS,KAAK,WAAW,GAAG,GAAG;AACtC,iBAAW;AAAA,IACb;AAEA,mBAAuB,oBAAY,IAAI,SAAS,MAAM,GAAG,EACtD,MAAM,GAAG,EACT,OAAO,CAAC,OAAO,CAAS,gBAAQ,EAAE,CAAC,EACnC,IAAI,CAAC,gBAAgBN,QAAO,WAAW,CAAC;AAAA,EAC7C,OAAO;AACL,QAAY,cAAM,IAAI,IAAI,GAAG;AAC3B,iBAAW;AAAA,IACb;AAAA,EACF;AAEA,MAAY,kBAAU,IAAI,SAAS,KAAK,GAAG;AACzC,QAAI,SAAS,MAAM,MAAM,GAAG,EAAE,QAAQ,CAAC,kBAAkB;AACvD,UAAI,kBAAkB,cAAc,MAAM,GAAG;AAE7C,UAAI,CAAS,gBAAQ,MAAM,eAAe,CAAC,GAAG;AAC5C,YAAI,MAAMA,QAAO,gBAAgB,CAAC,CAAE;AACpC,YAAI,QAAQ;AACZ,YAAI,gBAAgB,WAAW,GAAG;AAChC,kBAAQ,gBAAgB,CAAC;AAAA,QAC3B;AACA,YAAY,cAAM,WAAW,GAAG,CAAC,GAAG;AAClC,qBAAW,GAAG,IAAIA,QAAO,KAAK;AAAA,QAChC,WAAW,CAAC,MAAM,QAAQ,WAAW,GAAG,CAAC,GAAG;AAC1C,cAAI,YAAY,CAAC,WAAW,GAAG,CAAC;AAChC,oBAAU,KAAKA,QAAO,KAAK,CAAC;AAC5B,qBAAW,GAAG,IAAI;AAAA,QACpB,OAAO;AACL,qBAAW,GAAG,EAAE,KAAKA,QAAO,KAAK,CAAC;AAAA,QACpC;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,MAAW;AAAA,IACf,GAAG;AAAA,IACH,OAAO;AAAA,IACP,UAAU;AAAA,MACR,MAAM,mBAAmB,cAAsB,kBAAU,IAAI,IAAI,GAAG,QAAQ;AAAA,MAC5E;AAAA,MACA,OAAO,sBAAsB,UAAU;AAAA,MACvC;AAAA,MACA,UAAU,IAAI,SAAS;AAAA,IACzB;AAAA,IACA,MAAM,IAAI;AAAA,IACV;AAAA,EACF;AAEA,MAAI,OAAOG,QAAO,GAAG;AACrB,SAAO;AACT;AAEA,IAAM,qBAAqB,CAAC,cAA6B,SAAkB,aAA2C;AACpH,MAAW,eAAQ,YAAY,GAAG;AAChC,QAAI,CAAC,WAAW,CAAC,UAAU;AACzB,aAAO;AAAA,IACT,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF;AAEA,UAAQ,WAAW,KAAK,OAAO,aAAa,IAAI,CAAC,OAAOJ,QAAO,EAAE,CAAC,EAAE,KAAK,GAAG;AAC9E;AAEA,IAAM,wBAAwB,CAAC,eAAwE;AACrG,QAAM,mBAAmB,OAAO,QAAQ,UAAU;AAClD,MAAID,SAAQ,gBAAgB,GAAG;AAC7B,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,QAAQ,UAAU,EAC7B,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACzB,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,aAAO,MAAM,IAAI,CAAC,OAAO,GAAGC,QAAO,GAAG,CAAC,IAAIA,QAAO,EAAE,CAAC,EAAE;AAAA,IACzD,OAAO;AACL,aAAO,CAAC,GAAGA,QAAO,GAAG,CAAC,IAAIA,QAAO,KAAK,CAAC,EAAE;AAAA,IAC3C;AAAA,EACF,CAAC,EACA,KAAK,GAAG;AACb;AAGO,IAAM,eAAe,CAAC,KAAc,SAAqC;AAC9E,QAAM,YAAYG,MAAK,GAAG,EAAE,SAAS,WAAW,IAAI;AACpD,MAAY,cAAM,SAAS,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,MAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,UAAM,IAAI,MAAM,uEAAuE,IAAI,EAAE;AAAA,EAC/F;AAEA,SAAO;AACT;AAEO,IAAM,mBAAmB,CAAI,KAAc,SAAgC;AAChF,QAAM,QAAQ,aAAa,KAAK,IAAI;AACpC,SAAe,kBAAU,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI;AACxD;","names":["isEmpty","encode","decode","parseString","from","format","it","empty","isComplete"]}
1
+ {"version":3,"sources":["../../src/net/url.ts"],"sourcesContent":["import { Dictionary, NominalType } from '@bessemer/cornerstone/types'\nimport * as Uris from '@bessemer/cornerstone/net/uri'\nimport { Uri, UriBuilder, UriComponent, UriLiteral, UriLocation, UriParseMode } from '@bessemer/cornerstone/net/uri'\nimport * as Results from '@bessemer/cornerstone/result'\nimport { Result } from '@bessemer/cornerstone/result'\nimport * as ErrorEvents from '@bessemer/cornerstone/error/error-event'\nimport { ErrorEvent } from '@bessemer/cornerstone/error/error-event'\nimport * as Strings from '@bessemer/cornerstone/string'\nimport * as Arrays from '@bessemer/cornerstone/array'\nimport * as ZodUtil from '@bessemer/cornerstone/zod-util'\nimport Zod from 'zod'\nimport * as Equalitors from '@bessemer/cornerstone/equalitor'\nimport { Equalitor } from '@bessemer/cornerstone/equalitor'\nimport { MergeExclusive } from 'type-fest'\nimport * as Objects from '@bessemer/cornerstone/object'\n\nexport const encode = Uris.encode\n\nexport const decode = Uris.decode\n\nexport type UrlLiteral = NominalType<UriLiteral, typeof Namespace>\n\nexport interface UrlLocation extends UriLocation {\n pathSegments: Array<string>\n parameters: Dictionary<string | Array<string>>\n}\n\nexport interface Url extends Uri {\n _type: typeof Namespace\n location: UrlLocation\n href: UrlLiteral\n relative: boolean\n}\n\nexport const Namespace = Uris.UrlNamespace\nexport const EqualBy: Equalitor<Url> = Equalitors.deepNatural()\n\ntype UrlBuilderPathPart = MergeExclusive<{ path?: string | null }, { pathSegments?: Array<string> }>\ntype UrlBuilderQueryPart = MergeExclusive<{ query?: string | null }, { parameters?: Dictionary<string | Array<string>> }>\ntype UrlBuilderLocationPart = UrlBuilderPathPart &\n UrlBuilderQueryPart & {\n fragment?: string | null\n }\n\nexport type UrlBuilder = UriBuilder & {\n location?: UrlBuilderLocationPart | null | undefined\n relative?: boolean\n}\n\nexport type UrlLike = Url | Uri | UrlBuilder | UriLiteral | UrlLiteral\n\nexport const parseString = (value: string, mode: UriParseMode = UriParseMode.Strict): Result<Url, ErrorEvent> => {\n return Results.map(Uris.parseString(value, mode), (it) => Results.success(fromUri(it)))\n}\n\nexport function from(value: UrlLike | string): Url\nexport function from(value: UrlLike | string | null): Url | null\nexport function from(value: UrlLike | string | undefined): Url | undefined\nexport function from(value: UrlLike | string | null | undefined): Url | null | undefined\nexport function from(value: UrlLike | string | null | undefined): Url | null | undefined {\n if (Objects.isNil(value)) {\n return value\n }\n if (isUrl(value)) {\n return value\n }\n if (Uris.isUri(value)) {\n return fromUri(value)\n }\n if (Strings.isString(value)) {\n return ErrorEvents.unpackResult(parseString(value))\n }\n\n return build(value as UrlBuilder)\n}\n\nexport function toLiteral(likeValue: UrlLike): UrlLiteral\nexport function toLiteral(likeValue: UrlLike | null): UrlLiteral | null\nexport function toLiteral(likeValue: UrlLike | undefined): UrlLiteral | undefined\nexport function toLiteral(likeValue: UrlLike | null | undefined): UrlLiteral | null | undefined\nexport function toLiteral(likeValue: UrlLike | null | undefined): UrlLiteral | null | undefined {\n if (Objects.isNil(likeValue)) {\n return likeValue\n }\n\n const value = from(likeValue)\n return format(value) as UrlLiteral\n}\n\nexport const SchemaLiteral = ZodUtil.structuredTransform(Zod.string(), (it: string) => Results.map(parseString(it), (it) => toLiteral(it)))\n// JOHN need a schema for the object version...\n// export const SchemaInstance = structuredTransform(Zod.string(), parseString)\n\nexport const empty = (): Url => {\n const result = Uris.empty()\n\n return {\n ...result,\n _type: Namespace,\n href: result.href as UrlLiteral,\n location: {\n ...result.location,\n pathSegments: [],\n parameters: {},\n },\n relative: true,\n }\n}\n\nexport const isUrl = (value: unknown): value is Url => {\n if (!Objects.isObject(value)) {\n return false\n }\n\n const uriValue = value as any as Url\n return uriValue._type === Namespace\n}\n\nexport const update = (element: UrlLike, builder: UrlBuilder): Url => {\n const url = from(element)\n\n const buildRelative = builder.relative === true\n\n let location: UrlBuilderLocationPart | null | undefined\n if (Strings.isString(builder.location) || Objects.isNull(builder.location)) {\n location = builder.location\n } else {\n const usePathSegments = !Objects.isUndefined(builder.location?.pathSegments)\n const useParameters = !Objects.isUndefined(builder.location?.parameters)\n\n location = {\n ...(usePathSegments\n ? { pathSegments: builder.location?.pathSegments }\n : { path: Objects.isUndefined(builder.location?.path) ? url.location.path : builder.location.path }),\n ...(useParameters\n ? { parameters: builder.location?.parameters }\n : { query: Objects.isUndefined(builder.location?.query) ? url.location.query : builder.location.query }),\n fragment: Objects.isUndefined(builder.location?.fragment) ? url.location.fragment : builder.location.fragment,\n }\n }\n\n const uriBuilder: UrlBuilder = {\n scheme: Objects.isUndefined(builder.scheme) && !buildRelative ? url.scheme : builder.scheme,\n host: Objects.isUndefined(builder.host) && !buildRelative ? url.host : builder.host,\n authentication: Objects.isUndefined(builder.authentication) && !buildRelative ? url.authentication : builder.authentication,\n location,\n relative: buildRelative,\n }\n\n return from(uriBuilder)\n}\n\nexport const navigate = (base: UrlLike, next: UrlLike): Url => {\n const baseUrl = from(base)\n const nextUrl = from(next)\n\n const isOnlyFragment = nextUrl.relative && Objects.isNil(nextUrl.location.path) && Objects.isNil(nextUrl.location.query)\n\n const builder: UrlBuilder = {\n scheme: nextUrl.scheme ?? undefined,\n host: nextUrl.host ?? undefined,\n authentication: Objects.isPresent(nextUrl.host) ? nextUrl.authentication : undefined,\n location: {\n pathSegments: nextUrl.relative ? [...baseUrl.location.pathSegments, ...nextUrl.location.pathSegments] : nextUrl.location.pathSegments,\n query: isOnlyFragment ? undefined : nextUrl.location.query,\n fragment: nextUrl.location.fragment,\n },\n }\n\n const uri = update(baseUrl, builder)\n return uri\n}\n\nexport const format = Uris.format\nexport const isComplete = Uris.isComplete\n\nconst build = (builder: UrlBuilder): Url => {\n if ((builder.relative ?? false) && Objects.isPresent(builder.host)) {\n throw new Error(`[${Namespace}]: Unable to construct a relative url with a non-null host: ${builder}`)\n }\n\n const uriBuilder = convertUrlBuilderToUriBuilder(builder)\n const uri = Uris.from(uriBuilder)\n return fromUri(uri)\n}\n\nconst convertUrlBuilderToUriBuilder = (builder: UrlBuilder): UriBuilder => {\n if (Objects.isNil(builder.location)) {\n if (Objects.isNil(builder.host)) {\n return {\n ...builder,\n location: { path: builder.relative === true ? '' : '/' },\n }\n }\n\n return builder\n }\n\n if (Strings.isString(builder.location)) {\n return builder\n }\n\n const relative = builder.relative ?? false\n let path = relative ? Strings.removeStart(builder.location.path ?? '', '/') : builder.location.path\n if (Objects.isPresent(builder.location.pathSegments)) {\n path = formatPathSegments(builder.location.pathSegments, Objects.isPresent(builder.host), relative)\n }\n\n let query = builder.location.query\n if (Objects.isPresent(builder.location.parameters)) {\n query = formatQueryParameters(builder.location.parameters)\n }\n\n return {\n ...builder,\n location: { path, query, fragment: builder.location.fragment },\n }\n}\n\nconst fromUri = (uri: Uri): Url => {\n let relative: boolean = false\n let pathSegments: Array<string> = []\n const parameters: Dictionary<string | Array<string>> = {}\n\n if (Objects.isPresent(uri.location.path)) {\n if (!uri.location.path.startsWith('/')) {\n relative = true\n }\n\n pathSegments = Strings.removeStart(uri.location.path, '/')\n .split('/')\n .filter((it) => !Strings.isBlank(it))\n .map((urlPathPart) => decode(urlPathPart))\n } else {\n if (Objects.isNil(uri.host)) {\n relative = true\n }\n }\n\n if (Objects.isPresent(uri.location.query)) {\n uri.location.query.split('&').forEach((parameterPair) => {\n let splitParameters = parameterPair.split('=')\n\n if (!Strings.isBlank(Arrays.first(splitParameters))) {\n let key = decode(splitParameters[0]!)\n let value = ''\n if (splitParameters.length === 2) {\n value = splitParameters[1]!\n }\n if (Objects.isNil(parameters[key])) {\n parameters[key] = decode(value)\n } else if (!Array.isArray(parameters[key])) {\n let paramList = [parameters[key]]\n paramList.push(decode(value))\n parameters[key] = paramList\n } else {\n parameters[key].push(decode(value))\n }\n }\n })\n }\n\n const url: Url = {\n ...uri,\n _type: Namespace,\n location: {\n path: formatPathSegments(pathSegments, Objects.isPresent(uri.host), relative),\n pathSegments,\n query: formatQueryParameters(parameters),\n parameters,\n fragment: uri.location.fragment,\n },\n href: uri.href as UrlLiteral,\n relative,\n }\n\n url.href = format(url) as UrlLiteral\n return url\n}\n\nconst formatPathSegments = (pathSegments: Array<string>, hasHost: boolean, relative: boolean): UriComponent | null => {\n if (Arrays.isEmpty(pathSegments)) {\n if (!hasHost && !relative) {\n return '/'\n } else {\n return null\n }\n }\n\n return (relative ? '' : '/') + pathSegments.map((it) => encode(it)).join('/')\n}\n\nconst formatQueryParameters = (parameters: Dictionary<string | Array<string>>): UriComponent | null => {\n const parameterEntries = Object.entries(parameters)\n if (Arrays.isEmpty(parameterEntries)) {\n return null\n }\n\n return Object.entries(parameters)\n .flatMap(([key, value]) => {\n if (Array.isArray(value)) {\n return value.map((it) => `${encode(key)}=${encode(it)}`)\n } else {\n return [`${encode(key)}=${encode(value)}`]\n }\n })\n .join('&')\n}\n\n// JOHN I don't know about these two methods...\nexport const getParameter = (url: UrlLike, name: string): string | undefined => {\n const parameter = from(url).location.parameters[name]\n if (Objects.isNil(parameter)) {\n return undefined\n }\n\n if (Array.isArray(parameter)) {\n throw new Error(`Expected a single parameter value but found multiple for parameter: ${name}`)\n }\n\n return parameter\n}\n\nexport const getJsonParameter = <T>(url: UrlLike, name: string): T | undefined => {\n const value = getParameter(url, name)\n return Objects.isPresent(value) ? JSON.parse(value) : undefined\n}\n"],"mappings":"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","names":["encode","decode","parseString","from","format","it","empty","isComplete"]}
@@ -1 +1 @@
1
- {"version":3,"file":"object-path.d.ts","sourceRoot":"","sources":["../../src/object/object-path.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACb,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAKL,QAAQ,EACT,MAAM,wCAAwC,CAAA;AAO/C,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,UAAU,CAAC,sBAAsB,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;AAEnH,eAAO,MAAM,EAAE,GAAI,CAAC,SAAS,sBAAsB,EAAE,OAAO,CAAC,KAAG,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAE5F,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,EAAE,MAAM,CAAC,KAAG,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAY7E,CAAA;AAED,eAAO,MAAM,MAAM,mJAMjB,CAAA;AAEF,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,cAAc,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAEtG,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,cAAc,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,cAAc,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAEzH,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,MAAM,UAAU,EAAE,QAAQ,OAAO,EAAE,cAAc,OAAO,KAAG,OAkBxF,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,YAAY,SAAS,YAAY,EACvD,YAAY,UAAU,EACtB,cAAc,QAAQ,CAAC,YAAY,CAAC,KACnC,UAAU,IAAI,UAAU,CAAC,YAAY,CAEvC,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,UAAU,SAAS,YAAY,EAAE,gBAAgB,SAAS,YAAY,EAC9F,YAAY,UAAU,CAAC,UAAU,CAAC,EAClC,kBAAkB,QAAQ,CAAC,gBAAgB,CAAC,KAC3C,UAEF,CAAA"}
1
+ {"version":3,"file":"object-path.d.ts","sourceRoot":"","sources":["../../src/object/object-path.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EACL,eAAe,EACf,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,WAAW,EACX,YAAY,EACb,MAAM,6CAA6C,CAAA;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAA;AAQjE,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,UAAU,CAAC,sBAAsB,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;AAEnH,eAAO,MAAM,EAAE,GAAI,CAAC,SAAS,sBAAsB,EAAE,OAAO,CAAC,KAAG,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAE5F,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,MAAM,EAAE,MAAM,CAAC,KAAG,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAY7E,CAAA;AAED,eAAO,MAAM,MAAM,mJAMjB,CAAA;AAEF,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,cAAc,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAEtG,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,cAAc,EAAE,CAAC,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,cAAc,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAEzH,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,MAAM,UAAU,EAAE,QAAQ,OAAO,EAAE,cAAc,OAAO,KAAG,OAkBxF,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,YAAY,SAAS,YAAY,EACvD,YAAY,UAAU,EACtB,cAAc,QAAQ,CAAC,YAAY,CAAC,KACnC,UAAU,IAAI,UAAU,CAAC,YAAY,CAEvC,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,UAAU,SAAS,YAAY,EAAE,gBAAgB,SAAS,YAAY,EAC9F,YAAY,UAAU,CAAC,UAAU,CAAC,EAClC,kBAAkB,QAAQ,CAAC,gBAAgB,CAAC,KAC3C,UAEF,CAAA"}
@@ -1,24 +1,19 @@
1
1
  // src/object/object-path.ts
2
2
  import Zod from "zod";
3
- import {
4
- from as typePathFromString,
5
- getValue as typePathGetValue,
6
- intersect as typePathIntersect,
7
- matches as typePathMatches
8
- } from "@bessemer/cornerstone/object/type-path";
9
- import { isEmpty, only } from "@bessemer/cornerstone/array";
10
- import { assert } from "@bessemer/cornerstone/assertion";
3
+ import * as TypePaths from "@bessemer/cornerstone/object/type-path";
4
+ import * as Arrays from "@bessemer/cornerstone/array";
5
+ import * as Assertions from "@bessemer/cornerstone/assertion";
11
6
  import { produce } from "immer";
12
- import { isObject } from "@bessemer/cornerstone/object";
7
+ import * as Objects from "@bessemer/cornerstone/object";
13
8
  var of = (value) => {
14
9
  return value;
15
10
  };
16
- var from = (path) => {
17
- const typePath = typePathFromString(path);
11
+ var from2 = (path) => {
12
+ const typePath = TypePaths.from(path);
18
13
  typePath.forEach((it) => {
19
- assert(it !== "*", () => "ObjectPaths do not allow for wildcard selectors");
14
+ Assertions.assert(it !== "*", () => "ObjectPaths do not allow for wildcard selectors");
20
15
  if (Array.isArray(it)) {
21
- assert(it.length === 1, () => "ObjectPaths do not allow for multiple index selectors or array slices");
16
+ Assertions.assert(it.length === 1, () => "ObjectPaths do not allow for multiple index selectors or array slices");
22
17
  }
23
18
  });
24
19
  return typePath;
@@ -27,46 +22,46 @@ var Schema = Zod.union([Zod.array(Zod.string()), Zod.string()]).transform((it) =
27
22
  if (Array.isArray(it)) {
28
23
  return of(it);
29
24
  } else {
30
- return from(it);
25
+ return from2(it);
31
26
  }
32
27
  });
33
- var getValue = (path, object) => {
34
- return typePathGetValue(path, object);
28
+ var getValue2 = (path, object) => {
29
+ return TypePaths.getValue(path, object);
35
30
  };
36
31
  var applyValue = (path, object, valueToApply) => {
37
32
  return applyAnyValue(path, object, valueToApply);
38
33
  };
39
34
  var applyAnyValue = (path, object, valueToApply) => {
40
- if (isEmpty(path)) {
35
+ if (Arrays.isEmpty(path)) {
41
36
  return valueToApply;
42
37
  }
43
38
  return produce(object, (draft) => {
44
39
  const rest = path.slice(0, -1);
45
40
  const last = path[path.length - 1];
46
- const parent = getValue(of(rest), draft);
47
- assert(isObject(parent) || Array.isArray(parent), () => `Unable to apply value: ${valueToApply} at ObjectPath: ${path} against object: ${object}`);
41
+ const parent = getValue2(of(rest), draft);
42
+ Assertions.assert(Objects.isObject(parent) || Array.isArray(parent), () => `Unable to apply value: ${valueToApply} at ObjectPath: ${path} against object: ${object}`);
48
43
  if (Array.isArray(last)) {
49
- const index = only(last);
44
+ const index = Arrays.only(last);
50
45
  parent[index] = valueToApply;
51
46
  } else {
52
47
  parent[last] = valueToApply;
53
48
  }
54
49
  });
55
50
  };
56
- var matches = (targetPath, matchingPath) => {
57
- return typePathMatches(targetPath, matchingPath);
51
+ var matches2 = (targetPath, matchingPath) => {
52
+ return TypePaths.matches(targetPath, matchingPath);
58
53
  };
59
- var intersect = (targetPath, intersectingPath) => {
60
- return typePathIntersect(targetPath, intersectingPath);
54
+ var intersect2 = (targetPath, intersectingPath) => {
55
+ return TypePaths.intersect(targetPath, intersectingPath);
61
56
  };
62
57
  export {
63
58
  Schema,
64
59
  applyAnyValue,
65
60
  applyValue,
66
- from,
67
- getValue,
68
- intersect,
69
- matches,
61
+ from2 as from,
62
+ getValue2 as getValue,
63
+ intersect2 as intersect,
64
+ matches2 as matches,
70
65
  of
71
66
  };
72
67
  //# sourceMappingURL=object-path.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/object/object-path.ts"],"sourcesContent":["import Zod from 'zod'\nimport { TaggedType } from '@bessemer/cornerstone/types'\nimport {\n InferObjectPath,\n ObjectPathConcreteType,\n ObjectPathType,\n ParseObjectPath,\n TypePathGet,\n TypePathType,\n} from '@bessemer/cornerstone/object/type-path-type'\nimport {\n from as typePathFromString,\n getValue as typePathGetValue,\n intersect as typePathIntersect,\n matches as typePathMatches,\n TypePath,\n} from '@bessemer/cornerstone/object/type-path'\nimport { isEmpty, only } from '@bessemer/cornerstone/array'\nimport { assert } from '@bessemer/cornerstone/assertion'\nimport { produce } from 'immer'\nimport { isObject } from '@bessemer/cornerstone/object'\n\n// JOHN this probably should be brought into the structured transform regime\nexport type ObjectPath<T extends TypePathType = TypePathType> = TaggedType<ObjectPathConcreteType, ['TypePath', T]>\n\nexport const of = <T extends ObjectPathConcreteType>(value: T): ObjectPath<InferObjectPath<T>> => {\n return value as ObjectPath<InferObjectPath<T>>\n}\n\nexport const from = <T extends string>(path: T): ObjectPath<ParseObjectPath<T>> => {\n const typePath = typePathFromString(path)\n\n typePath.forEach((it) => {\n assert(it !== '*', () => 'ObjectPaths do not allow for wildcard selectors')\n\n if (Array.isArray(it)) {\n assert(it.length === 1, () => 'ObjectPaths do not allow for multiple index selectors or array slices')\n }\n })\n\n return typePath as ObjectPath<ParseObjectPath<T>>\n}\n\nexport const Schema = Zod.union([Zod.array(Zod.string()), Zod.string()]).transform((it) => {\n if (Array.isArray(it)) {\n return of(it)\n } else {\n return from(it)\n }\n})\n\nexport const getValue = <T extends ObjectPathType, N>(path: ObjectPath<T>, object: N): TypePathGet<T, N> => {\n return typePathGetValue(path, object)\n}\n\nexport const applyValue = <T extends ObjectPathType, N>(path: ObjectPath<T>, object: N, valueToApply: TypePathGet<T, N>): N => {\n return applyAnyValue(path, object, valueToApply) as N\n}\n\nexport const applyAnyValue = (path: ObjectPath, object: unknown, valueToApply: unknown): unknown => {\n if (isEmpty(path)) {\n return valueToApply\n }\n\n return produce(object, (draft) => {\n const rest = path.slice(0, -1)\n const last = path[path.length - 1]!\n const parent = getValue(of(rest), draft) as any\n\n assert(isObject(parent) || Array.isArray(parent), () => `Unable to apply value: ${valueToApply} at ObjectPath: ${path} against object: ${object}`)\n if (Array.isArray(last)) {\n const index = only(last)\n parent[index] = valueToApply\n } else {\n parent[last] = valueToApply\n }\n })\n}\n\nexport const matches = <MatchingPath extends TypePathType>(\n targetPath: ObjectPath,\n matchingPath: TypePath<MatchingPath>\n): targetPath is ObjectPath<MatchingPath> => {\n return typePathMatches(targetPath, matchingPath)\n}\n\nexport const intersect = <TargetPath extends TypePathType, IntersectingPath extends TypePathType>(\n targetPath: ObjectPath<TargetPath>,\n intersectingPath: TypePath<IntersectingPath>\n): ObjectPath => {\n return typePathIntersect(targetPath, intersectingPath) as ObjectPath\n}\n"],"mappings":";AAAA,OAAO,SAAS;AAUhB;AAAA,EACE,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,WAAW;AAAA,OAEN;AACP,SAAS,SAAS,YAAY;AAC9B,SAAS,cAAc;AACvB,SAAS,eAAe;AACxB,SAAS,gBAAgB;AAKlB,IAAM,KAAK,CAAmC,UAA6C;AAChG,SAAO;AACT;AAEO,IAAM,OAAO,CAAmB,SAA4C;AACjF,QAAM,WAAW,mBAAmB,IAAI;AAExC,WAAS,QAAQ,CAAC,OAAO;AACvB,WAAO,OAAO,KAAK,MAAM,iDAAiD;AAE1E,QAAI,MAAM,QAAQ,EAAE,GAAG;AACrB,aAAO,GAAG,WAAW,GAAG,MAAM,uEAAuE;AAAA,IACvG;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEO,IAAM,SAAS,IAAI,MAAM,CAAC,IAAI,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO;AACzF,MAAI,MAAM,QAAQ,EAAE,GAAG;AACrB,WAAO,GAAG,EAAE;AAAA,EACd,OAAO;AACL,WAAO,KAAK,EAAE;AAAA,EAChB;AACF,CAAC;AAEM,IAAM,WAAW,CAA8B,MAAqB,WAAiC;AAC1G,SAAO,iBAAiB,MAAM,MAAM;AACtC;AAEO,IAAM,aAAa,CAA8B,MAAqB,QAAW,iBAAuC;AAC7H,SAAO,cAAc,MAAM,QAAQ,YAAY;AACjD;AAEO,IAAM,gBAAgB,CAAC,MAAkB,QAAiB,iBAAmC;AAClG,MAAI,QAAQ,IAAI,GAAG;AACjB,WAAO;AAAA,EACT;AAEA,SAAO,QAAQ,QAAQ,CAAC,UAAU;AAChC,UAAM,OAAO,KAAK,MAAM,GAAG,EAAE;AAC7B,UAAM,OAAO,KAAK,KAAK,SAAS,CAAC;AACjC,UAAM,SAAS,SAAS,GAAG,IAAI,GAAG,KAAK;AAEvC,WAAO,SAAS,MAAM,KAAK,MAAM,QAAQ,MAAM,GAAG,MAAM,0BAA0B,YAAY,mBAAmB,IAAI,oBAAoB,MAAM,EAAE;AACjJ,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,YAAM,QAAQ,KAAK,IAAI;AACvB,aAAO,KAAK,IAAI;AAAA,IAClB,OAAO;AACL,aAAO,IAAI,IAAI;AAAA,IACjB;AAAA,EACF,CAAC;AACH;AAEO,IAAM,UAAU,CACrB,YACA,iBAC2C;AAC3C,SAAO,gBAAgB,YAAY,YAAY;AACjD;AAEO,IAAM,YAAY,CACvB,YACA,qBACe;AACf,SAAO,kBAAkB,YAAY,gBAAgB;AACvD;","names":[]}
1
+ {"version":3,"sources":["../../src/object/object-path.ts"],"sourcesContent":["import Zod from 'zod'\nimport { TaggedType } from '@bessemer/cornerstone/types'\nimport {\n InferObjectPath,\n ObjectPathConcreteType,\n ObjectPathType,\n ParseObjectPath,\n TypePathGet,\n TypePathType,\n} from '@bessemer/cornerstone/object/type-path-type'\nimport { TypePath } from '@bessemer/cornerstone/object/type-path'\nimport * as TypePaths from '@bessemer/cornerstone/object/type-path'\nimport * as Arrays from '@bessemer/cornerstone/array'\nimport * as Assertions from '@bessemer/cornerstone/assertion'\nimport { produce } from 'immer'\nimport * as Objects from '@bessemer/cornerstone/object'\n\n// JOHN this probably should be brought into the structured transform regime\nexport type ObjectPath<T extends TypePathType = TypePathType> = TaggedType<ObjectPathConcreteType, ['TypePath', T]>\n\nexport const of = <T extends ObjectPathConcreteType>(value: T): ObjectPath<InferObjectPath<T>> => {\n return value as ObjectPath<InferObjectPath<T>>\n}\n\nexport const from = <T extends string>(path: T): ObjectPath<ParseObjectPath<T>> => {\n const typePath = TypePaths.from(path)\n\n typePath.forEach((it) => {\n Assertions.assert(it !== '*', () => 'ObjectPaths do not allow for wildcard selectors')\n\n if (Array.isArray(it)) {\n Assertions.assert(it.length === 1, () => 'ObjectPaths do not allow for multiple index selectors or array slices')\n }\n })\n\n return typePath as ObjectPath<ParseObjectPath<T>>\n}\n\nexport const Schema = Zod.union([Zod.array(Zod.string()), Zod.string()]).transform((it) => {\n if (Array.isArray(it)) {\n return of(it)\n } else {\n return from(it)\n }\n})\n\nexport const getValue = <T extends ObjectPathType, N>(path: ObjectPath<T>, object: N): TypePathGet<T, N> => {\n return TypePaths.getValue(path, object)\n}\n\nexport const applyValue = <T extends ObjectPathType, N>(path: ObjectPath<T>, object: N, valueToApply: TypePathGet<T, N>): N => {\n return applyAnyValue(path, object, valueToApply) as N\n}\n\nexport const applyAnyValue = (path: ObjectPath, object: unknown, valueToApply: unknown): unknown => {\n if (Arrays.isEmpty(path)) {\n return valueToApply\n }\n\n return produce(object, (draft) => {\n const rest = path.slice(0, -1)\n const last = path[path.length - 1]!\n const parent = getValue(of(rest), draft) as any\n\n Assertions.assert(Objects.isObject(parent) || Array.isArray(parent), () => `Unable to apply value: ${valueToApply} at ObjectPath: ${path} against object: ${object}`)\n if (Array.isArray(last)) {\n const index = Arrays.only(last)\n parent[index] = valueToApply\n } else {\n parent[last] = valueToApply\n }\n })\n}\n\nexport const matches = <MatchingPath extends TypePathType>(\n targetPath: ObjectPath,\n matchingPath: TypePath<MatchingPath>\n): targetPath is ObjectPath<MatchingPath> => {\n return TypePaths.matches(targetPath, matchingPath)\n}\n\nexport const intersect = <TargetPath extends TypePathType, IntersectingPath extends TypePathType>(\n targetPath: ObjectPath<TargetPath>,\n intersectingPath: TypePath<IntersectingPath>\n): ObjectPath => {\n return TypePaths.intersect(targetPath, intersectingPath) as ObjectPath\n}\n"],"mappings":";AAAA,OAAO,SAAS;AAWhB,YAAY,eAAe;AAC3B,YAAY,YAAY;AACxB,YAAY,gBAAgB;AAC5B,SAAS,eAAe;AACxB,YAAY,aAAa;AAKlB,IAAM,KAAK,CAAmC,UAA6C;AAChG,SAAO;AACT;AAEO,IAAMA,QAAO,CAAmB,SAA4C;AACjF,QAAM,WAAqB,eAAK,IAAI;AAEpC,WAAS,QAAQ,CAAC,OAAO;AACvB,IAAW,kBAAO,OAAO,KAAK,MAAM,iDAAiD;AAErF,QAAI,MAAM,QAAQ,EAAE,GAAG;AACrB,MAAW,kBAAO,GAAG,WAAW,GAAG,MAAM,uEAAuE;AAAA,IAClH;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEO,IAAM,SAAS,IAAI,MAAM,CAAC,IAAI,MAAM,IAAI,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO;AACzF,MAAI,MAAM,QAAQ,EAAE,GAAG;AACrB,WAAO,GAAG,EAAE;AAAA,EACd,OAAO;AACL,WAAOA,MAAK,EAAE;AAAA,EAChB;AACF,CAAC;AAEM,IAAMC,YAAW,CAA8B,MAAqB,WAAiC;AAC1G,SAAiB,mBAAS,MAAM,MAAM;AACxC;AAEO,IAAM,aAAa,CAA8B,MAAqB,QAAW,iBAAuC;AAC7H,SAAO,cAAc,MAAM,QAAQ,YAAY;AACjD;AAEO,IAAM,gBAAgB,CAAC,MAAkB,QAAiB,iBAAmC;AAClG,MAAW,eAAQ,IAAI,GAAG;AACxB,WAAO;AAAA,EACT;AAEA,SAAO,QAAQ,QAAQ,CAAC,UAAU;AAChC,UAAM,OAAO,KAAK,MAAM,GAAG,EAAE;AAC7B,UAAM,OAAO,KAAK,KAAK,SAAS,CAAC;AACjC,UAAM,SAASA,UAAS,GAAG,IAAI,GAAG,KAAK;AAEvC,IAAW,kBAAe,iBAAS,MAAM,KAAK,MAAM,QAAQ,MAAM,GAAG,MAAM,0BAA0B,YAAY,mBAAmB,IAAI,oBAAoB,MAAM,EAAE;AACpK,QAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,YAAM,QAAe,YAAK,IAAI;AAC9B,aAAO,KAAK,IAAI;AAAA,IAClB,OAAO;AACL,aAAO,IAAI,IAAI;AAAA,IACjB;AAAA,EACF,CAAC;AACH;AAEO,IAAMC,WAAU,CACrB,YACA,iBAC2C;AAC3C,SAAiB,kBAAQ,YAAY,YAAY;AACnD;AAEO,IAAMC,aAAY,CACvB,YACA,qBACe;AACf,SAAiB,oBAAU,YAAY,gBAAgB;AACzD;","names":["from","getValue","matches","intersect"]}