@bessemer/cornerstone 0.5.41 → 0.5.43

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.
package/dist/array.d.ts CHANGED
@@ -24,13 +24,10 @@ export declare const dedupe: <T extends Signable>(array: Array<T>) => Array<T>;
24
24
  export declare const sortWith: <T>(array: Array<T>, comparator: Comparator<T>) => Array<T>;
25
25
  export declare const sortBy: <T>(array: Array<T>, mapper: (element: T) => Signable) => Array<T>;
26
26
  export declare const sort: <T extends Signable>(array: Array<T>) => Array<T>;
27
- export declare const concatenate: <T>(...values: Array<import("lodash").Many<T>>) => T[];
28
- export declare const first: {
29
- <T>(array: readonly [T, ...unknown[]]): T;
30
- <T>(array: import("lodash").List<T> | null | undefined): T | undefined;
31
- };
27
+ export declare const concatenate: <T>(array: Array<T> | null | undefined, ...values: Array<T | T[]>) => Array<T>;
28
+ export declare const first: <T>(array: Array<T> | null | undefined) => T | undefined;
32
29
  export declare const only: <T>(array: Array<T>) => T;
33
- export declare const last: <T>(array: import("lodash").List<T> | null | undefined) => T | undefined;
30
+ export declare const last: <T>(array: Array<T> | null | undefined) => T | undefined;
34
31
  export declare const isEmpty: {
35
32
  <T extends {
36
33
  __trapAny: any;
@@ -50,6 +47,7 @@ export declare const groupBy: {
50
47
  <T extends object>(collection: T | null | undefined, iteratee?: import("lodash").ValueIteratee<T[keyof T]>): import("lodash").Dictionary<Array<T[keyof T]>>;
51
48
  };
52
49
  export declare const rest: <T>(array: Array<T>, elementsToSkip?: number) => Array<T>;
50
+ export declare const filterInPlace: <T>(array: Array<T> | null | undefined, predicate: (value: T, index: number, array: Array<T>) => boolean) => void;
53
51
  export declare const clear: (array: Array<unknown>) => void;
54
52
  export declare const bisect: <T, L, R>(array: Array<T>, bisector: (element: T, index: number) => Either<L, R>) => [Array<L>, Array<R>];
55
53
  export declare const toArray: <T>(array: Arrayable<T>) => Array<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../src/array.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAE1D,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,SAAS,CAAC,CAAC,CAAC,KAAG,OAMzF,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,QAAQ,KAAG,OAEhG,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,QAAQ,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,KAAG,OAE7E,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,SAAS,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,CAAC,CAErG,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,QAAQ,KAAG,KAAK,CAAC,CAAC,CAE5G,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,QAAQ,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,CAAC,CAEzF,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,WAAW,SAAS,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,CAAC,CAE3F,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,QAAQ,KAAG,KAAK,CAAC,CAAC,CAElG,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,QAAQ,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,KAAG,KAAK,CAAC,CAAC,CAE/E,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,WAAW,SAAS,CAAC,CAAC,CAAC,KAAG,OAEtF,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,QAAQ,KAAG,OAE7F,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,QAAQ,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,KAAG,OAAsD,CAAA;AAEjI,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,SAAS,CAAC,CAAC,CAAC,KAAG,OAC7C,CAAA;AAEnD,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,QAAQ,KAAG,OACzD,CAAA;AAE9C,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,KAAK,CAAC,CAAC,CAAC,KAAG,OAA6C,CAAA;AAEjI,eAAO,MAAM,UAAU,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,SAAS,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,CAAC,CAE/E,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,QAAQ,KAAG,KAAK,CAAC,CAAC,CAEtF,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,QAAQ,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,CAAC,CAEnE,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,CAAC,CAE/E,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,QAAQ,KAAG,KAAK,CAAC,CAAC,CAKpF,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,CAAC,SAAS,QAAQ,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,CAAC,CAAmC,CAAA;AAErG,eAAO,MAAM,WAAW,wDAAS,CAAA;AAEjC,eAAO,MAAM,KAAK;;;CAAS,CAAA;AAE3B,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAG,CAGzC,CAAA;AAED,eAAO,MAAM,IAAI,0EAAQ,CAAA;AAEzB,eAAO,MAAM,OAAO;;;;;;;;;CAAW,CAAA;AAE/B,eAAO,MAAM,KAAK;;;CAAS,CAAA;AAE3B,eAAO,MAAM,OAAO;;;CAAW,CAAA;AAE/B,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,iBAAgB,MAAU,KAAG,KAAK,CAAC,CAAC,CAE5E,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,OAAO,KAAK,CAAC,OAAO,CAAC,KAAG,IAE7C,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAE3H,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,OAAO,SAAS,CAAC,CAAC,CAAC,KAAG,KAAK,CAAC,CAAC,CAMvD,CAAA;AAED,eAAO,MAAM,OAAO,uFAAW,CAAA"}
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../src/array.ts"],"names":[],"mappings":"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"}
package/dist/array.js CHANGED
@@ -1,15 +1,11 @@
1
1
  // src/array.ts
2
2
  import {
3
- concat,
4
3
  differenceBy as _differenceBy,
5
4
  differenceWith as _differenceWith,
6
- first as _first,
7
5
  flatten as _flatten,
8
6
  groupBy as _groupBy,
9
7
  isEmpty as _isEmpty,
10
- last as _last,
11
8
  range as _range,
12
- remove as _remove,
13
9
  uniqBy,
14
10
  uniqWith
15
11
  } from "lodash-es";
@@ -73,21 +69,52 @@ var sortBy = (array, mapper) => {
73
69
  );
74
70
  };
75
71
  var sort = (array) => sortBy(array, Signatures.sign);
76
- var concatenate = concat;
77
- var first = _first;
72
+ var concatenate = (array, ...values) => {
73
+ if (array == null) {
74
+ return [];
75
+ }
76
+ const result = [...array];
77
+ if (values.length === 0) {
78
+ return result;
79
+ }
80
+ for (const value of values) {
81
+ if (Array.isArray(value)) {
82
+ result.push(...value);
83
+ } else {
84
+ result.push(value);
85
+ }
86
+ }
87
+ return result;
88
+ };
89
+ var first = (array) => {
90
+ return array != null && array.length ? array[0] : void 0;
91
+ };
78
92
  var only = (array) => {
79
93
  Preconditions.isTrue(array.length === 1);
80
94
  return first(array);
81
95
  };
82
- var last = _last;
96
+ var last = (array) => {
97
+ return array != null && array.length ? array[array.length - 1] : void 0;
98
+ };
83
99
  var isEmpty = _isEmpty;
84
100
  var range = _range;
85
101
  var groupBy = _groupBy;
86
102
  var rest = (array, elementsToSkip = 1) => {
87
103
  return array.slice(elementsToSkip);
88
104
  };
105
+ var filterInPlace = (array, predicate) => {
106
+ if (array == null || !array.length) {
107
+ return;
108
+ }
109
+ for (let i = array.length - 1; i >= 0; i--) {
110
+ const value = array[i];
111
+ if (value !== void 0 && !predicate(value, i, array)) {
112
+ array.splice(i, 1);
113
+ }
114
+ }
115
+ };
89
116
  var clear = (array) => {
90
- _remove(array, () => true);
117
+ filterInPlace(array, () => false);
91
118
  };
92
119
  var bisect = (array, bisector) => {
93
120
  return Eithers.split(array.map(bisector));
@@ -118,6 +145,7 @@ export {
118
145
  equal,
119
146
  equalBy,
120
147
  equalWith,
148
+ filterInPlace,
121
149
  first,
122
150
  flatten,
123
151
  groupBy,
package/dist/array.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/array.ts"],"sourcesContent":["import {\n concat,\n differenceBy as _differenceBy,\n differenceWith as _differenceWith,\n first as _first,\n flatten as _flatten,\n groupBy as _groupBy,\n isEmpty as _isEmpty,\n last as _last,\n range as _range,\n remove as _remove,\n uniqBy,\n uniqWith,\n} from 'lodash-es'\nimport { Equalitor } from '@bessemer/cornerstone/equalitor'\nimport { Signable } from '@bessemer/cornerstone/signature'\nimport { Comparators, Eithers, Preconditions, Signatures } from '@bessemer/cornerstone'\nimport { Either } from '@bessemer/cornerstone/either'\nimport { Comparator } from '@bessemer/cornerstone/comparator'\nimport { Arrayable } from 'type-fest'\n\nexport const equalWith = <T>(first: Array<T>, second: Array<T>, equalitor: Equalitor<T>): boolean => {\n if (first.length !== second.length) {\n return false\n }\n\n return first.every((element, index) => equalitor(element, second[index]!))\n}\n\nexport const equalBy = <T>(first: Array<T>, second: Array<T>, mapper: (element: T) => Signable): boolean => {\n return equalWith(first, second, (first, second) => Signatures.sign(mapper(first)) === Signatures.sign(mapper(second)))\n}\n\nexport const equal = <T extends Signable>(first: Array<T>, second: Array<T>): boolean => {\n return equalBy(first, second, Signatures.sign)\n}\n\nexport const differenceWith = <T>(first: Array<T>, second: Array<T>, equalitor: Equalitor<T>): Array<T> => {\n return _differenceWith(first, second, equalitor)\n}\n\nexport const differenceBy = <T>(first: Array<T>, second: Array<T>, mapper: (element: T) => Signable): Array<T> => {\n return _differenceBy(first, second, (it) => Signatures.sign(mapper(it)))\n}\n\nexport const difference = <T extends Signable>(first: Array<T>, second: Array<T>): Array<T> => {\n return differenceBy(first, second, Signatures.sign)\n}\n\nexport const removeWith = <T>(array: Array<T>, element: T, equalitor: Equalitor<T>): Array<T> => {\n return differenceWith(array, [element], equalitor)\n}\n\nexport const removeBy = <T>(array: Array<T>, element: T, mapper: (element: T) => Signable): Array<T> => {\n return differenceBy(array, [element], mapper)\n}\n\nexport const remove = <T extends Signable>(array: Array<T>, element: T): Array<T> => {\n return difference(array, [element])\n}\n\nexport const containsWith = <T>(array: Array<T>, element: T, equalitor: Equalitor<T>): boolean => {\n return array.some((it) => equalitor(it, element))\n}\n\nexport const containsBy = <T>(array: Array<T>, element: T, mapper: (element: T) => Signable): boolean => {\n return containsWith(array, element, (first, second) => Signatures.sign(mapper(first)) === Signatures.sign(mapper(second)))\n}\n\nexport const contains = <T extends Signable>(array: Array<T>, element: T): boolean => containsBy(array, element, Signatures.sign)\n\nexport const containsAllWith = <T>(first: Array<T>, second: Array<T>, equalitor: Equalitor<T>): boolean =>\n isEmpty(differenceWith(second, first, equalitor))\n\nexport const containsAllBy = <T>(first: Array<T>, second: Array<T>, mapper: (element: T) => Signable): boolean =>\n isEmpty(differenceBy(second, first, mapper))\n\nexport const containsAll = <T extends Signable>(first: Array<T>, second: Array<T>): boolean => isEmpty(difference(second, first))\n\nexport const dedupeWith = <T>(array: Array<T>, equalitor: Equalitor<T>): Array<T> => {\n return uniqWith(array, equalitor)\n}\n\nexport const dedupeBy = <T>(array: Array<T>, mapper: (element: T) => Signable): Array<T> => {\n return uniqBy(array, (it) => Signatures.sign(mapper(it)))\n}\n\nexport const dedupe = <T extends Signable>(array: Array<T>): Array<T> => {\n return dedupeBy(array, Signatures.sign)\n}\n\nexport const sortWith = <T>(array: Array<T>, comparator: Comparator<T>): Array<T> => {\n return [...array].sort(comparator)\n}\n\nexport const sortBy = <T>(array: Array<T>, mapper: (element: T) => Signable): Array<T> => {\n return sortWith(\n array,\n Comparators.compareBy((it) => Signatures.sign(mapper(it)), Comparators.natural())\n )\n}\n\nexport const sort = <T extends Signable>(array: Array<T>): Array<T> => sortBy(array, Signatures.sign)\n\nexport const concatenate = concat\n\nexport const first = _first\n\nexport const only = <T>(array: Array<T>): T => {\n Preconditions.isTrue(array.length === 1)\n return first(array)!\n}\n\nexport const last = _last\n\nexport const isEmpty = _isEmpty\n// TODO make a better range function\nexport const range = _range\n// TODO should this live in collections?\nexport const groupBy = _groupBy\n\nexport const rest = <T>(array: Array<T>, elementsToSkip: number = 1): Array<T> => {\n return array.slice(elementsToSkip)\n}\n\nexport const clear = (array: Array<unknown>): void => {\n _remove(array, () => true)\n}\n\nexport const bisect = <T, L, R>(array: Array<T>, bisector: (element: T, index: number) => Either<L, R>): [Array<L>, Array<R>] => {\n return Eithers.split(array.map(bisector))\n}\n\nexport const toArray = <T>(array: Arrayable<T>): Array<T> => {\n if (Array.isArray(array)) {\n return array\n }\n\n return [array]\n}\n\nexport const flatten = _flatten\n"],"mappings":"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","names":["first","second"]}
1
+ {"version":3,"sources":["../src/array.ts"],"sourcesContent":["import {\n differenceBy as _differenceBy,\n differenceWith as _differenceWith,\n flatten as _flatten,\n groupBy as _groupBy,\n isEmpty as _isEmpty,\n range as _range,\n uniqBy,\n uniqWith,\n} from 'lodash-es'\nimport { Equalitor } from '@bessemer/cornerstone/equalitor'\nimport { Signable } from '@bessemer/cornerstone/signature'\nimport { Comparators, Eithers, Preconditions, Signatures } from '@bessemer/cornerstone'\nimport { Either } from '@bessemer/cornerstone/either'\nimport { Comparator } from '@bessemer/cornerstone/comparator'\nimport { Arrayable } from 'type-fest'\n\nexport const equalWith = <T>(first: Array<T>, second: Array<T>, equalitor: Equalitor<T>): boolean => {\n if (first.length !== second.length) {\n return false\n }\n\n return first.every((element, index) => equalitor(element, second[index]!))\n}\n\nexport const equalBy = <T>(first: Array<T>, second: Array<T>, mapper: (element: T) => Signable): boolean => {\n return equalWith(first, second, (first, second) => Signatures.sign(mapper(first)) === Signatures.sign(mapper(second)))\n}\n\nexport const equal = <T extends Signable>(first: Array<T>, second: Array<T>): boolean => {\n return equalBy(first, second, Signatures.sign)\n}\n\nexport const differenceWith = <T>(first: Array<T>, second: Array<T>, equalitor: Equalitor<T>): Array<T> => {\n return _differenceWith(first, second, equalitor)\n}\n\nexport const differenceBy = <T>(first: Array<T>, second: Array<T>, mapper: (element: T) => Signable): Array<T> => {\n return _differenceBy(first, second, (it) => Signatures.sign(mapper(it)))\n}\n\nexport const difference = <T extends Signable>(first: Array<T>, second: Array<T>): Array<T> => {\n return differenceBy(first, second, Signatures.sign)\n}\n\nexport const removeWith = <T>(array: Array<T>, element: T, equalitor: Equalitor<T>): Array<T> => {\n return differenceWith(array, [element], equalitor)\n}\n\nexport const removeBy = <T>(array: Array<T>, element: T, mapper: (element: T) => Signable): Array<T> => {\n return differenceBy(array, [element], mapper)\n}\n\nexport const remove = <T extends Signable>(array: Array<T>, element: T): Array<T> => {\n return difference(array, [element])\n}\n\nexport const containsWith = <T>(array: Array<T>, element: T, equalitor: Equalitor<T>): boolean => {\n return array.some((it) => equalitor(it, element))\n}\n\nexport const containsBy = <T>(array: Array<T>, element: T, mapper: (element: T) => Signable): boolean => {\n return containsWith(array, element, (first, second) => Signatures.sign(mapper(first)) === Signatures.sign(mapper(second)))\n}\n\nexport const contains = <T extends Signable>(array: Array<T>, element: T): boolean => containsBy(array, element, Signatures.sign)\n\nexport const containsAllWith = <T>(first: Array<T>, second: Array<T>, equalitor: Equalitor<T>): boolean =>\n isEmpty(differenceWith(second, first, equalitor))\n\nexport const containsAllBy = <T>(first: Array<T>, second: Array<T>, mapper: (element: T) => Signable): boolean =>\n isEmpty(differenceBy(second, first, mapper))\n\nexport const containsAll = <T extends Signable>(first: Array<T>, second: Array<T>): boolean => isEmpty(difference(second, first))\n\nexport const dedupeWith = <T>(array: Array<T>, equalitor: Equalitor<T>): Array<T> => {\n return uniqWith(array, equalitor)\n}\n\nexport const dedupeBy = <T>(array: Array<T>, mapper: (element: T) => Signable): Array<T> => {\n return uniqBy(array, (it) => Signatures.sign(mapper(it)))\n}\n\nexport const dedupe = <T extends Signable>(array: Array<T>): Array<T> => {\n return dedupeBy(array, Signatures.sign)\n}\n\nexport const sortWith = <T>(array: Array<T>, comparator: Comparator<T>): Array<T> => {\n return [...array].sort(comparator)\n}\n\nexport const sortBy = <T>(array: Array<T>, mapper: (element: T) => Signable): Array<T> => {\n return sortWith(\n array,\n Comparators.compareBy((it) => Signatures.sign(mapper(it)), Comparators.natural())\n )\n}\n\nexport const sort = <T extends Signable>(array: Array<T>): Array<T> => sortBy(array, Signatures.sign)\n\nexport const concatenate = <T>(array: Array<T> | null | undefined, ...values: Array<T | T[]>): Array<T> => {\n if (array == null) {\n return []\n }\n\n const result = [...array]\n\n if (values.length === 0) {\n return result\n }\n\n for (const value of values) {\n if (Array.isArray(value)) {\n result.push(...value)\n } else {\n result.push(value as T)\n }\n }\n\n return result\n}\n\nexport const first = <T>(array: Array<T> | null | undefined): T | undefined => {\n return array != null && array.length ? array[0] : undefined\n}\n\nexport const only = <T>(array: Array<T>): T => {\n Preconditions.isTrue(array.length === 1)\n return first(array)!\n}\n\nexport const last = <T>(array: Array<T> | null | undefined): T | undefined => {\n return array != null && array.length ? array[array.length - 1] : undefined\n}\n\nexport const isEmpty = _isEmpty\n// TODO make a better range function\nexport const range = _range\n// TODO should this live in collections?\nexport const groupBy = _groupBy\n\nexport const rest = <T>(array: Array<T>, elementsToSkip: number = 1): Array<T> => {\n return array.slice(elementsToSkip)\n}\n\nexport const filterInPlace = <T>(array: Array<T> | null | undefined, predicate: (value: T, index: number, array: Array<T>) => boolean): void => {\n if (array == null || !array.length) {\n return\n }\n\n for (let i = array.length - 1; i >= 0; i--) {\n const value = array[i]\n if (value !== undefined && !predicate(value, i, array)) {\n array.splice(i, 1)\n }\n }\n}\n\nexport const clear = (array: Array<unknown>): void => {\n filterInPlace(array, () => false)\n}\n\nexport const bisect = <T, L, R>(array: Array<T>, bisector: (element: T, index: number) => Either<L, R>): [Array<L>, Array<R>] => {\n return Eithers.split(array.map(bisector))\n}\n\nexport const toArray = <T>(array: Arrayable<T>): Array<T> => {\n if (Array.isArray(array)) {\n return array\n }\n\n return [array]\n}\n\nexport const flatten = _flatten\n"],"mappings":"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","names":["first","second"]}
@@ -41,10 +41,12 @@ export declare const aggregate: (builder: ErrorEventBuilder, causes: Array<Error
41
41
  export declare const UnhandledErrorCode: ErrorCode;
42
42
  export declare const NotFoundErrorCode: ErrorCode;
43
43
  export declare const UnauthorizedErrorCode: ErrorCode;
44
+ export declare const BadRequestErrorCode: ErrorCode;
44
45
  export declare const RequestCorrelationIdAttribute: ErrorAttribute<string>;
45
46
  export declare const HttpStatusCodeAttribute: ErrorAttribute<number>;
46
- export declare const unhandled: (builder?: ErrorEventBuilder) => ErrorEvent;
47
- export declare const notFound: (builder?: ErrorEventBuilder) => ErrorEvent;
48
- export declare const unauthorized: (builder?: ErrorEventBuilder) => ErrorEvent;
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;
49
51
  export {};
50
52
  //# 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;AAE1E,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,iBAAiB,eAOlD,CAAA;AAEH,eAAO,MAAM,QAAQ,GAAI,UAAU,iBAAiB,eAOjD,CAAA;AAEH,eAAO,MAAM,YAAY,GAAI,UAAU,iBAAiB,eAOrD,CAAA"}
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"}
@@ -68,6 +68,7 @@ var aggregate = (builder, causes) => {
68
68
  var UnhandledErrorCode = "error-event.unhandled";
69
69
  var NotFoundErrorCode = "error-event.not-found";
70
70
  var UnauthorizedErrorCode = "error-event.unauthorized";
71
+ var BadRequestErrorCode = "error-event.bad-request";
71
72
  var RequestCorrelationIdAttribute = "requestCorrelationId";
72
73
  var HttpStatusCodeAttribute = "httpStatusCode";
73
74
  var unhandled = (builder) => of(
@@ -91,7 +92,15 @@ var unauthorized = (builder) => of(
91
92
  attributes: { [HttpStatusCodeAttribute]: 401 }
92
93
  })
93
94
  );
95
+ var badRequest = (builder) => of(
96
+ Objects.deepMerge(builder, {
97
+ code: BadRequestErrorCode,
98
+ message: "The request is invalid and cannot be processed.",
99
+ attributes: { [HttpStatusCodeAttribute]: 400 }
100
+ })
101
+ );
94
102
  export {
103
+ BadRequestErrorCode,
95
104
  ErrorAttributeSchema,
96
105
  ErrorCodeSchema,
97
106
  ErrorEventException,
@@ -101,6 +110,7 @@ export {
101
110
  UnauthorizedErrorCode,
102
111
  UnhandledErrorCode,
103
112
  aggregate,
113
+ badRequest,
104
114
  findByCodeInCausalChain,
105
115
  findInCausalChain,
106
116
  from,
@@ -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'\n\nexport const RequestCorrelationIdAttribute: ErrorAttribute<string> = 'requestCorrelationId'\nexport const HttpStatusCodeAttribute: ErrorAttribute<number> = 'httpStatusCode'\n\nexport const unhandled = (builder?: 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?: 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?: ErrorEventBuilder) =>\n of(\n Objects.deepMerge(builder, {\n code: UnauthorizedErrorCode,\n message: 'The requested Resource requires authentication.',\n attributes: { [HttpStatusCodeAttribute]: 401 },\n })\n )\n"],"mappings":"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","names":[]}
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":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@bessemer/cornerstone",
3
3
  "type": "module",
4
- "version": "0.5.41",
4
+ "version": "0.5.43",
5
5
  "module": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "sideEffects": false,