@bessemer/cornerstone 0.5.63 → 0.5.64

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 (126) hide show
  1. package/dist/array.d.ts +23 -30
  2. package/dist/array.d.ts.map +1 -1
  3. package/dist/array.js +108 -58
  4. package/dist/array.js.map +1 -1
  5. package/dist/assertion.d.ts +1 -7
  6. package/dist/assertion.d.ts.map +1 -1
  7. package/dist/assertion.js +9 -46
  8. package/dist/assertion.js.map +1 -1
  9. package/dist/async-value.js +2 -2
  10. package/dist/async-value.js.map +1 -1
  11. package/dist/async.d.ts.map +1 -1
  12. package/dist/async.js +2 -2
  13. package/dist/async.js.map +1 -1
  14. package/dist/cache.d.ts +5 -5
  15. package/dist/cache.d.ts.map +1 -1
  16. package/dist/cache.js +21 -17
  17. package/dist/cache.js.map +1 -1
  18. package/dist/combinable.d.ts.map +1 -1
  19. package/dist/combinable.js +5 -4
  20. package/dist/combinable.js.map +1 -1
  21. package/dist/comparator.d.ts.map +1 -1
  22. package/dist/comparator.js +9 -8
  23. package/dist/comparator.js.map +1 -1
  24. package/dist/content.d.ts +2 -2
  25. package/dist/date.d.ts +1 -1
  26. package/dist/date.d.ts.map +1 -1
  27. package/dist/date.js +5 -4
  28. package/dist/date.js.map +1 -1
  29. package/dist/either.d.ts +0 -1
  30. package/dist/either.d.ts.map +1 -1
  31. package/dist/either.js +2 -3
  32. package/dist/either.js.map +1 -1
  33. package/dist/entry.d.ts +9 -7
  34. package/dist/entry.d.ts.map +1 -1
  35. package/dist/entry.js +5 -1
  36. package/dist/entry.js.map +1 -1
  37. package/dist/equalitor.d.ts +2 -1
  38. package/dist/equalitor.d.ts.map +1 -1
  39. package/dist/equalitor.js +6 -2
  40. package/dist/equalitor.js.map +1 -1
  41. package/dist/error-event.d.ts +5 -0
  42. package/dist/error-event.d.ts.map +1 -1
  43. package/dist/error-event.js +45 -12
  44. package/dist/error-event.js.map +1 -1
  45. package/dist/error.d.ts.map +1 -1
  46. package/dist/error.js +2 -2
  47. package/dist/error.js.map +1 -1
  48. package/dist/expression/array-expression.js +1 -1
  49. package/dist/expression/array-expression.js.map +1 -1
  50. package/dist/index.d.ts +2 -1
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +2 -0
  53. package/dist/index.js.map +1 -1
  54. package/dist/json.d.ts.map +1 -1
  55. package/dist/json.js +3 -3
  56. package/dist/json.js.map +1 -1
  57. package/dist/logger.d.ts.map +1 -1
  58. package/dist/logger.js +10 -9
  59. package/dist/logger.js.map +1 -1
  60. package/dist/map.d.ts +18 -0
  61. package/dist/map.d.ts.map +1 -0
  62. package/dist/map.js +110 -0
  63. package/dist/map.js.map +1 -0
  64. package/dist/math.d.ts +1 -1
  65. package/dist/math.d.ts.map +1 -1
  66. package/dist/math.js +4 -7
  67. package/dist/math.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/monetary-amount.d.ts +8 -2
  72. package/dist/monetary-amount.d.ts.map +1 -1
  73. package/dist/monetary-amount.js +23 -6
  74. package/dist/monetary-amount.js.map +1 -1
  75. package/dist/object.d.ts +5 -16
  76. package/dist/object.d.ts.map +1 -1
  77. package/dist/object.js +64 -19
  78. package/dist/object.js.map +1 -1
  79. package/dist/patch.d.ts.map +1 -1
  80. package/dist/patch.js +6 -5
  81. package/dist/patch.js.map +1 -1
  82. package/dist/property.d.ts.map +1 -1
  83. package/dist/property.js +5 -4
  84. package/dist/property.js.map +1 -1
  85. package/dist/range.d.ts +3 -1
  86. package/dist/range.d.ts.map +1 -1
  87. package/dist/range.js +2 -2
  88. package/dist/range.js.map +1 -1
  89. package/dist/reference.d.ts +1 -2
  90. package/dist/reference.d.ts.map +1 -1
  91. package/dist/reference.js +13 -10
  92. package/dist/reference.js.map +1 -1
  93. package/dist/resource.d.ts.map +1 -1
  94. package/dist/resource.js +2 -2
  95. package/dist/resource.js.map +1 -1
  96. package/dist/result.d.ts.map +1 -1
  97. package/dist/result.js +6 -5
  98. package/dist/result.js.map +1 -1
  99. package/dist/retry.d.ts.map +1 -1
  100. package/dist/retry.js +14 -9
  101. package/dist/retry.js.map +1 -1
  102. package/dist/rich-text.js +2 -2
  103. package/dist/rich-text.js.map +1 -1
  104. package/dist/signature.d.ts +3 -2
  105. package/dist/signature.d.ts.map +1 -1
  106. package/dist/signature.js +6 -4
  107. package/dist/signature.js.map +1 -1
  108. package/dist/store.d.ts +13 -13
  109. package/dist/store.d.ts.map +1 -1
  110. package/dist/store.js +9 -7
  111. package/dist/store.js.map +1 -1
  112. package/dist/string.d.ts.map +1 -1
  113. package/dist/string.js +3 -4
  114. package/dist/string.js.map +1 -1
  115. package/dist/tag.d.ts.map +1 -1
  116. package/dist/tag.js +12 -12
  117. package/dist/tag.js.map +1 -1
  118. package/dist/uri.d.ts.map +1 -1
  119. package/dist/uri.js +52 -50
  120. package/dist/uri.js.map +1 -1
  121. package/dist/url.d.ts.map +1 -1
  122. package/dist/url.js.map +1 -1
  123. package/dist/uuid.d.ts.map +1 -1
  124. package/dist/uuid.js +4 -3
  125. package/dist/uuid.js.map +1 -1
  126. package/package.json +1 -1
@@ -1,7 +1,10 @@
1
1
  // src/error-event.ts
2
- import { Arrays, Errors, Objects, Promises } from "@bessemer/cornerstone";
2
+ import { deepMerge, isNil, isObject, isPresent } from "@bessemer/cornerstone/object";
3
3
  import Zod from "zod";
4
4
  import { evaluate } from "@bessemer/cornerstone/lazy";
5
+ import { findInCausalChain as errorsFindInCausalChain, isError } from "@bessemer/cornerstone/error";
6
+ import { isPromise } from "@bessemer/cornerstone/promise";
7
+ import { first } from "@bessemer/cornerstone/array";
5
8
  var ErrorCodeSchema = Zod.string();
6
9
  var ErrorAttributeSchema = Zod.string();
