@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
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/result.ts"],"sourcesContent":["import { isPromise } from '@bessemer/cornerstone/promise'\nimport * as Eithers from '@bessemer/cornerstone/either'\nimport { Left, Right } from '@bessemer/cornerstone/either'\nimport { assert } from '@bessemer/cornerstone/assertion'\nimport { Promisable } from 'type-fest'\n\nexport type Success<SuccessType> = Left<SuccessType>\nexport type Failure<FailureType = unknown> = Right<FailureType>\nexport type Result<SuccessType, FailureType = unknown> = Success<SuccessType> | Failure<FailureType>\nexport type AsyncResult<SuccessType, FailureType = unknown> = Promise<Result<SuccessType, FailureType>>\n\nexport const success = <SuccessType>(value: SuccessType): Success<SuccessType> => Eithers.left(value)\n\nexport function failure(): Failure<never>\nexport function failure<N>(failure: N): Failure<N>\nexport function failure(failure?: unknown): Failure {\n return Eithers.right(failure)\n}\n\nexport const isSuccess = <SuccessType, FailureType>(value: Result<SuccessType, FailureType>): value is Success<SuccessType> => {\n return Eithers.isLeft(value)\n}\nexport const isFailure = <SuccessType, FailureType>(value: Result<SuccessType, FailureType>): value is Failure<FailureType> => {\n return Eithers.isRight(value)\n}\n\nexport function assertSuccess<SuccessType, FailureType>(value: Result<SuccessType, FailureType>): asserts value is Success<SuccessType> {\n if (isFailure(value)) {\n throw value.value\n }\n}\nexport function assertFailure<SuccessType, FailureType>(value: Result<SuccessType, FailureType>): asserts value is Failure<FailureType> {\n assert(isFailure(value))\n}\n\nexport function map<SuccessType, FailureType, MappedType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: SuccessType) => Promise<MappedType>\n): Promise<Result<MappedType, FailureType>>\nexport function map<SuccessType, FailureType, MappedType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: SuccessType) => MappedType\n): Result<MappedType, FailureType>\nexport function map<SuccessType, FailureType, MappedType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: SuccessType) => MappedType\n): Promisable<Result<MappedType, FailureType>> {\n return Eithers.map(value, mapper)\n}\n\nexport function flatMap<SuccessType, FailureType, MappedSuccessType, MappedFailureType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: SuccessType) => Promise<Result<MappedSuccessType, MappedFailureType>>\n): Promise<Result<MappedSuccessType, FailureType | MappedFailureType>>\nexport function flatMap<SuccessType, FailureType, MappedSuccessType, MappedFailureType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: SuccessType) => Result<MappedSuccessType, MappedFailureType>\n): Result<MappedSuccessType, FailureType | MappedFailureType>\nexport function flatMap<SuccessType, FailureType, MappedSuccessType, MappedFailureType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: SuccessType) => Result<MappedSuccessType, MappedFailureType>\n): Promisable<Result<MappedSuccessType, FailureType | MappedFailureType>> {\n return Eithers.flatMap(value, mapper)\n}\n\nexport function mapFailure<SuccessType, FailureType, MappedType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: FailureType) => Promise<MappedType>\n): Promise<Result<SuccessType, MappedType>>\nexport function mapFailure<SuccessType, FailureType, MappedType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: FailureType) => MappedType\n): Result<SuccessType, MappedType>\nexport function mapFailure<SuccessType, FailureType, MappedType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: FailureType) => MappedType\n): Promisable<Result<SuccessType, MappedType>> {\n return Eithers.mapRight(value, mapper)\n}\n\nexport function flatMapFailure<SuccessType, FailureType, MappedSuccessType, MappedFailureType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: FailureType) => Promise<Result<MappedSuccessType, MappedFailureType>>\n): Promise<Result<SuccessType | MappedSuccessType, MappedFailureType>>\nexport function flatMapFailure<SuccessType, FailureType, MappedSuccessType, MappedFailureType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: FailureType) => Result<MappedSuccessType, MappedFailureType>\n): Result<SuccessType | MappedSuccessType, MappedFailureType>\nexport function flatMapFailure<SuccessType, FailureType, MappedSuccessType, MappedFailureType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: FailureType) => Result<MappedSuccessType, MappedFailureType>\n): Promisable<Result<SuccessType | MappedSuccessType, MappedFailureType>> {\n return Eithers.flatMapRight(value, mapper)\n}\n\nexport const split = <SuccessType, FailureType>(array: Array<Result<SuccessType, FailureType>>): [Array<SuccessType>, Array<FailureType>] => {\n return Eithers.split(array)\n}\n\nexport function tryValue<SOURCE_VALUE>(resolver: () => Promise<SOURCE_VALUE>): AsyncResult<SOURCE_VALUE>\nexport function tryValue<SOURCE_VALUE>(resolver: () => SOURCE_VALUE): Result<SOURCE_VALUE>\nexport function tryValue<SOURCE_VALUE>(resolver: () => SOURCE_VALUE | Promise<SOURCE_VALUE>): Result<SOURCE_VALUE> | Promise<Result<SOURCE_VALUE>> {\n try {\n let result = resolver()\n if (isPromise(result)) {\n return result.then((it) => success(it)).catch((it) => failure(it))\n } else {\n return success(result)\n }\n } catch (e: any) {\n return failure(e)\n }\n}\n\nexport function tryResult<SOURCE_VALUE>(resolver: () => Result<SOURCE_VALUE>): Result<SOURCE_VALUE>\nexport function tryResult<SOURCE_VALUE>(resolver: () => AsyncResult<SOURCE_VALUE>): AsyncResult<SOURCE_VALUE>\nexport function tryResult<SOURCE_VALUE>(resolver: () => Result<SOURCE_VALUE> | AsyncResult<SOURCE_VALUE>): ReturnType<typeof resolver> {\n try {\n let result = resolver()\n if (isPromise(result)) {\n return result.catch((it) => failure(it))\n } else {\n return result\n }\n } catch (e: any) {\n return failure(e)\n }\n}\n\n// const generator = buildGenerator((it) => success(it) as Result<any, any>)\n//\n// export function gen<TGen extends () => Generator<Result<any, any>>>(\n// generatorFn: TGen\n// ): TGen extends () => Generator<Result<any, infer L>, infer R> ? Result<R, L> : never\n// export function gen<TGen extends () => AsyncGenerator<Result<any, any>>>(\n// generatorFn: TGen\n// ): Promise<TGen extends () => AsyncGenerator<Result<any, infer L>, infer R> ? Result<R, L> : never>\n// export function gen<TGen extends () => Generator<Result<any, any>> | AsyncGenerator<Result<any, any>>>(\n// generatorFn: TGen\n// ): TGen extends () => Generator<Result<any, infer L>, infer R>\n// ? Result<R, L>\n// : TGen extends () => AsyncGenerator<Result<any, infer L>, infer R>\n// ? Promise<Result<R, L>>\n// : never {\n// return generator(generatorFn)\n// }\n"],"mappings":";AAAA,SAAS,iBAAiB;AAC1B,YAAY,aAAa;AAEzB,SAAS,cAAc;AAQhB,IAAM,UAAU,CAAc,UAAqD,aAAK,KAAK;AAI7F,SAAS,QAAQA,UAA4B;AAClD,SAAe,cAAMA,QAAO;AAC9B;AAEO,IAAM,YAAY,CAA2B,UAA2E;AAC7H,SAAe,eAAO,KAAK;AAC7B;AACO,IAAM,YAAY,CAA2B,UAA2E;AAC7H,SAAe,gBAAQ,KAAK;AAC9B;AAEO,SAAS,cAAwC,OAAgF;AACtI,MAAI,UAAU,KAAK,GAAG;AACpB,UAAM,MAAM;AAAA,EACd;AACF;AACO,SAAS,cAAwC,OAAgF;AACtI,SAAO,UAAU,KAAK,CAAC;AACzB;AAUO,SAASC,KACd,OACA,QAC6C;AAC7C,SAAe,YAAI,OAAO,MAAM;AAClC;AAUO,SAASC,SACd,OACA,QACwE;AACxE,SAAe,gBAAQ,OAAO,MAAM;AACtC;AAUO,SAAS,WACd,OACA,QAC6C;AAC7C,SAAe,iBAAS,OAAO,MAAM;AACvC;AAUO,SAAS,eACd,OACA,QACwE;AACxE,SAAe,qBAAa,OAAO,MAAM;AAC3C;AAEO,IAAMC,SAAQ,CAA2B,UAA6F;AAC3I,SAAe,cAAM,KAAK;AAC5B;AAIO,SAAS,SAAuB,UAA4G;AACjJ,MAAI;AACF,QAAI,SAAS,SAAS;AACtB,QAAI,UAAU,MAAM,GAAG;AACrB,aAAO,OAAO,KAAK,CAAC,OAAO,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,IACnE,OAAO;AACL,aAAO,QAAQ,MAAM;AAAA,IACvB;AAAA,EACF,SAAS,GAAQ;AACf,WAAO,QAAQ,CAAC;AAAA,EAClB;AACF;AAIO,SAAS,UAAwB,UAA+F;AACrI,MAAI;AACF,QAAI,SAAS,SAAS;AACtB,QAAI,UAAU,MAAM,GAAG;AACrB,aAAO,OAAO,MAAM,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,IACzC,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF,SAAS,GAAQ;AACf,WAAO,QAAQ,CAAC;AAAA,EAClB;AACF;","names":["failure","map","flatMap","split"]}
1
+ {"version":3,"sources":["../src/result.ts"],"sourcesContent":["import * as Promises from '@bessemer/cornerstone/promise'\nimport * as Eithers from '@bessemer/cornerstone/either'\nimport { Left, Right } from '@bessemer/cornerstone/either'\nimport * as Assertions from '@bessemer/cornerstone/assertion'\nimport { Promisable } from 'type-fest'\n\nexport type Success<SuccessType> = Left<SuccessType>\nexport type Failure<FailureType = unknown> = Right<FailureType>\nexport type Result<SuccessType, FailureType = unknown> = Success<SuccessType> | Failure<FailureType>\nexport type AsyncResult<SuccessType, FailureType = unknown> = Promise<Result<SuccessType, FailureType>>\n\nexport const success = <SuccessType>(value: SuccessType): Success<SuccessType> => Eithers.left(value)\n\nexport function failure(): Failure<never>\nexport function failure<N>(failure: N): Failure<N>\nexport function failure(failure?: unknown): Failure {\n return Eithers.right(failure)\n}\n\nexport const isSuccess = <SuccessType, FailureType>(value: Result<SuccessType, FailureType>): value is Success<SuccessType> => {\n return Eithers.isLeft(value)\n}\nexport const isFailure = <SuccessType, FailureType>(value: Result<SuccessType, FailureType>): value is Failure<FailureType> => {\n return Eithers.isRight(value)\n}\n\nexport function assertSuccess<SuccessType, FailureType>(value: Result<SuccessType, FailureType>): asserts value is Success<SuccessType> {\n if (isFailure(value)) {\n throw value.value\n }\n}\nexport function assertFailure<SuccessType, FailureType>(value: Result<SuccessType, FailureType>): asserts value is Failure<FailureType> {\n Assertions.assert(isFailure(value))\n}\n\nexport function map<SuccessType, FailureType, MappedType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: SuccessType) => Promise<MappedType>\n): Promise<Result<MappedType, FailureType>>\nexport function map<SuccessType, FailureType, MappedType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: SuccessType) => MappedType\n): Result<MappedType, FailureType>\nexport function map<SuccessType, FailureType, MappedType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: SuccessType) => MappedType\n): Promisable<Result<MappedType, FailureType>> {\n return Eithers.map(value, mapper)\n}\n\nexport function flatMap<SuccessType, FailureType, MappedSuccessType, MappedFailureType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: SuccessType) => Promise<Result<MappedSuccessType, MappedFailureType>>\n): Promise<Result<MappedSuccessType, FailureType | MappedFailureType>>\nexport function flatMap<SuccessType, FailureType, MappedSuccessType, MappedFailureType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: SuccessType) => Result<MappedSuccessType, MappedFailureType>\n): Result<MappedSuccessType, FailureType | MappedFailureType>\nexport function flatMap<SuccessType, FailureType, MappedSuccessType, MappedFailureType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: SuccessType) => Result<MappedSuccessType, MappedFailureType>\n): Promisable<Result<MappedSuccessType, FailureType | MappedFailureType>> {\n return Eithers.flatMap(value, mapper)\n}\n\nexport function mapFailure<SuccessType, FailureType, MappedType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: FailureType) => Promise<MappedType>\n): Promise<Result<SuccessType, MappedType>>\nexport function mapFailure<SuccessType, FailureType, MappedType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: FailureType) => MappedType\n): Result<SuccessType, MappedType>\nexport function mapFailure<SuccessType, FailureType, MappedType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: FailureType) => MappedType\n): Promisable<Result<SuccessType, MappedType>> {\n return Eithers.mapRight(value, mapper)\n}\n\nexport function flatMapFailure<SuccessType, FailureType, MappedSuccessType, MappedFailureType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: FailureType) => Promise<Result<MappedSuccessType, MappedFailureType>>\n): Promise<Result<SuccessType | MappedSuccessType, MappedFailureType>>\nexport function flatMapFailure<SuccessType, FailureType, MappedSuccessType, MappedFailureType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: FailureType) => Result<MappedSuccessType, MappedFailureType>\n): Result<SuccessType | MappedSuccessType, MappedFailureType>\nexport function flatMapFailure<SuccessType, FailureType, MappedSuccessType, MappedFailureType>(\n value: Result<SuccessType, FailureType>,\n mapper: (value: FailureType) => Result<MappedSuccessType, MappedFailureType>\n): Promisable<Result<SuccessType | MappedSuccessType, MappedFailureType>> {\n return Eithers.flatMapRight(value, mapper)\n}\n\nexport const split = <SuccessType, FailureType>(array: Array<Result<SuccessType, FailureType>>): [Array<SuccessType>, Array<FailureType>] => {\n return Eithers.split(array)\n}\n\nexport function tryValue<SOURCE_VALUE>(resolver: () => Promise<SOURCE_VALUE>): AsyncResult<SOURCE_VALUE>\nexport function tryValue<SOURCE_VALUE>(resolver: () => SOURCE_VALUE): Result<SOURCE_VALUE>\nexport function tryValue<SOURCE_VALUE>(resolver: () => SOURCE_VALUE | Promise<SOURCE_VALUE>): Result<SOURCE_VALUE> | Promise<Result<SOURCE_VALUE>> {\n try {\n let result = resolver()\n if (Promises.isPromise(result)) {\n return result.then((it) => success(it)).catch((it) => failure(it))\n } else {\n return success(result)\n }\n } catch (e: any) {\n return failure(e)\n }\n}\n\nexport function tryResult<SOURCE_VALUE>(resolver: () => Result<SOURCE_VALUE>): Result<SOURCE_VALUE>\nexport function tryResult<SOURCE_VALUE>(resolver: () => AsyncResult<SOURCE_VALUE>): AsyncResult<SOURCE_VALUE>\nexport function tryResult<SOURCE_VALUE>(resolver: () => Result<SOURCE_VALUE> | AsyncResult<SOURCE_VALUE>): ReturnType<typeof resolver> {\n try {\n let result = resolver()\n if (Promises.isPromise(result)) {\n return result.catch((it) => failure(it))\n } else {\n return result\n }\n } catch (e: any) {\n return failure(e)\n }\n}\n\n// const generator = buildGenerator((it) => success(it) as Result<any, any>)\n//\n// export function gen<TGen extends () => Generator<Result<any, any>>>(\n// generatorFn: TGen\n// ): TGen extends () => Generator<Result<any, infer L>, infer R> ? Result<R, L> : never\n// export function gen<TGen extends () => AsyncGenerator<Result<any, any>>>(\n// generatorFn: TGen\n// ): Promise<TGen extends () => AsyncGenerator<Result<any, infer L>, infer R> ? Result<R, L> : never>\n// export function gen<TGen extends () => Generator<Result<any, any>> | AsyncGenerator<Result<any, any>>>(\n// generatorFn: TGen\n// ): TGen extends () => Generator<Result<any, infer L>, infer R>\n// ? Result<R, L>\n// : TGen extends () => AsyncGenerator<Result<any, infer L>, infer R>\n// ? Promise<Result<R, L>>\n// : never {\n// return generator(generatorFn)\n// }\n"],"mappings":";AAAA,YAAY,cAAc;AAC1B,YAAY,aAAa;AAEzB,YAAY,gBAAgB;AAQrB,IAAM,UAAU,CAAc,UAAqD,aAAK,KAAK;AAI7F,SAAS,QAAQA,UAA4B;AAClD,SAAe,cAAMA,QAAO;AAC9B;AAEO,IAAM,YAAY,CAA2B,UAA2E;AAC7H,SAAe,eAAO,KAAK;AAC7B;AACO,IAAM,YAAY,CAA2B,UAA2E;AAC7H,SAAe,gBAAQ,KAAK;AAC9B;AAEO,SAAS,cAAwC,OAAgF;AACtI,MAAI,UAAU,KAAK,GAAG;AACpB,UAAM,MAAM;AAAA,EACd;AACF;AACO,SAAS,cAAwC,OAAgF;AACtI,EAAW,kBAAO,UAAU,KAAK,CAAC;AACpC;AAUO,SAASC,KACd,OACA,QAC6C;AAC7C,SAAe,YAAI,OAAO,MAAM;AAClC;AAUO,SAASC,SACd,OACA,QACwE;AACxE,SAAe,gBAAQ,OAAO,MAAM;AACtC;AAUO,SAAS,WACd,OACA,QAC6C;AAC7C,SAAe,iBAAS,OAAO,MAAM;AACvC;AAUO,SAAS,eACd,OACA,QACwE;AACxE,SAAe,qBAAa,OAAO,MAAM;AAC3C;AAEO,IAAMC,SAAQ,CAA2B,UAA6F;AAC3I,SAAe,cAAM,KAAK;AAC5B;AAIO,SAAS,SAAuB,UAA4G;AACjJ,MAAI;AACF,QAAI,SAAS,SAAS;AACtB,QAAa,mBAAU,MAAM,GAAG;AAC9B,aAAO,OAAO,KAAK,CAAC,OAAO,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,IACnE,OAAO;AACL,aAAO,QAAQ,MAAM;AAAA,IACvB;AAAA,EACF,SAAS,GAAQ;AACf,WAAO,QAAQ,CAAC;AAAA,EAClB;AACF;AAIO,SAAS,UAAwB,UAA+F;AACrI,MAAI;AACF,QAAI,SAAS,SAAS;AACtB,QAAa,mBAAU,MAAM,GAAG;AAC9B,aAAO,OAAO,MAAM,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,IACzC,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF,SAAS,GAAQ;AACf,WAAO,QAAQ,CAAC;AAAA,EAClB;AACF;","names":["failure","map","flatMap","split"]}
@@ -1 +1 @@
1
- {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA0C,MAAM,yCAAyC,CAAA;AAE1G,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAMvC,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,QAAQ,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;AAElD,eAAO,MAAM,IAAI,EAAE,UAGlB,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,UAG/B,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,UAAU,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,iBAAiB,YAAY,KAAG,UAQ1D,CAAA;AAED,eAAO,MAAM,KAAK,GAAU,OAAO,UAAU,KAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAa7E,CAAA;AAED,eAAO,MAAM,UAAU,GAAU,CAAC,EAAE,UAAU,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,YAAY,KAAG,WAAW,CAAC,CAAC,CAiBpH,CAAA"}
1
+ {"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,yCAAyC,CAAA;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AAMvC,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,QAAQ,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,CAAA;AAElD,eAAO,MAAM,IAAI,EAAE,UAGlB,CAAA;AAED,eAAO,MAAM,iBAAiB,EAAE,UAG/B,CAAA;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,UAAU,CAAA;CAClB,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,iBAAiB,YAAY,KAAG,UAQ1D,CAAA;AAED,eAAO,MAAM,KAAK,GAAU,OAAO,UAAU,KAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAa7E,CAAA;AAED,eAAO,MAAM,UAAU,GAAU,CAAC,EAAE,UAAU,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,iBAAiB,YAAY,KAAG,WAAW,CAAC,CAAC,CAiBpH,CAAA"}
package/dist/retry.js CHANGED
@@ -1,21 +1,21 @@
1
1
  // src/retry.ts
2
- import { fromMilliseconds, toMilliseconds, Zero } from "@bessemer/cornerstone/temporal/duration";
2
+ import * as Durations from "@bessemer/cornerstone/temporal/duration";
3
3
  import * as Results from "@bessemer/cornerstone/result";
4
- import { deepMerge, isUndefined } from "@bessemer/cornerstone/object";
5
- import { sleep } from "@bessemer/cornerstone/async";
6
- import { random } from "@bessemer/cornerstone/math";
7
- import { assert } from "@bessemer/cornerstone/assertion";
4
+ import * as Objects from "@bessemer/cornerstone/object";
5
+ import * as Async from "@bessemer/cornerstone/async";
6
+ import * as Maths from "@bessemer/cornerstone/math";
7
+ import * as Assertions from "@bessemer/cornerstone/assertion";
8
8
  var None = {
9
9
  attempts: 0,
10
- delay: Zero
10
+ delay: Durations.Zero
11
11
  };
12
12
  var DefaultRetryProps = {
13
13
  attempts: 3,
14
- delay: fromMilliseconds(500)
14
+ delay: Durations.fromMilliseconds(500)
15
15
  };
16
16
  var initialize = (initialOptions) => {
17
- const props = deepMerge(DefaultRetryProps, initialOptions);
18
- assert(props.attempts >= 0, () => "usingRetry attempts must be >= 0");
17
+ const props = Objects.deepMerge(DefaultRetryProps, initialOptions);
18
+ Assertions.assert(props.attempts >= 0, () => "usingRetry attempts must be >= 0");
19
19
  return {
20
20
  attempt: 0,
21
21
  props
@@ -25,9 +25,9 @@ var retry = async (state) => {
25
25
  if (state.attempt >= state.props.attempts - 1) {
26
26
  return void 0;
27
27
  }
28
- const delayMs = toMilliseconds(state.props.delay);
28
+ const delayMs = Durations.toMilliseconds(state.props.delay);
29
29
  const maxJitterMs = delayMs * 0.3;
30
- await sleep(fromMilliseconds(delayMs + random(0, maxJitterMs)));
30
+ await Async.sleep(Durations.fromMilliseconds(delayMs + Maths.random(0, maxJitterMs)));
31
31
  return {
32
32
  props: state.props,
33
33
  attempt: state.attempt + 1
@@ -43,7 +43,7 @@ var usingRetry = async (runnable, initialOptions) => {
43
43
  return result;
44
44
  }
45
45
  retryState = await retry(retryState);
46
- } while (!isUndefined(retryState));
46
+ } while (!Objects.isUndefined(retryState));
47
47
  return previousResult;
48
48
  };
49
49
  export {
package/dist/retry.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/retry.ts"],"sourcesContent":["import { Duration, fromMilliseconds, toMilliseconds, Zero } from '@bessemer/cornerstone/temporal/duration'\nimport * as Results from '@bessemer/cornerstone/result'\nimport { AsyncResult, Result } from '@bessemer/cornerstone/result'\nimport { PartialDeep } from 'type-fest'\nimport { deepMerge, isUndefined } from '@bessemer/cornerstone/object'\nimport { sleep } from '@bessemer/cornerstone/async'\nimport { random } from '@bessemer/cornerstone/math'\nimport { assert } from '@bessemer/cornerstone/assertion'\n\nexport type RetryProps = {\n attempts: number\n delay: Duration\n}\n\nexport type RetryOptions = PartialDeep<RetryProps>\n\nexport const None: RetryProps = {\n attempts: 0,\n delay: Zero,\n}\n\nexport const DefaultRetryProps: RetryProps = {\n attempts: 3,\n delay: fromMilliseconds(500),\n}\n\nexport type RetryState = {\n attempt: number\n props: RetryProps\n}\n\nexport const initialize = (initialOptions?: RetryOptions): RetryState => {\n const props = deepMerge(DefaultRetryProps, initialOptions)\n assert(props.attempts >= 0, () => 'usingRetry attempts must be >= 0')\n\n return {\n attempt: 0,\n props,\n }\n}\n\nexport const retry = async (state: RetryState): Promise<RetryState | undefined> => {\n if (state.attempt >= state.props.attempts - 1) {\n return undefined\n }\n\n const delayMs = toMilliseconds(state.props.delay)\n const maxJitterMs = delayMs * 0.3 // We calculate max jitter as 30% of the delay\n await sleep(fromMilliseconds(delayMs + random(0, maxJitterMs)))\n\n return {\n props: state.props,\n attempt: state.attempt + 1,\n }\n}\n\nexport const usingRetry = async <T>(runnable: () => Promise<Result<T>>, initialOptions?: RetryOptions): AsyncResult<T> => {\n let retryState: RetryState | undefined = initialize(initialOptions)\n let previousResult: Result<T> = Results.failure()\n\n do {\n // JOHN Should this be a try/catch? it was causing debugging problems\n const result = await runnable()\n previousResult = result\n\n if (Results.isSuccess(result)) {\n return result\n }\n\n retryState = await retry(retryState)\n } while (!isUndefined(retryState))\n\n return previousResult\n}\n"],"mappings":";AAAA,SAAmB,kBAAkB,gBAAgB,YAAY;AACjE,YAAY,aAAa;AAGzB,SAAS,WAAW,mBAAmB;AACvC,SAAS,aAAa;AACtB,SAAS,cAAc;AACvB,SAAS,cAAc;AAShB,IAAM,OAAmB;AAAA,EAC9B,UAAU;AAAA,EACV,OAAO;AACT;AAEO,IAAM,oBAAgC;AAAA,EAC3C,UAAU;AAAA,EACV,OAAO,iBAAiB,GAAG;AAC7B;AAOO,IAAM,aAAa,CAAC,mBAA8C;AACvE,QAAM,QAAQ,UAAU,mBAAmB,cAAc;AACzD,SAAO,MAAM,YAAY,GAAG,MAAM,kCAAkC;AAEpE,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEO,IAAM,QAAQ,OAAO,UAAuD;AACjF,MAAI,MAAM,WAAW,MAAM,MAAM,WAAW,GAAG;AAC7C,WAAO;AAAA,EACT;AAEA,QAAM,UAAU,eAAe,MAAM,MAAM,KAAK;AAChD,QAAM,cAAc,UAAU;AAC9B,QAAM,MAAM,iBAAiB,UAAU,OAAO,GAAG,WAAW,CAAC,CAAC;AAE9D,SAAO;AAAA,IACL,OAAO,MAAM;AAAA,IACb,SAAS,MAAM,UAAU;AAAA,EAC3B;AACF;AAEO,IAAM,aAAa,OAAU,UAAoC,mBAAkD;AACxH,MAAI,aAAqC,WAAW,cAAc;AAClE,MAAI,iBAAoC,gBAAQ;AAEhD,KAAG;AAED,UAAM,SAAS,MAAM,SAAS;AAC9B,qBAAiB;AAEjB,QAAY,kBAAU,MAAM,GAAG;AAC7B,aAAO;AAAA,IACT;AAEA,iBAAa,MAAM,MAAM,UAAU;AAAA,EACrC,SAAS,CAAC,YAAY,UAAU;AAEhC,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/retry.ts"],"sourcesContent":["import * as Durations from '@bessemer/cornerstone/temporal/duration'\nimport { Duration } from '@bessemer/cornerstone/temporal/duration'\nimport * as Results from '@bessemer/cornerstone/result'\nimport { AsyncResult, Result } from '@bessemer/cornerstone/result'\nimport { PartialDeep } from 'type-fest'\nimport * as Objects from '@bessemer/cornerstone/object'\nimport * as Async from '@bessemer/cornerstone/async'\nimport * as Maths from '@bessemer/cornerstone/math'\nimport * as Assertions from '@bessemer/cornerstone/assertion'\n\nexport type RetryProps = {\n attempts: number\n delay: Duration\n}\n\nexport type RetryOptions = PartialDeep<RetryProps>\n\nexport const None: RetryProps = {\n attempts: 0,\n delay: Durations.Zero,\n}\n\nexport const DefaultRetryProps: RetryProps = {\n attempts: 3,\n delay: Durations.fromMilliseconds(500),\n}\n\nexport type RetryState = {\n attempt: number\n props: RetryProps\n}\n\nexport const initialize = (initialOptions?: RetryOptions): RetryState => {\n const props = Objects.deepMerge(DefaultRetryProps, initialOptions)\n Assertions.assert(props.attempts >= 0, () => 'usingRetry attempts must be >= 0')\n\n return {\n attempt: 0,\n props,\n }\n}\n\nexport const retry = async (state: RetryState): Promise<RetryState | undefined> => {\n if (state.attempt >= state.props.attempts - 1) {\n return undefined\n }\n\n const delayMs = Durations.toMilliseconds(state.props.delay)\n const maxJitterMs = delayMs * 0.3 // We calculate max jitter as 30% of the delay\n await Async.sleep(Durations.fromMilliseconds(delayMs + Maths.random(0, maxJitterMs)))\n\n return {\n props: state.props,\n attempt: state.attempt + 1,\n }\n}\n\nexport const usingRetry = async <T>(runnable: () => Promise<Result<T>>, initialOptions?: RetryOptions): AsyncResult<T> => {\n let retryState: RetryState | undefined = initialize(initialOptions)\n let previousResult: Result<T> = Results.failure()\n\n do {\n // JOHN Should this be a try/catch? it was causing debugging problems\n const result = await runnable()\n previousResult = result\n\n if (Results.isSuccess(result)) {\n return result\n }\n\n retryState = await retry(retryState)\n } while (!Objects.isUndefined(retryState))\n\n return previousResult\n}\n"],"mappings":";AAAA,YAAY,eAAe;AAE3B,YAAY,aAAa;AAGzB,YAAY,aAAa;AACzB,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,gBAAgB;AASrB,IAAM,OAAmB;AAAA,EAC9B,UAAU;AAAA,EACV,OAAiB;AACnB;AAEO,IAAM,oBAAgC;AAAA,EAC3C,UAAU;AAAA,EACV,OAAiB,2BAAiB,GAAG;AACvC;AAOO,IAAM,aAAa,CAAC,mBAA8C;AACvE,QAAM,QAAgB,kBAAU,mBAAmB,cAAc;AACjE,EAAW,kBAAO,MAAM,YAAY,GAAG,MAAM,kCAAkC;AAE/E,SAAO;AAAA,IACL,SAAS;AAAA,IACT;AAAA,EACF;AACF;AAEO,IAAM,QAAQ,OAAO,UAAuD;AACjF,MAAI,MAAM,WAAW,MAAM,MAAM,WAAW,GAAG;AAC7C,WAAO;AAAA,EACT;AAEA,QAAM,UAAoB,yBAAe,MAAM,MAAM,KAAK;AAC1D,QAAM,cAAc,UAAU;AAC9B,QAAY,YAAgB,2BAAiB,UAAgB,aAAO,GAAG,WAAW,CAAC,CAAC;AAEpF,SAAO;AAAA,IACL,OAAO,MAAM;AAAA,IACb,SAAS,MAAM,UAAU;AAAA,EAC3B;AACF;AAEO,IAAM,aAAa,OAAU,UAAoC,mBAAkD;AACxH,MAAI,aAAqC,WAAW,cAAc;AAClE,MAAI,iBAAoC,gBAAQ;AAEhD,KAAG;AAED,UAAM,SAAS,MAAM,SAAS;AAC9B,qBAAiB;AAEjB,QAAY,kBAAU,MAAM,GAAG;AAC7B,aAAO;AAAA,IACT;AAEA,iBAAa,MAAM,MAAM,UAAU;AAAA,EACrC,SAAS,CAAS,oBAAY,UAAU;AAExC,SAAO;AACT;","names":[]}
package/dist/rich-text.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // src/rich-text.ts
2
- import { isObject } from "@bessemer/cornerstone/object";
2
+ import * as Objects from "@bessemer/cornerstone/object";
3
3
  var isJson = (text) => {
4
- return isObject(text);
4
+ return Objects.isObject(text);
5
5
  };
6
6
  export {
7
7
  isJson
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/rich-text.ts"],"sourcesContent":["import { TaggedType } from '@bessemer/cornerstone/types'\nimport { isObject } from '@bessemer/cornerstone/object'\n\n// These are to match TipTap types, but without us having to depend on the TipTap library\nexport type RichTextJson = {\n type?: string\n attrs?: Record<string, any>\n content?: RichTextJson[]\n marks?: {\n type: string\n attrs?: Record<string, any>\n [key: string]: any\n }[]\n text?: string\n [key: string]: any\n}\n\nexport type RichTextString = TaggedType<string, 'RichTextString'>\n\nexport type RichText = RichTextString | RichTextJson\n\nexport const isJson = (text: RichText): text is RichTextJson => {\n return isObject(text)\n}\n"],"mappings":";AACA,SAAS,gBAAgB;AAoBlB,IAAM,SAAS,CAAC,SAAyC;AAC9D,SAAO,SAAS,IAAI;AACtB;","names":[]}
1
+ {"version":3,"sources":["../src/rich-text.ts"],"sourcesContent":["import { TaggedType } from '@bessemer/cornerstone/types'\nimport * as Objects from '@bessemer/cornerstone/object'\n\n// These are to match TipTap types, but without us having to depend on the TipTap library\nexport type RichTextJson = {\n type?: string\n attrs?: Record<string, any>\n content?: RichTextJson[]\n marks?: {\n type: string\n attrs?: Record<string, any>\n [key: string]: any\n }[]\n text?: string\n [key: string]: any\n}\n\nexport type RichTextString = TaggedType<string, 'RichTextString'>\n\nexport type RichText = RichTextString | RichTextJson\n\nexport const isJson = (text: RichText): text is RichTextJson => {\n return Objects.isObject(text)\n}\n"],"mappings":";AACA,YAAY,aAAa;AAoBlB,IAAM,SAAS,CAAC,SAAyC;AAC9D,SAAe,iBAAS,IAAI;AAC9B;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AASvD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,IAAI,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;CAAE,CAAA;AAC3F,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;AAE9C,eAAO,MAAM,IAAI,GAAI,OAAO,QAAQ,KAAG,SA6BtC,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,QAAQ,KAAK,CAAC,QAAQ,CAAC,KAAG,KAAK,CAAC,SAAS,CAEhE,CAAA"}
1
+ {"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AASvD,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,IAAI,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,SAAS,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;CAAE,CAAA;AAC3F,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;AAE9C,eAAO,MAAM,IAAI,GAAI,OAAO,QAAQ,KAAG,SA6BtC,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,QAAQ,KAAK,CAAC,QAAQ,CAAC,KAAG,KAAK,CAAC,SAAS,CAEhE,CAAA"}
package/dist/signature.js CHANGED
@@ -1,24 +1,24 @@
1
1
  // src/signature.ts
2
- import { isReferencable } from "@bessemer/cornerstone/reference";
3
- import { isObject } from "@bessemer/cornerstone/object";
4
- import { isDate } from "@bessemer/cornerstone/temporal/date";
5
- import { _isInstant, instantToLiteral } from "@bessemer/cornerstone/temporal/chrono";
2
+ import * as References from "@bessemer/cornerstone/reference";
3
+ import * as Objects from "@bessemer/cornerstone/object";
4
+ import * as Dates from "@bessemer/cornerstone/temporal/date";
5
+ import * as Chrono from "@bessemer/cornerstone/temporal/chrono";
6
6
  var sign = (value) => {
7
7
  if (value === null) {
8
8
  return null;
9
9
  }
10
- if (isObject(value)) {
11
- if (isReferencable(value)) {
10
+ if (Objects.isObject(value)) {
11
+ if (References.isReferencable(value)) {
12
12
  return value.reference.id;
13
13
  } else {
14
14
  return value.id;
15
15
  }
16
16
  }
17
- if (isDate(value)) {
17
+ if (Dates.isDate(value)) {
18
18
  return value.getTime();
19
19
  }
20
- if (_isInstant(value)) {
21
- return instantToLiteral(value);
20
+ if (Chrono._isInstant(value)) {
21
+ return Chrono.instantToLiteral(value);
22
22
  }
23
23
  if (value === true) {
24
24
  return 1;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/signature.ts"],"sourcesContent":["import { isReferencable, Reference } from '@bessemer/cornerstone/reference'\nimport { BasicType } from '@bessemer/cornerstone/types'\nimport { isObject } from '@bessemer/cornerstone/object'\nimport { isDate } from '@bessemer/cornerstone/temporal/date'\nimport { _isInstant, instantToLiteral } from '@bessemer/cornerstone/temporal/chrono'\n\n// JOHN it is probably worth revisiting this in the context of using this library code more frequently... in particular\n// all of these things have similar properties (\"primitives\", sortable, value equality, etc.) but this method of implementation\n// forces them all to be converted to strings or numbers first which is an expensive operation.\n\nexport type Signable = BasicType | null | { id: string } | { reference: Reference<string> }\nexport type Signature = string | number | null\n\nexport const sign = (value: Signable): Signature => {\n if (value === null) {\n return null\n }\n\n if (isObject(value)) {\n if (isReferencable(value)) {\n return value.reference.id\n } else {\n return value.id\n }\n }\n\n if (isDate(value)) {\n return value.getTime()\n }\n\n if (_isInstant(value)) {\n return instantToLiteral(value)\n }\n\n if (value === true) {\n return 1\n }\n if (value === false) {\n return 0\n }\n\n return value\n}\n\nexport const signAll = (values: Array<Signable>): Array<Signature> => {\n return values.map(sign)\n}\n"],"mappings":";AAAA,SAAS,sBAAiC;AAE1C,SAAS,gBAAgB;AACzB,SAAS,cAAc;AACvB,SAAS,YAAY,wBAAwB;AAStC,IAAM,OAAO,CAAC,UAA+B;AAClD,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AAEA,MAAI,SAAS,KAAK,GAAG;AACnB,QAAI,eAAe,KAAK,GAAG;AACzB,aAAO,MAAM,UAAU;AAAA,IACzB,OAAO;AACL,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AAEA,MAAI,OAAO,KAAK,GAAG;AACjB,WAAO,MAAM,QAAQ;AAAA,EACvB;AAEA,MAAI,WAAW,KAAK,GAAG;AACrB,WAAO,iBAAiB,KAAK;AAAA,EAC/B;AAEA,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AACA,MAAI,UAAU,OAAO;AACnB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,IAAM,UAAU,CAAC,WAA8C;AACpE,SAAO,OAAO,IAAI,IAAI;AACxB;","names":[]}
1
+ {"version":3,"sources":["../src/signature.ts"],"sourcesContent":["import * as References from '@bessemer/cornerstone/reference'\nimport { Reference } from '@bessemer/cornerstone/reference'\nimport { BasicType } from '@bessemer/cornerstone/types'\nimport * as Objects from '@bessemer/cornerstone/object'\nimport * as Dates from '@bessemer/cornerstone/temporal/date'\nimport * as Chrono from '@bessemer/cornerstone/temporal/chrono'\n\n// JOHN it is probably worth revisiting this in the context of using this library code more frequently... in particular\n// all of these things have similar properties (\"primitives\", sortable, value equality, etc.) but this method of implementation\n// forces them all to be converted to strings or numbers first which is an expensive operation.\n\nexport type Signable = BasicType | null | { id: string } | { reference: Reference<string> }\nexport type Signature = string | number | null\n\nexport const sign = (value: Signable): Signature => {\n if (value === null) {\n return null\n }\n\n if (Objects.isObject(value)) {\n if (References.isReferencable(value)) {\n return value.reference.id\n } else {\n return value.id\n }\n }\n\n if (Dates.isDate(value)) {\n return value.getTime()\n }\n\n if (Chrono._isInstant(value)) {\n return Chrono.instantToLiteral(value)\n }\n\n if (value === true) {\n return 1\n }\n if (value === false) {\n return 0\n }\n\n return value\n}\n\nexport const signAll = (values: Array<Signable>): Array<Signature> => {\n return values.map(sign)\n}\n"],"mappings":";AAAA,YAAY,gBAAgB;AAG5B,YAAY,aAAa;AACzB,YAAY,WAAW;AACvB,YAAY,YAAY;AASjB,IAAM,OAAO,CAAC,UAA+B;AAClD,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AAEA,MAAY,iBAAS,KAAK,GAAG;AAC3B,QAAe,0BAAe,KAAK,GAAG;AACpC,aAAO,MAAM,UAAU;AAAA,IACzB,OAAO;AACL,aAAO,MAAM;AAAA,IACf;AAAA,EACF;AAEA,MAAU,aAAO,KAAK,GAAG;AACvB,WAAO,MAAM,QAAQ;AAAA,EACvB;AAEA,MAAW,kBAAW,KAAK,GAAG;AAC5B,WAAc,wBAAiB,KAAK;AAAA,EACtC;AAEA,MAAI,UAAU,MAAM;AAClB,WAAO;AAAA,EACT;AACA,MAAI,UAAU,OAAO;AACnB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,IAAM,UAAU,CAAC,WAA8C;AACpE,SAAO,OAAO,IAAI,IAAI;AACxB;","names":[]}
@@ -15,7 +15,7 @@ import {
15
15
  ValueExpression,
16
16
  VariableExpression
17
17
  } from "@bessemer/cornerstone/expression/core-expression";
18
- import { isType } from "@bessemer/cornerstone/expression/internal";
18
+ import * as ExpressionInternal from "@bessemer/cornerstone/expression/internal";
19
19
  var SqlExpressionParser = class extends ExpressionMapper {
20
20
  };
21
21
  var resolveContainsExpression = (expression, map, context, invert = false) => {
@@ -70,7 +70,7 @@ DefaultSqlExpressionParser.register(VariableExpression, (expression, _, context)
70
70
  return variableName ?? expression.name;
71
71
  });
72
72
  DefaultSqlExpressionParser.register(NotExpression, (expression, map, context) => {
73
- if (isType(expression.value, ContainsExpression)) {
73
+ if (ExpressionInternal.isType(expression.value, ContainsExpression)) {
74
74
  return resolveContainsExpression(expression.value, map, context, true);
75
75
  } else {
76
76
  return `(NOT ${map(expression.value)})`;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/sql/sql-expression-parser.ts"],"sourcesContent":["import { ExpressionMapper } from '@bessemer/cornerstone/expression/expression-mapper'\nimport { Arrays, Eithers, Entries, Objects, Results, Ulids } from '@bessemer/cornerstone'\nimport { BasicType, Dictionary } from '@bessemer/cornerstone/types'\nimport {\n AndExpression,\n ContainsExpression,\n EqualsExpression,\n getValue,\n GreaterThanExpression,\n GreaterThanOrEqualExpression,\n LessThanExpression,\n LessThanOrEqualExpression,\n NotExpression,\n OrExpression,\n ValueExpression,\n VariableExpression,\n} from '@bessemer/cornerstone/expression/core-expression'\nimport { isType } from '@bessemer/cornerstone/expression/internal'\nimport { SqlFragment, SqlParameterMap } from '@bessemer/cornerstone/sql'\nimport { Expression } from '@bessemer/cornerstone/expression'\n\nexport type SqlExpressionParserContext = {\n variables: Dictionary<string>\n parameters: SqlParameterMap\n}\nexport class SqlExpressionParser extends ExpressionMapper<SqlFragment, SqlExpressionParserContext> {}\n\nconst resolveContainsExpression = (\n // JOHN should be easier to define this type\n expression: ReturnType<typeof ContainsExpression.builder>,\n map: (expression: Expression<unknown>) => SqlFragment,\n context: SqlExpressionParserContext,\n invert = false\n) => {\n const collection = expression.collection\n\n const parsedValue = getValue(collection)\n if (Results.isFailure(parsedValue)) {\n throw new Error(`SqlExpressionParser - Unable to resolve ContainsExpression with non-value collection: ${JSON.stringify(collection)}`)\n }\n\n const value = parsedValue as Array<BasicType | null>\n if (Arrays.isEmpty(value)) {\n return invert ? '(1 = 1)' : '(1 = 0)'\n }\n\n value.forEach((it) => {\n if (it !== null && !Objects.isBasic(it)) {\n throw new Error(`SqlExpressionParser - Unable to resolve complex ValueExpression as Sql: ${JSON.stringify(it)}`)\n }\n })\n\n const [nonNullValues, nullValues] = Arrays.bisect(value, (it) => (it !== null ? Eithers.left(it) : Eithers.right(null)))\n const parameters = nonNullValues.map((it) => Entries.of(`_${Ulids.generate()}`, it))\n parameters.forEach(([key, value]) => {\n context.parameters[key] = value\n })\n\n const containsExpression = expression.operands\n .map(map)\n .map((sql) => {\n const conditions = []\n\n if (!Arrays.isEmpty(parameters)) {\n conditions.push(\n `(${sql} ${invert ? 'NOT IN' : 'IN'} (${Entries.keys(parameters)\n .map((it) => `:${it}`)\n .join(',')}))`\n )\n }\n\n if (!Arrays.isEmpty(nullValues)) {\n conditions.push(`(${sql} ${invert ? 'IS NOT' : 'IS'} NULL)`)\n }\n\n return `(${conditions.join(' OR ')})`\n })\n .join(' AND ')\n\n return `(${containsExpression})`\n}\n\nexport const DefaultSqlExpressionParser = new SqlExpressionParser()\nDefaultSqlExpressionParser.register(ValueExpression, (expression, _, context) => {\n const value = expression.value\n const parameterName = `_${Ulids.generate()}`\n if (value === null) {\n throw new Error(`SqlExpressionParser - Unable to resolve null ValueExpression as Sql`)\n }\n if (!Objects.isBasic(value)) {\n throw new Error(`SqlExpressionParser - Unable to resolve complex ValueExpression as Sql: ${JSON.stringify(value)}`)\n }\n\n context.parameters[parameterName] = value\n return `:${parameterName}`\n})\nDefaultSqlExpressionParser.register(VariableExpression, (expression, _, context) => {\n const variableName = context.variables[expression.name]\n return variableName ?? expression.name\n})\nDefaultSqlExpressionParser.register(NotExpression, (expression, map, context) => {\n if (isType(expression.value, ContainsExpression)) {\n return resolveContainsExpression(expression.value, map, context, true)\n } else {\n return `(NOT ${map(expression.value)})`\n }\n})\nDefaultSqlExpressionParser.register(AndExpression, (expression, map) => {\n return `(${expression.operands.map(map).join(' AND ')})`\n})\nDefaultSqlExpressionParser.register(OrExpression, (expression, map) => {\n return `(${expression.operands.map(map).join(' OR ')})`\n})\nDefaultSqlExpressionParser.register(EqualsExpression, (expression, map) => {\n const first = Arrays.first(expression.operands)!\n const rest = Arrays.rest(expression.operands)\n\n const mappedFirst = map(first)\n const equalsExpressions = rest\n .map((it) => {\n const parsedValue = getValue(it)\n if (Results.isSuccess(parsedValue)) {\n if (parsedValue === null) {\n return `(${mappedFirst} IS NULL)`\n } else {\n return `(${mappedFirst} = ${map(it)})`\n }\n } else {\n return `(${mappedFirst} = ${map(it)})`\n }\n })\n .join(' AND ')\n return `(${equalsExpressions})`\n})\nDefaultSqlExpressionParser.register(ContainsExpression, resolveContainsExpression)\nDefaultSqlExpressionParser.register(LessThanExpression, (expression, map) => {\n return `(${map(expression.left)} < ${map(expression.right)})`\n})\nDefaultSqlExpressionParser.register(LessThanOrEqualExpression, (expression, map) => {\n return `(${map(expression.left)} <= ${map(expression.right)})`\n})\nDefaultSqlExpressionParser.register(GreaterThanExpression, (expression, map) => {\n return `(${map(expression.left)} > ${map(expression.right)})`\n})\nDefaultSqlExpressionParser.register(GreaterThanOrEqualExpression, (expression, map) => {\n return `(${map(expression.left)} >= ${map(expression.right)})`\n})\n"],"mappings":"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","names":["value"]}
1
+ {"version":3,"sources":["../../src/sql/sql-expression-parser.ts"],"sourcesContent":["import { ExpressionMapper } from '@bessemer/cornerstone/expression/expression-mapper'\nimport { Arrays, Eithers, Entries, Objects, Results, Ulids } from '@bessemer/cornerstone'\nimport { BasicType, Dictionary } from '@bessemer/cornerstone/types'\nimport {\n AndExpression,\n ContainsExpression,\n EqualsExpression,\n getValue,\n GreaterThanExpression,\n GreaterThanOrEqualExpression,\n LessThanExpression,\n LessThanOrEqualExpression,\n NotExpression,\n OrExpression,\n ValueExpression,\n VariableExpression,\n} from '@bessemer/cornerstone/expression/core-expression'\nimport * as ExpressionInternal from '@bessemer/cornerstone/expression/internal'\nimport { SqlFragment, SqlParameterMap } from '@bessemer/cornerstone/sql'\nimport { Expression } from '@bessemer/cornerstone/expression'\n\nexport type SqlExpressionParserContext = {\n variables: Dictionary<string>\n parameters: SqlParameterMap\n}\nexport class SqlExpressionParser extends ExpressionMapper<SqlFragment, SqlExpressionParserContext> {}\n\nconst resolveContainsExpression = (\n // JOHN should be easier to define this type\n expression: ReturnType<typeof ContainsExpression.builder>,\n map: (expression: Expression<unknown>) => SqlFragment,\n context: SqlExpressionParserContext,\n invert = false\n) => {\n const collection = expression.collection\n\n const parsedValue = getValue(collection)\n if (Results.isFailure(parsedValue)) {\n throw new Error(`SqlExpressionParser - Unable to resolve ContainsExpression with non-value collection: ${JSON.stringify(collection)}`)\n }\n\n const value = parsedValue as Array<BasicType | null>\n if (Arrays.isEmpty(value)) {\n return invert ? '(1 = 1)' : '(1 = 0)'\n }\n\n value.forEach((it) => {\n if (it !== null && !Objects.isBasic(it)) {\n throw new Error(`SqlExpressionParser - Unable to resolve complex ValueExpression as Sql: ${JSON.stringify(it)}`)\n }\n })\n\n const [nonNullValues, nullValues] = Arrays.bisect(value, (it) => (it !== null ? Eithers.left(it) : Eithers.right(null)))\n const parameters = nonNullValues.map((it) => Entries.of(`_${Ulids.generate()}`, it))\n parameters.forEach(([key, value]) => {\n context.parameters[key] = value\n })\n\n const containsExpression = expression.operands\n .map(map)\n .map((sql) => {\n const conditions = []\n\n if (!Arrays.isEmpty(parameters)) {\n conditions.push(\n `(${sql} ${invert ? 'NOT IN' : 'IN'} (${Entries.keys(parameters)\n .map((it) => `:${it}`)\n .join(',')}))`\n )\n }\n\n if (!Arrays.isEmpty(nullValues)) {\n conditions.push(`(${sql} ${invert ? 'IS NOT' : 'IS'} NULL)`)\n }\n\n return `(${conditions.join(' OR ')})`\n })\n .join(' AND ')\n\n return `(${containsExpression})`\n}\n\nexport const DefaultSqlExpressionParser = new SqlExpressionParser()\nDefaultSqlExpressionParser.register(ValueExpression, (expression, _, context) => {\n const value = expression.value\n const parameterName = `_${Ulids.generate()}`\n if (value === null) {\n throw new Error(`SqlExpressionParser - Unable to resolve null ValueExpression as Sql`)\n }\n if (!Objects.isBasic(value)) {\n throw new Error(`SqlExpressionParser - Unable to resolve complex ValueExpression as Sql: ${JSON.stringify(value)}`)\n }\n\n context.parameters[parameterName] = value\n return `:${parameterName}`\n})\nDefaultSqlExpressionParser.register(VariableExpression, (expression, _, context) => {\n const variableName = context.variables[expression.name]\n return variableName ?? expression.name\n})\nDefaultSqlExpressionParser.register(NotExpression, (expression, map, context) => {\n if (ExpressionInternal.isType(expression.value, ContainsExpression)) {\n return resolveContainsExpression(expression.value, map, context, true)\n } else {\n return `(NOT ${map(expression.value)})`\n }\n})\nDefaultSqlExpressionParser.register(AndExpression, (expression, map) => {\n return `(${expression.operands.map(map).join(' AND ')})`\n})\nDefaultSqlExpressionParser.register(OrExpression, (expression, map) => {\n return `(${expression.operands.map(map).join(' OR ')})`\n})\nDefaultSqlExpressionParser.register(EqualsExpression, (expression, map) => {\n const first = Arrays.first(expression.operands)!\n const rest = Arrays.rest(expression.operands)\n\n const mappedFirst = map(first)\n const equalsExpressions = rest\n .map((it) => {\n const parsedValue = getValue(it)\n if (Results.isSuccess(parsedValue)) {\n if (parsedValue === null) {\n return `(${mappedFirst} IS NULL)`\n } else {\n return `(${mappedFirst} = ${map(it)})`\n }\n } else {\n return `(${mappedFirst} = ${map(it)})`\n }\n })\n .join(' AND ')\n return `(${equalsExpressions})`\n})\nDefaultSqlExpressionParser.register(ContainsExpression, resolveContainsExpression)\nDefaultSqlExpressionParser.register(LessThanExpression, (expression, map) => {\n return `(${map(expression.left)} < ${map(expression.right)})`\n})\nDefaultSqlExpressionParser.register(LessThanOrEqualExpression, (expression, map) => {\n return `(${map(expression.left)} <= ${map(expression.right)})`\n})\nDefaultSqlExpressionParser.register(GreaterThanExpression, (expression, map) => {\n return `(${map(expression.left)} > ${map(expression.right)})`\n})\nDefaultSqlExpressionParser.register(GreaterThanOrEqualExpression, (expression, map) => {\n return `(${map(expression.left)} >= ${map(expression.right)})`\n})\n"],"mappings":"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","names":["value"]}
package/dist/sql.d.ts CHANGED
@@ -1,6 +1,10 @@
1
1
  import * as Sql from '@bessemer/cornerstone/sql/sql';
2
2
  import { BasicType, Dictionary, TaggedType } from '@bessemer/cornerstone/types';
3
- export { Sql };
3
+ export {
4
+ /**
5
+ * @since 2.0.0
6
+ */
7
+ Sql, };
4
8
  export type SqlFragment = TaggedType<string, 'SqlFragment'>;
5
9
  export type SqlParameterMap = Dictionary<BasicType | Array<BasicType>>;
6
10
  //# sourceMappingURL=sql.d.ts.map
package/dist/sql.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,+BAA+B,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAE/E,OAAO,EAAE,GAAG,EAAE,CAAA;AAEd,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAC3D,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,+BAA+B,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAE/E,OAAO;AACL;;GAEG;AACH,GAAG,GACJ,CAAA;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;AAC3D,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAA"}
package/dist/sql.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/sql.ts"],"sourcesContent":["import * as Sql from '@bessemer/cornerstone/sql/sql'\nimport { BasicType, Dictionary, TaggedType } from '@bessemer/cornerstone/types'\n\nexport { Sql }\n\nexport type SqlFragment = TaggedType<string, 'SqlFragment'>\nexport type SqlParameterMap = Dictionary<BasicType | Array<BasicType>>\n"],"mappings":";AAAA,YAAY,SAAS;","names":[]}
1
+ {"version":3,"sources":["../src/sql.ts"],"sourcesContent":["import * as Sql from '@bessemer/cornerstone/sql/sql'\nimport { BasicType, Dictionary, TaggedType } from '@bessemer/cornerstone/types'\n\nexport {\n /**\n * @since 2.0.0\n */\n Sql,\n}\n\nexport type SqlFragment = TaggedType<string, 'SqlFragment'>\nexport type SqlParameterMap = Dictionary<BasicType | Array<BasicType>>\n"],"mappings":";AAAA,YAAY,SAAS;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/store.js CHANGED
@@ -1,21 +1,21 @@
1
1
  // src/store.ts
2
- import { of } from "@bessemer/cornerstone/entry";
3
- import { first } from "@bessemer/cornerstone/array";
4
- import { isNil, isPresent } from "@bessemer/cornerstone/object";
2
+ import * as Entries from "@bessemer/cornerstone/entry";
3
+ import * as Arrays from "@bessemer/cornerstone/array";
4
+ import * as Objects from "@bessemer/cornerstone/object";
5
5
  var AbstractRemoteKeyValueStore = class {
6
6
  writeValue = async (key, value) => {
7
- await this.writeValues([of(key, value)]);
7
+ await this.writeValues([Entries.of(key, value)]);
8
8
  };
9
9
  fetchValue = async (key) => {
10
- return first(await this.fetchValues([key]))?.[1];
10
+ return Arrays.first(await this.fetchValues([key]))?.[1];
11
11
  };
12
12
  };
13
13
  var AbstractLocalKeyValueStore = class extends AbstractRemoteKeyValueStore {
14
14
  setValue = (key, value) => {
15
- this.setValues([of(key, value)]);
15
+ this.setValues([Entries.of(key, value)]);
16
16
  };
17
17
  getValue = (key) => {
18
- return first(this.getValues([key]))?.[1];
18
+ return Arrays.first(this.getValues([key]))?.[1];
19
19
  };
20
20
  fetchValues = async (keys) => {
21
21
  return this.getValues(keys);
@@ -32,7 +32,7 @@ var fromMap = () => {
32
32
  };
33
33
  setValues = (entries) => {
34
34
  entries.forEach(([key, value]) => {
35
- if (isNil(value)) {
35
+ if (Objects.isNil(value)) {
36
36
  map.delete(key);
37
37
  } else {
38
38
  map.set(key, value);
@@ -40,7 +40,7 @@ var fromMap = () => {
40
40
  });
41
41
  };
42
42
  getValues = (keys) => {
43
- return keys.map((key) => of(key, map.get(key))).filter((it) => isPresent(it[1]));
43
+ return keys.map((key) => Entries.of(key, map.get(key))).filter((it) => Objects.isPresent(it[1]));
44
44
  };
45
45
  }();
46
46
  };
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { ResourceKey } from '@bessemer/cornerstone/resource-key'\nimport { of, RecordEntry } from '@bessemer/cornerstone/entry'\nimport { first } from '@bessemer/cornerstone/array'\nimport { isNil, isPresent } from '@bessemer/cornerstone/object'\n\nexport interface LocalStore<T> {\n setValue: (value: T | undefined) => void\n getValue: () => T | undefined\n}\n\nexport interface LocalKeyValueStore<T> {\n setValues: (entries: Array<RecordEntry<T | undefined>>) => void\n setValue: (key: ResourceKey, value: T | undefined) => void\n\n getEntries: () => Array<RecordEntry<T>>\n getValues: (keys: Array<ResourceKey>) => Array<RecordEntry<T>>\n getValue: (key: ResourceKey) => T | undefined\n}\n\nexport interface RemoteStore<T> {\n writeValue: (value: T | undefined) => Promise<void>\n fetchValue: () => Promise<T | undefined>\n}\n\nexport interface RemoteKeyValueStore<T> {\n writeValues: (entries: Array<RecordEntry<T | undefined>>) => Promise<void>\n writeValue: (key: ResourceKey, value: T | undefined) => Promise<void>\n\n fetchValues: (keys: Array<ResourceKey>) => Promise<Array<RecordEntry<T>>>\n fetchValue: (key: ResourceKey) => Promise<T | undefined>\n}\n\nexport abstract class AbstractRemoteKeyValueStore<T> implements RemoteKeyValueStore<T> {\n abstract writeValues: (entries: Array<RecordEntry<T | undefined>>) => Promise<void>\n\n writeValue = async (key: ResourceKey, value: T | undefined): Promise<void> => {\n await this.writeValues([of(key, value)])\n }\n\n abstract fetchValues: (keys: Array<ResourceKey>) => Promise<Array<RecordEntry<T>>>\n\n fetchValue = async (key: ResourceKey): Promise<T | undefined> => {\n return first(await this.fetchValues([key]))?.[1]\n }\n}\n\nexport abstract class AbstractLocalKeyValueStore<T> extends AbstractRemoteKeyValueStore<T> implements LocalKeyValueStore<T> {\n abstract setValues: (entries: Array<RecordEntry<T | undefined>>) => void\n\n setValue = (key: ResourceKey, value: T | undefined): void => {\n this.setValues([of(key, value)])\n }\n\n abstract getEntries: () => Array<RecordEntry<T>>\n abstract getValues: (keys: Array<ResourceKey>) => Array<RecordEntry<T>>\n\n getValue = (key: ResourceKey): T | undefined => {\n return first(this.getValues([key]))?.[1]\n }\n\n fetchValues = async (keys: Array<ResourceKey>): Promise<Array<RecordEntry<T>>> => {\n return this.getValues(keys)\n }\n\n writeValues = async (entries: Array<RecordEntry<T | undefined>>): Promise<void> => {\n this.setValues(entries)\n }\n}\n\nexport const fromMap = <T>(): LocalKeyValueStore<T> => {\n const map = new Map<string, T>()\n\n return new (class extends AbstractLocalKeyValueStore<T> {\n override getEntries = (): Array<RecordEntry<T>> => {\n return Array.from(map.entries())\n }\n\n override setValues = (entries: RecordEntry<T | undefined>[]): void => {\n entries.forEach(([key, value]) => {\n if (isNil(value)) {\n map.delete(key)\n } else {\n map.set(key, value)\n }\n })\n }\n\n override getValues = (keys: Array<ResourceKey>): Array<RecordEntry<T>> => {\n return keys.map((key) => of(key, map.get(key)!)).filter((it) => isPresent(it[1]))\n }\n })()\n}\n"],"mappings":";AACA,SAAS,UAAuB;AAChC,SAAS,aAAa;AACtB,SAAS,OAAO,iBAAiB;AA6B1B,IAAe,8BAAf,MAAgF;AAAA,EAGrF,aAAa,OAAO,KAAkB,UAAwC;AAC5E,UAAM,KAAK,YAAY,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EACzC;AAAA,EAIA,aAAa,OAAO,QAA6C;AAC/D,WAAO,MAAM,MAAM,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAAA,EACjD;AACF;AAEO,IAAe,6BAAf,cAAqD,4BAAgE;AAAA,EAG1H,WAAW,CAAC,KAAkB,UAA+B;AAC3D,SAAK,UAAU,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EACjC;AAAA,EAKA,WAAW,CAAC,QAAoC;AAC9C,WAAO,MAAM,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAAA,EACzC;AAAA,EAEA,cAAc,OAAO,SAA6D;AAChF,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AAAA,EAEA,cAAc,OAAO,YAA8D;AACjF,SAAK,UAAU,OAAO;AAAA,EACxB;AACF;AAEO,IAAM,UAAU,MAAgC;AACrD,QAAM,MAAM,oBAAI,IAAe;AAE/B,SAAO,IAAK,cAAc,2BAA8B;AAAA,IAC7C,aAAa,MAA6B;AACjD,aAAO,MAAM,KAAK,IAAI,QAAQ,CAAC;AAAA,IACjC;AAAA,IAES,YAAY,CAAC,YAAgD;AACpE,cAAQ,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAChC,YAAI,MAAM,KAAK,GAAG;AAChB,cAAI,OAAO,GAAG;AAAA,QAChB,OAAO;AACL,cAAI,IAAI,KAAK,KAAK;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAES,YAAY,CAAC,SAAoD;AACxE,aAAO,KAAK,IAAI,CAAC,QAAQ,GAAG,KAAK,IAAI,IAAI,GAAG,CAAE,CAAC,EAAE,OAAO,CAAC,OAAO,UAAU,GAAG,CAAC,CAAC,CAAC;AAAA,IAClF;AAAA,EACF,EAAG;AACL;","names":[]}
1
+ {"version":3,"sources":["../src/store.ts"],"sourcesContent":["import { ResourceKey } from '@bessemer/cornerstone/resource-key'\nimport * as Entries from '@bessemer/cornerstone/entry'\nimport { RecordEntry } from '@bessemer/cornerstone/entry'\nimport * as Arrays from '@bessemer/cornerstone/array'\nimport * as Objects from '@bessemer/cornerstone/object'\n\nexport interface LocalStore<T> {\n setValue: (value: T | undefined) => void\n getValue: () => T | undefined\n}\n\nexport interface LocalKeyValueStore<T> {\n setValues: (entries: Array<RecordEntry<T | undefined>>) => void\n setValue: (key: ResourceKey, value: T | undefined) => void\n\n getEntries: () => Array<RecordEntry<T>>\n getValues: (keys: Array<ResourceKey>) => Array<RecordEntry<T>>\n getValue: (key: ResourceKey) => T | undefined\n}\n\nexport interface RemoteStore<T> {\n writeValue: (value: T | undefined) => Promise<void>\n fetchValue: () => Promise<T | undefined>\n}\n\nexport interface RemoteKeyValueStore<T> {\n writeValues: (entries: Array<RecordEntry<T | undefined>>) => Promise<void>\n writeValue: (key: ResourceKey, value: T | undefined) => Promise<void>\n\n fetchValues: (keys: Array<ResourceKey>) => Promise<Array<RecordEntry<T>>>\n fetchValue: (key: ResourceKey) => Promise<T | undefined>\n}\n\nexport abstract class AbstractRemoteKeyValueStore<T> implements RemoteKeyValueStore<T> {\n abstract writeValues: (entries: Array<RecordEntry<T | undefined>>) => Promise<void>\n\n writeValue = async (key: ResourceKey, value: T | undefined): Promise<void> => {\n await this.writeValues([Entries.of(key, value)])\n }\n\n abstract fetchValues: (keys: Array<ResourceKey>) => Promise<Array<RecordEntry<T>>>\n\n fetchValue = async (key: ResourceKey): Promise<T | undefined> => {\n return Arrays.first(await this.fetchValues([key]))?.[1]\n }\n}\n\nexport abstract class AbstractLocalKeyValueStore<T> extends AbstractRemoteKeyValueStore<T> implements LocalKeyValueStore<T> {\n abstract setValues: (entries: Array<RecordEntry<T | undefined>>) => void\n\n setValue = (key: ResourceKey, value: T | undefined): void => {\n this.setValues([Entries.of(key, value)])\n }\n\n abstract getEntries: () => Array<RecordEntry<T>>\n abstract getValues: (keys: Array<ResourceKey>) => Array<RecordEntry<T>>\n\n getValue = (key: ResourceKey): T | undefined => {\n return Arrays.first(this.getValues([key]))?.[1]\n }\n\n fetchValues = async (keys: Array<ResourceKey>): Promise<Array<RecordEntry<T>>> => {\n return this.getValues(keys)\n }\n\n writeValues = async (entries: Array<RecordEntry<T | undefined>>): Promise<void> => {\n this.setValues(entries)\n }\n}\n\nexport const fromMap = <T>(): LocalKeyValueStore<T> => {\n const map = new Map<string, T>()\n\n return new (class extends AbstractLocalKeyValueStore<T> {\n override getEntries = (): Array<RecordEntry<T>> => {\n return Array.from(map.entries())\n }\n\n override setValues = (entries: RecordEntry<T | undefined>[]): void => {\n entries.forEach(([key, value]) => {\n if (Objects.isNil(value)) {\n map.delete(key)\n } else {\n map.set(key, value)\n }\n })\n }\n\n override getValues = (keys: Array<ResourceKey>): Array<RecordEntry<T>> => {\n return keys.map((key) => Entries.of(key, map.get(key)!)).filter((it) => Objects.isPresent(it[1]))\n }\n })()\n}\n"],"mappings":";AACA,YAAY,aAAa;AAEzB,YAAY,YAAY;AACxB,YAAY,aAAa;AA6BlB,IAAe,8BAAf,MAAgF;AAAA,EAGrF,aAAa,OAAO,KAAkB,UAAwC;AAC5E,UAAM,KAAK,YAAY,CAAS,WAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EACjD;AAAA,EAIA,aAAa,OAAO,QAA6C;AAC/D,WAAc,aAAM,MAAM,KAAK,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAAA,EACxD;AACF;AAEO,IAAe,6BAAf,cAAqD,4BAAgE;AAAA,EAG1H,WAAW,CAAC,KAAkB,UAA+B;AAC3D,SAAK,UAAU,CAAS,WAAG,KAAK,KAAK,CAAC,CAAC;AAAA,EACzC;AAAA,EAKA,WAAW,CAAC,QAAoC;AAC9C,WAAc,aAAM,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;AAAA,EAChD;AAAA,EAEA,cAAc,OAAO,SAA6D;AAChF,WAAO,KAAK,UAAU,IAAI;AAAA,EAC5B;AAAA,EAEA,cAAc,OAAO,YAA8D;AACjF,SAAK,UAAU,OAAO;AAAA,EACxB;AACF;AAEO,IAAM,UAAU,MAAgC;AACrD,QAAM,MAAM,oBAAI,IAAe;AAE/B,SAAO,IAAK,cAAc,2BAA8B;AAAA,IAC7C,aAAa,MAA6B;AACjD,aAAO,MAAM,KAAK,IAAI,QAAQ,CAAC;AAAA,IACjC;AAAA,IAES,YAAY,CAAC,YAAgD;AACpE,cAAQ,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAChC,YAAY,cAAM,KAAK,GAAG;AACxB,cAAI,OAAO,GAAG;AAAA,QAChB,OAAO;AACL,cAAI,IAAI,KAAK,KAAK;AAAA,QACpB;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAES,YAAY,CAAC,SAAoD;AACxE,aAAO,KAAK,IAAI,CAAC,QAAgB,WAAG,KAAK,IAAI,IAAI,GAAG,CAAE,CAAC,EAAE,OAAO,CAAC,OAAe,kBAAU,GAAG,CAAC,CAAC,CAAC;AAAA,IAClG;AAAA,EACF,EAAG;AACL;","names":[]}
package/dist/string.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // src/string.ts
2
- import { rest } from "@bessemer/cornerstone/array";
3
- import { isNil } from "@bessemer/cornerstone/object";
2
+ import * as Arrays from "@bessemer/cornerstone/array";
3
+ import * as Objects from "@bessemer/cornerstone/object";
4
4
  import Zod from "zod";
5
5
  var isString = (value) => {
6
6
  return typeof value === "string";
@@ -9,7 +9,7 @@ var isEmpty = (value) => {
9
9
  return value.length === 0;
10
10
  };
11
11
  var isEmptyOrNil = (value) => {
12
- if (isNil(value)) {
12
+ if (Objects.isNil(value)) {
13
13
  return true;
14
14
  }
15
15
  return isEmpty(value);
@@ -30,7 +30,7 @@ var splitFirst = (str, splitter) => {
30
30
  if (results.length === 1) {
31
31
  return { selection: null, separator: null, rest: str };
32
32
  }
33
- return { selection: results[0], separator: splitter, rest: rest(results).join(splitter) };
33
+ return { selection: results[0], separator: splitter, rest: Arrays.rest(results).join(splitter) };
34
34
  } else {
35
35
  const match = splitter.exec(str);
36
36
  if (!match) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/string.ts"],"sourcesContent":["import { UnknownRecord } from 'type-fest'\nimport { rest } from '@bessemer/cornerstone/array'\nimport { isNil } from '@bessemer/cornerstone/object'\nimport Zod from 'zod'\n\nexport const isString = (value: any): value is string => {\n return typeof value === 'string'\n}\n\nexport const isEmpty = (value: string): boolean => {\n return value.length === 0\n}\n\nexport const isEmptyOrNil = (value: string | null | undefined): boolean => {\n if (isNil(value)) {\n return true\n }\n\n return isEmpty(value)\n}\n\nexport const emptyToNull = (value: string): string | null => {\n if (isEmptyOrNil(value)) {\n return null\n }\n\n return value\n}\n\nexport const isBlank = (str?: string | null): boolean => {\n const testStr = str ?? ''\n return /^\\s*$/.test(testStr)\n}\n\nexport type StringSplitResult = { selection: string; separator: string; rest: string } | { selection: null; separator: null; rest: string }\n\nexport const splitFirst = (str: string, splitter: string | RegExp): StringSplitResult => {\n if (isString(splitter)) {\n const results = str.split(splitter)\n if (results.length === 1) {\n return { selection: null, separator: null, rest: str }\n }\n\n return { selection: results[0]!, separator: splitter, rest: rest(results).join(splitter) }\n } else {\n const match = splitter.exec(str)\n\n if (!match) {\n return { selection: null, separator: null, rest: str }\n }\n\n const matchIndex = match.index\n const beforeMatch = str.slice(0, matchIndex)\n const afterMatch = str.slice(matchIndex + match[0].length)\n const separator = match[0]\n return { selection: beforeMatch, separator, rest: afterMatch }\n }\n}\n\nexport const splitLast = (str: string, splitter: string | RegExp): StringSplitResult => {\n if (isString(splitter)) {\n const results = str.split(splitter)\n if (results.length === 1) {\n return { selection: null, separator: null, rest: str }\n }\n\n return { selection: results[results.length - 1]!, separator: splitter, rest: results.slice(0, results.length - 1).join(splitter) }\n } else {\n if (!splitter.global) {\n splitter = new RegExp(splitter.source, splitter.flags + 'g')\n }\n\n const matches = Array.from(str.matchAll(splitter))\n\n if (matches.length === 0) {\n return { selection: null, separator: null, rest: str }\n }\n\n // Use the last match\n const lastMatch = matches[matches.length - 1]!\n const matchIndex = lastMatch.index!\n const separator = lastMatch[0]!\n const beforeMatch = str.slice(0, matchIndex)\n const afterMatch = str.slice(matchIndex + separator.length)\n\n return {\n selection: afterMatch,\n separator: separator,\n rest: beforeMatch,\n }\n }\n}\n\nexport const splitLastRegex = (str: string, regex: RegExp): StringSplitResult => {\n // Find the last match using regex lastIndex\n let lastMatch: RegExpExecArray | null = null\n let match\n\n while ((match = regex.exec(str)) !== null) {\n lastMatch = match\n }\n\n if (!lastMatch) {\n return { selection: null, separator: null, rest: str }\n }\n\n const matchIndex = lastMatch.index!\n const separator = lastMatch[0]\n const beforeMatch = str.slice(0, matchIndex)\n const afterMatch = str.slice(matchIndex + separator.length)\n\n return {\n selection: afterMatch,\n separator,\n rest: beforeMatch,\n }\n}\n\nexport const splitAt = (str: string, index: number): [string, string] => {\n return [str.slice(0, index), str.slice(index)] as const\n}\n\nexport const removeStart = (string: string, substring: string): string => {\n if (!string.startsWith(substring)) {\n return string\n }\n\n return string.slice(substring.length)\n}\n\nexport const removeEnd = (string: string, substring: string): string => {\n if (!string.endsWith(substring)) {\n return string\n }\n\n return string.slice(0, -substring.length)\n}\n\nexport const mostCentralOccurrence = (str: string, substr: string): number | null => {\n const occurrences: number[] = []\n let index = str.indexOf(substr)\n\n while (index !== -1) {\n occurrences.push(index)\n index = str.indexOf(substr, index + 1)\n }\n\n if (occurrences.length === 0) {\n return null\n }\n\n const center = str.length / 2\n\n let closestIndex = occurrences[0]!\n let minDistance = Math.abs(center - closestIndex)\n\n for (let i = 1; i < occurrences.length; i++) {\n const distance = Math.abs(center - occurrences[i]!)\n if (distance < minDistance) {\n minDistance = distance\n closestIndex = occurrences[i]!\n }\n }\n\n return closestIndex\n}\n\nexport const replacePlaceholders = (string: string, parameters: UnknownRecord, getParamPlaceholder = (paramName: string) => `{{${paramName}}}`) => {\n return Object.entries(parameters).reduce(\n (intermediateString, [paramName, paramValue]) => intermediateString.replaceAll(getParamPlaceholder(paramName), `${paramValue}`),\n string\n )\n}\n\nexport const padStart = (str: string, length: number, chars: string): string => {\n if (str.length >= length) {\n return str\n }\n\n const padLength = length - str.length\n const padString = chars.repeat(Math.ceil(padLength / chars.length))\n\n return padString.slice(0, padLength) + str\n}\n\nexport const padEnd = (str: string, length: number, chars: string): string => {\n if (str.length >= length) {\n return str\n }\n\n const padLength = length - str.length\n const padString = chars.repeat(Math.ceil(padLength / chars.length))\n\n return str + padString.slice(0, padLength)\n}\n\nexport const isNumber = (value: string): boolean => {\n if (value.trim() === '') {\n return false\n }\n\n const num = Number(value)\n return !isNaN(num) && isFinite(num)\n}\n\nexport const capitalize = <T extends string>(str: T): Capitalize<T> => {\n return (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>\n}\n\nexport namespace Schema {\n const Text = Zod.string().trim().min(1)\n\n const TextNullable = Zod.string()\n .trim()\n .transform((val) => (isEmpty(val) ? null : val))\n}\n"],"mappings":"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","names":["Schema"]}
1
+ {"version":3,"sources":["../src/string.ts"],"sourcesContent":["import { UnknownRecord } from 'type-fest'\nimport * as Arrays from '@bessemer/cornerstone/array'\nimport * as Objects from '@bessemer/cornerstone/object'\nimport Zod from 'zod'\n\nexport const isString = (value: any): value is string => {\n return typeof value === 'string'\n}\n\nexport const isEmpty = (value: string): boolean => {\n return value.length === 0\n}\n\nexport const isEmptyOrNil = (value: string | null | undefined): boolean => {\n if (Objects.isNil(value)) {\n return true\n }\n\n return isEmpty(value)\n}\n\nexport const emptyToNull = (value: string): string | null => {\n if (isEmptyOrNil(value)) {\n return null\n }\n\n return value\n}\n\nexport const isBlank = (str?: string | null): boolean => {\n const testStr = str ?? ''\n return /^\\s*$/.test(testStr)\n}\n\nexport type StringSplitResult = { selection: string; separator: string; rest: string } | { selection: null; separator: null; rest: string }\n\nexport const splitFirst = (str: string, splitter: string | RegExp): StringSplitResult => {\n if (isString(splitter)) {\n const results = str.split(splitter)\n if (results.length === 1) {\n return { selection: null, separator: null, rest: str }\n }\n\n return { selection: results[0]!, separator: splitter, rest: Arrays.rest(results).join(splitter) }\n } else {\n const match = splitter.exec(str)\n\n if (!match) {\n return { selection: null, separator: null, rest: str }\n }\n\n const matchIndex = match.index\n const beforeMatch = str.slice(0, matchIndex)\n const afterMatch = str.slice(matchIndex + match[0].length)\n const separator = match[0]\n return { selection: beforeMatch, separator, rest: afterMatch }\n }\n}\n\nexport const splitLast = (str: string, splitter: string | RegExp): StringSplitResult => {\n if (isString(splitter)) {\n const results = str.split(splitter)\n if (results.length === 1) {\n return { selection: null, separator: null, rest: str }\n }\n\n return { selection: results[results.length - 1]!, separator: splitter, rest: results.slice(0, results.length - 1).join(splitter) }\n } else {\n if (!splitter.global) {\n splitter = new RegExp(splitter.source, splitter.flags + 'g')\n }\n\n const matches = Array.from(str.matchAll(splitter))\n\n if (matches.length === 0) {\n return { selection: null, separator: null, rest: str }\n }\n\n // Use the last match\n const lastMatch = matches[matches.length - 1]!\n const matchIndex = lastMatch.index!\n const separator = lastMatch[0]!\n const beforeMatch = str.slice(0, matchIndex)\n const afterMatch = str.slice(matchIndex + separator.length)\n\n return {\n selection: afterMatch,\n separator: separator,\n rest: beforeMatch,\n }\n }\n}\n\nexport const splitLastRegex = (str: string, regex: RegExp): StringSplitResult => {\n // Find the last match using regex lastIndex\n let lastMatch: RegExpExecArray | null = null\n let match\n\n while ((match = regex.exec(str)) !== null) {\n lastMatch = match\n }\n\n if (!lastMatch) {\n return { selection: null, separator: null, rest: str }\n }\n\n const matchIndex = lastMatch.index!\n const separator = lastMatch[0]\n const beforeMatch = str.slice(0, matchIndex)\n const afterMatch = str.slice(matchIndex + separator.length)\n\n return {\n selection: afterMatch,\n separator,\n rest: beforeMatch,\n }\n}\n\nexport const splitAt = (str: string, index: number): [string, string] => {\n return [str.slice(0, index), str.slice(index)] as const\n}\n\nexport const removeStart = (string: string, substring: string): string => {\n if (!string.startsWith(substring)) {\n return string\n }\n\n return string.slice(substring.length)\n}\n\nexport const removeEnd = (string: string, substring: string): string => {\n if (!string.endsWith(substring)) {\n return string\n }\n\n return string.slice(0, -substring.length)\n}\n\nexport const mostCentralOccurrence = (str: string, substr: string): number | null => {\n const occurrences: number[] = []\n let index = str.indexOf(substr)\n\n while (index !== -1) {\n occurrences.push(index)\n index = str.indexOf(substr, index + 1)\n }\n\n if (occurrences.length === 0) {\n return null\n }\n\n const center = str.length / 2\n\n let closestIndex = occurrences[0]!\n let minDistance = Math.abs(center - closestIndex)\n\n for (let i = 1; i < occurrences.length; i++) {\n const distance = Math.abs(center - occurrences[i]!)\n if (distance < minDistance) {\n minDistance = distance\n closestIndex = occurrences[i]!\n }\n }\n\n return closestIndex\n}\n\nexport const replacePlaceholders = (string: string, parameters: UnknownRecord, getParamPlaceholder = (paramName: string) => `{{${paramName}}}`) => {\n return Object.entries(parameters).reduce(\n (intermediateString, [paramName, paramValue]) => intermediateString.replaceAll(getParamPlaceholder(paramName), `${paramValue}`),\n string\n )\n}\n\nexport const padStart = (str: string, length: number, chars: string): string => {\n if (str.length >= length) {\n return str\n }\n\n const padLength = length - str.length\n const padString = chars.repeat(Math.ceil(padLength / chars.length))\n\n return padString.slice(0, padLength) + str\n}\n\nexport const padEnd = (str: string, length: number, chars: string): string => {\n if (str.length >= length) {\n return str\n }\n\n const padLength = length - str.length\n const padString = chars.repeat(Math.ceil(padLength / chars.length))\n\n return str + padString.slice(0, padLength)\n}\n\nexport const isNumber = (value: string): boolean => {\n if (value.trim() === '') {\n return false\n }\n\n const num = Number(value)\n return !isNaN(num) && isFinite(num)\n}\n\nexport const capitalize = <T extends string>(str: T): Capitalize<T> => {\n return (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>\n}\n\nexport namespace Schema {\n const Text = Zod.string().trim().min(1)\n\n const TextNullable = Zod.string()\n .trim()\n .transform((val) => (isEmpty(val) ? null : val))\n}\n"],"mappings":"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","names":["Schema"]}
package/dist/tag.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../src/tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAkB,MAAM,iCAAiC,CAAA;AAI3E,MAAM,MAAM,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAA;AAEzE,MAAM,MAAM,GAAG,CAAC,QAAQ,GAAG,OAAO,IAAI;IACpC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvB,KAAK,EAAE,QAAQ,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,KAAK,EAAE,CAAC,CAAA;IACR,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAG,GAAG,CAAC,CAAC,CAKxD,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC;;;CAKlD,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAGzC,CAAA;AAEF,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAA6B,CAAA;AAErE,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;AAEjE,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAG,cAMtD,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,QAAQ,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,KAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAEhG,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,KAAG,KAAK,CAAC,CAAC,CAW1G,CAAA"}
1
+ {"version":3,"file":"tag.d.ts","sourceRoot":"","sources":["../src/tag.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAExD,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAE7D,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAI3D,MAAM,MAAM,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAA;AAEzE,MAAM,MAAM,GAAG,CAAC,QAAQ,GAAG,OAAO,IAAI;IACpC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA;IACvB,KAAK,EAAE,QAAQ,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;IAC3B,KAAK,EAAE,CAAC,CAAA;IACR,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,GAAG,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAG,GAAG,CAAC,CAAC,CAKxD,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC;;;CAKlD,CAAA;AAED,eAAO,MAAM,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAGzC,CAAA;AAEF,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAwC,CAAA;AAEhF,MAAM,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAA;AAEjE,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAG,cAMtD,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,QAAQ,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,KAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAEhG,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,KAAG,KAAK,CAAC,CAAC,CAW1G,CAAA"}
package/dist/tag.js CHANGED
@@ -1,8 +1,8 @@
1
1
  // src/tag.ts
2
2
  import * as Comparators from "@bessemer/cornerstone/comparator";
3
- import { fromComparator } from "@bessemer/cornerstone/equalitor";
4
- import { equalWith, isEmpty, sortWith } from "@bessemer/cornerstone/array";
5
- import { properPowerSet } from "@bessemer/cornerstone/set";
3
+ import * as Equalitors from "@bessemer/cornerstone/equalitor";
4
+ import * as Arrays from "@bessemer/cornerstone/array";
5
+ import * as Sets from "@bessemer/cornerstone/set";
6
6
  var tag = (type, value2) => {
7
7
  return {
8
8
  type,
@@ -12,27 +12,27 @@ var tag = (type, value2) => {
12
12
  var value = (value2, tags) => {
13
13
  return {
14
14
  value: value2,
15
- tags: sortWith(tags, CompareBy)
15
+ tags: Arrays.sortWith(tags, CompareBy)
16
16
  };
17
17
  };
18
18
  var CompareBy = Comparators.aggregate([
19
19
  Comparators.compareBy((it) => it.type, Comparators.natural()),
20
20
  Comparators.compareBy((it) => JSON.stringify(it.value), Comparators.natural())
21
21
  ]);
22
- var EqualBy = fromComparator(CompareBy);
22
+ var EqualBy = Equalitors.fromComparator(CompareBy);
23
23
  var serializeTags = (tags) => {
24
- const serializedTags = sortWith(tags, CompareBy).map(({ type, value: value2 }) => `${type}:${JSON.stringify(value2)}`).join(".");
24
+ const serializedTags = Arrays.sortWith(tags, CompareBy).map(({ type, value: value2 }) => `${type}:${JSON.stringify(value2)}`).join(".");
25
25
  return serializedTags;
26
26
  };
27
27
  var resolve = (values, tags) => {
28
28
  return resolveBy(values, (it) => it.tags, tags);
29
29
  };
30
30
  var resolveBy = (values, mapper, tags) => {
31
- const resolvedValues = properPowerSet(tags).flatMap((tags2) => {
32
- return values.filter((it) => equalWith(mapper(it), tags2, EqualBy));
31
+ const resolvedValues = Sets.properPowerSet(tags).flatMap((tags2) => {
32
+ return values.filter((it) => Arrays.equalWith(mapper(it), tags2, EqualBy));
33
33
  });
34
- if (isEmpty(resolvedValues)) {
35
- const defaultValues = values.filter((it) => isEmpty(mapper(it)));
34
+ if (Arrays.isEmpty(resolvedValues)) {
35
+ const defaultValues = values.filter((it) => Arrays.isEmpty(mapper(it)));
36
36
  return defaultValues;
37
37
  }
38
38
  return resolvedValues.reverse();
package/dist/tag.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/tag.ts"],"sourcesContent":["import { TaggedType } from '@bessemer/cornerstone/types'\nimport * as Comparators from '@bessemer/cornerstone/comparator'\nimport { Comparator } from '@bessemer/cornerstone/comparator'\nimport { Equalitor, fromComparator } from '@bessemer/cornerstone/equalitor'\nimport { equalWith, isEmpty, sortWith } from '@bessemer/cornerstone/array'\nimport { properPowerSet } from '@bessemer/cornerstone/set'\n\nexport type TagType<DataType> = TaggedType<string, ['TagType', DataType]>\n\nexport type Tag<DataType = unknown> = {\n type: TagType<DataType>\n value: DataType\n}\n\nexport type TaggedValue<T> = {\n value: T\n tags: Array<Tag>\n}\n\nexport const tag = <T>(type: TagType<T>, value: T): Tag<T> => {\n return {\n type,\n value,\n }\n}\n\nexport const value = <T>(value: T, tags: Array<Tag>) => {\n return {\n value,\n tags: sortWith(tags, CompareBy),\n }\n}\n\nexport const CompareBy: Comparator<Tag<any>> = Comparators.aggregate([\n Comparators.compareBy((it) => it.type, Comparators.natural()),\n Comparators.compareBy((it) => JSON.stringify(it.value), Comparators.natural()),\n])\n\nexport const EqualBy: Equalitor<Tag<any>> = fromComparator(CompareBy)\n\nexport type SerializedTags = TaggedType<string, 'SerializedTags'>\n\nexport const serializeTags = <T>(tags: Array<Tag<T>>): SerializedTags => {\n const serializedTags: SerializedTags = sortWith(tags, CompareBy)\n .map(({ type, value }) => `${type}:${JSON.stringify(value)}`)\n .join('.')\n\n return serializedTags\n}\n\nexport const resolve = <T>(values: Array<TaggedValue<T>>, tags: Array<Tag>): Array<TaggedValue<T>> => {\n return resolveBy(values, (it) => it.tags, tags)\n}\n\nexport const resolveBy = <T>(values: Array<T>, mapper: (value: T) => Array<Tag>, tags: Array<Tag>): Array<T> => {\n const resolvedValues = properPowerSet(tags).flatMap((tags) => {\n return values.filter((it) => equalWith(mapper(it), tags, EqualBy))\n })\n\n if (isEmpty(resolvedValues)) {\n const defaultValues = values.filter((it) => isEmpty(mapper(it)))\n return defaultValues\n }\n\n return resolvedValues.reverse()\n}\n"],"mappings":";AACA,YAAY,iBAAiB;AAE7B,SAAoB,sBAAsB;AAC1C,SAAS,WAAW,SAAS,gBAAgB;AAC7C,SAAS,sBAAsB;AAcxB,IAAM,MAAM,CAAI,MAAkBA,WAAqB;AAC5D,SAAO;AAAA,IACL;AAAA,IACA,OAAAA;AAAA,EACF;AACF;AAEO,IAAM,QAAQ,CAAIA,QAAU,SAAqB;AACtD,SAAO;AAAA,IACL,OAAAA;AAAA,IACA,MAAM,SAAS,MAAM,SAAS;AAAA,EAChC;AACF;AAEO,IAAM,YAA8C,sBAAU;AAAA,EACvD,sBAAU,CAAC,OAAO,GAAG,MAAkB,oBAAQ,CAAC;AAAA,EAChD,sBAAU,CAAC,OAAO,KAAK,UAAU,GAAG,KAAK,GAAe,oBAAQ,CAAC;AAC/E,CAAC;AAEM,IAAM,UAA+B,eAAe,SAAS;AAI7D,IAAM,gBAAgB,CAAI,SAAwC;AACvE,QAAM,iBAAiC,SAAS,MAAM,SAAS,EAC5D,IAAI,CAAC,EAAE,MAAM,OAAAA,OAAM,MAAM,GAAG,IAAI,IAAI,KAAK,UAAUA,MAAK,CAAC,EAAE,EAC3D,KAAK,GAAG;AAEX,SAAO;AACT;AAEO,IAAM,UAAU,CAAI,QAA+B,SAA4C;AACpG,SAAO,UAAU,QAAQ,CAAC,OAAO,GAAG,MAAM,IAAI;AAChD;AAEO,IAAM,YAAY,CAAI,QAAkB,QAAkC,SAA+B;AAC9G,QAAM,iBAAiB,eAAe,IAAI,EAAE,QAAQ,CAACC,UAAS;AAC5D,WAAO,OAAO,OAAO,CAAC,OAAO,UAAU,OAAO,EAAE,GAAGA,OAAM,OAAO,CAAC;AAAA,EACnE,CAAC;AAED,MAAI,QAAQ,cAAc,GAAG;AAC3B,UAAM,gBAAgB,OAAO,OAAO,CAAC,OAAO,QAAQ,OAAO,EAAE,CAAC,CAAC;AAC/D,WAAO;AAAA,EACT;AAEA,SAAO,eAAe,QAAQ;AAChC;","names":["value","tags"]}
1
+ {"version":3,"sources":["../src/tag.ts"],"sourcesContent":["import { TaggedType } from '@bessemer/cornerstone/types'\nimport * as Comparators from '@bessemer/cornerstone/comparator'\nimport { Comparator } from '@bessemer/cornerstone/comparator'\nimport * as Equalitors from '@bessemer/cornerstone/equalitor'\nimport { Equalitor } from '@bessemer/cornerstone/equalitor'\nimport * as Arrays from '@bessemer/cornerstone/array'\nimport * as Sets from '@bessemer/cornerstone/set'\n\nexport type TagType<DataType> = TaggedType<string, ['TagType', DataType]>\n\nexport type Tag<DataType = unknown> = {\n type: TagType<DataType>\n value: DataType\n}\n\nexport type TaggedValue<T> = {\n value: T\n tags: Array<Tag>\n}\n\nexport const tag = <T>(type: TagType<T>, value: T): Tag<T> => {\n return {\n type,\n value,\n }\n}\n\nexport const value = <T>(value: T, tags: Array<Tag>) => {\n return {\n value,\n tags: Arrays.sortWith(tags, CompareBy),\n }\n}\n\nexport const CompareBy: Comparator<Tag<any>> = Comparators.aggregate([\n Comparators.compareBy((it) => it.type, Comparators.natural()),\n Comparators.compareBy((it) => JSON.stringify(it.value), Comparators.natural()),\n])\n\nexport const EqualBy: Equalitor<Tag<any>> = Equalitors.fromComparator(CompareBy)\n\nexport type SerializedTags = TaggedType<string, 'SerializedTags'>\n\nexport const serializeTags = <T>(tags: Array<Tag<T>>): SerializedTags => {\n const serializedTags: SerializedTags = Arrays.sortWith(tags, CompareBy)\n .map(({ type, value }) => `${type}:${JSON.stringify(value)}`)\n .join('.')\n\n return serializedTags\n}\n\nexport const resolve = <T>(values: Array<TaggedValue<T>>, tags: Array<Tag>): Array<TaggedValue<T>> => {\n return resolveBy(values, (it) => it.tags, tags)\n}\n\nexport const resolveBy = <T>(values: Array<T>, mapper: (value: T) => Array<Tag>, tags: Array<Tag>): Array<T> => {\n const resolvedValues = Sets.properPowerSet(tags).flatMap((tags) => {\n return values.filter((it) => Arrays.equalWith(mapper(it), tags, EqualBy))\n })\n\n if (Arrays.isEmpty(resolvedValues)) {\n const defaultValues = values.filter((it) => Arrays.isEmpty(mapper(it)))\n return defaultValues\n }\n\n return resolvedValues.reverse()\n}\n"],"mappings":";AACA,YAAY,iBAAiB;AAE7B,YAAY,gBAAgB;AAE5B,YAAY,YAAY;AACxB,YAAY,UAAU;AAcf,IAAM,MAAM,CAAI,MAAkBA,WAAqB;AAC5D,SAAO;AAAA,IACL;AAAA,IACA,OAAAA;AAAA,EACF;AACF;AAEO,IAAM,QAAQ,CAAIA,QAAU,SAAqB;AACtD,SAAO;AAAA,IACL,OAAAA;AAAA,IACA,MAAa,gBAAS,MAAM,SAAS;AAAA,EACvC;AACF;AAEO,IAAM,YAA8C,sBAAU;AAAA,EACvD,sBAAU,CAAC,OAAO,GAAG,MAAkB,oBAAQ,CAAC;AAAA,EAChD,sBAAU,CAAC,OAAO,KAAK,UAAU,GAAG,KAAK,GAAe,oBAAQ,CAAC;AAC/E,CAAC;AAEM,IAAM,UAA0C,0BAAe,SAAS;AAIxE,IAAM,gBAAgB,CAAI,SAAwC;AACvE,QAAM,iBAAwC,gBAAS,MAAM,SAAS,EACnE,IAAI,CAAC,EAAE,MAAM,OAAAA,OAAM,MAAM,GAAG,IAAI,IAAI,KAAK,UAAUA,MAAK,CAAC,EAAE,EAC3D,KAAK,GAAG;AAEX,SAAO;AACT;AAEO,IAAM,UAAU,CAAI,QAA+B,SAA4C;AACpG,SAAO,UAAU,QAAQ,CAAC,OAAO,GAAG,MAAM,IAAI;AAChD;AAEO,IAAM,YAAY,CAAI,QAAkB,QAAkC,SAA+B;AAC9G,QAAM,iBAAsB,oBAAe,IAAI,EAAE,QAAQ,CAACC,UAAS;AACjE,WAAO,OAAO,OAAO,CAAC,OAAc,iBAAU,OAAO,EAAE,GAAGA,OAAM,OAAO,CAAC;AAAA,EAC1E,CAAC;AAED,MAAW,eAAQ,cAAc,GAAG;AAClC,UAAM,gBAAgB,OAAO,OAAO,CAAC,OAAc,eAAQ,OAAO,EAAE,CAAC,CAAC;AACtE,WAAO;AAAA,EACT;AAEA,SAAO,eAAe,QAAQ;AAChC;","names":["value","tags"]}
@@ -1,21 +1,21 @@
1
- import { TimeZoneId } from '@bessemer/cornerstone/temporal/time-zone-id';
2
- import { DurationLike } from '@bessemer/cornerstone/temporal/duration';
3
- import { Instant, InstantLike } from '@bessemer/cornerstone/temporal/instant';
1
+ import * as TimeZoneIds from '@bessemer/cornerstone/temporal/time-zone-id';
2
+ import * as Durations from '@bessemer/cornerstone/temporal/duration';
3
+ import * as Instants from '@bessemer/cornerstone/temporal/instant';
4
4
  export interface Clock {
5
- readonly zone: TimeZoneId;
6
- withZone: (zone: TimeZoneId) => Clock;
7
- instant: () => Instant;
5
+ readonly zone: TimeZoneIds.TimeZoneId;
6
+ withZone: (zone: TimeZoneIds.TimeZoneId) => Clock;
7
+ instant: () => Instants.Instant;
8
8
  }
9
9
  declare class SystemClock implements Clock {
10
- readonly zone: TimeZoneId;
11
- constructor(zone: TimeZoneId);
12
- instant(): Instant;
13
- withZone(zone: TimeZoneId): Clock;
10
+ readonly zone: TimeZoneIds.TimeZoneId;
11
+ constructor(zone: TimeZoneIds.TimeZoneId);
12
+ instant(): Instants.Instant;
13
+ withZone(zone: TimeZoneIds.TimeZoneId): Clock;
14
14
  }
15
15
  export declare const SystemUtc: SystemClock;
16
16
  export declare const Default: SystemClock;
17
- export declare const system: (zone?: TimeZoneId) => Clock;
18
- export declare const fixed: (fixedInstant: InstantLike, zone?: TimeZoneId) => Clock;
19
- export declare const offset: (clock: Clock, offset: DurationLike) => Clock;
17
+ export declare const system: (zone?: TimeZoneIds.TimeZoneId) => Clock;
18
+ export declare const fixed: (fixedInstant: Instants.InstantLike, zone?: TimeZoneIds.TimeZoneId) => Clock;
19
+ export declare const offset: (clock: Clock, offset: Durations.DurationLike) => Clock;
20
20
  export {};
21
21
  //# sourceMappingURL=clock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/temporal/clock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAO,MAAM,6CAA6C,CAAA;AAC7E,OAAO,EAAY,YAAY,EAAgC,MAAM,yCAAyC,CAAA;AAC9G,OAAO,EAAuB,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AAGlG,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IAEzB,QAAQ,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,KAAK,CAAA;IAErC,OAAO,EAAE,MAAM,OAAO,CAAA;CACvB;AAED,cAAM,WAAY,YAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,UAAU;gBAAhB,IAAI,EAAE,UAAU;IAErC,OAAO,IAAI,OAAO;IAIlB,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,KAAK;CAOlC;AAsCD,eAAO,MAAM,SAAS,aAAuB,CAAA;AAC7C,eAAO,MAAM,OAAO,aAAY,CAAA;AAEhC,eAAO,MAAM,MAAM,GAAI,OAAM,UAAgB,KAAG,KAM/C,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,cAAc,WAAW,EAAE,OAAM,UAAgB,KAAG,KAEzE,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,QAAQ,YAAY,KAAG,KAM3D,CAAA"}
1
+ {"version":3,"file":"clock.d.ts","sourceRoot":"","sources":["../../src/temporal/clock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,6CAA6C,CAAA;AAC1E,OAAO,KAAK,SAAS,MAAM,yCAAyC,CAAA;AACpE,OAAO,KAAK,QAAQ,MAAM,wCAAwC,CAAA;AAGlE,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU,CAAA;IAErC,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU,KAAK,KAAK,CAAA;IAEjD,OAAO,EAAE,MAAM,QAAQ,CAAC,OAAO,CAAA;CAChC;AAED,cAAM,WAAY,YAAW,KAAK;IACpB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU;gBAA5B,IAAI,EAAE,WAAW,CAAC,UAAU;IAEjD,OAAO,IAAI,QAAQ,CAAC,OAAO;IAI3B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,UAAU,GAAG,KAAK;CAO9C;AAsCD,eAAO,MAAM,SAAS,aAAmC,CAAA;AACzD,eAAO,MAAM,OAAO,aAAY,CAAA;AAEhC,eAAO,MAAM,MAAM,GAAI,OAAM,WAAW,CAAC,UAA4B,KAAG,KAMvE,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,cAAc,QAAQ,CAAC,WAAW,EAAE,OAAM,WAAW,CAAC,UAA4B,KAAG,KAE1G,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,QAAQ,SAAS,CAAC,YAAY,KAAG,KAMrE,CAAA"}