@bessemer/cornerstone 0.5.51 → 0.5.53

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 (123) hide show
  1. package/dist/array.d.ts.map +1 -1
  2. package/dist/array.js +16 -13
  3. package/dist/array.js.map +1 -1
  4. package/dist/assertion.d.ts +6 -0
  5. package/dist/assertion.d.ts.map +1 -1
  6. package/dist/assertion.js +43 -11
  7. package/dist/assertion.js.map +1 -1
  8. package/dist/async.d.ts.map +1 -1
  9. package/dist/async.js +4 -3
  10. package/dist/async.js.map +1 -1
  11. package/dist/cache.d.ts.map +1 -1
  12. package/dist/cache.js +22 -17
  13. package/dist/cache.js.map +1 -1
  14. package/dist/combinable.d.ts.map +1 -1
  15. package/dist/combinable.js +5 -4
  16. package/dist/combinable.js.map +1 -1
  17. package/dist/comparator.d.ts.map +1 -1
  18. package/dist/comparator.js +8 -5
  19. package/dist/comparator.js.map +1 -1
  20. package/dist/content.d.ts +9 -9
  21. package/dist/content.d.ts.map +1 -1
  22. package/dist/content.js +18 -13
  23. package/dist/content.js.map +1 -1
  24. package/dist/date.d.ts.map +1 -1
  25. package/dist/date.js +2 -2
  26. package/dist/date.js.map +1 -1
  27. package/dist/either.d.ts +0 -1
  28. package/dist/either.d.ts.map +1 -1
  29. package/dist/either.js +2 -3
  30. package/dist/either.js.map +1 -1
  31. package/dist/error-event.d.ts +11 -5
  32. package/dist/error-event.d.ts.map +1 -1
  33. package/dist/error-event.js +43 -11
  34. package/dist/error-event.js.map +1 -1
  35. package/dist/error.js +2 -2
  36. package/dist/error.js.map +1 -1
  37. package/dist/expression/array-expression.js +3 -3
  38. package/dist/expression/array-expression.js.map +1 -1
  39. package/dist/expression/core-expression.d.ts +6 -6
  40. package/dist/expression/core-expression.d.ts.map +1 -1
  41. package/dist/expression/core-expression.js +9 -6
  42. package/dist/expression/core-expression.js.map +1 -1
  43. package/dist/expression/expression-evaluator.js +3 -3
  44. package/dist/expression/expression-evaluator.js.map +1 -1
  45. package/dist/expression/expression-mapper.js +3 -3
  46. package/dist/expression/expression-mapper.js.map +1 -1
  47. package/dist/expression/expression.d.ts +5 -6
  48. package/dist/expression/expression.d.ts.map +1 -1
  49. package/dist/expression/expression.js +2 -2
  50. package/dist/expression/expression.js.map +1 -1
  51. package/dist/expression/internal.d.ts.map +1 -1
  52. package/dist/expression/internal.js +3 -3
  53. package/dist/expression/internal.js.map +1 -1
  54. package/dist/expression/numeric-expression.d.ts +5 -5
  55. package/dist/expression/numeric-expression.d.ts.map +1 -1
  56. package/dist/expression/numeric-expression.js +11 -10
  57. package/dist/expression/numeric-expression.js.map +1 -1
  58. package/dist/hex-code.d.ts +2 -2
  59. package/dist/hex-code.d.ts.map +1 -1
  60. package/dist/hex-code.js +1 -1
  61. package/dist/hex-code.js.map +1 -1
  62. package/dist/json.d.ts.map +1 -1
  63. package/dist/json.js +3 -3
  64. package/dist/json.js.map +1 -1
  65. package/dist/logger.d.ts.map +1 -1
  66. package/dist/logger.js +10 -9
  67. package/dist/logger.js.map +1 -1
  68. package/dist/misc.d.ts.map +1 -1
  69. package/dist/misc.js +4 -3
  70. package/dist/misc.js.map +1 -1
  71. package/dist/patch.d.ts.map +1 -1
  72. package/dist/patch.js +6 -5
  73. package/dist/patch.js.map +1 -1
  74. package/dist/property.d.ts.map +1 -1
  75. package/dist/property.js +5 -4
  76. package/dist/property.js.map +1 -1
  77. package/dist/range.d.ts.map +1 -1
  78. package/dist/range.js +4 -3
  79. package/dist/range.js.map +1 -1
  80. package/dist/reference.d.ts +1 -2
  81. package/dist/reference.d.ts.map +1 -1
  82. package/dist/reference.js +13 -10
  83. package/dist/reference.js.map +1 -1
  84. package/dist/resource.d.ts.map +1 -1
  85. package/dist/resource.js +3 -2
  86. package/dist/resource.js.map +1 -1
  87. package/dist/result.d.ts.map +1 -1
  88. package/dist/result.js +6 -5
  89. package/dist/result.js.map +1 -1
  90. package/dist/retry.d.ts.map +1 -1
  91. package/dist/retry.js +14 -9
  92. package/dist/retry.js.map +1 -1
  93. package/dist/rich-text.js +2 -2
  94. package/dist/rich-text.js.map +1 -1
  95. package/dist/signature.d.ts.map +1 -1
  96. package/dist/signature.js +6 -4
  97. package/dist/signature.js.map +1 -1
  98. package/dist/sql/sql-expression-parser.d.ts.map +1 -1
  99. package/dist/sql/sql-expression-parser.js +18 -14
  100. package/dist/sql/sql-expression-parser.js.map +1 -1
  101. package/dist/store.d.ts.map +1 -1
  102. package/dist/store.js +9 -7
  103. package/dist/store.js.map +1 -1
  104. package/dist/string.d.ts.map +1 -1
  105. package/dist/string.js +2 -2
  106. package/dist/string.js.map +1 -1
  107. package/dist/tag.d.ts.map +1 -1
  108. package/dist/tag.js +12 -12
  109. package/dist/tag.js.map +1 -1
  110. package/dist/ulid.d.ts.map +1 -1
  111. package/dist/ulid.js +4 -3
  112. package/dist/ulid.js.map +1 -1
  113. package/dist/uri.d.ts.map +1 -1
  114. package/dist/uri.js +52 -50
  115. package/dist/uri.js.map +1 -1
  116. package/dist/url.d.ts +1 -2
  117. package/dist/url.d.ts.map +1 -1
  118. package/dist/url.js +28 -19
  119. package/dist/url.js.map +1 -1
  120. package/dist/uuid.d.ts.map +1 -1
  121. package/dist/uuid.js +7 -5
  122. package/dist/uuid.js.map +1 -1
  123. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/comparator.ts"],"sourcesContent":["import { Dates, Maths, Objects, Strings } from '@bessemer/cornerstone'\nimport { BasicType } from '@bessemer/cornerstone/types'\n\nexport type Comparator<T> = (first: T, second: T) => number\n\nexport const aggregate = <T>(comparators: Array<Comparator<T>>): Comparator<T> => {\n return (first, second) => {\n if (first === second) {\n return 0\n }\n\n for (const comparator of comparators) {\n const result = comparator(first, second)\n if (result !== 0) {\n return result\n }\n }\n\n return 0\n }\n}\n\nexport const compareBy = <T, N>(mapper: (element: T) => N, comparator: Comparator<N>): Comparator<T> => {\n return (first, second) => comparator(mapper(first), mapper(second))\n}\n\nexport const reverse = <T>(comparator: Comparator<T>): Comparator<T> => {\n return (first, second) => -comparator(first, second)\n}\n\nexport const trueFirst = (): Comparator<boolean> => {\n return (first, second) => natural()(first ? 1 : 0, second ? 1 : 0)\n}\n\nexport const natural = (): Comparator<BasicType | null> => {\n // Comparing by nulls first allows us to assume the elements are non-null for future comparisons\n return aggregate([\n nullsLast(),\n (first, second) => {\n if (Strings.isString(first) && Strings.isString(second)) {\n return first.localeCompare(second)\n } else if (Maths.isNumber(first) && Maths.isNumber(second)) {\n return first! - second!\n } else if (Dates.isDate(first) && Dates.isDate(second)) {\n return first.getTime() - second.getTime()\n } else if (Objects.isBoolean(first) && Objects.isBoolean(second)) {\n if(first !== second) {\n return second ? 1 : 0\n }\n else {\n return 0\n }\n } {\n return 0\n }\n },\n ])\n}\n\nexport function matchedFirst<T>(target: T): Comparator<T | null> {\n return aggregate([\n nullsLast(),\n (first, second) => {\n if (first === target && second !== target) {\n return -1\n } else if (first !== target && second === target) {\n return 1\n } else {\n return 0\n }\n },\n ])\n}\n\nexport const nullsLast = <T>(): Comparator<T> => {\n return (first, second) => {\n if (first === null) {\n return 1\n }\n if (second === null) {\n return -1\n }\n\n return 0\n }\n}\n"],"mappings":";AAAA,SAAS,OAAO,OAAO,SAAS,eAAe;AAKxC,IAAM,YAAY,CAAI,gBAAqD;AAChF,SAAO,CAAC,OAAO,WAAW;AACxB,QAAI,UAAU,QAAQ;AACpB,aAAO;AAAA,IACT;AAEA,eAAW,cAAc,aAAa;AACpC,YAAM,SAAS,WAAW,OAAO,MAAM;AACvC,UAAI,WAAW,GAAG;AAChB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AAEO,IAAM,YAAY,CAAO,QAA2B,eAA6C;AACtG,SAAO,CAAC,OAAO,WAAW,WAAW,OAAO,KAAK,GAAG,OAAO,MAAM,CAAC;AACpE;AAEO,IAAM,UAAU,CAAI,eAA6C;AACtE,SAAO,CAAC,OAAO,WAAW,CAAC,WAAW,OAAO,MAAM;AACrD;AAEO,IAAM,YAAY,MAA2B;AAClD,SAAO,CAAC,OAAO,WAAW,QAAQ,EAAE,QAAQ,IAAI,GAAG,SAAS,IAAI,CAAC;AACnE;AAEO,IAAM,UAAU,MAAoC;AAEzD,SAAO,UAAU;AAAA,IACf,UAAU;AAAA,IACV,CAAC,OAAO,WAAW;AACjB,UAAI,QAAQ,SAAS,KAAK,KAAK,QAAQ,SAAS,MAAM,GAAG;AACvD,eAAO,MAAM,cAAc,MAAM;AAAA,MACnC,WAAW,MAAM,SAAS,KAAK,KAAK,MAAM,SAAS,MAAM,GAAG;AAC1D,eAAO,QAAS;AAAA,MAClB,WAAW,MAAM,OAAO,KAAK,KAAK,MAAM,OAAO,MAAM,GAAG;AACtD,eAAO,MAAM,QAAQ,IAAI,OAAO,QAAQ;AAAA,MAC1C,WAAW,QAAQ,UAAU,KAAK,KAAK,QAAQ,UAAU,MAAM,GAAG;AAChE,YAAG,UAAU,QAAQ;AACnB,iBAAO,SAAS,IAAI;AAAA,QACtB,OACK;AACH,iBAAO;AAAA,QACT;AAAA,MACF;AAAE;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,aAAgB,QAAiC;AAC/D,SAAO,UAAU;AAAA,IACf,UAAU;AAAA,IACV,CAAC,OAAO,WAAW;AACjB,UAAI,UAAU,UAAU,WAAW,QAAQ;AACzC,eAAO;AAAA,MACT,WAAW,UAAU,UAAU,WAAW,QAAQ;AAChD,eAAO;AAAA,MACT,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,IAAM,YAAY,MAAwB;AAC/C,SAAO,CAAC,OAAO,WAAW;AACxB,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA,IACT;AACA,QAAI,WAAW,MAAM;AACnB,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/comparator.ts"],"sourcesContent":["import { BasicType } from '@bessemer/cornerstone/types'\nimport { isString } from '@bessemer/cornerstone/string'\nimport { isNumber } from '@bessemer/cornerstone/math'\nimport { isDate } from '@bessemer/cornerstone/date'\nimport { isBoolean } from '@bessemer/cornerstone/object'\n\nexport type Comparator<T> = (first: T, second: T) => number\n\nexport const aggregate = <T>(comparators: Array<Comparator<T>>): Comparator<T> => {\n return (first, second) => {\n if (first === second) {\n return 0\n }\n\n for (const comparator of comparators) {\n const result = comparator(first, second)\n if (result !== 0) {\n return result\n }\n }\n\n return 0\n }\n}\n\nexport const compareBy = <T, N>(mapper: (element: T) => N, comparator: Comparator<N>): Comparator<T> => {\n return (first, second) => comparator(mapper(first), mapper(second))\n}\n\nexport const reverse = <T>(comparator: Comparator<T>): Comparator<T> => {\n return (first, second) => -comparator(first, second)\n}\n\nexport const trueFirst = (): Comparator<boolean> => {\n return (first, second) => natural()(first ? 1 : 0, second ? 1 : 0)\n}\n\nexport const natural = (): Comparator<BasicType | null> => {\n // Comparing by nulls first allows us to assume the elements are non-null for future comparisons\n return aggregate([\n nullsLast(),\n (first, second) => {\n if (isString(first) && isString(second)) {\n return first.localeCompare(second)\n } else if (isNumber(first) && isNumber(second)) {\n return first! - second!\n } else if (isDate(first) && isDate(second)) {\n return first.getTime() - second.getTime()\n } else if (isBoolean(first) && isBoolean(second)) {\n if (first !== second) {\n return second ? 1 : 0\n } else {\n return 0\n }\n }\n {\n return 0\n }\n },\n ])\n}\n\nexport function matchedFirst<T>(target: T): Comparator<T | null> {\n return aggregate([\n nullsLast(),\n (first, second) => {\n if (first === target && second !== target) {\n return -1\n } else if (first !== target && second === target) {\n return 1\n } else {\n return 0\n }\n },\n ])\n}\n\nexport const nullsLast = <T>(): Comparator<T> => {\n return (first, second) => {\n if (first === null) {\n return 1\n }\n if (second === null) {\n return -1\n }\n\n return 0\n }\n}\n"],"mappings":";AACA,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AACzB,SAAS,cAAc;AACvB,SAAS,iBAAiB;AAInB,IAAM,YAAY,CAAI,gBAAqD;AAChF,SAAO,CAAC,OAAO,WAAW;AACxB,QAAI,UAAU,QAAQ;AACpB,aAAO;AAAA,IACT;AAEA,eAAW,cAAc,aAAa;AACpC,YAAM,SAAS,WAAW,OAAO,MAAM;AACvC,UAAI,WAAW,GAAG;AAChB,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AACF;AAEO,IAAM,YAAY,CAAO,QAA2B,eAA6C;AACtG,SAAO,CAAC,OAAO,WAAW,WAAW,OAAO,KAAK,GAAG,OAAO,MAAM,CAAC;AACpE;AAEO,IAAM,UAAU,CAAI,eAA6C;AACtE,SAAO,CAAC,OAAO,WAAW,CAAC,WAAW,OAAO,MAAM;AACrD;AAEO,IAAM,YAAY,MAA2B;AAClD,SAAO,CAAC,OAAO,WAAW,QAAQ,EAAE,QAAQ,IAAI,GAAG,SAAS,IAAI,CAAC;AACnE;AAEO,IAAM,UAAU,MAAoC;AAEzD,SAAO,UAAU;AAAA,IACf,UAAU;AAAA,IACV,CAAC,OAAO,WAAW;AACjB,UAAI,SAAS,KAAK,KAAK,SAAS,MAAM,GAAG;AACvC,eAAO,MAAM,cAAc,MAAM;AAAA,MACnC,WAAW,SAAS,KAAK,KAAK,SAAS,MAAM,GAAG;AAC9C,eAAO,QAAS;AAAA,MAClB,WAAW,OAAO,KAAK,KAAK,OAAO,MAAM,GAAG;AAC1C,eAAO,MAAM,QAAQ,IAAI,OAAO,QAAQ;AAAA,MAC1C,WAAW,UAAU,KAAK,KAAK,UAAU,MAAM,GAAG;AAChD,YAAI,UAAU,QAAQ;AACpB,iBAAO,SAAS,IAAI;AAAA,QACtB,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF;AACA;AACE,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,SAAS,aAAgB,QAAiC;AAC/D,SAAO,UAAU;AAAA,IACf,UAAU;AAAA,IACV,CAAC,OAAO,WAAW;AACjB,UAAI,UAAU,UAAU,WAAW,QAAQ;AACzC,eAAO;AAAA,MACT,WAAW,UAAU,UAAU,WAAW,QAAQ;AAChD,eAAO;AAAA,MACT,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,IAAM,YAAY,MAAwB;AAC/C,SAAO,CAAC,OAAO,WAAW;AACxB,QAAI,UAAU,MAAM;AAClB,aAAO;AAAA,IACT;AACA,QAAI,WAAW,MAAM;AACnB,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AACF;","names":[]}
package/dist/content.d.ts CHANGED
@@ -3,7 +3,7 @@ import { NominalType } from '@bessemer/cornerstone/types';
3
3
  import { AbstractApplicationContext } from '@bessemer/cornerstone/context';
4
4
  import { RichTextJson } from '@bessemer/cornerstone/rich-text';
5
5
  import { Tag } from '@bessemer/cornerstone/tag';
6
- import { ZodType } from 'zod';
6
+ import Zod, { ZodType } from 'zod';
7
7
  export type ContentSector = NominalType<string, 'ContentSector'>;
8
8
  export declare const ContentSectorSchema: ZodType<ContentSector>;
9
9
  export type ContentKey = NominalType<string, 'ContentKey'>;
@@ -12,19 +12,19 @@ export type ContentType<Data = unknown> = NominalType<string, ['ContentType', Da
12
12
  export declare const ContentTypeSchema: ZodType<ContentType>;
13
13
  export type ContentReference = Reference<'Content'>;
14
14
  type ContentDataType<Type> = Type extends ContentType<infer Data> ? Data : never;
15
- export declare const ContentDataSchema: import("zod").ZodObject<{
16
- key: ZodType<ContentKey, import("zod").ZodTypeDef, ContentKey>;
17
- type: ZodType<ContentType<unknown>, import("zod").ZodTypeDef, ContentType<unknown>>;
18
- data: import("zod").ZodUnknown;
19
- sector: import("zod").ZodNullable<ZodType<ContentSector, import("zod").ZodTypeDef, ContentSector>>;
20
- }, "strip", import("zod").ZodTypeAny, {
21
- key: string & import("@bessemer/cornerstone/types").NominalTyping<"ContentKey">;
15
+ export declare const ContentDataSchema: Zod.ZodObject<{
16
+ key: Zod.ZodType<ContentKey, Zod.ZodTypeDef, ContentKey>;
17
+ type: Zod.ZodType<ContentType<unknown>, Zod.ZodTypeDef, ContentType<unknown>>;
18
+ data: Zod.ZodUnknown;
19
+ sector: Zod.ZodNullable<Zod.ZodType<ContentSector, Zod.ZodTypeDef, ContentSector>>;
20
+ }, "strip", Zod.ZodTypeAny, {
22
21
  type: string & import("@bessemer/cornerstone/types").NominalTyping<["ContentType", unknown]>;
22
+ key: string & import("@bessemer/cornerstone/types").NominalTyping<"ContentKey">;
23
23
  sector: ContentSector | null;
24
24
  data?: unknown;
25
25
  }, {
26
- key: string & import("@bessemer/cornerstone/types").NominalTyping<"ContentKey">;
27
26
  type: string & import("@bessemer/cornerstone/types").NominalTyping<["ContentType", unknown]>;
27
+ key: string & import("@bessemer/cornerstone/types").NominalTyping<"ContentKey">;
28
28
  sector: ContentSector | null;
29
29
  data?: unknown;
30
30
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AACxF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAE1E,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,2BAA2B,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAE7B,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;AAChE,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,aAAa,CAAgB,CAAA;AAEvE,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;AAC1D,eAAO,MAAM,gBAAgB,EAAE,OAAO,CAAC,UAAU,CAAgB,CAAA;AAEjE,MAAM,MAAM,WAAW,CAAC,IAAI,GAAG,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAA;AACpF,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,WAAW,CAAgB,CAAA;AAEnE,MAAM,MAAM,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;AAEnD,KAAK,eAAe,CAAC,IAAI,IAAI,IAAI,SAAS,WAAW,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;AAEhF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAK5B,CAAA;AAEF,MAAM,MAAM,WAAW,CAAC,IAAI,SAAS,WAAW,GAAG,WAAW,EAAE,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,gBAAgB,CAAC,GAAG;IAC/H,GAAG,EAAE,UAAU,CAAA;IACf,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,sBAAsB,CAAC,OAAO,SAAS,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;AAEjF,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;AAE1E,yBAAiB,mBAAmB,CAAC;IAC5B,MAAM,OAAO,EAAE,kBAA8B,CAAA;IAC7C,MAAM,KAAK,EAAE,kBAA4B,CAAA;IACzC,MAAM,OAAO,EAAE,kBAA8B,CAAA;IAC7C,MAAM,MAAM,EAAE,kBAA6B,CAAA;IAC3C,MAAM,KAAK,EAAE,kBAA4B,CAAA;IACzC,MAAM,OAAO,EAAE,kBAA8B,CAAA;CACrD;AAED,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,YAAY,CAAU,CAAA;AAChE,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D,MAAM,WAAW,eAAe,CAAC,WAAW,SAAS,0BAA0B,GAAG,0BAA0B;IAC1G,iBAAiB,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;IAE5H,kBAAkB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;IAEpH,qBAAqB,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;CAC9H;AAED,MAAM,MAAM,iBAAiB,CAC3B,kBAAkB,SAAS,0BAA0B,GAAG,0BAA0B,EAClF,IAAI,SAAS,WAAW,GAAG,WAAW,IACpC;IACF,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;CAC3F,CAAA;AAGD,eAAO,MAAM,gBAAgB,GAAU,kBAAkB,SAAS,0BAA0B,EAC1F,SAAS,KAAK,CAAC,WAAW,CAAC,EAC3B,aAAa,KAAK,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,EACzD,SAAS,kBAAkB,KAC1B,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAa5B,CAAA;AAED,MAAM,MAAM,iBAAiB,CAAC,IAAI,SAAS,WAAW,GAAG,WAAW,EAAE,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;IAC9H,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,IAAI,SAAS,WAAW,GAAG,WAAW,EAAE,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,EAC7F,KAAK,UAAU,EACf,MAAM,IAAI,EACV,MAAM,IAAI,EACV,UAAU;IAAE,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAE,KACtD,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAS9B,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,kBAAkB,SAAS,0BAA0B,EAClF,SAAS,KAAK,CAAC,iBAAiB,CAAC,EACjC,cAAc,KAAK,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,KACzD,eAAe,CAAC,kBAAkB,CA2BpC,CAAA"}
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAa,SAAS,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAA;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAC9D,OAAO,EAAa,GAAG,EAAE,MAAM,2BAA2B,CAAA;AAC1D,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAKlC,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;AAChE,eAAO,MAAM,mBAAmB,EAAE,OAAO,CAAC,aAAa,CAAgB,CAAA;AAEvE,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;AAC1D,eAAO,MAAM,gBAAgB,EAAE,OAAO,CAAC,UAAU,CAAgB,CAAA;AAEjE,MAAM,MAAM,WAAW,CAAC,IAAI,GAAG,OAAO,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC,CAAA;AACpF,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,WAAW,CAAgB,CAAA;AAEnE,MAAM,MAAM,gBAAgB,GAAG,SAAS,CAAC,SAAS,CAAC,CAAA;AAEnD,KAAK,eAAe,CAAC,IAAI,IAAI,IAAI,SAAS,WAAW,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;AAEhF,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAK5B,CAAA;AAEF,MAAM,MAAM,WAAW,CAAC,IAAI,SAAS,WAAW,GAAG,WAAW,EAAE,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,gBAAgB,CAAC,GAAG;IAC/H,GAAG,EAAE,UAAU,CAAA;IACf,IAAI,EAAE,IAAI,CAAA;IACV,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,EAAE,aAAa,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,sBAAsB,CAAC,OAAO,SAAS,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;AAEjF,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAA;AAE1E,yBAAiB,mBAAmB,CAAC;IAC5B,MAAM,OAAO,EAAE,kBAA8B,CAAA;IAC7C,MAAM,KAAK,EAAE,kBAA4B,CAAA;IACzC,MAAM,OAAO,EAAE,kBAA8B,CAAA;IAC7C,MAAM,MAAM,EAAE,kBAA6B,CAAA;IAC3C,MAAM,KAAK,EAAE,kBAA4B,CAAA;IACzC,MAAM,OAAO,EAAE,kBAA8B,CAAA;CACrD;AAED,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,YAAY,CAAU,CAAA;AAChE,MAAM,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,eAAe,CAAC,CAAA;AAE7D,MAAM,WAAW,eAAe,CAAC,WAAW,SAAS,0BAA0B,GAAG,0BAA0B;IAC1G,iBAAiB,EAAE,CAAC,UAAU,EAAE,KAAK,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;IAE5H,kBAAkB,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;IAEpH,qBAAqB,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;CAC9H;AAED,MAAM,MAAM,iBAAiB,CAC3B,kBAAkB,SAAS,0BAA0B,GAAG,0BAA0B,EAClF,IAAI,SAAS,WAAW,GAAG,WAAW,IACpC;IACF,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAClB,SAAS,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,kBAAkB,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA;CAC3F,CAAA;AAGD,eAAO,MAAM,gBAAgB,GAAU,kBAAkB,SAAS,0BAA0B,EAC1F,SAAS,KAAK,CAAC,WAAW,CAAC,EAC3B,aAAa,KAAK,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,EACzD,SAAS,kBAAkB,KAC1B,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAa5B,CAAA;AAED,MAAM,MAAM,iBAAiB,CAAC,IAAI,SAAS,WAAW,GAAG,WAAW,EAAE,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG;IAC9H,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,IAAI,SAAS,WAAW,GAAG,WAAW,EAAE,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,EAC7F,KAAK,UAAU,EACf,MAAM,IAAI,EACV,MAAM,IAAI,EACV,UAAU;IAAE,IAAI,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,aAAa,CAAA;CAAE,KACtD,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAS9B,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,kBAAkB,SAAS,0BAA0B,EAClF,SAAS,KAAK,CAAC,iBAAiB,CAAC,EACjC,cAAc,KAAK,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,KACzD,eAAe,CAAC,kBAAkB,CA2BpC,CAAA"}
package/dist/content.js CHANGED
@@ -1,5 +1,10 @@
1
1
  // src/content.ts
2
- import { Arrays, Objects, References, Tags, Ulids, Zod } from "@bessemer/cornerstone";
2
+ import { reference } from "@bessemer/cornerstone/reference";
3
+ import { resolveBy } from "@bessemer/cornerstone/tag";
4
+ import Zod from "zod";
5
+ import { contains, first, groupBy } from "@bessemer/cornerstone/array";
6
+ import { isNil, isPresent } from "@bessemer/cornerstone/object";
7
+ import { generateString } from "@bessemer/cornerstone/ulid";
3
8
  var ContentSectorSchema = Zod.string();
4
9
  var ContentKeySchema = Zod.string();
5
10
  var ContentTypeSchema = Zod.string();
@@ -20,10 +25,10 @@ var ContentDisplayTypes;
20
25
  })(ContentDisplayTypes || (ContentDisplayTypes = {}));
21
26
  var TextContentType = "Text";
22
27
  var normalizeContent = async (content, normalizers, context) => {
23
- const groupedContent = Arrays.groupBy(content, (it) => it.type);
28
+ const groupedContent = groupBy(content, (it) => it.type);
24
29
  const normalizedGroupedContent = Object.entries(groupedContent).map(async ([type, values]) => {
25
30
  const normalizer = normalizers.find((it) => it.type === type);
26
- if (Objects.isNil(normalizer)) {
31
+ if (isNil(normalizer)) {
27
32
  return values;
28
33
  }
29
34
  return await normalizer.normalize(values, context);
@@ -33,7 +38,7 @@ var normalizeContent = async (content, normalizers, context) => {
33
38
  };
34
39
  var staticData = (key, type, data, options) => {
35
40
  return {
36
- reference: References.reference(Ulids.generateString(), "Content"),
41
+ reference: reference(generateString(), "Content"),
37
42
  key,
38
43
  type,
39
44
  data,
@@ -44,22 +49,22 @@ var staticData = (key, type, data, options) => {
44
49
  var staticProvider = (content, normalizers) => {
45
50
  return {
46
51
  async fetchContentByIds(references, context) {
47
- const matchingContent = content.filter((it) => Arrays.contains(references, it.reference));
52
+ const matchingContent = content.filter((it) => contains(references, it.reference));
48
53
  return normalizeContent(matchingContent, normalizers ?? [], context);
49
54
  },
50
55
  async fetchContentByKeys(keys, tags, context) {
51
- const matchingContent = content.filter((it) => Arrays.contains(keys, it.key));
52
- const resolvedContent = Object.values(Arrays.groupBy(matchingContent, (it) => it.key)).map((it) => {
53
- const resolvedContent2 = Tags.resolveBy(it, (it2) => it2.tags ?? [], tags);
54
- return Arrays.first(resolvedContent2);
56
+ const matchingContent = content.filter((it) => contains(keys, it.key));
57
+ const resolvedContent = Object.values(groupBy(matchingContent, (it) => it.key)).map((it) => {
58
+ const resolvedContent2 = resolveBy(it, (it2) => it2.tags ?? [], tags);
59
+ return first(resolvedContent2);
55
60
  });
56
61
  return normalizeContent(resolvedContent, normalizers ?? [], context);
57
62
  },
58
63
  async fetchContentBySectors(sectors, tags, context) {
59
- const matchingContent = content.filter((it) => Objects.isPresent(it.sector)).filter((it) => Arrays.contains(sectors, it.sector));
60
- const resolvedContent = Object.values(Arrays.groupBy(matchingContent, (it) => it.key)).map((it) => {
61
- const resolvedContent2 = Tags.resolveBy(it, (it2) => it2.tags ?? [], tags);
62
- return Arrays.first(resolvedContent2);
64
+ const matchingContent = content.filter((it) => isPresent(it.sector)).filter((it) => contains(sectors, it.sector));
65
+ const resolvedContent = Object.values(groupBy(matchingContent, (it) => it.key)).map((it) => {
66
+ const resolvedContent2 = resolveBy(it, (it2) => it2.tags ?? [], tags);
67
+ return first(resolvedContent2);
63
68
  });
64
69
  return normalizeContent(resolvedContent, normalizers ?? [], context);
65
70
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/content.ts"],"sourcesContent":["import { Referencable, Reference, ReferenceType } from '@bessemer/cornerstone/reference'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { AbstractApplicationContext } from '@bessemer/cornerstone/context'\nimport { Arrays, Objects, References, Tags, Ulids, Zod } from '@bessemer/cornerstone'\nimport { RichTextJson } from '@bessemer/cornerstone/rich-text'\nimport { Tag } from '@bessemer/cornerstone/tag'\nimport { ZodType } from 'zod'\n\nexport type ContentSector = NominalType<string, 'ContentSector'>\nexport const ContentSectorSchema: ZodType<ContentSector> = Zod.string()\n\nexport type ContentKey = NominalType<string, 'ContentKey'>\nexport const ContentKeySchema: ZodType<ContentKey> = Zod.string()\n\nexport type ContentType<Data = unknown> = NominalType<string, ['ContentType', Data]>\nexport const ContentTypeSchema: ZodType<ContentType> = Zod.string()\n\nexport type ContentReference = Reference<'Content'>\n\ntype ContentDataType<Type> = Type extends ContentType<infer Data> ? Data : never\n\nexport const ContentDataSchema = Zod.object({\n key: ContentKeySchema,\n type: ContentTypeSchema,\n data: Zod.unknown(),\n sector: ContentSectorSchema.nullable(),\n})\n\nexport type ContentData<Type extends ContentType = ContentType, Data = ContentDataType<Type>> = Referencable<ContentReference> & {\n key: ContentKey\n type: Type\n data: Data\n sector: ContentSector | null\n}\n\nexport type ContentTypeConstructor<Content extends ContentData> = Content['type']\n\nexport type ContentDisplayType = NominalType<string, 'ContentDisplayType'>\n\nexport namespace ContentDisplayTypes {\n export const Default: ContentDisplayType = 'Default'\n export const Label: ContentDisplayType = 'Label'\n export const Desktop: ContentDisplayType = 'Desktop'\n export const Mobile: ContentDisplayType = 'Mobile'\n export const Modal: ContentDisplayType = 'Modal'\n export const Tooltip: ContentDisplayType = 'Tooltip'\n}\n\nexport const TextContentType: ContentType<RichTextJson> = 'Text'\nexport type TextContent = ContentData<typeof TextContentType>\n\nexport interface ContentProvider<ContextType extends AbstractApplicationContext = AbstractApplicationContext> {\n fetchContentByIds: (references: Array<ReferenceType<ContentReference>>, context: ContextType) => Promise<Array<ContentData>>\n\n fetchContentByKeys: (keys: Array<ContentKey>, tags: Array<Tag>, context: ContextType) => Promise<Array<ContentData>>\n\n fetchContentBySectors: (sectors: Array<ContentSector>, tags: Array<Tag>, context: ContextType) => Promise<Array<ContentData>>\n}\n\nexport type ContentNormalizer<\n ApplicationContext extends AbstractApplicationContext = AbstractApplicationContext,\n Type extends ContentData = ContentData\n> = {\n type: Type['type']\n normalize: (data: Array<ContentData>, context: ApplicationContext) => Promise<Array<Type>>\n}\n\n// TODO might be more efficient to put the normalizers in a map at some point\nexport const normalizeContent = async <ApplicationContext extends AbstractApplicationContext>(\n content: Array<ContentData>,\n normalizers: Array<ContentNormalizer<ApplicationContext>>,\n context: ApplicationContext\n): Promise<Array<ContentData>> => {\n const groupedContent = Arrays.groupBy(content, (it) => it.type)\n const normalizedGroupedContent = Object.entries(groupedContent).map(async ([type, values]) => {\n const normalizer = normalizers.find((it) => it.type === type)\n if (Objects.isNil(normalizer)) {\n return values\n }\n\n return await normalizer.normalize(values, context)\n })\n\n const normalizedContent = (await Promise.all(normalizedGroupedContent)).flatMap((it) => it)\n return normalizedContent\n}\n\nexport type StaticContentData<Type extends ContentType = ContentType, Data = ContentDataType<Type>> = ContentData<Type, Data> & {\n tags: Array<Tag>\n}\n\nexport const staticData = <Type extends ContentType = ContentType, Data = ContentDataType<Type>>(\n key: ContentKey,\n type: Type,\n data: Data,\n options?: { tags?: Array<Tag>; sector?: ContentSector }\n): StaticContentData<Type, Data> => {\n return {\n reference: References.reference(Ulids.generateString(), 'Content'),\n key,\n type,\n data,\n tags: options?.tags ?? [],\n sector: options?.sector ?? null,\n }\n}\n\nexport const staticProvider = <ApplicationContext extends AbstractApplicationContext>(\n content: Array<StaticContentData>,\n normalizers?: Array<ContentNormalizer<ApplicationContext>>\n): ContentProvider<ApplicationContext> => {\n return {\n async fetchContentByIds(references: Array<ReferenceType<ContentReference>>, context: ApplicationContext): Promise<Array<ContentData>> {\n const matchingContent = content.filter((it) => Arrays.contains(references, it.reference))\n return normalizeContent(matchingContent, normalizers ?? [], context)\n },\n async fetchContentByKeys(keys: Array<ContentKey>, tags: Array<Tag>, context: ApplicationContext): Promise<Array<ContentData>> {\n const matchingContent = content.filter((it) => Arrays.contains(keys, it.key))\n\n const resolvedContent = Object.values(Arrays.groupBy(matchingContent, (it) => it.key)).map((it) => {\n const resolvedContent = Tags.resolveBy(it, (it) => it.tags ?? [], tags)\n return Arrays.first(resolvedContent)!\n })\n\n return normalizeContent(resolvedContent, normalizers ?? [], context)\n },\n async fetchContentBySectors(sectors: Array<ContentSector>, tags: Array<Tag>, context: ApplicationContext): Promise<Array<ContentData>> {\n const matchingContent = content.filter((it) => Objects.isPresent(it.sector)).filter((it) => Arrays.contains(sectors, it.sector!))\n\n const resolvedContent = Object.values(Arrays.groupBy(matchingContent, (it) => it.key)).map((it) => {\n const resolvedContent = Tags.resolveBy(it, (it) => it.tags ?? [], tags)\n return Arrays.first(resolvedContent)!\n })\n\n return normalizeContent(resolvedContent, normalizers ?? [], context)\n },\n }\n}\n"],"mappings":"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","names":["ContentDisplayTypes","resolvedContent","it"]}
1
+ {"version":3,"sources":["../src/content.ts"],"sourcesContent":["import { Referencable, reference, Reference, ReferenceType } from '@bessemer/cornerstone/reference'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { AbstractApplicationContext } from '@bessemer/cornerstone/context'\nimport { RichTextJson } from '@bessemer/cornerstone/rich-text'\nimport { resolveBy, Tag } from '@bessemer/cornerstone/tag'\nimport Zod, { ZodType } from 'zod'\nimport { contains, first, groupBy } from '@bessemer/cornerstone/array'\nimport { isNil, isPresent } from '@bessemer/cornerstone/object'\nimport { generateString } from '@bessemer/cornerstone/ulid'\n\nexport type ContentSector = NominalType<string, 'ContentSector'>\nexport const ContentSectorSchema: ZodType<ContentSector> = Zod.string()\n\nexport type ContentKey = NominalType<string, 'ContentKey'>\nexport const ContentKeySchema: ZodType<ContentKey> = Zod.string()\n\nexport type ContentType<Data = unknown> = NominalType<string, ['ContentType', Data]>\nexport const ContentTypeSchema: ZodType<ContentType> = Zod.string()\n\nexport type ContentReference = Reference<'Content'>\n\ntype ContentDataType<Type> = Type extends ContentType<infer Data> ? Data : never\n\nexport const ContentDataSchema = Zod.object({\n key: ContentKeySchema,\n type: ContentTypeSchema,\n data: Zod.unknown(),\n sector: ContentSectorSchema.nullable(),\n})\n\nexport type ContentData<Type extends ContentType = ContentType, Data = ContentDataType<Type>> = Referencable<ContentReference> & {\n key: ContentKey\n type: Type\n data: Data\n sector: ContentSector | null\n}\n\nexport type ContentTypeConstructor<Content extends ContentData> = Content['type']\n\nexport type ContentDisplayType = NominalType<string, 'ContentDisplayType'>\n\nexport namespace ContentDisplayTypes {\n export const Default: ContentDisplayType = 'Default'\n export const Label: ContentDisplayType = 'Label'\n export const Desktop: ContentDisplayType = 'Desktop'\n export const Mobile: ContentDisplayType = 'Mobile'\n export const Modal: ContentDisplayType = 'Modal'\n export const Tooltip: ContentDisplayType = 'Tooltip'\n}\n\nexport const TextContentType: ContentType<RichTextJson> = 'Text'\nexport type TextContent = ContentData<typeof TextContentType>\n\nexport interface ContentProvider<ContextType extends AbstractApplicationContext = AbstractApplicationContext> {\n fetchContentByIds: (references: Array<ReferenceType<ContentReference>>, context: ContextType) => Promise<Array<ContentData>>\n\n fetchContentByKeys: (keys: Array<ContentKey>, tags: Array<Tag>, context: ContextType) => Promise<Array<ContentData>>\n\n fetchContentBySectors: (sectors: Array<ContentSector>, tags: Array<Tag>, context: ContextType) => Promise<Array<ContentData>>\n}\n\nexport type ContentNormalizer<\n ApplicationContext extends AbstractApplicationContext = AbstractApplicationContext,\n Type extends ContentData = ContentData\n> = {\n type: Type['type']\n normalize: (data: Array<ContentData>, context: ApplicationContext) => Promise<Array<Type>>\n}\n\n// TODO might be more efficient to put the normalizers in a map at some point\nexport const normalizeContent = async <ApplicationContext extends AbstractApplicationContext>(\n content: Array<ContentData>,\n normalizers: Array<ContentNormalizer<ApplicationContext>>,\n context: ApplicationContext\n): Promise<Array<ContentData>> => {\n const groupedContent = groupBy(content, (it) => it.type)\n const normalizedGroupedContent = Object.entries(groupedContent).map(async ([type, values]) => {\n const normalizer = normalizers.find((it) => it.type === type)\n if (isNil(normalizer)) {\n return values\n }\n\n return await normalizer.normalize(values, context)\n })\n\n const normalizedContent = (await Promise.all(normalizedGroupedContent)).flatMap((it) => it)\n return normalizedContent\n}\n\nexport type StaticContentData<Type extends ContentType = ContentType, Data = ContentDataType<Type>> = ContentData<Type, Data> & {\n tags: Array<Tag>\n}\n\nexport const staticData = <Type extends ContentType = ContentType, Data = ContentDataType<Type>>(\n key: ContentKey,\n type: Type,\n data: Data,\n options?: { tags?: Array<Tag>; sector?: ContentSector }\n): StaticContentData<Type, Data> => {\n return {\n reference: reference(generateString(), 'Content'),\n key,\n type,\n data,\n tags: options?.tags ?? [],\n sector: options?.sector ?? null,\n }\n}\n\nexport const staticProvider = <ApplicationContext extends AbstractApplicationContext>(\n content: Array<StaticContentData>,\n normalizers?: Array<ContentNormalizer<ApplicationContext>>\n): ContentProvider<ApplicationContext> => {\n return {\n async fetchContentByIds(references: Array<ReferenceType<ContentReference>>, context: ApplicationContext): Promise<Array<ContentData>> {\n const matchingContent = content.filter((it) => contains(references, it.reference))\n return normalizeContent(matchingContent, normalizers ?? [], context)\n },\n async fetchContentByKeys(keys: Array<ContentKey>, tags: Array<Tag>, context: ApplicationContext): Promise<Array<ContentData>> {\n const matchingContent = content.filter((it) => contains(keys, it.key))\n\n const resolvedContent = Object.values(groupBy(matchingContent, (it) => it.key)).map((it) => {\n const resolvedContent = resolveBy(it, (it) => it.tags ?? [], tags)\n return first(resolvedContent)!\n })\n\n return normalizeContent(resolvedContent, normalizers ?? [], context)\n },\n async fetchContentBySectors(sectors: Array<ContentSector>, tags: Array<Tag>, context: ApplicationContext): Promise<Array<ContentData>> {\n const matchingContent = content.filter((it) => isPresent(it.sector)).filter((it) => contains(sectors, it.sector!))\n\n const resolvedContent = Object.values(groupBy(matchingContent, (it) => it.key)).map((it) => {\n const resolvedContent = resolveBy(it, (it) => it.tags ?? [], tags)\n return first(resolvedContent)!\n })\n\n return normalizeContent(resolvedContent, normalizers ?? [], context)\n },\n }\n}\n"],"mappings":"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","names":["ContentDisplayTypes","resolvedContent","it"]}
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../src/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,eAAe,IAAI,gBAAgB,EAAE,OAAO,IAAI,QAAQ,EAAE,QAAQ,IAAI,SAAS,EAAY,MAAM,UAAU,CAAA;AAE3I,OAAO,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAA;AAEzD,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,oFAqB5C,CAAA;AAED,eAAO,MAAM,MAAM,gCAAU,CAAA;AAE7B,eAAO,MAAM,GAAG,QAAO,IAEtB,CAAA;AAED,eAAO,MAAM,EAAE,GAAI,YAAY,MAAM,KAAG,IAEvC,CAAA;AAED,eAAO,MAAM,eAAe,yBAAmB,CAAA;AAC/C,eAAO,MAAM,QAAQ,kBAAY,CAAA;AACjC,eAAO,MAAM,QAAQ,kBAAY,CAAA;AACjC,eAAO,MAAM,OAAO,iBAAW,CAAA;AAE/B,eAAO,MAAM,WAAW,GAAI,MAAM,IAAI,EAAE,UAAU,QAAQ,KAAG,IAAiE,CAAA"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../src/date.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,eAAe,IAAI,gBAAgB,EAAE,OAAO,IAAI,QAAQ,EAAE,QAAQ,IAAI,SAAS,EAAY,MAAM,UAAU,CAAA;AAE3I,OAAO,EAAE,QAAQ,EAAkB,MAAM,gCAAgC,CAAA;AACzE,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,eAAO,MAAM,WAAW,GAAI,WAAW,MAAM,oFAqB5C,CAAA;AAED,eAAO,MAAM,MAAM,gCAAU,CAAA;AAE7B,eAAO,MAAM,GAAG,QAAO,IAEtB,CAAA;AAED,eAAO,MAAM,EAAE,GAAI,YAAY,MAAM,KAAG,IAEvC,CAAA;AAED,eAAO,MAAM,eAAe,yBAAmB,CAAA;AAC/C,eAAO,MAAM,QAAQ,kBAAY,CAAA;AACjC,eAAO,MAAM,QAAQ,kBAAY,CAAA;AACjC,eAAO,MAAM,OAAO,iBAAW,CAAA;AAE/B,eAAO,MAAM,WAAW,GAAI,MAAM,IAAI,EAAE,UAAU,QAAQ,KAAG,IAAuD,CAAA"}
package/dist/date.js CHANGED
@@ -1,7 +1,7 @@
1
1
  // src/date.ts
2
2
  import { addHours as _addHours, addMilliseconds as _addMilliseconds, isAfter as _isAfter, isBefore as _isBefore, parseISO } from "date-fns";
3
3
  import { isDate as _isDate } from "lodash-es";
4
- import { Durations } from "@bessemer/cornerstone";
4
+ import { toMilliseconds } from "@bessemer/cornerstone/duration";
5
5
  import Zod from "zod";
6
6
  var buildSchema = (fieldName) => {
7
7
  return Zod.union([
@@ -33,7 +33,7 @@ var addMilliseconds = _addMilliseconds;
33
33
  var addHours = _addHours;
34
34
  var isBefore = _isBefore;
35
35
  var isAfter = _isAfter;
36
- var addDuration = (date, duration) => addMilliseconds(date, Durations.toMilliseconds(duration));
36
+ var addDuration = (date, duration) => addMilliseconds(date, toMilliseconds(duration));
37
37
  export {
38
38
  addDuration,
39
39
  addHours,
package/dist/date.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/date.ts"],"sourcesContent":["import { addHours as _addHours, addMilliseconds as _addMilliseconds, isAfter as _isAfter, isBefore as _isBefore, parseISO } from 'date-fns'\nimport { isDate as _isDate } from 'lodash-es'\nimport { Duration } from '@bessemer/cornerstone/duration'\nimport { Durations } from '@bessemer/cornerstone'\nimport Zod from 'zod'\n\nexport const buildSchema = (fieldName: string) => {\n return Zod.union([\n Zod.string({\n required_error: `${fieldName} is required`,\n })\n .trim()\n .regex(\n /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})?)?$/,\n `${fieldName} is an invalid Date. Use YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS.sssZ`\n ),\n Zod.date({\n required_error: `${fieldName} is required`,\n }),\n ]).transform((isoString) => {\n const date = new Date(isoString)\n // Additional check to ensure the parsed date is valid\n if (isNaN(date.getTime())) {\n throw new Error('Invalid date')\n }\n return date\n })\n}\n\nexport const isDate = _isDate\n\nexport const now = (): Date => {\n return new Date()\n}\n\nexport const of = (dateString: string): Date => {\n return parseISO(dateString)\n}\n\nexport const addMilliseconds = _addMilliseconds\nexport const addHours = _addHours\nexport const isBefore = _isBefore\nexport const isAfter = _isAfter\n\nexport const addDuration = (date: Date, duration: Duration): Date => addMilliseconds(date, Durations.toMilliseconds(duration))\n"],"mappings":";AAAA,SAAS,YAAY,WAAW,mBAAmB,kBAAkB,WAAW,UAAU,YAAY,WAAW,gBAAgB;AACjI,SAAS,UAAU,eAAe;AAElC,SAAS,iBAAiB;AAC1B,OAAO,SAAS;AAET,IAAM,cAAc,CAAC,cAAsB;AAChD,SAAO,IAAI,MAAM;AAAA,IACf,IAAI,OAAO;AAAA,MACT,gBAAgB,GAAG,SAAS;AAAA,IAC9B,CAAC,EACE,KAAK,EACL;AAAA,MACC;AAAA,MACA,GAAG,SAAS;AAAA,IACd;AAAA,IACF,IAAI,KAAK;AAAA,MACP,gBAAgB,GAAG,SAAS;AAAA,IAC9B,CAAC;AAAA,EACH,CAAC,EAAE,UAAU,CAAC,cAAc;AAC1B,UAAM,OAAO,IAAI,KAAK,SAAS;AAE/B,QAAI,MAAM,KAAK,QAAQ,CAAC,GAAG;AACzB,YAAM,IAAI,MAAM,cAAc;AAAA,IAChC;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAEO,IAAM,SAAS;AAEf,IAAM,MAAM,MAAY;AAC7B,SAAO,oBAAI,KAAK;AAClB;AAEO,IAAM,KAAK,CAAC,eAA6B;AAC9C,SAAO,SAAS,UAAU;AAC5B;AAEO,IAAM,kBAAkB;AACxB,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,UAAU;AAEhB,IAAM,cAAc,CAAC,MAAY,aAA6B,gBAAgB,MAAM,UAAU,eAAe,QAAQ,CAAC;","names":[]}
1
+ {"version":3,"sources":["../src/date.ts"],"sourcesContent":["import { addHours as _addHours, addMilliseconds as _addMilliseconds, isAfter as _isAfter, isBefore as _isBefore, parseISO } from 'date-fns'\nimport { isDate as _isDate } from 'lodash-es'\nimport { Duration, toMilliseconds } from '@bessemer/cornerstone/duration'\nimport Zod from 'zod'\n\nexport const buildSchema = (fieldName: string) => {\n return Zod.union([\n Zod.string({\n required_error: `${fieldName} is required`,\n })\n .trim()\n .regex(\n /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})?)?$/,\n `${fieldName} is an invalid Date. Use YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS.sssZ`\n ),\n Zod.date({\n required_error: `${fieldName} is required`,\n }),\n ]).transform((isoString) => {\n const date = new Date(isoString)\n // Additional check to ensure the parsed date is valid\n if (isNaN(date.getTime())) {\n throw new Error('Invalid date')\n }\n return date\n })\n}\n\nexport const isDate = _isDate\n\nexport const now = (): Date => {\n return new Date()\n}\n\nexport const of = (dateString: string): Date => {\n return parseISO(dateString)\n}\n\nexport const addMilliseconds = _addMilliseconds\nexport const addHours = _addHours\nexport const isBefore = _isBefore\nexport const isAfter = _isAfter\n\nexport const addDuration = (date: Date, duration: Duration): Date => addMilliseconds(date, toMilliseconds(duration))\n"],"mappings":";AAAA,SAAS,YAAY,WAAW,mBAAmB,kBAAkB,WAAW,UAAU,YAAY,WAAW,gBAAgB;AACjI,SAAS,UAAU,eAAe;AAClC,SAAmB,sBAAsB;AACzC,OAAO,SAAS;AAET,IAAM,cAAc,CAAC,cAAsB;AAChD,SAAO,IAAI,MAAM;AAAA,IACf,IAAI,OAAO;AAAA,MACT,gBAAgB,GAAG,SAAS;AAAA,IAC9B,CAAC,EACE,KAAK,EACL;AAAA,MACC;AAAA,MACA,GAAG,SAAS;AAAA,IACd;AAAA,IACF,IAAI,KAAK;AAAA,MACP,gBAAgB,GAAG,SAAS;AAAA,IAC9B,CAAC;AAAA,EACH,CAAC,EAAE,UAAU,CAAC,cAAc;AAC1B,UAAM,OAAO,IAAI,KAAK,SAAS;AAE/B,QAAI,MAAM,KAAK,QAAQ,CAAC,GAAG;AACzB,YAAM,IAAI,MAAM,cAAc;AAAA,IAChC;AACA,WAAO;AAAA,EACT,CAAC;AACH;AAEO,IAAM,SAAS;AAEf,IAAM,MAAM,MAAY;AAC7B,SAAO,oBAAI,KAAK;AAClB;AAEO,IAAM,KAAK,CAAC,eAA6B;AAC9C,SAAO,SAAS,UAAU;AAC5B;AAEO,IAAM,kBAAkB;AACxB,IAAM,WAAW;AACjB,IAAM,WAAW;AACjB,IAAM,UAAU;AAEhB,IAAM,cAAc,CAAC,MAAY,aAA6B,gBAAgB,MAAM,eAAe,QAAQ,CAAC;","names":[]}
package/dist/either.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import { Eithers } from '@bessemer/cornerstone';
2
1
  export declare enum EitherType {
3
2
  Left = "Left",
4
3
  Right = "Right"
@@ -1 +1 @@
1
- {"version":3,"file":"either.d.ts","sourceRoot":"","sources":["../src/either.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAE/C,oBAAY,UAAU;IACpB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI;IACpB,IAAI,EAAE,UAAU,CAAC,IAAI,CAAA;IACrB,KAAK,EAAE,CAAC,CAAA;CACT,CAAA;AACD,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI;IACrB,IAAI,EAAE,UAAU,CAAC,KAAK,CAAA;IACtB,KAAK,EAAE,CAAC,CAAA;CACT,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;AAE7C,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,IAAI,CAAC,CAAC,CAAuC,CAAA;AAChF,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,KAAK,CAAC,CAAC,CAAwC,CAAA;AAEnF,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,IAAI,IAAI,CAAC,CAAC,CAAoC,CAAA;AACxG,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,IAAI,KAAK,CAAC,CAAC,CAAqC,CAAA;AAE3G,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAI3E,CAAA"}
1
+ {"version":3,"file":"either.d.ts","sourceRoot":"","sources":["../src/either.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IACpB,IAAI,SAAS;IACb,KAAK,UAAU;CAChB;AAED,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI;IACpB,IAAI,EAAE,UAAU,CAAC,IAAI,CAAA;IACrB,KAAK,EAAE,CAAC,CAAA;CACT,CAAA;AACD,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI;IACrB,IAAI,EAAE,UAAU,CAAC,KAAK,CAAA;IACtB,KAAK,EAAE,CAAC,CAAA;CACT,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;AAE7C,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,IAAI,CAAC,CAAC,CAAuC,CAAA;AAChF,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,KAAK,CAAC,CAAC,CAAwC,CAAA;AAEnF,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,IAAI,IAAI,CAAC,CAAC,CAAoC,CAAA;AACxG,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,MAAM,IAAI,KAAK,CAAC,CAAC,CAAqC,CAAA;AAE3G,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAI3E,CAAA"}
package/dist/either.js CHANGED
@@ -1,5 +1,4 @@
1
1
  // src/either.ts
2
- import { Eithers } from "@bessemer/cornerstone";
3
2
  var EitherType = /* @__PURE__ */ ((EitherType2) => {
4
3
  EitherType2["Left"] = "Left";
5
4
  EitherType2["Right"] = "Right";
@@ -10,8 +9,8 @@ var right = (value) => ({ type: "Right" /* Right */, value });
10
9
  var isLeft = (either) => either.type === "Left" /* Left */;
11
10
  var isRight = (either) => either.type === "Right" /* Right */;
12
11
  var split = (array) => {
13
- const lefts = array.filter(Eithers.isLeft).map((it) => it.value);
14
- const rights = array.filter(Eithers.isRight).map((it) => it.value);
12
+ const lefts = array.filter(isLeft).map((it) => it.value);
13
+ const rights = array.filter(isRight).map((it) => it.value);
15
14
  return [lefts, rights];
16
15
  };
17
16
  export {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/either.ts"],"sourcesContent":["import { Eithers } from '@bessemer/cornerstone'\n\nexport enum EitherType {\n Left = 'Left',\n Right = 'Right',\n}\n\nexport type Left<T> = {\n type: EitherType.Left\n value: T\n}\nexport type Right<N> = {\n type: EitherType.Right\n value: N\n}\n\nexport type Either<T, N> = Left<T> | Right<N>\n\nexport const left = <T>(value: T): Left<T> => ({ type: EitherType.Left, value })\nexport const right = <N>(value: N): Right<N> => ({ type: EitherType.Right, value })\n\nexport const isLeft = <T, N>(either: Either<T, N>): either is Left<T> => either.type === EitherType.Left\nexport const isRight = <T, N>(either: Either<T, N>): either is Right<N> => either.type === EitherType.Right\n\nexport const split = <L, R>(array: Array<Either<L, R>>): [Array<L>, Array<R>] => {\n const lefts = array.filter(Eithers.isLeft).map((it) => it.value)\n const rights = array.filter(Eithers.isRight).map((it) => it.value)\n return [lefts, rights]\n}\n"],"mappings":";AAAA,SAAS,eAAe;AAEjB,IAAK,aAAL,kBAAKA,gBAAL;AACL,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,WAAQ;AAFE,SAAAA;AAAA,GAAA;AAgBL,IAAM,OAAO,CAAI,WAAuB,EAAE,MAAM,mBAAiB,MAAM;AACvE,IAAM,QAAQ,CAAI,WAAwB,EAAE,MAAM,qBAAkB,MAAM;AAE1E,IAAM,SAAS,CAAO,WAA4C,OAAO,SAAS;AAClF,IAAM,UAAU,CAAO,WAA6C,OAAO,SAAS;AAEpF,IAAM,QAAQ,CAAO,UAAqD;AAC/E,QAAM,QAAQ,MAAM,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK;AAC/D,QAAM,SAAS,MAAM,OAAO,QAAQ,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK;AACjE,SAAO,CAAC,OAAO,MAAM;AACvB;","names":["EitherType"]}
1
+ {"version":3,"sources":["../src/either.ts"],"sourcesContent":["export enum EitherType {\n Left = 'Left',\n Right = 'Right',\n}\n\nexport type Left<T> = {\n type: EitherType.Left\n value: T\n}\nexport type Right<N> = {\n type: EitherType.Right\n value: N\n}\n\nexport type Either<T, N> = Left<T> | Right<N>\n\nexport const left = <T>(value: T): Left<T> => ({ type: EitherType.Left, value })\nexport const right = <N>(value: N): Right<N> => ({ type: EitherType.Right, value })\n\nexport const isLeft = <T, N>(either: Either<T, N>): either is Left<T> => either.type === EitherType.Left\nexport const isRight = <T, N>(either: Either<T, N>): either is Right<N> => either.type === EitherType.Right\n\nexport const split = <L, R>(array: Array<Either<L, R>>): [Array<L>, Array<R>] => {\n const lefts = array.filter(isLeft).map((it) => it.value)\n const rights = array.filter(isRight).map((it) => it.value)\n return [lefts, rights]\n}\n"],"mappings":";AAAO,IAAK,aAAL,kBAAKA,gBAAL;AACL,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,WAAQ;AAFE,SAAAA;AAAA,GAAA;AAgBL,IAAM,OAAO,CAAI,WAAuB,EAAE,MAAM,mBAAiB,MAAM;AACvE,IAAM,QAAQ,CAAI,WAAwB,EAAE,MAAM,qBAAkB,MAAM;AAE1E,IAAM,SAAS,CAAO,WAA4C,OAAO,SAAS;AAClF,IAAM,UAAU,CAAO,WAA6C,OAAO,SAAS;AAEpF,IAAM,QAAQ,CAAO,UAAqD;AAC/E,QAAM,QAAQ,MAAM,OAAO,MAAM,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK;AACvD,QAAM,SAAS,MAAM,OAAO,OAAO,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK;AACzD,SAAO,CAAC,OAAO,MAAM;AACvB;","names":["EitherType"]}
@@ -1,6 +1,7 @@
1
- import { NominalType, Throwable } from '@bessemer/cornerstone/types';
1
+ import { Dictionary, NominalType, Throwable } from '@bessemer/cornerstone/types';
2
2
  import { RecordAttribute } from '@bessemer/cornerstone/object';
3
3
  import Zod, { ZodType } from 'zod';
4
+ import { LazyValue } from '@bessemer/cornerstone/lazy';
4
5
  export type ErrorCode = NominalType<string, 'ErrorCode'>;
5
6
  export declare const ErrorCodeSchema: ZodType<ErrorCode>;
6
7
  export type ErrorAttribute<Type = unknown> = RecordAttribute<Type, 'ErrorAttribute'>;
@@ -27,6 +28,7 @@ export type ErrorEventBuilder = {
27
28
  attributes?: Record<ErrorAttribute, unknown>;
28
29
  causes?: Array<ErrorEvent>;
29
30
  };
31
+ export type ErrorEventAugment = Partial<ErrorEventBuilder>;
30
32
  export declare class ErrorEventException extends Error {
31
33
  readonly errorEvent: ErrorEvent;
32
34
  constructor(errorEvent: ErrorEvent, cause?: unknown);
@@ -34,19 +36,23 @@ export declare class ErrorEventException extends Error {
34
36
  export declare const isErrorEvent: (throwable: Throwable) => throwable is ErrorEvent;
35
37
  export declare const isErrorEventException: (throwable: Throwable) => throwable is ErrorEventException;
36
38
  export declare const of: (builder: ErrorEventBuilder) => ErrorEvent;
39
+ export declare function wrap<ReturnType>(runnable: () => ReturnType, attributes: LazyValue<Dictionary<unknown>>): ReturnType;
40
+ export declare function wrap<ReturnType>(resolver: () => Promise<ReturnType>, attributes: LazyValue<Dictionary<unknown>>): Promise<ReturnType>;
37
41
  export declare const from: (throwable: Throwable) => ErrorEvent;
38
42
  export declare const findByCodeInCausalChain: (error: ErrorEvent, code: string) => ErrorEvent | undefined;
39
43
  export declare const findInCausalChain: (error: ErrorEvent, predicate: (error: ErrorEvent) => boolean) => ErrorEvent | undefined;
40
44
  export declare const aggregate: (builder: ErrorEventBuilder, causes: Array<ErrorEvent>) => ErrorEvent | undefined;
41
45
  export declare const UnhandledErrorCode: ErrorCode;
42
46
  export declare const NotFoundErrorCode: ErrorCode;
47
+ export declare const ForbiddenErrorCode: ErrorCode;
43
48
  export declare const UnauthorizedErrorCode: ErrorCode;
44
49
  export declare const BadRequestErrorCode: ErrorCode;
45
50
  export declare const RequestCorrelationIdAttribute: ErrorAttribute<string>;
46
51
  export declare const HttpStatusCodeAttribute: ErrorAttribute<number>;
47
- export declare const unhandled: (builder?: Partial<ErrorEventBuilder>) => ErrorEvent;
48
- export declare const notFound: (builder?: Partial<ErrorEventBuilder>) => ErrorEvent;
49
- export declare const unauthorized: (builder?: Partial<ErrorEventBuilder>) => ErrorEvent;
50
- export declare const badRequest: (builder?: Partial<ErrorEventBuilder>) => ErrorEvent;
52
+ export declare const unhandled: (builder?: ErrorEventAugment) => ErrorEvent;
53
+ export declare const notFound: (builder?: ErrorEventAugment) => ErrorEvent;
54
+ export declare const unauthorized: (builder?: ErrorEventAugment) => ErrorEvent;
55
+ export declare const forbidden: (builder?: ErrorEventAugment) => ErrorEvent;
56
+ export declare const badRequest: (builder?: ErrorEventAugment) => ErrorEvent;
51
57
  export {};
52
58
  //# sourceMappingURL=error-event.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-event.d.ts","sourceRoot":"","sources":["../src/error-event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAOlC,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AACxD,eAAO,MAAM,eAAe,EAAE,OAAO,CAAC,SAAS,CAAgB,CAAA;AAE/D,MAAM,MAAM,cAAc,CAAC,IAAI,GAAG,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;AACpF,eAAO,MAAM,oBAAoB,EAAE,OAAO,CAAC,cAAc,CAAgB,CAAA;AAEzE,QAAA,MAAM,oBAAoB;;;;;;;;;;;;EAIxB,CAAA;AAEF,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,GAAG;IAChE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAC1B,CAAA;AAOD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAC5C,MAAM,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAC3B,CAAA;AAGD,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;gBAEnB,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO;CAKpD;AAED,eAAO,MAAM,YAAY,GAAI,WAAW,SAAS,KAAG,SAAS,IAAI,UAMhE,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,WAAW,SAAS,KAAG,SAAS,IAAI,mBAEzE,CAAA;AAED,eAAO,MAAM,EAAE,GAAI,SAAS,iBAAiB,KAAG,UAS/C,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,WAAW,SAAS,KAAG,UAe3C,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,OAAO,UAAU,EAAE,MAAM,MAAM,KAAG,UAAU,GAAG,SAEtF,CAAA;AAOD,eAAO,MAAM,iBAAiB,GAAI,OAAO,UAAU,EAAE,WAAW,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,KAAG,UAAU,GAAG,SAM7G,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,SAAS,iBAAiB,EAAE,QAAQ,KAAK,CAAC,UAAU,CAAC,KAAG,UAAU,GAAG,SAM9F,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,SAAmC,CAAA;AACpE,eAAO,MAAM,iBAAiB,EAAE,SAAmC,CAAA;AACnE,eAAO,MAAM,qBAAqB,EAAE,SAAsC,CAAA;AAC1E,eAAO,MAAM,mBAAmB,EAAE,SAAqC,CAAA;AAEvE,eAAO,MAAM,6BAA6B,EAAE,cAAc,CAAC,MAAM,CAA0B,CAAA;AAC3F,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAAC,MAAM,CAAoB,CAAA;AAE/E,eAAO,MAAM,SAAS,GAAI,UAAU,OAAO,CAAC,iBAAiB,CAAC,eAO3D,CAAA;AAEH,eAAO,MAAM,QAAQ,GAAI,UAAU,OAAO,CAAC,iBAAiB,CAAC,eAO1D,CAAA;AAEH,eAAO,MAAM,YAAY,GAAI,UAAU,OAAO,CAAC,iBAAiB,CAAC,eAO9D,CAAA;AAEH,eAAO,MAAM,UAAU,GAAI,UAAU,OAAO,CAAC,iBAAiB,CAAC,eAO5D,CAAA"}
1
+ {"version":3,"file":"error-event.d.ts","sourceRoot":"","sources":["../src/error-event.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,10 @@
1
1
  // src/error-event.ts
2
- import { Arrays, Errors, Objects } from "@bessemer/cornerstone";
2
+ import { deepMerge, isNil, isObject, isPresent } from "@bessemer/cornerstone/object";
3
3
  import Zod from "zod";
4
+ import { evaluate } from "@bessemer/cornerstone/lazy";
5
+ import { isPromise } from "@bessemer/cornerstone/promise";
6
+ import { findInCausalChain as errorsFindInCausalChain, isError } from "@bessemer/cornerstone/error";
7
+ import { first } from "@bessemer/cornerstone/array";
4
8
  var ErrorCodeSchema = Zod.string();
5
9
  var ErrorAttributeSchema = Zod.string();
6
10
  var baseErrorEventSchema = Zod.object({
@@ -20,7 +24,7 @@ var ErrorEventException = class extends Error {
20
24
  }
21
25
  };
22
26
  var isErrorEvent = (throwable) => {
23
- if (!Objects.isObject(throwable)) {
27
+ if (!isObject(throwable)) {
24
28
  return false;
25
29
  }
26
30
  return "code" in throwable && "message" in throwable && "attributes" in throwable && "causes" in throwable;
@@ -37,15 +41,32 @@ var of = (builder) => {
37
41
  causes: builder.causes ?? []
38
42
  };
39
43
  };
44
+ function wrap(resolver, attributes) {
45
+ const handleError = (error) => {
46
+ const errorEvent = from(error);
47
+ const contextualizedEvent = of({ ...errorEvent, attributes: { ...errorEvent.attributes, ...evaluate(attributes) } });
48
+ throw new ErrorEventException(contextualizedEvent, error);
49
+ };
50
+ try {
51
+ let result = resolver();
52
+ if (isPromise(result)) {
53
+ return result.then((it) => it).catch((it) => handleError(it));
54
+ } else {
55
+ return result;
56
+ }
57
+ } catch (error) {
58
+ throw handleError(error);
59
+ }
60
+ }
40
61
  var from = (throwable) => {
41
62
  if (isErrorEvent(throwable)) {
42
63
  return throwable;
43
64
  }
44
- if (!Errors.isError(throwable)) {
65
+ if (!isError(throwable)) {
45
66
  return unhandled();
46
67
  }
47
- const errorEventException = Errors.findInCausalChain(throwable, isErrorEventException);
48
- if (Objects.isNil(errorEventException)) {
68
+ const errorEventException = errorsFindInCausalChain(throwable, isErrorEventException);
69
+ if (isNil(errorEventException)) {
49
70
  return unhandled();
50
71
  }
51
72
  return errorEventException.errorEvent;
@@ -57,7 +78,7 @@ var findInCausalChain = (error, predicate) => {
57
78
  if (predicate(error)) {
58
79
  return error;
59
80
  }
60
- return Arrays.first(error.causes.map((it) => findInCausalChain(it, predicate)).filter(Objects.isPresent));
81
+ return first(error.causes.map((it) => findInCausalChain(it, predicate)).filter(isPresent));
61
82
  };
62
83
  var aggregate = (builder, causes) => {
63
84
  if (causes.length === 0) {
@@ -67,33 +88,41 @@ var aggregate = (builder, causes) => {
67
88
  };
68
89
  var UnhandledErrorCode = "error-event.unhandled";
69
90
  var NotFoundErrorCode = "error-event.not-found";
91
+ var ForbiddenErrorCode = "error-event.forbidden";
70
92
  var UnauthorizedErrorCode = "error-event.unauthorized";
71
93
  var BadRequestErrorCode = "error-event.bad-request";
72
94
  var RequestCorrelationIdAttribute = "requestCorrelationId";
73
95
  var HttpStatusCodeAttribute = "httpStatusCode";
74
96
  var unhandled = (builder) => of(
75
- Objects.deepMerge(builder, {
97
+ deepMerge(builder, {
76
98
  code: UnhandledErrorCode,
77
99
  message: "An Unhandled Error has occurred.",
78
100
  attributes: { [HttpStatusCodeAttribute]: 500 }
79
101
  })
80
102
  );
81
103
  var notFound = (builder) => of(
82
- Objects.deepMerge(builder, {
104
+ deepMerge(builder, {
83
105
  code: NotFoundErrorCode,
84
106
  message: "The requested Resource could not be found.",
85
107
  attributes: { [HttpStatusCodeAttribute]: 404 }
86
108
  })
87
109
  );
88
110
  var unauthorized = (builder) => of(
89
- Objects.deepMerge(builder, {
111
+ deepMerge(builder, {
90
112
  code: UnauthorizedErrorCode,
91
113
  message: "The requested Resource requires authentication.",
92
114
  attributes: { [HttpStatusCodeAttribute]: 401 }
93
115
  })
94
116
  );
117
+ var forbidden = (builder) => of(
118
+ deepMerge(builder, {
119
+ code: ForbiddenErrorCode,
120
+ message: "The requested Resource requires additional permissions to access.",
121
+ attributes: { [HttpStatusCodeAttribute]: 403 }
122
+ })
123
+ );
95
124
  var badRequest = (builder) => of(
96
- Objects.deepMerge(builder, {
125
+ deepMerge(builder, {
97
126
  code: BadRequestErrorCode,
98
127
  message: "The request is invalid and cannot be processed.",
99
128
  attributes: { [HttpStatusCodeAttribute]: 400 }
@@ -104,6 +133,7 @@ export {
104
133
  ErrorAttributeSchema,
105
134
  ErrorCodeSchema,
106
135
  ErrorEventException,
136
+ ForbiddenErrorCode,
107
137
  HttpStatusCodeAttribute,
108
138
  NotFoundErrorCode,
109
139
  RequestCorrelationIdAttribute,
@@ -113,12 +143,14 @@ export {
113
143
  badRequest,
114
144
  findByCodeInCausalChain,
115
145
  findInCausalChain,
146
+ forbidden,
116
147
  from,
117
148
  isErrorEvent,
118
149
  isErrorEventException,
119
150
  notFound,
120
151
  of,
121
152
  unauthorized,
122
- unhandled
153
+ unhandled,
154
+ wrap
123
155
  };
124
156
  //# sourceMappingURL=error-event.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/error-event.ts"],"sourcesContent":["import { Arrays, Errors, Objects } from '@bessemer/cornerstone'\nimport { NominalType, Throwable } from '@bessemer/cornerstone/types'\nimport { RecordAttribute } from '@bessemer/cornerstone/object'\nimport Zod, { ZodType } from 'zod'\n\n/*\n Represents a structured error event. The code can be mapped to a unique type of error while the\n message and attributes can provide contextual information about the error. Finally,\n an ErrorEvent could have multiple causes which get aggregated into a single parent error.\n */\nexport type ErrorCode = NominalType<string, 'ErrorCode'>\nexport const ErrorCodeSchema: ZodType<ErrorCode> = Zod.string()\n\nexport type ErrorAttribute<Type = unknown> = RecordAttribute<Type, 'ErrorAttribute'>\nexport const ErrorAttributeSchema: ZodType<ErrorAttribute> = Zod.string()\n\nconst baseErrorEventSchema = Zod.object({\n code: ErrorCodeSchema,\n message: Zod.string(),\n attributes: Zod.record(ErrorAttributeSchema, Zod.unknown()),\n})\n\nexport type ErrorEvent = Zod.infer<typeof baseErrorEventSchema> & {\n causes: Array<ErrorEvent>\n}\n\nconst ErrorEventSchema: ZodType<ErrorEvent> = baseErrorEventSchema.extend({\n causes: Zod.lazy(() => Zod.array(ErrorEventSchema)),\n})\n\n// Builder object that allows for 'partial' representation of ErrorEvents\nexport type ErrorEventBuilder = {\n code: ErrorCode\n message?: string | null\n attributes?: Record<ErrorAttribute, unknown>\n causes?: Array<ErrorEvent>\n}\n\n// An exception type that contains an ErrorEvent\nexport class ErrorEventException extends Error {\n readonly errorEvent: ErrorEvent\n\n constructor(errorEvent: ErrorEvent, cause?: unknown) {\n super(errorEvent.message ?? '', { cause })\n this.name = this.constructor.name\n this.errorEvent = errorEvent\n }\n}\n\nexport const isErrorEvent = (throwable: Throwable): throwable is ErrorEvent => {\n if (!Objects.isObject(throwable)) {\n return false\n }\n\n return 'code' in throwable && 'message' in throwable && 'attributes' in throwable && 'causes' in throwable\n}\n\nexport const isErrorEventException = (throwable: Throwable): throwable is ErrorEventException => {\n return throwable instanceof ErrorEventException\n}\n\nexport const of = (builder: ErrorEventBuilder): ErrorEvent => {\n const code = builder.code\n\n return {\n code,\n message: builder.message ?? code,\n attributes: builder.attributes ?? {},\n causes: builder.causes ?? [],\n }\n}\n\nexport const from = (throwable: Throwable): ErrorEvent => {\n if (isErrorEvent(throwable)) {\n return throwable\n }\n\n if (!Errors.isError(throwable)) {\n return unhandled()\n }\n\n const errorEventException = Errors.findInCausalChain(throwable, isErrorEventException) as ErrorEventException | undefined\n if (Objects.isNil(errorEventException)) {\n return unhandled()\n }\n\n return errorEventException.errorEvent\n}\n\nexport const findByCodeInCausalChain = (error: ErrorEvent, code: string): ErrorEvent | undefined => {\n return findInCausalChain(error, (it) => it.code === code)\n}\n\n/*\n Traverses the causal chain of the ErrorEvent, searching for a predicate that matches (including matching on the parent error event)\n This is useful if you want to find whether or not a given error was caused by a specific failure. The search executes depth-first and\n will return te first matching instance that satisfies the predicate, or undefined otherwise\n */\nexport const findInCausalChain = (error: ErrorEvent, predicate: (error: ErrorEvent) => boolean): ErrorEvent | undefined => {\n if (predicate(error)) {\n return error\n }\n\n return Arrays.first(error.causes.map((it) => findInCausalChain(it, predicate)).filter(Objects.isPresent))\n}\n\nexport const aggregate = (builder: ErrorEventBuilder, causes: Array<ErrorEvent>): ErrorEvent | undefined => {\n if (causes.length === 0) {\n return undefined\n }\n\n return of({ ...builder, causes })\n}\n\nexport const UnhandledErrorCode: ErrorCode = 'error-event.unhandled'\nexport const NotFoundErrorCode: ErrorCode = 'error-event.not-found'\nexport const UnauthorizedErrorCode: ErrorCode = 'error-event.unauthorized'\nexport const BadRequestErrorCode: ErrorCode = 'error-event.bad-request'\n\nexport const RequestCorrelationIdAttribute: ErrorAttribute<string> = 'requestCorrelationId'\nexport const HttpStatusCodeAttribute: ErrorAttribute<number> = 'httpStatusCode'\n\nexport const unhandled = (builder?: Partial<ErrorEventBuilder>) =>\n of(\n Objects.deepMerge(builder, {\n code: UnhandledErrorCode,\n message: 'An Unhandled Error has occurred.',\n attributes: { [HttpStatusCodeAttribute]: 500 },\n })\n )\n\nexport const notFound = (builder?: Partial<ErrorEventBuilder>) =>\n of(\n Objects.deepMerge(builder, {\n code: NotFoundErrorCode,\n message: 'The requested Resource could not be found.',\n attributes: { [HttpStatusCodeAttribute]: 404 },\n })\n )\n\nexport const unauthorized = (builder?: Partial<ErrorEventBuilder>) =>\n of(\n Objects.deepMerge(builder, {\n code: UnauthorizedErrorCode,\n message: 'The requested Resource requires authentication.',\n attributes: { [HttpStatusCodeAttribute]: 401 },\n })\n )\n\nexport const badRequest = (builder?: Partial<ErrorEventBuilder>) =>\n of(\n Objects.deepMerge(builder, {\n code: BadRequestErrorCode,\n message: 'The request is invalid and cannot be processed.',\n attributes: { [HttpStatusCodeAttribute]: 400 },\n })\n )\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/error-event.ts"],"sourcesContent":["import { Dictionary, NominalType, Throwable } from '@bessemer/cornerstone/types'\nimport { deepMerge, isNil, isObject, isPresent, RecordAttribute } from '@bessemer/cornerstone/object'\nimport Zod, { ZodType } from 'zod'\nimport { evaluate, LazyValue } from '@bessemer/cornerstone/lazy'\nimport { isPromise } from '@bessemer/cornerstone/promise'\nimport { findInCausalChain as errorsFindInCausalChain, isError } from '@bessemer/cornerstone/error'\nimport { first } from '@bessemer/cornerstone/array'\n\n/*\n Represents a structured error event. The code can be mapped to a unique type of error while the\n message and attributes can provide contextual information about the error. Finally,\n an ErrorEvent could have multiple causes which get aggregated into a single parent error.\n */\nexport type ErrorCode = NominalType<string, 'ErrorCode'>\nexport const ErrorCodeSchema: ZodType<ErrorCode> = Zod.string()\n\nexport type ErrorAttribute<Type = unknown> = RecordAttribute<Type, 'ErrorAttribute'>\nexport const ErrorAttributeSchema: ZodType<ErrorAttribute> = Zod.string()\n\nconst baseErrorEventSchema = Zod.object({\n code: ErrorCodeSchema,\n message: Zod.string(),\n attributes: Zod.record(ErrorAttributeSchema, Zod.unknown()),\n})\n\nexport type ErrorEvent = Zod.infer<typeof baseErrorEventSchema> & {\n causes: Array<ErrorEvent>\n}\n\nconst ErrorEventSchema: ZodType<ErrorEvent> = baseErrorEventSchema.extend({\n causes: Zod.lazy(() => Zod.array(ErrorEventSchema)),\n})\n\n// Builder object that allows for 'partial' representation of ErrorEvents\nexport type ErrorEventBuilder = {\n code: ErrorCode\n message?: string | null\n attributes?: Record<ErrorAttribute, unknown>\n causes?: Array<ErrorEvent>\n}\n\nexport type ErrorEventAugment = Partial<ErrorEventBuilder>\n\n// An exception type that contains an ErrorEvent\nexport class ErrorEventException extends Error {\n readonly errorEvent: ErrorEvent\n\n constructor(errorEvent: ErrorEvent, cause?: unknown) {\n super(errorEvent.message ?? '', { cause })\n this.name = this.constructor.name\n this.errorEvent = errorEvent\n }\n}\n\nexport const isErrorEvent = (throwable: Throwable): throwable is ErrorEvent => {\n if (!isObject(throwable)) {\n return false\n }\n\n return 'code' in throwable && 'message' in throwable && 'attributes' in throwable && 'causes' in throwable\n}\n\nexport const isErrorEventException = (throwable: Throwable): throwable is ErrorEventException => {\n return throwable instanceof ErrorEventException\n}\n\nexport const of = (builder: ErrorEventBuilder): ErrorEvent => {\n const code = builder.code\n\n return {\n code,\n message: builder.message ?? code,\n attributes: builder.attributes ?? {},\n causes: builder.causes ?? [],\n }\n}\n\nexport function wrap<ReturnType>(runnable: () => ReturnType, attributes: LazyValue<Dictionary<unknown>>): ReturnType\nexport function wrap<ReturnType>(resolver: () => Promise<ReturnType>, attributes: LazyValue<Dictionary<unknown>>): Promise<ReturnType>\nexport function wrap<ReturnType>(\n resolver: () => ReturnType | Promise<ReturnType>,\n attributes: LazyValue<Dictionary<unknown>>\n): ReturnType | Promise<ReturnType> {\n const handleError = (error: Throwable) => {\n const errorEvent = from(error)\n\n const contextualizedEvent = of({ ...errorEvent, attributes: { ...errorEvent.attributes, ...evaluate(attributes) } })\n throw new ErrorEventException(contextualizedEvent, error)\n }\n\n try {\n let result = resolver()\n if (isPromise(result)) {\n return result.then((it) => it).catch((it) => handleError(it))\n } else {\n return result\n }\n } catch (error: Throwable) {\n throw handleError(error)\n }\n}\n\nexport const from = (throwable: Throwable): ErrorEvent => {\n if (isErrorEvent(throwable)) {\n return throwable\n }\n\n if (!isError(throwable)) {\n return unhandled()\n }\n\n const errorEventException = errorsFindInCausalChain(throwable, isErrorEventException) as ErrorEventException | undefined\n if (isNil(errorEventException)) {\n return unhandled()\n }\n\n return errorEventException.errorEvent\n}\n\nexport const findByCodeInCausalChain = (error: ErrorEvent, code: string): ErrorEvent | undefined => {\n return findInCausalChain(error, (it) => it.code === code)\n}\n\n/*\n Traverses the causal chain of the ErrorEvent, searching for a predicate that matches (including matching on the parent error event)\n This is useful if you want to find whether or not a given error was caused by a specific failure. The search executes depth-first and\n will return te first matching instance that satisfies the predicate, or undefined otherwise\n */\nexport const findInCausalChain = (error: ErrorEvent, predicate: (error: ErrorEvent) => boolean): ErrorEvent | undefined => {\n if (predicate(error)) {\n return error\n }\n\n return first(error.causes.map((it) => findInCausalChain(it, predicate)).filter(isPresent))\n}\n\nexport const aggregate = (builder: ErrorEventBuilder, causes: Array<ErrorEvent>): ErrorEvent | undefined => {\n if (causes.length === 0) {\n return undefined\n }\n\n return of({ ...builder, causes })\n}\n\nexport const UnhandledErrorCode: ErrorCode = 'error-event.unhandled'\nexport const NotFoundErrorCode: ErrorCode = 'error-event.not-found'\nexport const ForbiddenErrorCode: ErrorCode = 'error-event.forbidden'\nexport const UnauthorizedErrorCode: ErrorCode = 'error-event.unauthorized'\nexport const BadRequestErrorCode: ErrorCode = 'error-event.bad-request'\n\nexport const RequestCorrelationIdAttribute: ErrorAttribute<string> = 'requestCorrelationId'\nexport const HttpStatusCodeAttribute: ErrorAttribute<number> = 'httpStatusCode'\n\nexport const unhandled = (builder?: ErrorEventAugment) =>\n of(\n deepMerge(builder, {\n code: UnhandledErrorCode,\n message: 'An Unhandled Error has occurred.',\n attributes: { [HttpStatusCodeAttribute]: 500 },\n })\n )\n\nexport const notFound = (builder?: ErrorEventAugment) =>\n of(\n deepMerge(builder, {\n code: NotFoundErrorCode,\n message: 'The requested Resource could not be found.',\n attributes: { [HttpStatusCodeAttribute]: 404 },\n })\n )\n\nexport const unauthorized = (builder?: ErrorEventAugment) =>\n of(\n deepMerge(builder, {\n code: UnauthorizedErrorCode,\n message: 'The requested Resource requires authentication.',\n attributes: { [HttpStatusCodeAttribute]: 401 },\n })\n )\n\nexport const forbidden = (builder?: ErrorEventAugment) =>\n of(\n deepMerge(builder, {\n code: ForbiddenErrorCode,\n message: 'The requested Resource requires additional permissions to access.',\n attributes: { [HttpStatusCodeAttribute]: 403 },\n })\n )\n\nexport const badRequest = (builder?: ErrorEventAugment) =>\n of(\n deepMerge(builder, {\n code: BadRequestErrorCode,\n message: 'The request is invalid and cannot be processed.',\n attributes: { [HttpStatusCodeAttribute]: 400 },\n })\n )\n"],"mappings":"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","names":[]}
package/dist/error.js CHANGED
@@ -1,12 +1,12 @@
1
1
  // src/error.ts
2
- import { Objects } from "@bessemer/cornerstone";
3
2
  import { isError as _isError } from "lodash-es";
3
+ import { isPresent } from "@bessemer/cornerstone/object";
4
4
  var isError = _isError;
5
5
  var findInCausalChain = (error, predicate) => {
6
6
  if (predicate(error)) {
7
7
  return error;
8
8
  }
9
- if (Objects.isPresent(error.cause) && error.cause instanceof Error) {
9
+ if (isPresent(error.cause) && error.cause instanceof Error) {
10
10
  return findInCausalChain(error.cause, predicate);
11
11
  }
12
12
  return void 0;
package/dist/error.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/error.ts"],"sourcesContent":["import { Objects } from '@bessemer/cornerstone'\nimport { isError as _isError } from 'lodash-es'\n\nexport const isError = _isError\n\nexport const findInCausalChain = (error: Error, predicate: (error: Error) => boolean): Error | undefined => {\n if (predicate(error)) {\n return error\n }\n\n if (Objects.isPresent(error.cause) && error.cause instanceof Error) {\n return findInCausalChain(error.cause, predicate)\n }\n\n return undefined\n}\n"],"mappings":";AAAA,SAAS,eAAe;AACxB,SAAS,WAAW,gBAAgB;AAE7B,IAAM,UAAU;AAEhB,IAAM,oBAAoB,CAAC,OAAc,cAA4D;AAC1G,MAAI,UAAU,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,UAAU,MAAM,KAAK,KAAK,MAAM,iBAAiB,OAAO;AAClE,WAAO,kBAAkB,MAAM,OAAO,SAAS;AAAA,EACjD;AAEA,SAAO;AACT;","names":[]}
1
+ {"version":3,"sources":["../src/error.ts"],"sourcesContent":["import { isError as _isError } from 'lodash-es'\nimport { isPresent } from '@bessemer/cornerstone/object'\n\nexport const isError = _isError\n\nexport const findInCausalChain = (error: Error, predicate: (error: Error) => boolean): Error | undefined => {\n if (predicate(error)) {\n return error\n }\n\n if (isPresent(error.cause) && error.cause instanceof Error) {\n return findInCausalChain(error.cause, predicate)\n }\n\n return undefined\n}\n"],"mappings":";AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,iBAAiB;AAEnB,IAAM,UAAU;AAEhB,IAAM,oBAAoB,CAAC,OAAc,cAA4D;AAC1G,MAAI,UAAU,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,UAAU,MAAM,KAAK,KAAK,MAAM,iBAAiB,OAAO;AAC1D,WAAO,kBAAkB,MAAM,OAAO,SAAS;AAAA,EACjD;AAEA,SAAO;AACT;","names":[]}
@@ -1,6 +1,6 @@
1
1
  // src/expression/array-expression.ts
2
2
  import { defineExpression } from "@bessemer/cornerstone/expression/internal";
3
- import { Arrays } from "@bessemer/cornerstone";
3
+ import { concatenate as arrayConcatenate, first as arrayFirst, rest } from "@bessemer/cornerstone/array";
4
4
  var ConcatenateExpression = defineExpression({
5
5
  expressionKey: "Array.Concatenate",
6
6
  builder: (operands) => {
@@ -8,7 +8,7 @@ var ConcatenateExpression = defineExpression({
8
8
  },
9
9
  resolver: ({ operands }, evaluate) => {
10
10
  const values = evaluate(operands).map((it) => evaluate(it));
11
- return Arrays.concatenate(values[0], ...Arrays.rest(values));
11
+ return arrayConcatenate(values[0], ...rest(values));
12
12
  }
13
13
  });
14
14
  var concatenate = ConcatenateExpression.builder;
@@ -19,7 +19,7 @@ var FirstExpression = defineExpression({
19
19
  },
20
20
  resolver: ({ operands }, evaluate) => {
21
21
  const values = evaluate(operands).map((it) => evaluate(it));
22
- return Arrays.first(values);
22
+ return arrayFirst(values);
23
23
  }
24
24
  });
25
25
  var first = FirstExpression.builder;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/expression/array-expression.ts"],"sourcesContent":["import { defineExpression } from '@bessemer/cornerstone/expression/internal'\nimport { Expression } from '@bessemer/cornerstone/expression'\nimport { Arrays } from '@bessemer/cornerstone'\n\nexport const ConcatenateExpression = defineExpression({\n expressionKey: 'Array.Concatenate',\n builder: (operands: Array<Expression<Array<Expression<unknown>>>>) => {\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = evaluate(operands).map((it) => evaluate(it))\n return Arrays.concatenate(values[0], ...Arrays.rest(values))\n },\n})\n\nexport const concatenate = ConcatenateExpression.builder\n\nexport const FirstExpression = defineExpression({\n expressionKey: 'Array.First',\n builder: (operands: Array<Expression<Array<Expression<unknown>>>>) => {\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = evaluate(operands).map((it) => evaluate(it))\n return Arrays.first(values)\n },\n})\n\nexport const first = FirstExpression.builder\n"],"mappings":";AAAA,SAAS,wBAAwB;AAEjC,SAAS,cAAc;AAEhB,IAAM,wBAAwB,iBAAiB;AAAA,EACpD,eAAe;AAAA,EACf,SAAS,CAAC,aAA4D;AACpE,WAAO,EAAE,SAAS;AAAA,EACpB;AAAA,EACA,UAAU,CAAC,EAAE,SAAS,GAAG,aAAa;AACpC,UAAM,SAAS,SAAS,QAAQ,EAAE,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC;AAC1D,WAAO,OAAO,YAAY,OAAO,CAAC,GAAG,GAAG,OAAO,KAAK,MAAM,CAAC;AAAA,EAC7D;AACF,CAAC;AAEM,IAAM,cAAc,sBAAsB;AAE1C,IAAM,kBAAkB,iBAAiB;AAAA,EAC9C,eAAe;AAAA,EACf,SAAS,CAAC,aAA4D;AACpE,WAAO,EAAE,SAAS;AAAA,EACpB;AAAA,EACA,UAAU,CAAC,EAAE,SAAS,GAAG,aAAa;AACpC,UAAM,SAAS,SAAS,QAAQ,EAAE,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC;AAC1D,WAAO,OAAO,MAAM,MAAM;AAAA,EAC5B;AACF,CAAC;AAEM,IAAM,QAAQ,gBAAgB;","names":[]}
1
+ {"version":3,"sources":["../../src/expression/array-expression.ts"],"sourcesContent":["import { defineExpression } from '@bessemer/cornerstone/expression/internal'\nimport { Expression } from '@bessemer/cornerstone/expression'\nimport { concatenate as arrayConcatenate, first as arrayFirst, rest } from '@bessemer/cornerstone/array'\n\nexport const ConcatenateExpression = defineExpression({\n expressionKey: 'Array.Concatenate',\n builder: (operands: Array<Expression<Array<Expression<unknown>>>>) => {\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = evaluate(operands).map((it) => evaluate(it))\n return arrayConcatenate(values[0], ...rest(values))\n },\n})\n\nexport const concatenate = ConcatenateExpression.builder\n\nexport const FirstExpression = defineExpression({\n expressionKey: 'Array.First',\n builder: (operands: Array<Expression<Array<Expression<unknown>>>>) => {\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = evaluate(operands).map((it) => evaluate(it))\n return arrayFirst(values)\n },\n})\n\nexport const first = FirstExpression.builder\n"],"mappings":";AAAA,SAAS,wBAAwB;AAEjC,SAAS,eAAe,kBAAkB,SAAS,YAAY,YAAY;AAEpE,IAAM,wBAAwB,iBAAiB;AAAA,EACpD,eAAe;AAAA,EACf,SAAS,CAAC,aAA4D;AACpE,WAAO,EAAE,SAAS;AAAA,EACpB;AAAA,EACA,UAAU,CAAC,EAAE,SAAS,GAAG,aAAa;AACpC,UAAM,SAAS,SAAS,QAAQ,EAAE,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC;AAC1D,WAAO,iBAAiB,OAAO,CAAC,GAAG,GAAG,KAAK,MAAM,CAAC;AAAA,EACpD;AACF,CAAC;AAEM,IAAM,cAAc,sBAAsB;AAE1C,IAAM,kBAAkB,iBAAiB;AAAA,EAC9C,eAAe;AAAA,EACf,SAAS,CAAC,aAA4D;AACpE,WAAO,EAAE,SAAS;AAAA,EACpB;AAAA,EACA,UAAU,CAAC,EAAE,SAAS,GAAG,aAAa;AACpC,UAAM,SAAS,SAAS,QAAQ,EAAE,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC;AAC1D,WAAO,WAAW,MAAM;AAAA,EAC1B;AACF,CAAC;AAEM,IAAM,QAAQ,gBAAgB;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import { Expression } from '@bessemer/cornerstone/expression';
2
2
  import { BasicType } from '@bessemer/cornerstone/types';
3
- import { Signatures } from '@bessemer/cornerstone';
3
+ import { Signable } from '@bessemer/cornerstone/signature';
4
4
  export declare const ValueExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<unknown, [value: unknown], {
5
5
  value: unknown;
6
6
  }>;
@@ -16,12 +16,12 @@ export declare const AndExpression: import("@bessemer/cornerstone/expression").E
16
16
  export declare const OrExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [operands: Expression<boolean>[]], Expression<boolean> & {
17
17
  operands: Expression<boolean>[];
18
18
  }>;
19
- export declare const EqualsExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [operands: Expression<Signatures.Signable>[]], Expression<boolean> & {
20
- operands: Expression<Signatures.Signable>[];
19
+ export declare const EqualsExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [operands: Expression<Signable>[]], Expression<boolean> & {
20
+ operands: Expression<Signable>[];
21
21
  }>;
22
- export declare const ContainsExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [collection: Expression<Signatures.Signable[]>, operands: Expression<Signatures.Signable>[]], Expression<boolean> & {
23
- collection: Expression<Signatures.Signable[]>;
24
- operands: Expression<Signatures.Signable>[];
22
+ export declare const ContainsExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [collection: Expression<Signable[]>, operands: Expression<Signable>[]], Expression<boolean> & {
23
+ collection: Expression<Signable[]>;
24
+ operands: Expression<Signable>[];
25
25
  }>;
26
26
  export declare const LessThanExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<boolean, [left: Expression<BasicType>, right: Expression<BasicType>], Expression<boolean> & {
27
27
  left: Expression<BasicType>;