@bessemer/cornerstone 0.5.63 → 0.5.65
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 +23 -30
- package/dist/array.d.ts.map +1 -1
- package/dist/array.js +108 -58
- package/dist/array.js.map +1 -1
- package/dist/assertion.d.ts +1 -9
- package/dist/assertion.d.ts.map +1 -1
- package/dist/assertion.js +8 -53
- package/dist/assertion.js.map +1 -1
- package/dist/async-value.js +2 -2
- package/dist/async-value.js.map +1 -1
- package/dist/async.d.ts.map +1 -1
- package/dist/async.js +2 -2
- package/dist/async.js.map +1 -1
- package/dist/cache.d.ts +5 -5
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +21 -17
- package/dist/cache.js.map +1 -1
- package/dist/combinable.d.ts.map +1 -1
- package/dist/combinable.js +5 -4
- package/dist/combinable.js.map +1 -1
- package/dist/comparator.d.ts.map +1 -1
- package/dist/comparator.js +9 -8
- package/dist/comparator.js.map +1 -1
- package/dist/content.d.ts +4 -14
- package/dist/content.d.ts.map +1 -1
- package/dist/date.d.ts +2 -2
- package/dist/date.d.ts.map +1 -1
- package/dist/date.js +5 -4
- package/dist/date.js.map +1 -1
- package/dist/either.d.ts +0 -1
- package/dist/either.d.ts.map +1 -1
- package/dist/either.js +2 -3
- package/dist/either.js.map +1 -1
- package/dist/entry.d.ts +9 -7
- package/dist/entry.d.ts.map +1 -1
- package/dist/entry.js +5 -1
- package/dist/entry.js.map +1 -1
- package/dist/equalitor.d.ts +2 -1
- package/dist/equalitor.d.ts.map +1 -1
- package/dist/equalitor.js +6 -2
- package/dist/equalitor.js.map +1 -1
- package/dist/error-event.d.ts +9 -12
- package/dist/error-event.d.ts.map +1 -1
- package/dist/error-event.js +45 -12
- package/dist/error-event.js.map +1 -1
- package/dist/error.d.ts.map +1 -1
- package/dist/error.js +2 -2
- package/dist/error.js.map +1 -1
- package/dist/expression/array-expression.js +1 -1
- package/dist/expression/array-expression.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/json.d.ts.map +1 -1
- package/dist/json.js +3 -3
- package/dist/json.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +10 -9
- package/dist/logger.js.map +1 -1
- package/dist/map.d.ts +17 -0
- package/dist/map.d.ts.map +1 -0
- package/dist/map.js +117 -0
- package/dist/map.js.map +1 -0
- package/dist/math.d.ts +1 -1
- package/dist/math.d.ts.map +1 -1
- package/dist/math.js +4 -7
- package/dist/math.js.map +1 -1
- package/dist/misc.d.ts.map +1 -1
- package/dist/misc.js +4 -3
- package/dist/misc.js.map +1 -1
- package/dist/monetary-amount.d.ts +8 -2
- package/dist/monetary-amount.d.ts.map +1 -1
- package/dist/monetary-amount.js +25 -8
- package/dist/monetary-amount.js.map +1 -1
- package/dist/object-path.d.ts +10 -0
- package/dist/object-path.d.ts.map +1 -0
- package/dist/object-path.js +78 -0
- package/dist/object-path.js.map +1 -0
- package/dist/object.d.ts +5 -24
- package/dist/object.d.ts.map +1 -1
- package/dist/object.js +64 -96
- package/dist/object.js.map +1 -1
- package/dist/patch.d.ts.map +1 -1
- package/dist/patch.js +5 -5
- package/dist/patch.js.map +1 -1
- package/dist/property.d.ts.map +1 -1
- package/dist/property.js +5 -4
- package/dist/property.js.map +1 -1
- package/dist/range.d.ts +4 -2
- package/dist/range.d.ts.map +1 -1
- package/dist/range.js +2 -2
- package/dist/range.js.map +1 -1
- package/dist/reference.d.ts +1 -2
- package/dist/reference.d.ts.map +1 -1
- package/dist/reference.js +13 -10
- package/dist/reference.js.map +1 -1
- package/dist/resource.d.ts.map +1 -1
- package/dist/resource.js +2 -2
- package/dist/resource.js.map +1 -1
- package/dist/result.d.ts.map +1 -1
- package/dist/result.js +6 -5
- package/dist/result.js.map +1 -1
- package/dist/retry.d.ts.map +1 -1
- package/dist/retry.js +14 -9
- package/dist/retry.js.map +1 -1
- package/dist/rich-text.js +2 -2
- package/dist/rich-text.js.map +1 -1
- package/dist/signature.d.ts +3 -2
- package/dist/signature.d.ts.map +1 -1
- package/dist/signature.js +6 -4
- package/dist/signature.js.map +1 -1
- package/dist/store.d.ts +13 -13
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +9 -7
- package/dist/store.js.map +1 -1
- package/dist/string.d.ts.map +1 -1
- package/dist/string.js +3 -4
- package/dist/string.js.map +1 -1
- package/dist/tag.d.ts.map +1 -1
- package/dist/tag.js +12 -12
- package/dist/tag.js.map +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/uri.d.ts.map +1 -1
- package/dist/uri.js +52 -50
- package/dist/uri.js.map +1 -1
- package/dist/url.d.ts.map +1 -1
- package/dist/url.js.map +1 -1
- package/dist/uuid.d.ts.map +1 -1
- package/dist/uuid.js +4 -3
- package/dist/uuid.js.map +1 -1
- package/dist/zod-util.d.ts +1 -1
- package/dist/zod-util.d.ts.map +1 -1
- package/dist/zod-util.js +4 -1
- package/dist/zod-util.js.map +1 -1
- package/package.json +2 -2
package/dist/object.js
CHANGED
@@ -1,34 +1,69 @@
|
|
1
1
|
// src/object.ts
|
2
|
-
import {
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
isPlainObject,
|
13
|
-
isString,
|
14
|
-
isUndefined as _isUndefined,
|
15
|
-
mapValues as _mapValues,
|
16
|
-
merge as unsafeMerge,
|
17
|
-
mergeWith as unsafeMergeWith
|
18
|
-
} from "lodash-es";
|
19
|
-
import { produce } from "immer";
|
20
|
-
var update = produce;
|
21
|
-
var isUndefined = _isUndefined;
|
22
|
-
var isNil = _isNil;
|
2
|
+
import { clone as _clone, cloneDeep as _cloneDeep, mapValues as _mapValues, merge as unsafeMerge, mergeWith as unsafeMergeWith } from "lodash-es";
|
3
|
+
import { isNumber } from "@bessemer/cornerstone/math";
|
4
|
+
import { isString } from "@bessemer/cornerstone/string";
|
5
|
+
import { isDate } from "@bessemer/cornerstone/date";
|
6
|
+
var isUndefined = (value) => {
|
7
|
+
return value === void 0;
|
8
|
+
};
|
9
|
+
var isNil = (value) => {
|
10
|
+
return value === null || value === void 0;
|
11
|
+
};
|
23
12
|
var isPresent = (value) => {
|
24
13
|
return !isNil(value);
|
25
14
|
};
|
26
15
|
var isObject = (value) => {
|
27
|
-
|
16
|
+
if (value === null || value === void 0 || typeof value !== "object") {
|
17
|
+
return false;
|
18
|
+
}
|
19
|
+
const proto = Object.getPrototypeOf(value);
|
20
|
+
return proto !== null && Object.getPrototypeOf(proto) === null;
|
21
|
+
};
|
22
|
+
var isEmpty = (value) => {
|
23
|
+
return Object.keys(value).length === 0;
|
24
|
+
};
|
25
|
+
var deepEqual = (value1, value2) => {
|
26
|
+
if (value1 === value2) {
|
27
|
+
return true;
|
28
|
+
}
|
29
|
+
if (isNil(value1) || isNil(value2)) {
|
30
|
+
return false;
|
31
|
+
}
|
32
|
+
if (isDate(value1) && isDate(value2)) {
|
33
|
+
return value1.getTime() === value2.getTime();
|
34
|
+
}
|
35
|
+
if (value1 instanceof RegExp && value2 instanceof RegExp) {
|
36
|
+
return value1.toString() === value2.toString();
|
37
|
+
}
|
38
|
+
if (typeof value1 !== typeof value2) {
|
39
|
+
return false;
|
40
|
+
}
|
41
|
+
if (Array.isArray(value1) && Array.isArray(value2)) {
|
42
|
+
if (value1.length !== value2.length) {
|
43
|
+
return false;
|
44
|
+
}
|
45
|
+
for (let i = 0; i < value1.length; i++) {
|
46
|
+
if (!deepEqual(value1[i], value2[i])) {
|
47
|
+
return false;
|
48
|
+
}
|
49
|
+
}
|
50
|
+
return true;
|
51
|
+
}
|
52
|
+
if (isObject(value1) && isObject(value2)) {
|
53
|
+
const keys1 = Object.keys(value1);
|
54
|
+
const keys2 = Object.keys(value2);
|
55
|
+
if (keys1.length !== keys2.length) {
|
56
|
+
return false;
|
57
|
+
}
|
58
|
+
for (const key of keys1) {
|
59
|
+
if (!deepEqual(value1[key], value2[key])) {
|
60
|
+
return false;
|
61
|
+
}
|
62
|
+
}
|
63
|
+
return true;
|
64
|
+
}
|
65
|
+
return false;
|
28
66
|
};
|
29
|
-
var isEmpty = _isEmpty;
|
30
|
-
var deepEqual = _isEqual;
|
31
|
-
var invert = _invert;
|
32
67
|
var mapValues = _mapValues;
|
33
68
|
var clone = _clone;
|
34
69
|
var cloneDeep = _cloneDeep;
|
@@ -73,76 +108,15 @@ var isValidKey = (field, obj) => {
|
|
73
108
|
function fieldsPresent(object, fields) {
|
74
109
|
return fields.every((field) => isPresent(object[field]));
|
75
110
|
}
|
76
|
-
var path = (path2) => {
|
77
|
-
return { path: path2 };
|
78
|
-
};
|
79
|
-
var parsePath = (path2) => {
|
80
|
-
const result = [];
|
81
|
-
const regex = /([^.\[\]]+)|\[(\d+)]/g;
|
82
|
-
let match;
|
83
|
-
while ((match = regex.exec(path2)) !== null) {
|
84
|
-
if (match[1] !== void 0) {
|
85
|
-
result.push(match[1]);
|
86
|
-
} else if (match[2] !== void 0) {
|
87
|
-
result.push(Number(match[2]));
|
88
|
-
}
|
89
|
-
}
|
90
|
-
return { path: result };
|
91
|
-
};
|
92
|
-
var pathify = (path2) => {
|
93
|
-
if (isString(path2)) {
|
94
|
-
return parsePath(path2);
|
95
|
-
}
|
96
|
-
return path2;
|
97
|
-
};
|
98
|
-
var getPathValue = (object, initialPath) => {
|
99
|
-
const path2 = pathify(initialPath);
|
100
|
-
let current = object;
|
101
|
-
for (const key of path2.path) {
|
102
|
-
if (isPrimitive(current)) {
|
103
|
-
return void 0;
|
104
|
-
}
|
105
|
-
current = current[key];
|
106
|
-
}
|
107
|
-
return current;
|
108
|
-
};
|
109
|
-
var applyPathValue = (object, initialPath, value) => {
|
110
|
-
const path2 = pathify(initialPath);
|
111
|
-
const newObject = update(object, (draft) => {
|
112
|
-
let current = draft;
|
113
|
-
for (let i = 0; i < path2.path.length; i++) {
|
114
|
-
const key = path2.path[i];
|
115
|
-
const isLastKey = i === path2.path.length - 1;
|
116
|
-
if (isPrimitive(current)) {
|
117
|
-
return;
|
118
|
-
}
|
119
|
-
if (Array.isArray(current)) {
|
120
|
-
if (!isNumber(key)) {
|
121
|
-
return;
|
122
|
-
}
|
123
|
-
if (key >= current.length) {
|
124
|
-
return;
|
125
|
-
}
|
126
|
-
}
|
127
|
-
if (isLastKey) {
|
128
|
-
current[key] = value;
|
129
|
-
} else {
|
130
|
-
current = current[key];
|
131
|
-
}
|
132
|
-
}
|
133
|
-
});
|
134
|
-
if (newObject === object) {
|
135
|
-
return void 0;
|
136
|
-
}
|
137
|
-
return newObject;
|
138
|
-
};
|
139
111
|
var isPrimitive = (value) => {
|
140
112
|
return value === null || typeof value !== "object" && typeof value !== "function";
|
141
113
|
};
|
142
114
|
var isBasic = (value) => {
|
143
115
|
return isNumber(value) || isString(value) || isDate(value) || isBoolean(value);
|
144
116
|
};
|
145
|
-
var isBoolean =
|
117
|
+
var isBoolean = (value) => {
|
118
|
+
return typeof value === "boolean";
|
119
|
+
};
|
146
120
|
var getAttribute = (record, attribute) => {
|
147
121
|
return record[attribute];
|
148
122
|
};
|
@@ -150,7 +124,6 @@ var coerceNil = (value) => {
|
|
150
124
|
return isNil(value) ? void 0 : value;
|
151
125
|
};
|
152
126
|
export {
|
153
|
-
applyPathValue,
|
154
127
|
clone,
|
155
128
|
cloneDeep,
|
156
129
|
coerceNil,
|
@@ -162,8 +135,6 @@ export {
|
|
162
135
|
diffShallow,
|
163
136
|
fieldsPresent,
|
164
137
|
getAttribute,
|
165
|
-
getPathValue,
|
166
|
-
invert,
|
167
138
|
isBasic,
|
168
139
|
isBoolean,
|
169
140
|
isEmpty,
|
@@ -173,9 +144,6 @@ export {
|
|
173
144
|
isPrimitive,
|
174
145
|
isUndefined,
|
175
146
|
isValidKey,
|
176
|
-
mapValues
|
177
|
-
parsePath,
|
178
|
-
path,
|
179
|
-
update
|
147
|
+
mapValues
|
180
148
|
};
|
181
149
|
//# sourceMappingURL=object.js.map
|
package/dist/object.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/object.ts"],"sourcesContent":["import {\n clone as _clone,\n cloneDeep as _cloneDeep,\n invert as _invert,\n isBoolean as _isBoolean,\n isDate,\n isEmpty as _isEmpty,\n isEqual as _isEqual,\n isNil as _isNil,\n isNumber,\n isPlainObject,\n isString,\n isUndefined as _isUndefined,\n mapValues as _mapValues,\n merge as unsafeMerge,\n mergeWith as unsafeMergeWith,\n} from 'lodash-es'\nimport { produce } from 'immer'\nimport { BasicType, Dictionary, NominalType } from '@bessemer/cornerstone/types'\nimport { Primitive, UnknownRecord } from 'type-fest'\n\nexport const update: typeof produce = produce\n\nexport const isUndefined = _isUndefined\nexport const isNil = _isNil\nexport const isPresent = <T>(value: T): value is NonNullable<T> => {\n return !isNil(value)\n}\nexport const isObject = (value?: any): value is Dictionary<unknown> => {\n return isPlainObject(value)\n}\nexport const isEmpty = _isEmpty\nexport const deepEqual = _isEqual\nexport const invert = _invert\nexport const mapValues = _mapValues\n\nexport const clone = _clone\nexport const cloneDeep = _cloneDeep\n\nexport function deepMerge<TObject, TSource>(object: TObject, source: TSource): TObject & TSource\nexport function deepMerge<TObject, TSource1, TSource2>(object: TObject, source1: TSource1, source2: TSource2): TObject & TSource1 & TSource2\nexport function deepMerge<TObject, TSource1, TSource2, TSource3>(\n object: TObject,\n source1: TSource1,\n source2: TSource2,\n source3: TSource3\n): TObject & TSource1 & TSource2 & TSource3\nexport function deepMerge<TObject, TSource1, TSource2, TSource3, TSource4>(\n object: TObject,\n source1: TSource1,\n source2: TSource2,\n source3: TSource3,\n source4: TSource4\n): TObject & TSource1 & TSource2 & TSource3 & TSource4\nexport function deepMerge(object: any, ...otherArgs: any[]): any {\n return unsafeMerge({}, object, ...otherArgs)\n}\n\nexport const deepMergeAll = <T>(objects: Array<T>): T => {\n return objects.reduce((x, y) => deepMerge(x, y))\n}\n\nexport function deepMergeInto<Source1, Source2>(source: Source1, values: Source2): asserts source is Source1 & Source2 {\n unsafeMerge(source, values)\n}\n\nexport const deepMergeWith: typeof unsafeMergeWith = (...args: Array<any>) => {\n const clone = cloneDeep(args[0])\n return unsafeMergeWith.apply(null, [clone, ...args.slice(1)])\n}\n\nexport type ObjectDiffResult = {\n elementsUpdated: Record<string, { originalValue: unknown; updatedValue: unknown }>\n elementsAdded: UnknownRecord\n elementsRemoved: UnknownRecord\n}\n\nexport function diffShallow(original: UnknownRecord, updated: UnknownRecord): ObjectDiffResult {\n const result: ObjectDiffResult = {\n elementsUpdated: {},\n elementsAdded: {},\n elementsRemoved: {},\n }\n\n for (const [key, originalValue] of Object.entries(original)) {\n const updatedValue = updated[key]\n if (updatedValue === undefined) {\n result.elementsRemoved[key] = originalValue\n } else if (!deepEqual(originalValue, updatedValue)) {\n result.elementsUpdated[key] = { originalValue: originalValue, updatedValue: updatedValue }\n }\n }\n\n for (const [key, updatedValue] of Object.entries(updated)) {\n const originalValue = original[key]\n if (originalValue === undefined) {\n result.elementsAdded[key] = updatedValue\n }\n }\n return result\n}\n\nexport const isValidKey = (field: PropertyKey, obj: object): field is keyof typeof obj => {\n return field in obj\n}\n\n/** Determines if the list of fields are present on the object (not null or undefined), with type inference */\nexport function fieldsPresent<T extends object, K extends keyof T>(\n object: T,\n fields: Array<K>\n): object is Exclude<T, K> & Required<{ [P in K]: NonNullable<T[P]> }> {\n return fields.every((field) => isPresent(object[field]))\n}\n\nexport type ObjectPath = {\n path: Array<string | number>\n}\n\nexport const path = (path: Array<string | number>): ObjectPath => {\n return { path }\n}\n\nexport const parsePath = (path: string): ObjectPath => {\n const result: Array<string | number> = []\n const regex = /([^.\\[\\]]+)|\\[(\\d+)]/g\n\n let match: RegExpExecArray | null\n while ((match = regex.exec(path)) !== null) {\n if (match[1] !== undefined) {\n result.push(match[1])\n } else if (match[2] !== undefined) {\n result.push(Number(match[2]))\n }\n }\n\n return { path: result }\n}\n\nconst pathify = (path: ObjectPath | string): ObjectPath => {\n if (isString(path)) {\n return parsePath(path)\n }\n\n return path as ObjectPath\n}\n\nexport const getPathValue = (object: UnknownRecord, initialPath: ObjectPath | string): unknown | undefined => {\n const path = pathify(initialPath)\n let current: any = object\n\n for (const key of path.path) {\n if (isPrimitive(current)) {\n return undefined\n }\n\n current = current[key]\n }\n\n return current\n}\n\nexport const applyPathValue = (object: UnknownRecord, initialPath: ObjectPath | string, value: unknown): UnknownRecord | undefined => {\n const path = pathify(initialPath)\n\n const newObject = update(object, (draft) => {\n let current: any = draft\n\n for (let i = 0; i < path.path.length; i++) {\n const key = path.path[i]!\n const isLastKey = i === path.path.length - 1\n\n if (isPrimitive(current)) {\n return\n }\n\n if (Array.isArray(current)) {\n if (!isNumber(key)) {\n return\n }\n\n if (key >= current.length) {\n return\n }\n }\n\n if (isLastKey) {\n current[key] = value\n } else {\n current = current[key]\n }\n }\n })\n\n if (newObject === object) {\n return undefined\n }\n\n return newObject\n}\n\nexport const isPrimitive = (value: any): value is Primitive => {\n return value === null || (typeof value !== 'object' && typeof value !== 'function')\n}\n\nexport const isBasic = (value: any): value is BasicType => {\n return isNumber(value) || isString(value) || isDate(value) || isBoolean(value)\n}\n\nexport const isBoolean = _isBoolean\n\ntype TransformFunction = (value: any, path: (string | number)[], key: string | number, parent: any) => any\n\nconst walk = (value: any, transform: TransformFunction, path: (string | number)[] = []): any => {\n if (isNil(value) || isPrimitive(value)) {\n return value\n }\n\n if (Array.isArray(value)) {\n return value.map((value, index) => {\n const currentPath = [...path, index]\n return walk(transform(value, currentPath, index, value), transform, currentPath)\n })\n }\n\n const result: any = {}\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n const currentPath = [...path, key]\n const transformedValue = transform(value[key], currentPath, key, value)\n result[key] = walk(transformedValue, transform, currentPath)\n }\n }\n\n return result\n}\n\nexport type RecordAttribute<Type = unknown, Class extends string = 'RecordAttribute'> = NominalType<string, [Type, Class]>\ntype RecordAttributeType<Attribute> = Attribute extends RecordAttribute<infer Type, string> ? Type : never\n\nexport const getAttribute = <T extends RecordAttribute<unknown, string>>(record: UnknownRecord, attribute: T): RecordAttributeType<T> | undefined => {\n return record[attribute] as RecordAttributeType<T> | undefined\n}\n\nexport const coerceNil = <T>(value: T | null | undefined): T | undefined => {\n return isNil(value) ? undefined : value\n}\n"],"mappings":"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","names":["clone","path"]}
|
1
|
+
{"version":3,"sources":["../src/object.ts"],"sourcesContent":["import { clone as _clone, cloneDeep as _cloneDeep, mapValues as _mapValues, merge as unsafeMerge, mergeWith as unsafeMergeWith } from 'lodash-es'\n\nimport { BasicType, Dictionary, NominalType } from '@bessemer/cornerstone/types'\nimport { Primitive, UnknownRecord } from 'type-fest'\nimport { isNumber } from '@bessemer/cornerstone/math'\nimport { isString } from '@bessemer/cornerstone/string'\nimport { isDate } from '@bessemer/cornerstone/date'\n\nexport const isUndefined = (value: unknown): value is undefined => {\n return value === undefined\n}\n\nexport const isNil = (value: unknown): value is null | undefined => {\n return value === null || value === undefined\n}\n\nexport const isPresent = <T>(value: T): value is NonNullable<T> => {\n return !isNil(value)\n}\n\nexport const isObject = (value?: any): value is Dictionary<unknown> => {\n if (value === null || value === undefined || typeof value !== 'object') {\n return false\n }\n\n const proto = Object.getPrototypeOf(value)\n return proto !== null && Object.getPrototypeOf(proto) === null\n}\n\n// JOHN should this also check for the nil case?\nexport const isEmpty = (value: Record<string | number | symbol, unknown>): boolean => {\n return Object.keys(value).length === 0\n}\n\nexport const deepEqual = (value1: unknown, value2: unknown): boolean => {\n if (value1 === value2) {\n return true\n }\n\n // If either value is null or undefined, they're not equal (since we already checked ===)\n if (isNil(value1) || isNil(value2)) {\n return false\n }\n\n if (isDate(value1) && isDate(value2)) {\n return value1.getTime() === value2.getTime()\n }\n\n if (value1 instanceof RegExp && value2 instanceof RegExp) {\n return value1.toString() === value2.toString()\n }\n\n if (typeof value1 !== typeof value2) {\n return false\n }\n\n if (Array.isArray(value1) && Array.isArray(value2)) {\n if (value1.length !== value2.length) {\n return false\n }\n\n for (let i = 0; i < value1.length; i++) {\n if (!deepEqual(value1[i], value2[i])) {\n return false\n }\n }\n\n return true\n }\n\n if (isObject(value1) && isObject(value2)) {\n const keys1 = Object.keys(value1)\n const keys2 = Object.keys(value2)\n\n if (keys1.length !== keys2.length) {\n return false\n }\n\n for (const key of keys1) {\n if (!deepEqual(value1[key], value2[key])) {\n return false\n }\n }\n\n return true\n }\n\n return false\n}\n\nexport const mapValues = _mapValues\n\nexport const clone = _clone\nexport const cloneDeep = _cloneDeep\n\nexport function deepMerge<TObject, TSource>(object: TObject, source: TSource): TObject & TSource\nexport function deepMerge<TObject, TSource1, TSource2>(object: TObject, source1: TSource1, source2: TSource2): TObject & TSource1 & TSource2\nexport function deepMerge<TObject, TSource1, TSource2, TSource3>(\n object: TObject,\n source1: TSource1,\n source2: TSource2,\n source3: TSource3\n): TObject & TSource1 & TSource2 & TSource3\nexport function deepMerge<TObject, TSource1, TSource2, TSource3, TSource4>(\n object: TObject,\n source1: TSource1,\n source2: TSource2,\n source3: TSource3,\n source4: TSource4\n): TObject & TSource1 & TSource2 & TSource3 & TSource4\nexport function deepMerge(object: any, ...otherArgs: any[]): any {\n return unsafeMerge({}, object, ...otherArgs)\n}\n\nexport const deepMergeAll = <T>(objects: Array<T>): T => {\n return objects.reduce((x, y) => deepMerge(x, y))\n}\n\nexport function deepMergeInto<Source1, Source2>(source: Source1, values: Source2): asserts source is Source1 & Source2 {\n unsafeMerge(source, values)\n}\n\nexport const deepMergeWith: typeof unsafeMergeWith = (...args: Array<any>) => {\n const clone = cloneDeep(args[0])\n return unsafeMergeWith.apply(null, [clone, ...args.slice(1)])\n}\n\nexport type ObjectDiffResult = {\n elementsUpdated: Record<string, { originalValue: unknown; updatedValue: unknown }>\n elementsAdded: UnknownRecord\n elementsRemoved: UnknownRecord\n}\n\nexport function diffShallow(original: UnknownRecord, updated: UnknownRecord): ObjectDiffResult {\n const result: ObjectDiffResult = {\n elementsUpdated: {},\n elementsAdded: {},\n elementsRemoved: {},\n }\n\n for (const [key, originalValue] of Object.entries(original)) {\n const updatedValue = updated[key]\n if (updatedValue === undefined) {\n result.elementsRemoved[key] = originalValue\n } else if (!deepEqual(originalValue, updatedValue)) {\n result.elementsUpdated[key] = { originalValue: originalValue, updatedValue: updatedValue }\n }\n }\n\n for (const [key, updatedValue] of Object.entries(updated)) {\n const originalValue = original[key]\n if (originalValue === undefined) {\n result.elementsAdded[key] = updatedValue\n }\n }\n return result\n}\n\nexport const isValidKey = (field: PropertyKey, obj: object): field is keyof typeof obj => {\n return field in obj\n}\n\n/** Determines if the list of fields are present on the object (not null or undefined), with type inference */\nexport function fieldsPresent<T extends object, K extends keyof T>(\n object: T,\n fields: Array<K>\n): object is Exclude<T, K> & Required<{ [P in K]: NonNullable<T[P]> }> {\n return fields.every((field) => isPresent(object[field]))\n}\n\nexport const isPrimitive = (value: any): value is Primitive => {\n return value === null || (typeof value !== 'object' && typeof value !== 'function')\n}\n\nexport const isBasic = (value: any): value is BasicType => {\n return isNumber(value) || isString(value) || isDate(value) || isBoolean(value)\n}\n\nexport const isBoolean = (value: unknown): value is boolean => {\n return typeof value === 'boolean'\n}\n\ntype TransformFunction = (value: any, path: (string | number)[], key: string | number, parent: any) => any\n\nconst walk = (value: any, transform: TransformFunction, path: (string | number)[] = []): any => {\n if (isNil(value) || isPrimitive(value)) {\n return value\n }\n\n if (Array.isArray(value)) {\n return value.map((value, index) => {\n const currentPath = [...path, index]\n return walk(transform(value, currentPath, index, value), transform, currentPath)\n })\n }\n\n const result: any = {}\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) {\n const currentPath = [...path, key]\n const transformedValue = transform(value[key], currentPath, key, value)\n result[key] = walk(transformedValue, transform, currentPath)\n }\n }\n\n return result\n}\n\nexport type RecordAttribute<Type = unknown, Class extends string = 'RecordAttribute'> = NominalType<string, [Type, Class]>\ntype RecordAttributeType<Attribute> = Attribute extends RecordAttribute<infer Type, string> ? Type : never\n\nexport const getAttribute = <T extends RecordAttribute<unknown, string>>(record: UnknownRecord, attribute: T): RecordAttributeType<T> | undefined => {\n return record[attribute] as RecordAttributeType<T> | undefined\n}\n\nexport const coerceNil = <T>(value: T | null | undefined): T | undefined => {\n return isNil(value) ? undefined : value\n}\n"],"mappings":"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","names":["clone"]}
|
package/dist/patch.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../src/patch.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kBAAkB,EAClB,UAAU,EAGV,kBAAkB,EACnB,MAAM,kCAAkC,CAAA;
|
1
|
+
{"version":3,"file":"patch.d.ts","sourceRoot":"","sources":["../src/patch.ts"],"names":[],"mappings":"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"}
|
package/dist/patch.js
CHANGED
@@ -4,7 +4,7 @@ import {
|
|
4
4
|
Expressions,
|
5
5
|
NumericExpressions
|
6
6
|
} from "@bessemer/cornerstone/expression";
|
7
|
-
import {
|
7
|
+
import { deepMergeWith, isNil, isObject } from "@bessemer/cornerstone/object";
|
8
8
|
var PatchType = /* @__PURE__ */ ((PatchType2) => {
|
9
9
|
PatchType2["Set"] = "Set";
|
10
10
|
PatchType2["Apply"] = "Apply";
|
@@ -53,7 +53,7 @@ var resolveWithDetails = (value, patches, evaluate) => {
|
|
53
53
|
currentValue = applyPatch(currentValue, patch2.patch, evaluate);
|
54
54
|
break;
|
55
55
|
default:
|
56
|
-
|
56
|
+
throw new Error(`Unrecognized PatchType for value: ${JSON.stringify(it)}`);
|
57
57
|
}
|
58
58
|
return { value: currentValue, patch: patch2 };
|
59
59
|
});
|
@@ -63,11 +63,11 @@ var resolve = (value, patches, evaluate) => {
|
|
63
63
|
return resolveWithDetails(value, patches, evaluate).value;
|
64
64
|
};
|
65
65
|
var applyPatch = (value, patch2, evaluate) => {
|
66
|
-
return
|
67
|
-
if (
|
66
|
+
return deepMergeWith(value, patch2, (value2, patch3) => {
|
67
|
+
if (isNil(patch3)) {
|
68
68
|
return value2;
|
69
69
|
}
|
70
|
-
if (!
|
70
|
+
if (!isObject(patch3) || !("_PatchType" in patch3)) {
|
71
71
|
return void 0;
|
72
72
|
}
|
73
73
|
return evaluate(resolve(value2, [patch3], evaluate));
|
package/dist/patch.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/patch.ts"],"sourcesContent":["import {\n ArrayExpressions,\n EvaluateExpression,\n Expression,\n Expressions,\n NumericExpressions,\n ReducingExpression,\n} from '@bessemer/cornerstone/expression'\nimport {
|
1
|
+
{"version":3,"sources":["../src/patch.ts"],"sourcesContent":["import {\n ArrayExpressions,\n EvaluateExpression,\n Expression,\n Expressions,\n NumericExpressions,\n ReducingExpression,\n} from '@bessemer/cornerstone/expression'\nimport { UnknownRecord } from 'type-fest'\nimport { deepMergeWith, isNil, isObject } from '@bessemer/cornerstone/object'\n\nexport enum PatchType {\n Set = 'Set',\n Apply = 'Apply',\n Patch = 'Patch',\n}\n\nexport type SetPatch<T> = {\n _PatchType: PatchType.Set\n value: Expression<T>\n}\n\nexport type ApplyPatch<T> = {\n _PatchType: PatchType.Apply\n value: Expression<T>\n reducer: ReducingExpression<T, T>\n}\n\nexport type PatchPatch<T> = {\n _PatchType: PatchType.Patch\n patch: Patchable<T>\n}\n\nexport type Patch<T> = SetPatch<T> | ApplyPatch<T> | PatchPatch<T>\n\nexport type PatchValue<T> = {\n value: T\n patch: Patch<T>\n}\n\nexport type Patchable<T> = {\n [P in keyof T]?: T[P] extends Array<infer U>\n ? Patch<U[]> | Patchable<U[]>\n : T[P] extends object | undefined\n ? Patch<T[P]> | Patchable<T[P]>\n : Patch<T[P]> | T[P]\n}\n\nexport const set = <T>(value: Expression<T>): Patch<T> => {\n return {\n _PatchType: PatchType.Set,\n value: value as any,\n }\n}\n\nexport const apply = <T>(value: Expression<T>, reducer: ReducingExpression<T, T>): Patch<T> => {\n return {\n _PatchType: PatchType.Apply,\n value,\n reducer,\n }\n}\n\nexport const patch = <T extends UnknownRecord, N extends Patchable<T> = Patchable<T>>(patch: N): Patch<T> => {\n return {\n _PatchType: PatchType.Patch,\n patch,\n }\n}\n\nexport const sum = (value: Expression<number>): Patch<number> => {\n return apply(value, Expressions.reference(NumericExpressions.SumExpression))\n}\n\nexport const multiply = (value: Expression<number>): Patch<number> => {\n return apply(value, Expressions.reference(NumericExpressions.MultiplyExpression))\n}\n\nexport const concatenate = <T extends Array<Expression<unknown>>>(value: Expression<T>): Patch<T> => {\n return apply(value, Expressions.reference(ArrayExpressions.ConcatenateExpression)) as Patch<T>\n}\n\nexport type ResolvePatchesResult<T> = {\n value: T\n patchValues: Array<PatchValue<T>>\n}\n\nexport const resolveWithDetails = <T>(value: T, patches: Array<Patch<T>>, evaluate: EvaluateExpression): ResolvePatchesResult<T> => {\n let currentValue: T = value\n\n const patchValues = patches.map((patch) => {\n switch (patch._PatchType) {\n case PatchType.Set:\n currentValue = evaluate(patch.value)\n break\n case PatchType.Apply:\n currentValue = evaluate(Expressions.dereference(patch.reducer, [currentValue, patch.value]))\n break\n case PatchType.Patch:\n currentValue = applyPatch(currentValue, patch.patch, evaluate)\n break\n default:\n throw new Error(`Unrecognized PatchType for value: ${JSON.stringify(it)}`)\n }\n\n return { value: currentValue, patch }\n })\n\n return { value: currentValue, patchValues }\n}\n\nexport const resolve = <T>(value: T, patches: Array<Patch<T>>, evaluate: EvaluateExpression): T => {\n return resolveWithDetails(value, patches, evaluate).value\n}\n\nconst applyPatch = <T>(value: T, patch: Patchable<T>, evaluate: EvaluateExpression): T => {\n return deepMergeWith(value, patch, (value, patch) => {\n if (isNil(patch)) {\n return value\n }\n\n if (!isObject(patch) || !('_PatchType' in patch)) {\n return undefined\n }\n\n return evaluate(resolve(value, [patch as Patch<T>], evaluate))\n })\n}\n"],"mappings":";AAAA;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,OAEK;AAEP,SAAS,eAAe,OAAO,gBAAgB;AAExC,IAAK,YAAL,kBAAKA,eAAL;AACL,EAAAA,WAAA,SAAM;AACN,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,WAAQ;AAHE,SAAAA;AAAA,GAAA;AAqCL,IAAM,MAAM,CAAI,UAAmC;AACxD,SAAO;AAAA,IACL,YAAY;AAAA,IACZ;AAAA,EACF;AACF;AAEO,IAAM,QAAQ,CAAI,OAAsB,YAAgD;AAC7F,SAAO;AAAA,IACL,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,QAAQ,CAAiEC,WAAuB;AAC3G,SAAO;AAAA,IACL,YAAY;AAAA,IACZ,OAAAA;AAAA,EACF;AACF;AAEO,IAAM,MAAM,CAAC,UAA6C;AAC/D,SAAO,MAAM,OAAO,YAAY,UAAU,mBAAmB,aAAa,CAAC;AAC7E;AAEO,IAAM,WAAW,CAAC,UAA6C;AACpE,SAAO,MAAM,OAAO,YAAY,UAAU,mBAAmB,kBAAkB,CAAC;AAClF;AAEO,IAAM,cAAc,CAAuC,UAAmC;AACnG,SAAO,MAAM,OAAO,YAAY,UAAU,iBAAiB,qBAAqB,CAAC;AACnF;AAOO,IAAM,qBAAqB,CAAI,OAAU,SAA0B,aAA0D;AAClI,MAAI,eAAkB;AAEtB,QAAM,cAAc,QAAQ,IAAI,CAACA,WAAU;AACzC,YAAQA,OAAM,YAAY;AAAA,MACxB,KAAK;AACH,uBAAe,SAASA,OAAM,KAAK;AACnC;AAAA,MACF,KAAK;AACH,uBAAe,SAAS,YAAY,YAAYA,OAAM,SAAS,CAAC,cAAcA,OAAM,KAAK,CAAC,CAAC;AAC3F;AAAA,MACF,KAAK;AACH,uBAAe,WAAW,cAAcA,OAAM,OAAO,QAAQ;AAC7D;AAAA,MACF;AACE,cAAM,IAAI,MAAM,qCAAqC,KAAK,UAAU,EAAE,CAAC,EAAE;AAAA,IAC7E;AAEA,WAAO,EAAE,OAAO,cAAc,OAAAA,OAAM;AAAA,EACtC,CAAC;AAED,SAAO,EAAE,OAAO,cAAc,YAAY;AAC5C;AAEO,IAAM,UAAU,CAAI,OAAU,SAA0B,aAAoC;AACjG,SAAO,mBAAmB,OAAO,SAAS,QAAQ,EAAE;AACtD;AAEA,IAAM,aAAa,CAAI,OAAUA,QAAqB,aAAoC;AACxF,SAAO,cAAc,OAAOA,QAAO,CAACC,QAAOD,WAAU;AACnD,QAAI,MAAMA,MAAK,GAAG;AAChB,aAAOC;AAAA,IACT;AAEA,QAAI,CAAC,SAASD,MAAK,KAAK,EAAE,gBAAgBA,SAAQ;AAChD,aAAO;AAAA,IACT;AAEA,WAAO,SAAS,QAAQC,QAAO,CAACD,MAAiB,GAAG,QAAQ,CAAC;AAAA,EAC/D,CAAC;AACH;","names":["PatchType","patch","value"]}
|
package/dist/property.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"property.d.ts","sourceRoot":"","sources":["../src/property.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"property.d.ts","sourceRoot":"","sources":["../src/property.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,cAAc,EAAiB,GAAG,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAClH,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAGzD,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,aAAa,IAAI;IACpD,MAAM,EAAE,CAAC,CAAA;IACT,SAAS,EAAE,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;CACvD,CAAA;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,IAAI,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAA;AAE7D,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,aAAa,EAAE,QAAQ,CAAC,EAAE,YAAY,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,KAAG,cAAc,CAAC,CAAC,CAWvH,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,aAAa,EAAE,YAAY,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC,KAAG,CAGlG,CAAA"}
|
package/dist/property.js
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
// src/property.ts
|
2
|
-
import {
|
2
|
+
import { resolve as resolveTag, serializeTags } from "@bessemer/cornerstone/tag";
|
3
|
+
import { deepMergeAll } from "@bessemer/cornerstone/object";
|
3
4
|
var properties = (values, overrides) => {
|
4
5
|
const propertyOverrideEntries = (overrides ?? []).map((override) => {
|
5
|
-
return [
|
6
|
+
return [serializeTags(override.tags), override];
|
6
7
|
});
|
7
8
|
const propertyOverrides = Object.fromEntries(propertyOverrideEntries);
|
8
9
|
return {
|
@@ -11,8 +12,8 @@ var properties = (values, overrides) => {
|
|
11
12
|
};
|
12
13
|
};
|
13
14
|
var resolve = (properties2, tags) => {
|
14
|
-
const overrides =
|
15
|
-
return
|
15
|
+
const overrides = resolveTag(Object.values(properties2.overrides), tags);
|
16
|
+
return deepMergeAll([properties2.values, ...overrides.reverse()]);
|
16
17
|
};
|
17
18
|
export {
|
18
19
|
properties,
|
package/dist/property.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/property.ts"],"sourcesContent":["import {
|
1
|
+
{"version":3,"sources":["../src/property.ts"],"sourcesContent":["import { resolve as resolveTag, SerializedTags, serializeTags, Tag, TaggedValue } from '@bessemer/cornerstone/tag'\nimport { UnknownRecord } from 'type-fest'\nimport { DeepPartial } from '@bessemer/cornerstone/types'\nimport { deepMergeAll } from '@bessemer/cornerstone/object'\n\nexport type PropertyRecord<T extends UnknownRecord> = {\n values: T\n overrides: Record<SerializedTags, PropertyOverride<T>>\n}\n\nexport type PropertyOverride<T> = TaggedValue<DeepPartial<T>>\n\nexport const properties = <T extends UnknownRecord>(values: T, overrides?: Array<PropertyOverride<T>>): PropertyRecord<T> => {\n const propertyOverrideEntries = (overrides ?? []).map((override) => {\n return [serializeTags(override.tags), override]\n })\n\n const propertyOverrides: Record<SerializedTags, PropertyOverride<T>> = Object.fromEntries(propertyOverrideEntries)\n\n return {\n values,\n overrides: propertyOverrides,\n }\n}\n\nexport const resolve = <T extends UnknownRecord>(properties: PropertyRecord<T>, tags: Array<Tag>): T => {\n const overrides = resolveTag(Object.values(properties.overrides), tags)\n return deepMergeAll([properties.values, ...overrides.reverse()]) as T\n}\n"],"mappings":";AAAA,SAAS,WAAW,YAA4B,qBAAuC;AAGvF,SAAS,oBAAoB;AAStB,IAAM,aAAa,CAA0B,QAAW,cAA8D;AAC3H,QAAM,2BAA2B,aAAa,CAAC,GAAG,IAAI,CAAC,aAAa;AAClE,WAAO,CAAC,cAAc,SAAS,IAAI,GAAG,QAAQ;AAAA,EAChD,CAAC;AAED,QAAM,oBAAiE,OAAO,YAAY,uBAAuB;AAEjH,SAAO;AAAA,IACL;AAAA,IACA,WAAW;AAAA,EACb;AACF;AAEO,IAAM,UAAU,CAA0BA,aAA+B,SAAwB;AACtG,QAAM,YAAY,WAAW,OAAO,OAAOA,YAAW,SAAS,GAAG,IAAI;AACtE,SAAO,aAAa,CAACA,YAAW,QAAQ,GAAG,UAAU,QAAQ,CAAC,CAAC;AACjE;","names":["properties"]}
|
package/dist/range.d.ts
CHANGED
@@ -3,7 +3,9 @@ import { TaggedType } from '@bessemer/cornerstone/types';
|
|
3
3
|
export type Bounds<T> = TaggedType<[T | null, T | null], 'Bounds'>;
|
4
4
|
export type BoundsInput<T> = [lower: T | null, upper?: T | null] | Bounds<T>;
|
5
5
|
export declare const schema: <T>(type: ZodType<T>) => ZodType<Bounds<T>>;
|
6
|
-
export type NumericBounds
|
7
|
-
export declare const NumericSchema: Zod.ZodType<Bounds<number>, Zod.
|
6
|
+
export type NumericBounds = Bounds<number>;
|
7
|
+
export declare const NumericSchema: Zod.ZodType<Bounds<number>, unknown, Zod.core.$ZodTypeInternals<Bounds<number>, unknown>>;
|
8
|
+
export type FiniteBounds<T> = [T, T];
|
9
|
+
export type FiniteNumericBounds = FiniteBounds<number>;
|
8
10
|
export declare const of: <T>(bounds: BoundsInput<T>) => Bounds<T>;
|
9
11
|
//# sourceMappingURL=range.d.ts.map
|
package/dist/range.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"range.d.ts","sourceRoot":"","sources":["../src/range.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AAIxD,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAA;AAClE,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;AAE5E,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAE7D,CAAA;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AAC1C,eAAO,MAAM,aAAa,2FAAuB,CAAA;AAEjD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AACpC,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;AAEtD,eAAO,MAAM,EAAE,GAAI,CAAC,EAAE,QAAQ,WAAW,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,CAMtD,CAAA"}
|
package/dist/range.js
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
// src/range.ts
|
2
|
-
import { Objects } from "@bessemer/cornerstone";
|
3
2
|
import Zod from "zod";
|
3
|
+
import { isUndefined } from "@bessemer/cornerstone/object";
|
4
4
|
var schema = (type) => {
|
5
5
|
return Zod.tuple([type.nullable(), type.nullable()]);
|
6
6
|
};
|
7
7
|
var NumericSchema = schema(Zod.number());
|
8
8
|
var of = (bounds) => {
|
9
|
-
if (
|
9
|
+
if (isUndefined(bounds[1])) {
|
10
10
|
return [bounds[0], null];
|
11
11
|
}
|
12
12
|
return bounds;
|
package/dist/range.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/range.ts"],"sourcesContent":["import {
|
1
|
+
{"version":3,"sources":["../src/range.ts"],"sourcesContent":["import Zod, { ZodType } from 'zod'\nimport { TaggedType } from '@bessemer/cornerstone/types'\nimport { isUndefined } from '@bessemer/cornerstone/object'\n\n// JOHN bounds are still a mess! what about finite bounds ???\nexport type Bounds<T> = TaggedType<[T | null, T | null], 'Bounds'>\nexport type BoundsInput<T> = [lower: T | null, upper?: T | null] | Bounds<T>\n\nexport const schema = <T>(type: ZodType<T>): ZodType<Bounds<T>> => {\n return Zod.tuple([type.nullable(), type.nullable()]) as any\n}\n\nexport type NumericBounds = Bounds<number>\nexport const NumericSchema = schema(Zod.number())\n\nexport type FiniteBounds<T> = [T, T]\nexport type FiniteNumericBounds = FiniteBounds<number>\n\nexport const of = <T>(bounds: BoundsInput<T>): Bounds<T> => {\n if (isUndefined(bounds[1])) {\n return [bounds[0], null] as Bounds<T>\n }\n\n return bounds as Bounds<T>\n}\n"],"mappings":";AAAA,OAAO,SAAsB;AAE7B,SAAS,mBAAmB;AAMrB,IAAM,SAAS,CAAI,SAAyC;AACjE,SAAO,IAAI,MAAM,CAAC,KAAK,SAAS,GAAG,KAAK,SAAS,CAAC,CAAC;AACrD;AAGO,IAAM,gBAAgB,OAAO,IAAI,OAAO,CAAC;AAKzC,IAAM,KAAK,CAAI,WAAsC;AAC1D,MAAI,YAAY,OAAO,CAAC,CAAC,GAAG;AAC1B,WAAO,CAAC,OAAO,CAAC,GAAG,IAAI;AAAA,EACzB;AAEA,SAAO;AACT;","names":[]}
|
package/dist/reference.d.ts
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
import { Equalitors } from '@bessemer/cornerstone';
|
2
1
|
import { Comparator } from '@bessemer/cornerstone/comparator';
|
3
2
|
import { NominalType } from '@bessemer/cornerstone/types';
|
4
3
|
export type ReferenceId<T extends string> = NominalType<string, ['ReferenceId', T]>;
|
@@ -18,5 +17,5 @@ export declare const isReference: (element: unknown) => element is Reference<str
|
|
18
17
|
export declare const getReference: <T extends Reference<string>>(reference: ReferencableType<T>) => T;
|
19
18
|
export declare const equals: <T extends string>(first: Reference<T>, second: Reference<T>) => boolean;
|
20
19
|
export declare const comparator: <T extends string>() => Comparator<Reference<T>>;
|
21
|
-
export declare const equalitor: () =>
|
20
|
+
export declare const equalitor: () => import("@bessemer/cornerstone/equalitor").Equalitor<Reference<string>>;
|
22
21
|
//# sourceMappingURL=reference.d.ts.map
|
package/dist/reference.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../src/reference.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../src/reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAsB,MAAM,kCAAkC,CAAA;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAKzD,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,MAAM,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAA;AAEnF,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI;IACxC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;IAClB,IAAI,EAAE,CAAC,CAAA;IACP,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAA;AAEpE,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC;IACvD,SAAS,EAAE,CAAC,CAAA;CACb;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;AAE/E,eAAO,MAAM,SAAS,GAAI,CAAC,SAAS,MAAM,EAAE,WAAW,SAAS,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,MAAM,KAAG,SAAS,CAAC,OAAO,IAAI,CAUnI,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,SAAS,OAAO,KAAG,OAAO,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAO1F,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,SAAS,OAAO,KAAG,OAAO,IAAI,SAAS,CAAC,MAAM,CAOzE,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,EAAE,WAAW,gBAAgB,CAAC,CAAC,CAAC,KAAG,CAO1F,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,EAAE,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,SAAS,CAAC,CAAC,CAAC,KAAG,OAEpF,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,MAAM,OAAK,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAEtE,CAAA;AAED,eAAO,MAAM,SAAS,8EAAqC,CAAA"}
|
package/dist/reference.js
CHANGED
@@ -1,32 +1,35 @@
|
|
1
1
|
// src/reference.ts
|
2
|
-
import {
|
2
|
+
import { compareBy, natural } from "@bessemer/cornerstone/comparator";
|
3
|
+
import { isString } from "@bessemer/cornerstone/string";
|
4
|
+
import { isObject, isPresent, isUndefined } from "@bessemer/cornerstone/object";
|
5
|
+
import { fromComparator } from "@bessemer/cornerstone/equalitor";
|
3
6
|
var reference = (reference2, type, note) => {
|
4
|
-
if (!
|
7
|
+
if (!isString(reference2)) {
|
5
8
|
return reference2;
|
6
9
|
}
|
7
10
|
return {
|
8
11
|
id: reference2,
|
9
12
|
type,
|
10
|
-
...
|
13
|
+
...isPresent(note) ? { note } : {}
|
11
14
|
};
|
12
15
|
};
|
13
16
|
var isReferencable = (element) => {
|
14
|
-
if (!
|
17
|
+
if (!isObject(element)) {
|
15
18
|
return false;
|
16
19
|
}
|
17
20
|
const referencable = element;
|
18
|
-
return !
|
21
|
+
return !isUndefined(referencable.reference);
|
19
22
|
};
|
20
23
|
var isReference = (element) => {
|
21
|
-
if (!
|
24
|
+
if (!isObject(element)) {
|
22
25
|
return false;
|
23
26
|
}
|
24
27
|
const referencable = element;
|
25
|
-
return !
|
28
|
+
return !isUndefined(referencable.id) && !isUndefined(referencable.type) && !isUndefined(referencable.note);
|
26
29
|
};
|
27
30
|
var getReference = (reference2) => {
|
28
31
|
const referencable = reference2;
|
29
|
-
if (
|
32
|
+
if (isPresent(referencable.reference)) {
|
30
33
|
return referencable.reference;
|
31
34
|
} else {
|
32
35
|
return reference2;
|
@@ -36,9 +39,9 @@ var equals = (first, second) => {
|
|
36
39
|
return first.id === second.id;
|
37
40
|
};
|
38
41
|
var comparator = () => {
|
39
|
-
return
|
42
|
+
return compareBy((it) => it.id, natural());
|
40
43
|
};
|
41
|
-
var equalitor = () =>
|
44
|
+
var equalitor = () => fromComparator(comparator());
|
42
45
|
export {
|
43
46
|
comparator,
|
44
47
|
equalitor,
|
package/dist/reference.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/reference.ts"],"sourcesContent":["import {
|
1
|
+
{"version":3,"sources":["../src/reference.ts"],"sourcesContent":["import { Comparator, compareBy, natural } from '@bessemer/cornerstone/comparator'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport { isString } from '@bessemer/cornerstone/string'\nimport { isObject, isPresent, isUndefined } from '@bessemer/cornerstone/object'\nimport { fromComparator } from '@bessemer/cornerstone/equalitor'\n\nexport type ReferenceId<T extends string> = NominalType<string, ['ReferenceId', T]>\n\nexport type Reference<T extends string> = {\n id: ReferenceId<T>\n type: T\n note?: string\n}\n\nexport type ReferenceType<T extends Reference<string>> = T | T['id']\n\nexport interface Referencable<T extends Reference<string>> {\n reference: T\n}\n\nexport type ReferencableType<T extends Reference<string>> = T | Referencable<T>\n\nexport const reference = <T extends string>(reference: Reference<T> | ReferenceId<T>, type: T, note?: string): Reference<typeof type> => {\n if (!isString(reference)) {\n return reference\n }\n\n return {\n id: reference,\n type,\n ...(isPresent(note) ? { note: note } : {}),\n }\n}\n\nexport const isReferencable = (element: unknown): element is Referencable<Reference<string>> => {\n if (!isObject(element)) {\n return false\n }\n\n const referencable = element as unknown as Referencable<Reference<string>>\n return !isUndefined(referencable.reference)\n}\n\nexport const isReference = (element: unknown): element is Reference<string> => {\n if (!isObject(element)) {\n return false\n }\n\n const referencable = element as Reference<string>\n return !isUndefined(referencable.id) && !isUndefined(referencable.type) && !isUndefined(referencable.note)\n}\n\nexport const getReference = <T extends Reference<string>>(reference: ReferencableType<T>): T => {\n const referencable = reference as Referencable<T>\n if (isPresent(referencable.reference)) {\n return referencable.reference\n } else {\n return reference as T\n }\n}\n\nexport const equals = <T extends string>(first: Reference<T>, second: Reference<T>): boolean => {\n return first.id === second.id\n}\n\nexport const comparator = <T extends string>(): Comparator<Reference<T>> => {\n return compareBy((it) => it.id, natural())\n}\n\nexport const equalitor = () => fromComparator(comparator())\n"],"mappings":";AAAA,SAAqB,WAAW,eAAe;AAE/C,SAAS,gBAAgB;AACzB,SAAS,UAAU,WAAW,mBAAmB;AACjD,SAAS,sBAAsB;AAkBxB,IAAM,YAAY,CAAmBA,YAA0C,MAAS,SAA0C;AACvI,MAAI,CAAC,SAASA,UAAS,GAAG;AACxB,WAAOA;AAAA,EACT;AAEA,SAAO;AAAA,IACL,IAAIA;AAAA,IACJ;AAAA,IACA,GAAI,UAAU,IAAI,IAAI,EAAE,KAAW,IAAI,CAAC;AAAA,EAC1C;AACF;AAEO,IAAM,iBAAiB,CAAC,YAAiE;AAC9F,MAAI,CAAC,SAAS,OAAO,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,eAAe;AACrB,SAAO,CAAC,YAAY,aAAa,SAAS;AAC5C;AAEO,IAAM,cAAc,CAAC,YAAmD;AAC7E,MAAI,CAAC,SAAS,OAAO,GAAG;AACtB,WAAO;AAAA,EACT;AAEA,QAAM,eAAe;AACrB,SAAO,CAAC,YAAY,aAAa,EAAE,KAAK,CAAC,YAAY,aAAa,IAAI,KAAK,CAAC,YAAY,aAAa,IAAI;AAC3G;AAEO,IAAM,eAAe,CAA8BA,eAAsC;AAC9F,QAAM,eAAeA;AACrB,MAAI,UAAU,aAAa,SAAS,GAAG;AACrC,WAAO,aAAa;AAAA,EACtB,OAAO;AACL,WAAOA;AAAA,EACT;AACF;AAEO,IAAM,SAAS,CAAmB,OAAqB,WAAkC;AAC9F,SAAO,MAAM,OAAO,OAAO;AAC7B;AAEO,IAAM,aAAa,MAAkD;AAC1E,SAAO,UAAU,CAAC,OAAO,GAAG,IAAI,QAAQ,CAAC;AAC3C;AAEO,IAAM,YAAY,MAAM,eAAe,WAAW,CAAC;","names":["reference"]}
|
package/dist/resource.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;
|
1
|
+
{"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAY,EAAE,OAAO,EAAE,MAAM,KAAK,CAAA;AAGlC,MAAM,MAAM,WAAW,GAAG,MAAM,CAAA;AAEhC,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AACxE,eAAO,MAAM,uBAAuB,EAAE,OAAO,CAAC,iBAAiB,CAAgB,CAAA;AAE/E,yBAAiB,WAAW,CAAC;IAGpB,MAAM,SAAS,GAAI,WAAW,iBAAiB,EAAE,KAAK,WAAW,KAAG,WAE1E,CAAA;IAEM,MAAM,YAAY,GAAI,WAAW,iBAAiB,EAAE,MAAM,KAAK,CAAC,WAAW,CAAC,KAAG,KAAK,CAAC,WAAW,CAEtG,CAAA;IAEM,MAAM,cAAc,GAAI,WAAW,iBAAiB,EAAE,KAAK,WAAW,KAAG,WAE/E,CAAA;IAEM,MAAM,iBAAiB,GAAI,WAAW,iBAAiB,EAAE,MAAM,KAAK,CAAC,WAAW,CAAC,KAAG,KAAK,CAAC,WAAW,CAE3G,CAAA;IAEM,MAAM,eAAe,GAAI,GAAG,YAAY,KAAK,CAAC,iBAAiB,CAAC,KAAG,iBAEzE,CAAA;CACF"}
|
package/dist/resource.js
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
// src/resource.ts
|
2
|
-
import { Strings } from "@bessemer/cornerstone";
|
3
2
|
import Zod from "zod";
|
3
|
+
import { removeStart } from "@bessemer/cornerstone/string";
|
4
4
|
var ResourceNamespaceSchema = Zod.string();
|
5
5
|
var ResourceKey;
|
6
6
|
((ResourceKey2) => {
|
@@ -12,7 +12,7 @@ var ResourceKey;
|
|
12
12
|
return keys.map((it) => ResourceKey2.namespace(namespace2, it));
|
13
13
|
};
|
14
14
|
ResourceKey2.stripNamespace = (namespace2, key) => {
|
15
|
-
return
|
15
|
+
return removeStart(key, `${namespace2}${ResourceNamespaceSeparator}`);
|
16
16
|
};
|
17
17
|
ResourceKey2.stripNamespaceAll = (namespace2, keys) => {
|
18
18
|
return keys.map((it) => ResourceKey2.stripNamespace(namespace2, it));
|
package/dist/resource.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/resource.ts"],"sourcesContent":["import { NominalType } from '@bessemer/cornerstone/types'\nimport {
|
1
|
+
{"version":3,"sources":["../src/resource.ts"],"sourcesContent":["import { NominalType } from '@bessemer/cornerstone/types'\nimport Zod, { ZodType } from 'zod'\nimport { removeStart } from '@bessemer/cornerstone/string'\n\nexport type ResourceKey = string\n\nexport type ResourceNamespace = NominalType<string, 'ResourceNamespace'>\nexport const ResourceNamespaceSchema: ZodType<ResourceNamespace> = Zod.string()\n\nexport namespace ResourceKey {\n const ResourceNamespaceSeparator = '/'\n\n export const namespace = (namespace: ResourceNamespace, key: ResourceKey): ResourceKey => {\n return `${namespace}${ResourceNamespaceSeparator}${key}`\n }\n\n export const namespaceAll = (namespace: ResourceNamespace, keys: Array<ResourceKey>): Array<ResourceKey> => {\n return keys.map((it) => ResourceKey.namespace(namespace, it))\n }\n\n export const stripNamespace = (namespace: ResourceNamespace, key: ResourceKey): ResourceKey => {\n return removeStart(key, `${namespace}${ResourceNamespaceSeparator}`)\n }\n\n export const stripNamespaceAll = (namespace: ResourceNamespace, keys: Array<ResourceKey>): Array<ResourceKey> => {\n return keys.map((it) => ResourceKey.stripNamespace(namespace, it))\n }\n\n export const extendNamespace = (...namespaces: Array<ResourceNamespace>): ResourceNamespace => {\n return namespaces.join(ResourceNamespaceSeparator)\n }\n}\n"],"mappings":";AACA,OAAO,SAAsB;AAC7B,SAAS,mBAAmB;AAKrB,IAAM,0BAAsD,IAAI,OAAO;AAEvE,IAAU;AAAA,CAAV,CAAUA,iBAAV;AACL,QAAM,6BAA6B;AAE5B,EAAMA,aAAA,YAAY,CAACC,YAA8B,QAAkC;AACxF,WAAO,GAAGA,UAAS,GAAG,0BAA0B,GAAG,GAAG;AAAA,EACxD;AAEO,EAAMD,aAAA,eAAe,CAACC,YAA8B,SAAiD;AAC1G,WAAO,KAAK,IAAI,CAAC,OAAOD,aAAY,UAAUC,YAAW,EAAE,CAAC;AAAA,EAC9D;AAEO,EAAMD,aAAA,iBAAiB,CAACC,YAA8B,QAAkC;AAC7F,WAAO,YAAY,KAAK,GAAGA,UAAS,GAAG,0BAA0B,EAAE;AAAA,EACrE;AAEO,EAAMD,aAAA,oBAAoB,CAACC,YAA8B,SAAiD;AAC/G,WAAO,KAAK,IAAI,CAAC,OAAOD,aAAY,eAAeC,YAAW,EAAE,CAAC;AAAA,EACnE;AAEO,EAAMD,aAAA,kBAAkB,IAAI,eAA4D;AAC7F,WAAO,WAAW,KAAK,0BAA0B;AAAA,EACnD;AAAA,GArBe;","names":["ResourceKey","namespace"]}
|
package/dist/result.d.ts.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAAA,OAAO,
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,IAAI,EAAS,KAAK,EAAE,MAAM,8BAA8B,CAAA;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AAGvD,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG;IAClC,SAAS,EAAE,IAAI,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG;IAC7C,SAAS,EAAE,KAAK,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAA;AAC5C,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AAE/C,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,OAAO,CAAC,CAAC,CAE9C,CAAA;AAED,eAAO,MAAM,OAAO,GAAI,UAAU,SAAS,KAAG,OAE7C,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAG,CAMtD,CAAA;AAED,wBAAgB,QAAQ,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC,CAAA;AACxG,wBAAgB,QAAQ,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;AAc1F,wBAAgB,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;AACnG,wBAAgB,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC,CAAA;AAc7G,wBAAgB,GAAG,CAAC,YAAY,EAAE,YAAY,EAC5C,MAAM,EAAE,MAAM,CAAC,YAAY,CAAC,EAC5B,WAAW,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,YAAY,GACnD,MAAM,CAAC,YAAY,CAAC,CAStB"}
|
package/dist/result.js
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
// src/result.ts
|
2
|
-
import {
|
2
|
+
import { left, right } from "@bessemer/cornerstone/either";
|
3
|
+
import { isPromise } from "@bessemer/cornerstone/promise";
|
3
4
|
var success = (value) => {
|
4
|
-
return { ...
|
5
|
+
return { ...right(value), isSuccess: true };
|
5
6
|
};
|
6
7
|
var failure = (failure2) => {
|
7
|
-
return { ...
|
8
|
+
return { ...left(failure2 ?? null), isSuccess: false };
|
8
9
|
};
|
9
10
|
var getValueOrThrow = (result) => {
|
10
11
|
if (result.isSuccess) {
|
@@ -16,7 +17,7 @@ var getValueOrThrow = (result) => {
|
|
16
17
|
function tryValue(resolver) {
|
17
18
|
try {
|
18
19
|
let result = resolver();
|
19
|
-
if (
|
20
|
+
if (isPromise(result)) {
|
20
21
|
return result.then((it) => success(it)).catch((it) => failure(it));
|
21
22
|
} else {
|
22
23
|
return success(result);
|
@@ -28,7 +29,7 @@ function tryValue(resolver) {
|
|
28
29
|
function tryResult(resolver) {
|
29
30
|
try {
|
30
31
|
let result = resolver();
|
31
|
-
if (
|
32
|
+
if (isPromise(result)) {
|
32
33
|
return result.catch((it) => failure(it));
|
33
34
|
} else {
|
34
35
|
return result;
|
package/dist/result.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../src/result.ts"],"sourcesContent":["import { Left, Right } from '@bessemer/cornerstone/either'\nimport {
|
1
|
+
{"version":3,"sources":["../src/result.ts"],"sourcesContent":["import { left, Left, right, Right } from '@bessemer/cornerstone/either'\nimport { Throwable } from '@bessemer/cornerstone/types'\nimport { isPromise } from '@bessemer/cornerstone/promise'\n\nexport type Success<T> = Right<T> & {\n isSuccess: true\n}\n\nexport type Failure = Left<Throwable | null> & {\n isSuccess: false\n}\n\nexport type Result<T> = Success<T> | Failure\nexport type AsyncResult<T> = Promise<Result<T>>\n\nexport const success = <T>(value: T): Success<T> => {\n return { ...right(value), isSuccess: true }\n}\n\nexport const failure = (failure?: Throwable): Failure => {\n return { ...left(failure ?? null), isSuccess: false }\n}\n\nexport const getValueOrThrow = <T>(result: Result<T>): T => {\n if (result.isSuccess) {\n return result.value\n } else {\n throw result.value\n }\n}\n\nexport function tryValue<SOURCE_VALUE>(resolver: () => Promise<SOURCE_VALUE>): AsyncResult<SOURCE_VALUE>\nexport function tryValue<SOURCE_VALUE>(resolver: () => SOURCE_VALUE): Result<SOURCE_VALUE>\nexport function tryValue<SOURCE_VALUE>(resolver: () => SOURCE_VALUE | Promise<SOURCE_VALUE>): Result<SOURCE_VALUE> | Promise<Result<SOURCE_VALUE>> {\n try {\n let result = resolver()\n if (isPromise(result)) {\n return result.then((it) => success(it)).catch((it) => failure(it))\n } else {\n return success(result)\n }\n } catch (e: any) {\n return failure(e)\n }\n}\n\nexport function tryResult<SOURCE_VALUE>(resolver: () => Result<SOURCE_VALUE>): Result<SOURCE_VALUE>\nexport function tryResult<SOURCE_VALUE>(resolver: () => AsyncResult<SOURCE_VALUE>): AsyncResult<SOURCE_VALUE>\nexport function tryResult<SOURCE_VALUE>(resolver: () => Result<SOURCE_VALUE> | AsyncResult<SOURCE_VALUE>): ReturnType<typeof resolver> {\n try {\n let result = resolver()\n if (isPromise(result)) {\n return result.catch((it) => failure(it))\n } else {\n return result\n }\n } catch (e: any) {\n return failure(e)\n }\n}\n\nexport function map<SOURCE_VALUE, TARGET_VALUE>(\n result: Result<SOURCE_VALUE>,\n valueMapper: (element: SOURCE_VALUE) => TARGET_VALUE\n): Result<TARGET_VALUE> {\n if (result.isSuccess) {\n return {\n ...result,\n value: valueMapper(result.value),\n }\n } else {\n return result\n }\n}\n"],"mappings":";AAAA,SAAS,MAAY,aAAoB;AAEzC,SAAS,iBAAiB;AAanB,IAAM,UAAU,CAAI,UAAyB;AAClD,SAAO,EAAE,GAAG,MAAM,KAAK,GAAG,WAAW,KAAK;AAC5C;AAEO,IAAM,UAAU,CAACA,aAAiC;AACvD,SAAO,EAAE,GAAG,KAAKA,YAAW,IAAI,GAAG,WAAW,MAAM;AACtD;AAEO,IAAM,kBAAkB,CAAI,WAAyB;AAC1D,MAAI,OAAO,WAAW;AACpB,WAAO,OAAO;AAAA,EAChB,OAAO;AACL,UAAM,OAAO;AAAA,EACf;AACF;AAIO,SAAS,SAAuB,UAA4G;AACjJ,MAAI;AACF,QAAI,SAAS,SAAS;AACtB,QAAI,UAAU,MAAM,GAAG;AACrB,aAAO,OAAO,KAAK,CAAC,OAAO,QAAQ,EAAE,CAAC,EAAE,MAAM,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,IACnE,OAAO;AACL,aAAO,QAAQ,MAAM;AAAA,IACvB;AAAA,EACF,SAAS,GAAQ;AACf,WAAO,QAAQ,CAAC;AAAA,EAClB;AACF;AAIO,SAAS,UAAwB,UAA+F;AACrI,MAAI;AACF,QAAI,SAAS,SAAS;AACtB,QAAI,UAAU,MAAM,GAAG;AACrB,aAAO,OAAO,MAAM,CAAC,OAAO,QAAQ,EAAE,CAAC;AAAA,IACzC,OAAO;AACL,aAAO;AAAA,IACT;AAAA,EACF,SAAS,GAAQ;AACf,WAAO,QAAQ,CAAC;AAAA,EAClB;AACF;AAEO,SAAS,IACd,QACA,aACsB;AACtB,MAAI,OAAO,WAAW;AACpB,WAAO;AAAA,MACL,GAAG;AAAA,MACH,OAAO,YAAY,OAAO,KAAK;AAAA,IACjC;AAAA,EACF,OAAO;AACL,WAAO;AAAA,EACT;AACF;","names":["failure"]}
|