7
10
  var baseErrorEventSchema = Zod.object({
@@ -21,7 +24,7 @@ var ErrorEventException = class extends Error {
21
24
  }
22
25
  };
23
26
  var isErrorEvent = (throwable) => {
24
- if (!Objects.isObject(throwable)) {
27
+ if (!isObject(throwable)) {
25
28
  return false;
26
29
  }
27
30
  return "code" in throwable && "message" in throwable && "attributes" in throwable && "causes" in throwable;
@@ -42,11 +45,11 @@ var from = (throwable) => {
42
45
  if (isErrorEvent(throwable)) {
43
46
  return throwable;
44
47
  }
45
- if (!Errors.isError(throwable)) {
48
+ if (!isError(throwable)) {
46
49
  return unhandled();
47
50
  }
48
- const errorEventException = Errors.findInCausalChain(throwable, isErrorEventException);
49
- if (Objects.isNil(errorEventException)) {
51
+ const errorEventException = errorsFindInCausalChain(throwable, isErrorEventException);
52
+ if (isNil(errorEventException)) {
50
53
  return unhandled();
51
54
  }
52
55
  return errorEventException.errorEvent;
@@ -54,7 +57,7 @@ var from = (throwable) => {
54
57
  function withPropagation(runnable, attributes) {
55
58
  try {
56
59
  let result = runnable();
57
- if (Promises.isPromise(result)) {
60
+ if (isPromise(result)) {
58
61
  return result.then((it) => it).catch((it) => propagate(it, evaluate(attributes)));
59
62
  } else {
60
63
  return result;
@@ -81,7 +84,7 @@ var findInCausalChain = (error, predicate) => {
81
84
  if (predicate(error)) {
82
85
  return error;
83
86
  }
84
- return Arrays.first(error.causes.map((it) => findInCausalChain(it, predicate)).filter(Objects.isPresent));
87
+ return first(error.causes.map((it) => findInCausalChain(it, predicate)).filter(isPresent));
85
88
  };
86
89
  var aggregate = (builder, causes) => {
87
90
  if (causes.length === 0) {
@@ -97,7 +100,7 @@ var BadRequestErrorCode = "error-event.bad-request";
97
100
  var RequestCorrelationIdAttribute = "requestCorrelationId";
98
101
  var HttpStatusCodeAttribute = "httpStatusCode";
99
102
  var unhandled = (builder) => of(
100
- Objects.deepMerge(
103
+ deepMerge(
101
104
  {
102
105
  code: UnhandledErrorCode,
103
106
  message: "An Unhandled Error has occurred.",
@@ -107,7 +110,7 @@ var unhandled = (builder) => of(
107
110
  )
108
111
  );
109
112
  var notFound = (builder) => of(
110
- Objects.deepMerge(
113
+ deepMerge(
111
114
  {
112
115
  code: NotFoundErrorCode,
113
116
  message: "The requested Resource could not be found.",
@@ -117,7 +120,7 @@ var notFound = (builder) => of(
117
120
  )
118
121
  );
119
122
  var unauthorized = (builder) => of(
120
- Objects.deepMerge(
123
+ deepMerge(
121
124
  {
122
125
  code: UnauthorizedErrorCode,
123
126
  message: "The requested Resource requires authentication.",
@@ -127,7 +130,7 @@ var unauthorized = (builder) => of(
127
130
  )
128
131
  );
129
132
  var forbidden = (builder) => of(
130
- Objects.deepMerge(
133
+ deepMerge(
131
134
  {
132
135
  code: ForbiddenErrorCode,
133
136
  message: "The requested Resource requires additional permissions to access.",
@@ -137,7 +140,7 @@ var forbidden = (builder) => of(
137
140
  )
138
141
  );
139
142
  var badRequest = (builder) => of(
140
- Objects.deepMerge(
143
+ deepMerge(
141
144
  {
142
145
  code: BadRequestErrorCode,
143
146
  message: "The request is invalid and cannot be processed.",
@@ -146,6 +149,31 @@ var badRequest = (builder) => of(
146
149
  builder
147
150
  )
148
151
  );
152
+ function assertPresent(value, builder = () => void 0) {
153
+ if (isNil(value)) {
154
+ throw new ErrorEventException(notFound(evaluate(builder)));
155
+ }
156
+ }
157
+ function assertAuthorized(value, builder = () => void 0) {
158
+ if (!value) {
159
+ throw new ErrorEventException(unauthorized(evaluate(builder)));
160
+ }
161
+ }
162
+ function assertPermitted(value, builder = () => void 0) {
163
+ if (!value) {
164
+ throw new ErrorEventException(forbidden(evaluate(builder)));
165
+ }
166
+ }
167
+ function assertValid(value, builder = () => void 0) {
168
+ if (!value) {
169
+ throw new ErrorEventException(badRequest(evaluate(builder)));
170
+ }
171
+ }
172
+ function assert(value, builder) {
173
+ if (!value) {
174
+ throw new ErrorEventException(of(evaluate(builder)));
175
+ }
176
+ }
149
177
  export {
150
178
  BadRequestErrorCode,
151
179
  ErrorAttributeSchema,
@@ -158,6 +186,11 @@ export {
158
186
  UnauthorizedErrorCode,
159
187
  UnhandledErrorCode,
160
188
  aggregate,
189
+ assert,
190
+ assertAuthorized,
191
+ assertPermitted,
192
+ assertPresent,
193
+ assertValid,
161
194
  badRequest,
162
195
  findByCodeInCausalChain,
163
196
  findInCausalChain,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/error-event.ts"],"sourcesContent":["import { Arrays, Errors, Objects, Promises } from '@bessemer/cornerstone'\nimport { Dictionary, NominalType, Throwable } from '@bessemer/cornerstone/types'\nimport { RecordAttribute } from '@bessemer/cornerstone/object'\nimport Zod, { ZodType } from 'zod'\nimport { evaluate, LazyValue } from '@bessemer/cornerstone/lazy'\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 (!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 function withPropagation<ReturnType>(runnable: () => ReturnType, attributes: LazyValue<Dictionary<unknown>>): ReturnType\nexport function withPropagation<ReturnType>(runnable: () => Promise<ReturnType>, attributes: LazyValue<Dictionary<unknown>>): Promise<ReturnType>\nexport function withPropagation<ReturnType>(\n runnable: () => ReturnType | Promise<ReturnType>,\n attributes: LazyValue<Dictionary<unknown>>\n): ReturnType | Promise<ReturnType> {\n try {\n let result = runnable()\n if (Promises.isPromise(result)) {\n return result.then((it) => it).catch((it) => propagate(it, evaluate(attributes)))\n } else {\n return result\n }\n } catch (throwable: Throwable) {\n throw propagate(throwable, evaluate(attributes))\n }\n}\n\nexport const propagate = (throwable: Throwable, attributes: Dictionary<unknown>): never => {\n if (isErrorEventException(throwable)) {\n // We just mutate the existing error event to avoid nested exceptions\n const errorEvent = throwable.errorEvent\n errorEvent.attributes = { ...errorEvent.attributes, ...attributes }\n throw throwable\n } else {\n const errorEvent = from(throwable)\n const contextualizedEvent = of({ ...errorEvent, attributes: { ...errorEvent.attributes, ...attributes } })\n throw new ErrorEventException(contextualizedEvent, throwable)\n }\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 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 Objects.deepMerge(\n {\n code: UnhandledErrorCode,\n message: 'An Unhandled Error has occurred.',\n attributes: { [HttpStatusCodeAttribute]: 500 },\n },\n builder\n )\n )\n\nexport const notFound = (builder?: ErrorEventAugment) =>\n of(\n Objects.deepMerge(\n {\n code: NotFoundErrorCode,\n message: 'The requested Resource could not be found.',\n attributes: { [HttpStatusCodeAttribute]: 404 },\n },\n builder\n )\n )\n\nexport const unauthorized = (builder?: ErrorEventAugment) =>\n of(\n Objects.deepMerge(\n {\n code: UnauthorizedErrorCode,\n message: 'The requested Resource requires authentication.',\n attributes: { [HttpStatusCodeAttribute]: 401 },\n },\n builder\n )\n )\n\nexport const forbidden = (builder?: ErrorEventAugment) =>\n of(\n Objects.deepMerge(\n {\n code: ForbiddenErrorCode,\n message: 'The requested Resource requires additional permissions to access.',\n attributes: { [HttpStatusCodeAttribute]: 403 },\n },\n builder\n )\n )\n\nexport const badRequest = (builder?: ErrorEventAugment) =>\n of(\n Objects.deepMerge(\n {\n code: BadRequestErrorCode,\n message: 'The request is invalid and cannot be processed.',\n attributes: { [HttpStatusCodeAttribute]: 400 },\n },\n builder\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 { findInCausalChain as errorsFindInCausalChain, isError } from '@bessemer/cornerstone/error'\nimport { isPromise } from '@bessemer/cornerstone/promise'\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 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 function withPropagation<ReturnType>(runnable: () => ReturnType, attributes: LazyValue<Dictionary<unknown>>): ReturnType\nexport function withPropagation<ReturnType>(runnable: () => Promise<ReturnType>, attributes: LazyValue<Dictionary<unknown>>): Promise<ReturnType>\nexport function withPropagation<ReturnType>(\n runnable: () => ReturnType | Promise<ReturnType>,\n attributes: LazyValue<Dictionary<unknown>>\n): ReturnType | Promise<ReturnType> {\n try {\n let result = runnable()\n if (isPromise(result)) {\n return result.then((it) => it).catch((it) => propagate(it, evaluate(attributes)))\n } else {\n return result\n }\n } catch (throwable: Throwable) {\n throw propagate(throwable, evaluate(attributes))\n }\n}\n\nexport const propagate = (throwable: Throwable, attributes: Dictionary<unknown>): never => {\n if (isErrorEventException(throwable)) {\n // We just mutate the existing error event to avoid nested exceptions\n const errorEvent = throwable.errorEvent\n errorEvent.attributes = { ...errorEvent.attributes, ...attributes }\n throw throwable\n } else {\n const errorEvent = from(throwable)\n const contextualizedEvent = of({ ...errorEvent, attributes: { ...errorEvent.attributes, ...attributes } })\n throw new ErrorEventException(contextualizedEvent, throwable)\n }\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(\n {\n code: UnhandledErrorCode,\n message: 'An Unhandled Error has occurred.',\n attributes: { [HttpStatusCodeAttribute]: 500 },\n },\n builder\n )\n )\n\nexport const notFound = (builder?: ErrorEventAugment) =>\n of(\n deepMerge(\n {\n code: NotFoundErrorCode,\n message: 'The requested Resource could not be found.',\n attributes: { [HttpStatusCodeAttribute]: 404 },\n },\n builder\n )\n )\n\nexport const unauthorized = (builder?: ErrorEventAugment) =>\n of(\n deepMerge(\n {\n code: UnauthorizedErrorCode,\n message: 'The requested Resource requires authentication.',\n attributes: { [HttpStatusCodeAttribute]: 401 },\n },\n builder\n )\n )\n\nexport const forbidden = (builder?: ErrorEventAugment) =>\n of(\n deepMerge(\n {\n code: ForbiddenErrorCode,\n message: 'The requested Resource requires additional permissions to access.',\n attributes: { [HttpStatusCodeAttribute]: 403 },\n },\n builder\n )\n )\n\nexport const badRequest = (builder?: ErrorEventAugment) =>\n of(\n deepMerge(\n {\n code: BadRequestErrorCode,\n message: 'The request is invalid and cannot be processed.',\n attributes: { [HttpStatusCodeAttribute]: 400 },\n },\n builder\n )\n )\n\nexport function assertPresent<T>(value: T, builder: LazyValue<ErrorEventAugment | undefined> = () => undefined): asserts value is NonNullable<T> {\n if (isNil(value)) {\n throw new ErrorEventException(notFound(evaluate(builder)))\n }\n}\n\nexport function assertAuthorized<T>(value: boolean, builder: LazyValue<ErrorEventAugment | undefined> = () => undefined): asserts value is true {\n if (!value) {\n throw new ErrorEventException(unauthorized(evaluate(builder)))\n }\n}\n\nexport function assertPermitted<T>(value: boolean, builder: LazyValue<ErrorEventAugment | undefined> = () => undefined): asserts value is true {\n if (!value) {\n throw new ErrorEventException(forbidden(evaluate(builder)))\n }\n}\n\nexport function assertValid<T>(value: boolean, builder: LazyValue<ErrorEventAugment | undefined> = () => undefined): asserts value is true {\n if (!value) {\n throw new ErrorEventException(badRequest(evaluate(builder)))\n }\n}\n\nexport function assert<T>(value: boolean, builder: LazyValue<ErrorEventBuilder>): asserts value is true {\n if (!value) {\n throw new ErrorEventException(of(evaluate(builder)))\n }\n}\n"],"mappings":"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","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,gCAAW,CAAA;AAE/B,eAAO,MAAM,iBAAiB,GAAI,OAAO,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,KAAG,KAAK,GAAG,SAU9F,CAAA"}
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,OAAO,gCAAW,CAAA;AAE/B,eAAO,MAAM,iBAAiB,GAAI,OAAO,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,KAAG,KAAK,GAAG,SAU9F,CAAA"}
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'\nimport { Throwable } from '@bessemer/cornerstone/types'\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\nconst serializeError = (error: Throwable): any => {\n if (!isPresent(error)) {\n return undefined\n }\n\n if (!isError(error)) {\n return error\n }\n\n const cause = isPresent(error.cause) ? serializeError(error.cause) : undefined\n\n const serialized = {\n name: error.name,\n message: error.message,\n stack: error.stack,\n cause,\n }\n\n return serialized\n}\n"],"mappings":";AAAA,SAAS,WAAW,gBAAgB;AACpC,SAAS,iBAAiB;AAGnB,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":[]}
@@ -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 Arrays.concatenate(values[0] ?? [], ...Arrays.rest(values));
12
12
  }
13
13
  });
14
14
  var concatenate = ConcatenateExpression.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 { 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,KAAK,CAAC,GAAG,GAAG,OAAO,KAAK,MAAM,CAAC;AAAA,EACnE;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":[]}
package/dist/index.d.ts CHANGED
@@ -5,6 +5,7 @@ import * as Strings from '@bessemer/cornerstone/string';
5
5
  import * as Async from '@bessemer/cornerstone/async';
6
6
  import * as AsyncValues from '@bessemer/cornerstone/async-value';
7
7
  import * as Maths from '@bessemer/cornerstone/math';
8
+ import * as Maps from '@bessemer/cornerstone/map';
8
9
  import * as Sets from '@bessemer/cornerstone/set';
9
10
  import * as Dates from '@bessemer/cornerstone/date';
10
11
  import * as Comparators from '@bessemer/cornerstone/comparator';
@@ -45,5 +46,5 @@ import * as DataSizes from '@bessemer/cornerstone/data-size';
45
46
  import * as MimeTypes from '@bessemer/cornerstone/mime-type';
46
47
  import * as Currencies from '@bessemer/cornerstone/currency';
47
48
  import * as MonetaryAmounts from '@bessemer/cornerstone/monetary-amount';
48
- export { Objects, Functions, Arrays, Strings, Async, AsyncValues, Maths, Sets, Dates, Comparators, Equalitors, Durations, Uris, Urls, Loggers, Errors, ErrorEvents, Assertions, Uuids, Ulids, Entries, Hashes, Crypto, Globs, Ranges, ZodUtil, Tags, Promises, References, Signatures, Eithers, Results, Lazy, Patches, Content, Combinables, Properties, RichTexts, Retry, Stores, Misc, Json, AspectRatios, DataSizes, MimeTypes, Currencies, MonetaryAmounts, };
49
+ export { Objects, Functions, Arrays, Strings, Async, AsyncValues, Maths, Maps, Sets, Dates, Comparators, Equalitors, Durations, Uris, Urls, Loggers, Errors, ErrorEvents, Assertions, Uuids, Ulids, Entries, Hashes, Crypto, Globs, Ranges, ZodUtil, Tags, Promises, References, Signatures, Eithers, Results, Lazy, Patches, Content, Combinables, Properties, RichTexts, Retry, Stores, Misc, Json, AspectRatios, DataSizes, MimeTypes, Currencies, MonetaryAmounts, };
49
50
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -6,6 +6,7 @@ import * as Strings from "@bessemer/cornerstone/string";
6
6
  import * as Async from "@bessemer/cornerstone/async";
7
7
  import * as AsyncValues from "@bessemer/cornerstone/async-value";
8
8
  import * as Maths from "@bessemer/cornerstone/math";
9
+ import * as Maps from "@bessemer/cornerstone/map";
9
10
  import * as Sets from "@bessemer/cornerstone/set";
10
11
  import * as Dates from "@bessemer/cornerstone/date";
11
12
  import * as Comparators from "@bessemer/cornerstone/comparator";
@@ -71,6 +72,7 @@ export {
71
72
  Json,
72
73
  Lazy,
73
74
  Loggers,
75
+ Maps,
74
76
  Maths,
75
77
  MimeTypes,
76
78
  Misc,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import * as Objects from '@bessemer/cornerstone/object'\nimport * as Functions from '@bessemer/cornerstone/function'\nimport * as Arrays from '@bessemer/cornerstone/array'\nimport * as Strings from '@bessemer/cornerstone/string'\nimport * as Async from '@bessemer/cornerstone/async'\nimport * as AsyncValues from '@bessemer/cornerstone/async-value'\nimport * as Maths from '@bessemer/cornerstone/math'\nimport * as Sets from '@bessemer/cornerstone/set'\nimport * as Dates from '@bessemer/cornerstone/date'\nimport * as Comparators from '@bessemer/cornerstone/comparator'\nimport * as Equalitors from '@bessemer/cornerstone/equalitor'\nimport * as Durations from '@bessemer/cornerstone/duration'\nimport * as Uris from '@bessemer/cornerstone/uri'\nimport * as Urls from '@bessemer/cornerstone/url'\nimport * as Loggers from '@bessemer/cornerstone/logger'\nimport * as Errors from '@bessemer/cornerstone/error'\nimport * as ErrorEvents from '@bessemer/cornerstone/error-event'\nimport * as Assertions from '@bessemer/cornerstone/assertion'\nimport * as Uuids from '@bessemer/cornerstone/uuid'\nimport * as Ulids from '@bessemer/cornerstone/ulid'\nimport * as Entries from '@bessemer/cornerstone/entry'\nimport * as Hashes from '@bessemer/cornerstone/hash'\nimport * as Crypto from '@bessemer/cornerstone/crypto'\nimport * as Globs from '@bessemer/cornerstone/glob'\nimport * as Ranges from '@bessemer/cornerstone/range'\n\nimport * as ZodUtil from '@bessemer/cornerstone/zod-util'\nimport * as Tags from '@bessemer/cornerstone/tag'\nimport * as Promises from '@bessemer/cornerstone/promise'\nimport * as References from '@bessemer/cornerstone/reference'\nimport * as Signatures from '@bessemer/cornerstone/signature'\nimport * as Eithers from '@bessemer/cornerstone/either'\nimport * as Results from '@bessemer/cornerstone/result'\nimport * as Lazy from '@bessemer/cornerstone/lazy'\nimport * as Patches from '@bessemer/cornerstone/patch'\nimport * as Content from '@bessemer/cornerstone/content'\nimport * as Combinables from '@bessemer/cornerstone/combinable'\nimport * as Properties from '@bessemer/cornerstone/property'\nimport * as RichTexts from '@bessemer/cornerstone/rich-text'\nimport * as Retry from '@bessemer/cornerstone/retry'\nimport * as Stores from '@bessemer/cornerstone/store'\nimport * as Misc from '@bessemer/cornerstone/misc'\nimport * as Json from '@bessemer/cornerstone/json'\nimport * as AspectRatios from '@bessemer/cornerstone/aspect-ratio'\nimport * as DataSizes from '@bessemer/cornerstone/data-size'\nimport * as MimeTypes from '@bessemer/cornerstone/mime-type'\nimport * as Currencies from '@bessemer/cornerstone/currency'\nimport * as MonetaryAmounts from '@bessemer/cornerstone/monetary-amount'\n\nexport {\n Objects,\n Functions,\n Arrays,\n Strings,\n Async,\n AsyncValues,\n Maths,\n Sets,\n Dates,\n Comparators,\n Equalitors,\n Durations,\n Uris,\n Urls,\n Loggers,\n Errors,\n ErrorEvents,\n Assertions,\n Uuids,\n Ulids,\n Entries,\n Hashes,\n Crypto,\n Globs,\n Ranges,\n ZodUtil,\n Tags,\n Promises,\n References,\n Signatures,\n Eithers,\n Results,\n Lazy,\n Patches,\n Content,\n Combinables,\n Properties,\n RichTexts,\n Retry,\n Stores,\n Misc,\n Json,\n AspectRatios,\n DataSizes,\n MimeTypes,\n Currencies,\n MonetaryAmounts,\n}\n"],"mappings":";AAAA,YAAY,aAAa;AACzB,YAAY,eAAe;AAC3B,YAAY,YAAY;AACxB,YAAY,aAAa;AACzB,YAAY,WAAW;AACvB,YAAY,iBAAiB;AAC7B,YAAY,WAAW;AACvB,YAAY,UAAU;AACtB,YAAY,WAAW;AACvB,YAAY,iBAAiB;AAC7B,YAAY,gBAAgB;AAC5B,YAAY,eAAe;AAC3B,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB,YAAY,aAAa;AACzB,YAAY,YAAY;AACxB,YAAY,iBAAiB;AAC7B,YAAY,gBAAgB;AAC5B,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,aAAa;AACzB,YAAY,YAAY;AACxB,YAAY,YAAY;AACxB,YAAY,WAAW;AACvB,YAAY,YAAY;AAExB,YAAY,aAAa;AACzB,YAAY,UAAU;AACtB,YAAY,cAAc;AAC1B,YAAY,gBAAgB;AAC5B,YAAY,gBAAgB;AAC5B,YAAY,aAAa;AACzB,YAAY,aAAa;AACzB,YAAY,UAAU;AACtB,YAAY,aAAa;AACzB,YAAY,aAAa;AACzB,YAAY,iBAAiB;AAC7B,YAAY,gBAAgB;AAC5B,YAAY,eAAe;AAC3B,YAAY,WAAW;AACvB,YAAY,YAAY;AACxB,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB,YAAY,kBAAkB;AAC9B,YAAY,eAAe;AAC3B,YAAY,eAAe;AAC3B,YAAY,gBAAgB;AAC5B,YAAY,qBAAqB;","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import * as Objects from '@bessemer/cornerstone/object'\nimport * as Functions from '@bessemer/cornerstone/function'\nimport * as Arrays from '@bessemer/cornerstone/array'\nimport * as Strings from '@bessemer/cornerstone/string'\nimport * as Async from '@bessemer/cornerstone/async'\nimport * as AsyncValues from '@bessemer/cornerstone/async-value'\nimport * as Maths from '@bessemer/cornerstone/math'\nimport * as Maps from '@bessemer/cornerstone/map'\nimport * as Sets from '@bessemer/cornerstone/set'\nimport * as Dates from '@bessemer/cornerstone/date'\nimport * as Comparators from '@bessemer/cornerstone/comparator'\nimport * as Equalitors from '@bessemer/cornerstone/equalitor'\nimport * as Durations from '@bessemer/cornerstone/duration'\nimport * as Uris from '@bessemer/cornerstone/uri'\nimport * as Urls from '@bessemer/cornerstone/url'\nimport * as Loggers from '@bessemer/cornerstone/logger'\nimport * as Errors from '@bessemer/cornerstone/error'\nimport * as ErrorEvents from '@bessemer/cornerstone/error-event'\nimport * as Assertions from '@bessemer/cornerstone/assertion'\nimport * as Uuids from '@bessemer/cornerstone/uuid'\nimport * as Ulids from '@bessemer/cornerstone/ulid'\nimport * as Entries from '@bessemer/cornerstone/entry'\nimport * as Hashes from '@bessemer/cornerstone/hash'\nimport * as Crypto from '@bessemer/cornerstone/crypto'\nimport * as Globs from '@bessemer/cornerstone/glob'\nimport * as Ranges from '@bessemer/cornerstone/range'\n\nimport * as ZodUtil from '@bessemer/cornerstone/zod-util'\nimport * as Tags from '@bessemer/cornerstone/tag'\nimport * as Promises from '@bessemer/cornerstone/promise'\nimport * as References from '@bessemer/cornerstone/reference'\nimport * as Signatures from '@bessemer/cornerstone/signature'\nimport * as Eithers from '@bessemer/cornerstone/either'\nimport * as Results from '@bessemer/cornerstone/result'\nimport * as Lazy from '@bessemer/cornerstone/lazy'\nimport * as Patches from '@bessemer/cornerstone/patch'\nimport * as Content from '@bessemer/cornerstone/content'\nimport * as Combinables from '@bessemer/cornerstone/combinable'\nimport * as Properties from '@bessemer/cornerstone/property'\nimport * as RichTexts from '@bessemer/cornerstone/rich-text'\nimport * as Retry from '@bessemer/cornerstone/retry'\nimport * as Stores from '@bessemer/cornerstone/store'\nimport * as Misc from '@bessemer/cornerstone/misc'\nimport * as Json from '@bessemer/cornerstone/json'\nimport * as AspectRatios from '@bessemer/cornerstone/aspect-ratio'\nimport * as DataSizes from '@bessemer/cornerstone/data-size'\nimport * as MimeTypes from '@bessemer/cornerstone/mime-type'\nimport * as Currencies from '@bessemer/cornerstone/currency'\nimport * as MonetaryAmounts from '@bessemer/cornerstone/monetary-amount'\n\nexport {\n Objects,\n Functions,\n Arrays,\n Strings,\n Async,\n AsyncValues,\n Maths,\n Maps,\n Sets,\n Dates,\n Comparators,\n Equalitors,\n Durations,\n Uris,\n Urls,\n Loggers,\n Errors,\n ErrorEvents,\n Assertions,\n Uuids,\n Ulids,\n Entries,\n Hashes,\n Crypto,\n Globs,\n Ranges,\n ZodUtil,\n Tags,\n Promises,\n References,\n Signatures,\n Eithers,\n Results,\n Lazy,\n Patches,\n Content,\n Combinables,\n Properties,\n RichTexts,\n Retry,\n Stores,\n Misc,\n Json,\n AspectRatios,\n DataSizes,\n MimeTypes,\n Currencies,\n MonetaryAmounts,\n}\n"],"mappings":";AAAA,YAAY,aAAa;AACzB,YAAY,eAAe;AAC3B,YAAY,YAAY;AACxB,YAAY,aAAa;AACzB,YAAY,WAAW;AACvB,YAAY,iBAAiB;AAC7B,YAAY,WAAW;AACvB,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB,YAAY,WAAW;AACvB,YAAY,iBAAiB;AAC7B,YAAY,gBAAgB;AAC5B,YAAY,eAAe;AAC3B,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB,YAAY,aAAa;AACzB,YAAY,YAAY;AACxB,YAAY,iBAAiB;AAC7B,YAAY,gBAAgB;AAC5B,YAAY,WAAW;AACvB,YAAY,WAAW;AACvB,YAAY,aAAa;AACzB,YAAY,YAAY;AACxB,YAAY,YAAY;AACxB,YAAY,WAAW;AACvB,YAAY,YAAY;AAExB,YAAY,aAAa;AACzB,YAAY,UAAU;AACtB,YAAY,cAAc;AAC1B,YAAY,gBAAgB;AAC5B,YAAY,gBAAgB;AAC5B,YAAY,aAAa;AACzB,YAAY,aAAa;AACzB,YAAY,UAAU;AACtB,YAAY,aAAa;AACzB,YAAY,aAAa;AACzB,YAAY,iBAAiB;AAC7B,YAAY,gBAAgB;AAC5B,YAAY,eAAe;AAC3B,YAAY,WAAW;AACvB,YAAY,YAAY;AACxB,YAAY,UAAU;AACtB,YAAY,UAAU;AACtB,YAAY,kBAAkB;AAC9B,YAAY,eAAe;AAC3B,YAAY,eAAe;AAC3B,YAAY,gBAAgB;AAC5B,YAAY,qBAAqB;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAErD,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,GAAG,CAE9C,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,GAAG,CAErD,CAAA"}
1
+ {"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../src/json.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,MAAM,EAAY,MAAM,8BAA8B,CAAA;AAEhF,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,GAAG,CAE9C,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,GAAG,CAErD,CAAA"}
package/dist/json.js CHANGED
@@ -1,10 +1,10 @@
1
1
  // src/json.ts
2
- import { Results } from "@bessemer/cornerstone";
2
+ import { getValueOrThrow, tryValue } from "@bessemer/cornerstone/result";
3
3
  var parse = (data) => {
4
- return Results.tryValue(() => JSON.parse(data));
4
+ return tryValue(() => JSON.parse(data));
5
5
  };
6
6
  var parseOrThrow = (data) => {
7
- return Results.getValueOrThrow(parse(data));
7
+ return getValueOrThrow(parse(data));
8
8
  };
9
9
  export {
10
10
  parse,
package/dist/json.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/json.ts"],"sourcesContent":["import { Results } from '@bessemer/cornerstone'\nimport { JsonValue } from 'type-fest'\nimport { Result } from '@bessemer/cornerstone/result'\n\nexport const parse = (data: string): Result<any> => {\n return Results.tryValue(() => JSON.parse(data) as JsonValue)\n}\n\nexport const parseOrThrow = (data: string): Result<any> => {\n return Results.getValueOrThrow(parse(data))\n}\n"],"mappings":";AAAA,SAAS,eAAe;AAIjB,IAAM,QAAQ,CAAC,SAA8B;AAClD,SAAO,QAAQ,SAAS,MAAM,KAAK,MAAM,IAAI,CAAc;AAC7D;AAEO,IAAM,eAAe,CAAC,SAA8B;AACzD,SAAO,QAAQ,gBAAgB,MAAM,IAAI,CAAC;AAC5C;","names":[]}
1
+ {"version":3,"sources":["../src/json.ts"],"sourcesContent":["import { JsonValue } from 'type-fest'\nimport { getValueOrThrow, Result, tryValue } from '@bessemer/cornerstone/result'\n\nexport const parse = (data: string): Result<any> => {\n return tryValue(() => JSON.parse(data) as JsonValue)\n}\n\nexport const parseOrThrow = (data: string): Result<any> => {\n return getValueOrThrow(parse(data))\n}\n"],"mappings":";AACA,SAAS,iBAAyB,gBAAgB;AAE3C,IAAM,QAAQ,CAAC,SAA8B;AAClD,SAAO,SAAS,MAAM,KAAK,MAAM,IAAI,CAAc;AACrD;AAEO,IAAM,eAAe,CAAC,SAA8B;AACzD,SAAO,gBAAgB,MAAM,IAAI,CAAC;AACpC;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAGvB,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,KAAK,UAAU,GAAG,IAAI,CAAC,MAAM,CAAA;AAE7B,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;AAE9C,KAAK,UAAU,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,CAAA;CAAE,CAAA;AAC9D,KAAK,WAAW,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;AAE7E,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU;IAE/C,KAAK,EAAE,WAAW,CAIjB;IAED,KAAK,EAAE,WAAW,CAIjB;IAED,IAAI,EAAE,WAAW,CAIhB;IAED,IAAI,EAAE,WAAW,CAIhB;IAED,KAAK,EAAE,WAAW,CAIjB;IAED,KAAK,EAAE,WAAW,CAIjB;CACF;AA+ED,eAAO,MAAM,UAAU,GAAI,iBAAiB,aAAa,KAAG,IAG3D,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,QAAQ,MAAM,KAAG,MAEtC,CAAA;AAED,eAAO,MAAM,KAAK,aAAgB,CAAA;AAClC,eAAO,MAAM,KAAK,aAAgB,CAAA;AAClC,eAAO,MAAM,IAAI,aAAe,CAAA;AAChC,eAAO,MAAM,IAAI,aAAe,CAAA;AAChC,eAAO,MAAM,KAAK,aAAgB,CAAA;AAClC,eAAO,MAAM,KAAK,aAAgB,CAAA"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AAEvB,OAAO,EAAY,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAGzC,KAAK,UAAU,GAAG,IAAI,CAAC,MAAM,CAAA;AAE7B,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;AAE9C,KAAK,UAAU,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,aAAa,CAAA;CAAE,CAAA;AAC9D,KAAK,WAAW,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,UAAU,KAAK,IAAI,CAAA;AAE7E,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,UAAU;IAE/C,KAAK,EAAE,WAAW,CAIjB;IAED,KAAK,EAAE,WAAW,CAIjB;IAED,IAAI,EAAE,WAAW,CAIhB;IAED,IAAI,EAAE,WAAW,CAIhB;IAED,KAAK,EAAE,WAAW,CAIjB;IAED,KAAK,EAAE,WAAW,CAIjB;CACF;AA+ED,eAAO,MAAM,UAAU,GAAI,iBAAiB,aAAa,KAAG,IAG3D,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,QAAQ,MAAM,KAAG,MAEtC,CAAA;AAED,eAAO,MAAM,KAAK,aAAgB,CAAA;AAClC,eAAO,MAAM,KAAK,aAAgB,CAAA;AAClC,eAAO,MAAM,IAAI,aAAe,CAAA;AAChC,eAAO,MAAM,IAAI,aAAe,CAAA;AAChC,eAAO,MAAM,KAAK,aAAgB,CAAA;AAClC,eAAO,MAAM,KAAK,aAAgB,CAAA"}
package/dist/logger.js CHANGED
@@ -1,39 +1,40 @@
1
1
  // src/logger.ts
2
2
  import pino from "pino";
3
- import { Lazy, Objects } from "@bessemer/cornerstone";
4
3
  import { createGlobalVariable } from "@bessemer/cornerstone/global-variable";
4
+ import { evaluate } from "@bessemer/cornerstone/lazy";
5
+ import { deepMerge, isNil } from "@bessemer/cornerstone/object";
5
6
  var Logger = class {
6
7
  constructor(logger) {
7
8
  this.logger = logger;
8
9
  }
9
10
  trace = (message, options) => {
10
11
  if (this.logger.isLevelEnabled?.("trace") ?? true) {
11
- this.logger.trace({ err: options?.error, context: options?.context }, Lazy.evaluate(message));
12
+ this.logger.trace({ err: options?.error, context: options?.context }, evaluate(message));
12
13
  }
13
14
  };
14
15
  debug = (message, options) => {
15
16
  if (this.logger.isLevelEnabled?.("debug") ?? true) {
16
- this.logger.debug({ err: options?.error, context: options?.context }, Lazy.evaluate(message));
17
+ this.logger.debug({ err: options?.error, context: options?.context }, evaluate(message));
17
18
  }
18
19
  };
19
20
  info = (message, options) => {
20
21
  if (this.logger.isLevelEnabled?.("info") ?? true) {
21
- this.logger.info({ err: options?.error, context: options?.context }, Lazy.evaluate(message));
22
+ this.logger.info({ err: options?.error, context: options?.context }, evaluate(message));
22
23
  }
23
24
  };
24
25
  warn = (message, options) => {
25
26
  if (this.logger.isLevelEnabled?.("warn") ?? true) {
26
- this.logger.warn({ err: options?.error, context: options?.context }, Lazy.evaluate(message));
27
+ this.logger.warn({ err: options?.error, context: options?.context }, evaluate(message));
27
28
  }
28
29
  };
29
30
  error = (message, options) => {
30
31
  if (this.logger.isLevelEnabled?.("error") ?? true) {
31
- this.logger.error({ err: options?.error, context: options?.context }, Lazy.evaluate(message));
32
+ this.logger.error({ err: options?.error, context: options?.context }, evaluate(message));
32
33
  }
33
34
  };
34
35
  fatal = (message, options) => {
35
36
  if (this.logger.isLevelEnabled?.("fatal") ?? true) {
36
- this.logger.fatal({ err: options?.error, context: options?.context }, Lazy.evaluate(message));
37
+ this.logger.fatal({ err: options?.error, context: options?.context }, evaluate(message));
37
38
  }
38
39
  };
39
40
  };
@@ -45,7 +46,7 @@ var applyDefaultOptions = (options) => {
45
46
  // JOHN need to find a better way to include
46
47
  // ...getPrettyTransport(),
47
48
  };
48
- return Objects.deepMerge(defaultOptions, options);
49
+ return deepMerge(defaultOptions, options);
49
50
  };
50
51
  var createProxyHandler = (getLogger) => {
51
52
  let cachedLogger = null;
@@ -55,7 +56,7 @@ var createProxyHandler = (getLogger) => {
55
56
  cachedLogger = null;
56
57
  cachedVersion = GlobalLoggerState.getValue().version;
57
58
  }
58
- if (Objects.isNil(cachedLogger)) {
59
+ if (isNil(cachedLogger)) {
59
60
  cachedLogger = getLogger();
60
61
  }
61
62
  return cachedLogger;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/logger.ts"],"sourcesContent":["import pino from 'pino'\nimport { Lazy, Objects } from '@bessemer/cornerstone'\nimport { createGlobalVariable } from '@bessemer/cornerstone/global-variable'\nimport { LazyValue } from '@bessemer/cornerstone/lazy'\nimport { UnknownRecord } from 'type-fest'\n\ntype PinoLogger = pino.Logger\ntype PinoBindings = pino.Bindings\nexport type LoggerOptions = pino.LoggerOptions\n\ntype LogOptions = { error?: unknown; context?: UnknownRecord }\ntype LogFunction = (message: LazyValue<string>, options?: LogOptions) => void\n\nexport class Logger {\n constructor(private readonly logger: PinoLogger) {}\n\n trace: LogFunction = (message: LazyValue<string>, options?: LogOptions): void => {\n if (this.logger.isLevelEnabled?.('trace') ?? true) {\n this.logger.trace({ err: options?.error, context: options?.context }, Lazy.evaluate(message))\n }\n }\n\n debug: LogFunction = (message: LazyValue<string>, options?: LogOptions): void => {\n if (this.logger.isLevelEnabled?.('debug') ?? true) {\n this.logger.debug({ err: options?.error, context: options?.context }, Lazy.evaluate(message))\n }\n }\n\n info: LogFunction = (message: LazyValue<string>, options?: LogOptions): void => {\n if (this.logger.isLevelEnabled?.('info') ?? true) {\n this.logger.info({ err: options?.error, context: options?.context }, Lazy.evaluate(message))\n }\n }\n\n warn: LogFunction = (message: LazyValue<string>, options?: LogOptions): void => {\n if (this.logger.isLevelEnabled?.('warn') ?? true) {\n this.logger.warn({ err: options?.error, context: options?.context }, Lazy.evaluate(message))\n }\n }\n\n error: LogFunction = (message: LazyValue<string>, options?: LogOptions): void => {\n if (this.logger.isLevelEnabled?.('error') ?? true) {\n this.logger.error({ err: options?.error, context: options?.context }, Lazy.evaluate(message))\n }\n }\n\n fatal: LogFunction = (message: LazyValue<string>, options?: LogOptions): void => {\n if (this.logger.isLevelEnabled?.('fatal') ?? true) {\n this.logger.fatal({ err: options?.error, context: options?.context }, Lazy.evaluate(message))\n }\n }\n}\n\nconst getPrettyTransport = (): LoggerOptions => {\n if (process.env.NODE_ENV === 'production' || typeof window !== 'undefined') {\n return {}\n }\n\n return {\n transport: {\n target: 'pino-pretty',\n options: {\n colorize: true,\n ignore: 'pid,hostname,module',\n messageFormat: '{if module}{module} - {end}{msg}',\n },\n },\n }\n}\n\nconst applyDefaultOptions = (options?: LoggerOptions): LoggerOptions => {\n const defaultOptions: LoggerOptions = {\n browser: {\n asObject: true,\n },\n // JOHN need to find a better way to include\n // ...getPrettyTransport(),\n }\n\n return Objects.deepMerge(defaultOptions, options)\n}\n\nconst createProxyHandler = (getLogger: () => PinoLogger): ProxyHandler<PinoLogger> => {\n let cachedLogger: PinoLogger | null = null\n let cachedVersion = GlobalLoggerState.getValue().version\n\n const getOrCreateLogger = () => {\n if (cachedVersion !== GlobalLoggerState.getValue().version) {\n cachedLogger = null\n cachedVersion = GlobalLoggerState.getValue().version\n }\n\n if (Objects.isNil(cachedLogger)) {\n cachedLogger = getLogger()\n }\n\n return cachedLogger\n }\n\n return {\n get(_: any, prop: string): any {\n if (prop === 'child') {\n return (bindings: PinoBindings) => {\n return new Proxy(\n {} as PinoLogger,\n createProxyHandler(() => getOrCreateLogger().child(bindings))\n )\n }\n }\n\n return (getOrCreateLogger() as any)[prop]\n },\n }\n}\n\nconst GlobalLoggerState = createGlobalVariable<{\n version: number\n logger: pino.Logger\n}>('GlobalLoggerState', () => ({\n version: 0,\n logger: pino(applyDefaultOptions({ level: 'info' })),\n}))\n\nconst LoggerProxy: PinoLogger = new Proxy(\n {} as PinoLogger,\n createProxyHandler(() => GlobalLoggerState.getValue().logger)\n)\n\nconst Primary: Logger = new Logger(LoggerProxy)\n\nexport const initialize = (initialOptions?: LoggerOptions): void => {\n const options = applyDefaultOptions(initialOptions)\n GlobalLoggerState.setValue({ version: GlobalLoggerState.getValue().version + 1, logger: pino(options) })\n}\n\nexport const child = (module: string): Logger => {\n return new Logger(LoggerProxy.child({ module }))\n}\n\nexport const trace = Primary.trace\nexport const debug = Primary.debug\nexport const info = Primary.info\nexport const warn = Primary.warn\nexport const error = Primary.error\nexport const fatal = Primary.fatal\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/logger.ts"],"sourcesContent":["import pino from 'pino'\nimport { createGlobalVariable } from '@bessemer/cornerstone/global-variable'\nimport { evaluate, LazyValue } from '@bessemer/cornerstone/lazy'\nimport { UnknownRecord } from 'type-fest'\nimport { deepMerge, isNil } from '@bessemer/cornerstone/object'\n\ntype PinoLogger = pino.Logger\ntype PinoBindings = pino.Bindings\nexport type LoggerOptions = pino.LoggerOptions\n\ntype LogOptions = { error?: unknown; context?: UnknownRecord }\ntype LogFunction = (message: LazyValue<string>, options?: LogOptions) => void\n\nexport class Logger {\n constructor(private readonly logger: PinoLogger) {}\n\n trace: LogFunction = (message: LazyValue<string>, options?: LogOptions): void => {\n if (this.logger.isLevelEnabled?.('trace') ?? true) {\n this.logger.trace({ err: options?.error, context: options?.context }, evaluate(message))\n }\n }\n\n debug: LogFunction = (message: LazyValue<string>, options?: LogOptions): void => {\n if (this.logger.isLevelEnabled?.('debug') ?? true) {\n this.logger.debug({ err: options?.error, context: options?.context }, evaluate(message))\n }\n }\n\n info: LogFunction = (message: LazyValue<string>, options?: LogOptions): void => {\n if (this.logger.isLevelEnabled?.('info') ?? true) {\n this.logger.info({ err: options?.error, context: options?.context }, evaluate(message))\n }\n }\n\n warn: LogFunction = (message: LazyValue<string>, options?: LogOptions): void => {\n if (this.logger.isLevelEnabled?.('warn') ?? true) {\n this.logger.warn({ err: options?.error, context: options?.context }, evaluate(message))\n }\n }\n\n error: LogFunction = (message: LazyValue<string>, options?: LogOptions): void => {\n if (this.logger.isLevelEnabled?.('error') ?? true) {\n this.logger.error({ err: options?.error, context: options?.context }, evaluate(message))\n }\n }\n\n fatal: LogFunction = (message: LazyValue<string>, options?: LogOptions): void => {\n if (this.logger.isLevelEnabled?.('fatal') ?? true) {\n this.logger.fatal({ err: options?.error, context: options?.context }, evaluate(message))\n }\n }\n}\n\nconst getPrettyTransport = (): LoggerOptions => {\n if (process.env.NODE_ENV === 'production' || typeof window !== 'undefined') {\n return {}\n }\n\n return {\n transport: {\n target: 'pino-pretty',\n options: {\n colorize: true,\n ignore: 'pid,hostname,module',\n messageFormat: '{if module}{module} - {end}{msg}',\n },\n },\n }\n}\n\nconst applyDefaultOptions = (options?: LoggerOptions): LoggerOptions => {\n const defaultOptions: LoggerOptions = {\n browser: {\n asObject: true,\n },\n // JOHN need to find a better way to include\n // ...getPrettyTransport(),\n }\n\n return deepMerge(defaultOptions, options)\n}\n\nconst createProxyHandler = (getLogger: () => PinoLogger): ProxyHandler<PinoLogger> => {\n let cachedLogger: PinoLogger | null = null\n let cachedVersion = GlobalLoggerState.getValue().version\n\n const getOrCreateLogger = () => {\n if (cachedVersion !== GlobalLoggerState.getValue().version) {\n cachedLogger = null\n cachedVersion = GlobalLoggerState.getValue().version\n }\n\n if (isNil(cachedLogger)) {\n cachedLogger = getLogger()\n }\n\n return cachedLogger\n }\n\n return {\n get(_: any, prop: string): any {\n if (prop === 'child') {\n return (bindings: PinoBindings) => {\n return new Proxy(\n {} as PinoLogger,\n createProxyHandler(() => getOrCreateLogger().child(bindings))\n )\n }\n }\n\n return (getOrCreateLogger() as any)[prop]\n },\n }\n}\n\nconst GlobalLoggerState = createGlobalVariable<{\n version: number\n logger: pino.Logger\n}>('GlobalLoggerState', () => ({\n version: 0,\n logger: pino(applyDefaultOptions({ level: 'info' })),\n}))\n\nconst LoggerProxy: PinoLogger = new Proxy(\n {} as PinoLogger,\n createProxyHandler(() => GlobalLoggerState.getValue().logger)\n)\n\nconst Primary: Logger = new Logger(LoggerProxy)\n\nexport const initialize = (initialOptions?: LoggerOptions): void => {\n const options = applyDefaultOptions(initialOptions)\n GlobalLoggerState.setValue({ version: GlobalLoggerState.getValue().version + 1, logger: pino(options) })\n}\n\nexport const child = (module: string): Logger => {\n return new Logger(LoggerProxy.child({ module }))\n}\n\nexport const trace = Primary.trace\nexport const debug = Primary.debug\nexport const info = Primary.info\nexport const warn = Primary.warn\nexport const error = Primary.error\nexport const fatal = Primary.fatal\n"],"mappings":"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","names":[]}
package/dist/map.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ import { Entry } from '@bessemer/cornerstone/entry';
2
+ import { Signable, Signature } from '@bessemer/cornerstone/signature';
3
+ export declare const groupBy: <CollectionType, KeyType>(iterable: Iterable<CollectionType>, mapper: (it: CollectionType) => KeyType) => Map<KeyType, Array<CollectionType>>;
4
+ export declare const fuse: <KeyType, FuseType, ValueType>(target: Map<KeyType, FuseType>, valuesMap: Map<FuseType, ValueType>) => Map<KeyType, ValueType>;
5
+ export declare const mapKeys: <KeyType, ValueType, NewKeyType>(target: Map<KeyType, ValueType>, mapper: (key: KeyType) => NewKeyType) => Map<NewKeyType, ValueType>;
6
+ export declare const mapValues: <KeyType, ValueType, NewValueType>(target: Map<KeyType, ValueType>, mapper: (value: ValueType) => NewValueType) => Map<KeyType, NewValueType>;
7
+ export declare const map: <KeyType, ValueType, NewKeyType, NewValueType>(target: Map<KeyType, ValueType>, mapper: (entry: Entry<KeyType, ValueType>) => Entry<NewKeyType, NewValueType>) => Map<NewKeyType, NewValueType>;
8
+ export declare function collectKeys<CollectionType extends Signable>(iterable: Iterable<CollectionType>): Map<Signature, CollectionType>;
9
+ export declare function collectKeys<CollectionType, KeyType>(iterable: Iterable<CollectionType>, mapper: (it: CollectionType) => KeyType): Map<KeyType, CollectionType>;
10
+ export declare const collectValues: <CollectionType, ValueType>(iterable: Iterable<CollectionType>, mapper: (it: CollectionType) => ValueType) => Map<CollectionType, ValueType>;
11
+ export declare const collect: <CollectionType, KeyType, ValueType>(iterable: Iterable<CollectionType>, mapEntry: (it: CollectionType) => Entry<KeyType, ValueType>, reducer: (key: KeyType, first: ValueType, second: ValueType) => ValueType) => Map<KeyType, ValueType>;
12
+ export declare const append: <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Entry<KeyType, ValueType>>) => Map<KeyType, ValueType>;
13
+ export declare const appendInto: <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Entry<KeyType, ValueType>>) => void;
14
+ export declare const concatenate: <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Map<KeyType, ValueType>>) => Map<KeyType, ValueType>;
15
+ export declare const concatenateInto: <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Map<KeyType, ValueType>>) => void;
16
+ export declare const filter: <KeyType, ValueType>(map: Map<KeyType, ValueType>, predicate: (entry: Entry<KeyType, ValueType>) => boolean) => Map<KeyType, ValueType>;
17
+ export declare const filterFrom: <KeyType, ValueType>(map: Map<KeyType, ValueType>, predicate: (entry: Entry<KeyType, ValueType>) => boolean) => void;
18
+ //# sourceMappingURL=map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../src/map.ts"],"names":[],"mappings":"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"}
package/dist/map.js ADDED
@@ -0,0 +1,110 @@
1
+ // src/map.ts
2
+ import { concatenate as arrayConcatenate } from "@bessemer/cornerstone/array";
3
+ import { assert, assertFalse, assertPresent } from "@bessemer/cornerstone/assertion";
4
+ import { sign } from "@bessemer/cornerstone/signature";
5
+ import { isPresent } from "@bessemer/cornerstone/object";
6
+ var groupBy = (iterable, mapper) => {
7
+ return collect(
8
+ iterable,
9
+ (it) => [mapper(it), [it]],
10
+ (_, first, second) => arrayConcatenate(first, second)
11
+ );
12
+ };
13
+ var fuse = (target, valuesMap) => {
14
+ return mapValues(target, (value) => {
15
+ const newValue = valuesMap.get(value);
16
+ assertPresent(newValue, () => `Maps.fuse - Encountered missing linkage: ${value}`);
17
+ return newValue;
18
+ });
19
+ };
20
+ var mapKeys = (target, mapper) => {
21
+ return map(target, ([key, value]) => [mapper(key), value]);
22
+ };
23
+ var mapValues = (target, mapper) => {
24
+ return map(target, ([key, value]) => [key, mapper(value)]);
25
+ };
26
+ var map = (target, mapper) => {
27
+ return collect(target.entries(), mapper, (key) => assert(() => `Maps.transform - Encountered illegal duplicate collection value: ${key}`));
28
+ };
29
+ function collectKeys(iterable, mapper) {
30
+ const reducer = (key) => assert(() => `Maps.mapKeys - Encountered illegal duplicate collection value: ${key}`);
31
+ if (isPresent(mapper)) {
32
+ return collect(iterable, (it) => [mapper(it), it], reducer);
33
+ } else {
34
+ return collect(iterable, (it) => [sign(it), it], reducer);
35
+ }
36
+ }
37
+ var collectValues = (iterable, mapper) => {
38
+ return collect(
39
+ iterable,
40
+ (it) => [it, mapper(it)],
41
+ (key) => assert(() => `Maps.mapValues - Encountered illegal duplicate collection value: ${key}`)
42
+ );
43
+ };
44
+ var collect = (iterable, mapEntry, reducer) => {
45
+ const result = /* @__PURE__ */ new Map();
46
+ for (const item of iterable) {
47
+ const [key, value] = mapEntry(item);
48
+ if (result.has(key)) {
49
+ const existingValue = result.get(key);
50
+ const reducedValue = reducer(key, existingValue, value);
51
+ result.set(key, reducedValue);
52
+ } else {
53
+ result.set(key, value);
54
+ }
55
+ }
56
+ return result;
57
+ };
58
+ var append = (map2, ...values) => {
59
+ const result = new Map(map2.entries());
60
+ appendInto(result, ...values);
61
+ return result;
62
+ };
63
+ var appendInto = (map2, ...values) => {
64
+ for (const [key, value] of values) {
65
+ assertFalse(map2.has(key), () => `Maps.append - Encountered illegal duplicate key: ${key}`);
66
+ map2.set(key, value);
67
+ }
68
+ };
69
+ var concatenate = (map2, ...values) => {
70
+ const result = new Map(map2);
71
+ concatenateInto(result, ...values);
72
+ return result;
73
+ };
74
+ var concatenateInto = (map2, ...values) => {
75
+ for (const otherMap of values) {
76
+ for (const [key, value] of otherMap) {
77
+ assertFalse(map2.has(key), () => `Maps.concatenate - Encountered illegal duplicate key: ${key}`);
78
+ map2.set(key, value);
79
+ }
80
+ }
81
+ };
82
+ var filter = (map2, predicate) => {
83
+ const result = new Map(map2);
84
+ filterFrom(result, predicate);
85
+ return result;
86
+ };
87
+ var filterFrom = (map2, predicate) => {
88
+ for (const entry of map2) {
89
+ if (!predicate(entry)) {
90
+ map2.delete(entry[0]);
91
+ }
92
+ }
93
+ };
94
+ export {
95
+ append,
96
+ appendInto,
97
+ collect,
98
+ collectKeys,
99
+ collectValues,
100
+ concatenate,
101
+ concatenateInto,
102
+ filter,
103
+ filterFrom,
104
+ fuse,
105
+ groupBy,
106
+ map,
107
+ mapKeys,
108
+ mapValues
109
+ };
110
+ //# sourceMappingURL=map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/map.ts"],"sourcesContent":["import { Entry } from '@bessemer/cornerstone/entry'\nimport { concatenate as arrayConcatenate } from '@bessemer/cornerstone/array'\nimport { assert, assertFalse, assertPresent } from '@bessemer/cornerstone/assertion'\nimport { sign, Signable, Signature } from '@bessemer/cornerstone/signature'\nimport { isPresent } from '@bessemer/cornerstone/object'\n\nexport const groupBy = <CollectionType, KeyType>(\n iterable: Iterable<CollectionType>,\n mapper: (it: CollectionType) => KeyType\n): Map<KeyType, Array<CollectionType>> => {\n return collect(\n iterable,\n (it) => [mapper(it), [it]],\n (_, first, second) => arrayConcatenate(first, second)\n )\n}\n\nexport const fuse = <KeyType, FuseType, ValueType>(target: Map<KeyType, FuseType>, valuesMap: Map<FuseType, ValueType>): Map<KeyType, ValueType> => {\n return mapValues(target, (value) => {\n const newValue = valuesMap.get(value)\n assertPresent(newValue, () => `Maps.fuse - Encountered missing linkage: ${value}`)\n return newValue\n })\n}\n\nexport const mapKeys = <KeyType, ValueType, NewKeyType>(\n target: Map<KeyType, ValueType>,\n mapper: (key: KeyType) => NewKeyType\n): Map<NewKeyType, ValueType> => {\n return map(target, ([key, value]) => [mapper(key), value])\n}\n\nexport const mapValues = <KeyType, ValueType, NewValueType>(\n target: Map<KeyType, ValueType>,\n mapper: (value: ValueType) => NewValueType\n): Map<KeyType, NewValueType> => {\n return map(target, ([key, value]) => [key, mapper(value)])\n}\n\nexport const map = <KeyType, ValueType, NewKeyType, NewValueType>(\n target: Map<KeyType, ValueType>,\n mapper: (entry: Entry<KeyType, ValueType>) => Entry<NewKeyType, NewValueType>\n): Map<NewKeyType, NewValueType> => {\n return collect(target.entries(), mapper, (key) => assert(() => `Maps.transform - Encountered illegal duplicate collection value: ${key}`))\n}\n\nexport function collectKeys<CollectionType extends Signable>(iterable: Iterable<CollectionType>): Map<Signature, CollectionType>\nexport function collectKeys<CollectionType, KeyType>(\n iterable: Iterable<CollectionType>,\n mapper: (it: CollectionType) => KeyType\n): Map<KeyType, CollectionType>\nexport function collectKeys<CollectionType, KeyType>(\n iterable: Iterable<CollectionType>,\n mapper?: (it: CollectionType) => KeyType\n): Map<KeyType, CollectionType> {\n const reducer = (key: KeyType) => assert(() => `Maps.mapKeys - Encountered illegal duplicate collection value: ${key}`)\n\n if (isPresent(mapper)) {\n return collect(iterable, (it) => [mapper(it), it], reducer)\n } else {\n return collect(iterable, (it) => [sign(it as Signable) as KeyType, it], reducer)\n }\n}\n\nexport const collectValues = <CollectionType, ValueType>(\n iterable: Iterable<CollectionType>,\n mapper: (it: CollectionType) => ValueType\n): Map<CollectionType, ValueType> => {\n return collect(\n iterable,\n (it) => [it, mapper(it)],\n (key) => assert(() => `Maps.mapValues - Encountered illegal duplicate collection value: ${key}`)\n )\n}\n\nexport const collect = <CollectionType, KeyType, ValueType>(\n iterable: Iterable<CollectionType>,\n mapEntry: (it: CollectionType) => Entry<KeyType, ValueType>,\n reducer: (key: KeyType, first: ValueType, second: ValueType) => ValueType\n): Map<KeyType, ValueType> => {\n const result = new Map<KeyType, ValueType>()\n\n for (const item of iterable) {\n const [key, value] = mapEntry(item)\n\n if (result.has(key)) {\n const existingValue = result.get(key)!\n const reducedValue = reducer(key, existingValue, value)\n result.set(key, reducedValue)\n } else {\n result.set(key, value)\n }\n }\n\n return result\n}\n\nexport const append = <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Entry<KeyType, ValueType>>): Map<KeyType, ValueType> => {\n const result = new Map(map.entries())\n appendInto(result, ...values)\n return result\n}\n\nexport const appendInto = <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Entry<KeyType, ValueType>>): void => {\n for (const [key, value] of values) {\n assertFalse(map.has(key), () => `Maps.append - Encountered illegal duplicate key: ${key}`)\n map.set(key, value)\n }\n}\n\nexport const concatenate = <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Map<KeyType, ValueType>>): Map<KeyType, ValueType> => {\n const result = new Map(map)\n concatenateInto(result, ...values)\n return result\n}\n\nexport const concatenateInto = <KeyType, ValueType>(map: Map<KeyType, ValueType>, ...values: Array<Map<KeyType, ValueType>>): void => {\n for (const otherMap of values) {\n for (const [key, value] of otherMap) {\n assertFalse(map.has(key), () => `Maps.concatenate - Encountered illegal duplicate key: ${key}`)\n map.set(key, value)\n }\n }\n}\n\nexport const filter = <KeyType, ValueType>(\n map: Map<KeyType, ValueType>,\n predicate: (entry: Entry<KeyType, ValueType>) => boolean\n): Map<KeyType, ValueType> => {\n const result = new Map(map)\n filterFrom(result, predicate)\n return result\n}\n\nexport const filterFrom = <KeyType, ValueType>(map: Map<KeyType, ValueType>, predicate: (entry: Entry<KeyType, ValueType>) => boolean): void => {\n for (const entry of map) {\n if (!predicate(entry)) {\n map.delete(entry[0])\n }\n }\n}\n"],"mappings":";AACA,SAAS,eAAe,wBAAwB;AAChD,SAAS,QAAQ,aAAa,qBAAqB;AACnD,SAAS,YAAiC;AAC1C,SAAS,iBAAiB;AAEnB,IAAM,UAAU,CACrB,UACA,WACwC;AACxC,SAAO;AAAA,IACL;AAAA,IACA,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;AAAA,IACzB,CAAC,GAAG,OAAO,WAAW,iBAAiB,OAAO,MAAM;AAAA,EACtD;AACF;AAEO,IAAM,OAAO,CAA+B,QAAgC,cAAiE;AAClJ,SAAO,UAAU,QAAQ,CAAC,UAAU;AAClC,UAAM,WAAW,UAAU,IAAI,KAAK;AACpC,kBAAc,UAAU,MAAM,4CAA4C,KAAK,EAAE;AACjF,WAAO;AAAA,EACT,CAAC;AACH;AAEO,IAAM,UAAU,CACrB,QACA,WAC+B;AAC/B,SAAO,IAAI,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,OAAO,GAAG,GAAG,KAAK,CAAC;AAC3D;AAEO,IAAM,YAAY,CACvB,QACA,WAC+B;AAC/B,SAAO,IAAI,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,OAAO,KAAK,CAAC,CAAC;AAC3D;AAEO,IAAM,MAAM,CACjB,QACA,WACkC;AAClC,SAAO,QAAQ,OAAO,QAAQ,GAAG,QAAQ,CAAC,QAAQ,OAAO,MAAM,oEAAoE,GAAG,EAAE,CAAC;AAC3I;AAOO,SAAS,YACd,UACA,QAC8B;AAC9B,QAAM,UAAU,CAAC,QAAiB,OAAO,MAAM,kEAAkE,GAAG,EAAE;AAEtH,MAAI,UAAU,MAAM,GAAG;AACrB,WAAO,QAAQ,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO;AAAA,EAC5D,OAAO;AACL,WAAO,QAAQ,UAAU,CAAC,OAAO,CAAC,KAAK,EAAc,GAAc,EAAE,GAAG,OAAO;AAAA,EACjF;AACF;AAEO,IAAM,gBAAgB,CAC3B,UACA,WACmC;AACnC,SAAO;AAAA,IACL;AAAA,IACA,CAAC,OAAO,CAAC,IAAI,OAAO,EAAE,CAAC;AAAA,IACvB,CAAC,QAAQ,OAAO,MAAM,oEAAoE,GAAG,EAAE;AAAA,EACjG;AACF;AAEO,IAAM,UAAU,CACrB,UACA,UACA,YAC4B;AAC5B,QAAM,SAAS,oBAAI,IAAwB;AAE3C,aAAW,QAAQ,UAAU;AAC3B,UAAM,CAAC,KAAK,KAAK,IAAI,SAAS,IAAI;AAElC,QAAI,OAAO,IAAI,GAAG,GAAG;AACnB,YAAM,gBAAgB,OAAO,IAAI,GAAG;AACpC,YAAM,eAAe,QAAQ,KAAK,eAAe,KAAK;AACtD,aAAO,IAAI,KAAK,YAAY;AAAA,IAC9B,OAAO;AACL,aAAO,IAAI,KAAK,KAAK;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,SAAS,CAAqBA,SAAiC,WAAsE;AAChJ,QAAM,SAAS,IAAI,IAAIA,KAAI,QAAQ,CAAC;AACpC,aAAW,QAAQ,GAAG,MAAM;AAC5B,SAAO;AACT;AAEO,IAAM,aAAa,CAAqBA,SAAiC,WAAmD;AACjI,aAAW,CAAC,KAAK,KAAK,KAAK,QAAQ;AACjC,gBAAYA,KAAI,IAAI,GAAG,GAAG,MAAM,oDAAoD,GAAG,EAAE;AACzF,IAAAA,KAAI,IAAI,KAAK,KAAK;AAAA,EACpB;AACF;AAEO,IAAM,cAAc,CAAqBA,SAAiC,WAAoE;AACnJ,QAAM,SAAS,IAAI,IAAIA,IAAG;AAC1B,kBAAgB,QAAQ,GAAG,MAAM;AACjC,SAAO;AACT;AAEO,IAAM,kBAAkB,CAAqBA,SAAiC,WAAiD;AACpI,aAAW,YAAY,QAAQ;AAC7B,eAAW,CAAC,KAAK,KAAK,KAAK,UAAU;AACnC,kBAAYA,KAAI,IAAI,GAAG,GAAG,MAAM,yDAAyD,GAAG,EAAE;AAC9F,MAAAA,KAAI,IAAI,KAAK,KAAK;AAAA,IACpB;AAAA,EACF;AACF;AAEO,IAAM,SAAS,CACpBA,MACA,cAC4B;AAC5B,QAAM,SAAS,IAAI,IAAIA,IAAG;AAC1B,aAAW,QAAQ,SAAS;AAC5B,SAAO;AACT;AAEO,IAAM,aAAa,CAAqBA,MAA8B,cAAmE;AAC9I,aAAW,SAASA,MAAK;AACvB,QAAI,CAAC,UAAU,KAAK,GAAG;AACrB,MAAAA,KAAI,OAAO,MAAM,CAAC,CAAC;AAAA,IACrB;AAAA,EACF;AACF;","names":["map"]}