@bessemer/cornerstone 0.5.114 → 0.5.115
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/array.d.ts.map +1 -1
- package/dist/array.js +28 -28
- package/dist/array.js.map +1 -1
- package/dist/aspect-ratio.d.ts +3 -3
- package/dist/aspect-ratio.d.ts.map +1 -1
- package/dist/aspect-ratio.js +13 -12
- package/dist/aspect-ratio.js.map +1 -1
- package/dist/assertion.d.ts.map +1 -1
- package/dist/assertion.js +5 -5
- 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.map +1 -1
- package/dist/cache.js +11 -12
- package/dist/cache.js.map +1 -1
- package/dist/combinable.js +5 -5
- package/dist/combinable.js.map +1 -1
- package/dist/comparator.js +8 -8
- package/dist/comparator.js.map +1 -1
- package/dist/data-size.d.ts +2 -1
- package/dist/data-size.d.ts.map +1 -1
- package/dist/data-size.js +3 -3
- package/dist/data-size.js.map +1 -1
- package/dist/either.js +5 -5
- package/dist/either.js.map +1 -1
- package/dist/equalitor.d.ts.map +1 -1
- package/dist/equalitor.js +2 -2
- package/dist/equalitor.js.map +1 -1
- package/dist/error/error-cause.d.ts.map +1 -1
- package/dist/error/error-cause.js +14 -14
- package/dist/error/error-cause.js.map +1 -1
- package/dist/error/error-code.js +2 -2
- package/dist/error/error-code.js.map +1 -1
- package/dist/error/error-event.d.ts +3 -2
- package/dist/error/error-event.d.ts.map +1 -1
- package/dist/error/error-event.js +28 -28
- package/dist/error/error-event.js.map +1 -1
- package/dist/error/error-type.d.ts +2 -1
- package/dist/error/error-type.d.ts.map +1 -1
- package/dist/error/error-type.js +2 -2
- package/dist/error/error-type.js.map +1 -1
- package/dist/error/error.js +5 -5
- package/dist/error/error.js.map +1 -1
- package/dist/expression/array-expression.js +3 -3
- package/dist/expression/array-expression.js.map +1 -1
- package/dist/expression/core-expression.d.ts.map +1 -1
- package/dist/expression/core-expression.js +19 -19
- package/dist/expression/core-expression.js.map +1 -1
- package/dist/expression/expression-evaluator.js +2 -2
- package/dist/expression/expression-evaluator.js.map +1 -1
- package/dist/expression/expression-mapper.js +4 -4
- package/dist/expression/expression-mapper.js.map +1 -1
- package/dist/expression/internal.js +3 -3
- package/dist/expression/internal.js.map +1 -1
- package/dist/expression/numeric-expression.js +13 -13
- package/dist/expression/numeric-expression.js.map +1 -1
- package/dist/expression/string-expression.js +4 -4
- package/dist/expression/string-expression.js.map +1 -1
- package/dist/glob.d.ts +3 -3
- package/dist/glob.d.ts.map +1 -1
- package/dist/glob.js +11 -12
- package/dist/glob.js.map +1 -1
- package/dist/global-variable.d.ts.map +1 -1
- package/dist/global-variable.js +5 -5
- package/dist/global-variable.js.map +1 -1
- package/dist/hex-code.d.ts +3 -3
- package/dist/hex-code.d.ts.map +1 -1
- package/dist/hex-code.js +11 -10
- package/dist/hex-code.js.map +1 -1
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/intl/country-code.d.ts +3 -3
- package/dist/intl/country-code.d.ts.map +1 -1
- package/dist/intl/country-code.js +9 -10
- package/dist/intl/country-code.js.map +1 -1
- package/dist/intl/country-subdivision-code.d.ts +3 -3
- package/dist/intl/country-subdivision-code.d.ts.map +1 -1
- package/dist/intl/country-subdivision-code.js +13 -11
- package/dist/intl/country-subdivision-code.js.map +1 -1
- package/dist/intl/currency-code.d.ts +3 -3
- package/dist/intl/currency-code.d.ts.map +1 -1
- package/dist/intl/currency-code.js +9 -10
- package/dist/intl/currency-code.js.map +1 -1
- package/dist/intl/language-code.d.ts +3 -3
- package/dist/intl/language-code.d.ts.map +1 -1
- package/dist/intl/language-code.js +9 -10
- package/dist/intl/language-code.js.map +1 -1
- package/dist/intl/locale.d.ts +3 -3
- package/dist/intl/locale.d.ts.map +1 -1
- package/dist/intl/locale.js +18 -19
- package/dist/intl/locale.js.map +1 -1
- package/dist/json.d.ts.map +1 -1
- package/dist/json.js +2 -2
- package/dist/json.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +12 -12
- package/dist/logger.js.map +1 -1
- package/dist/map.js +8 -8
- package/dist/map.js.map +1 -1
- package/dist/mime-type.d.ts +3 -3
- package/dist/mime-type.d.ts.map +1 -1
- package/dist/mime-type.js +9 -10
- package/dist/mime-type.js.map +1 -1
- package/dist/misc.js +4 -4
- package/dist/misc.js.map +1 -1
- package/dist/monetary-amount.d.ts +3 -2
- package/dist/monetary-amount.d.ts.map +1 -1
- package/dist/monetary-amount.js +16 -16
- package/dist/monetary-amount.js.map +1 -1
- package/dist/net/content-type.d.ts +2 -1
- package/dist/net/content-type.d.ts.map +1 -1
- package/dist/net/content-type.js +2 -2
- package/dist/net/content-type.js.map +1 -1
- package/dist/net/domain-name.d.ts +3 -3
- package/dist/net/domain-name.d.ts.map +1 -1
- package/dist/net/domain-name.js +10 -11
- package/dist/net/domain-name.js.map +1 -1
- package/dist/net/http-method.d.ts.map +1 -1
- package/dist/net/http-method.js +9 -9
- package/dist/net/http-method.js.map +1 -1
- package/dist/net/ipv4-address.d.ts +3 -3
- package/dist/net/ipv4-address.d.ts.map +1 -1
- package/dist/net/ipv4-address.js +10 -11
- package/dist/net/ipv4-address.js.map +1 -1
- package/dist/net/ipv6-address.d.ts +3 -3
- package/dist/net/ipv6-address.d.ts.map +1 -1
- package/dist/net/ipv6-address.js +10 -11
- package/dist/net/ipv6-address.js.map +1 -1
- package/dist/net/uri-host-name.d.ts +3 -3
- package/dist/net/uri-host-name.d.ts.map +1 -1
- package/dist/net/uri-host-name.js +15 -16
- package/dist/net/uri-host-name.js.map +1 -1
- package/dist/net/uri.d.ts +1 -2
- package/dist/net/uri.d.ts.map +1 -1
- package/dist/net/uri.js +5 -3
- package/dist/net/uri.js.map +1 -1
- package/dist/net/url.d.ts.map +1 -1
- package/dist/net/url.js +6 -7
- package/dist/net/url.js.map +1 -1
- package/dist/object/object-path.d.ts.map +1 -1
- package/dist/object/object-path.js +23 -28
- package/dist/object/object-path.js.map +1 -1
- package/dist/object/type-path.js +19 -19
- package/dist/object/type-path.js.map +1 -1
- package/dist/patch.js +4 -4
- package/dist/patch.js.map +1 -1
- package/dist/promise.js +2 -2
- package/dist/promise.js.map +1 -1
- package/dist/property.d.ts.map +1 -1
- package/dist/property.js +7 -7
- package/dist/property.js.map +1 -1
- package/dist/proxy.js +2 -2
- package/dist/proxy.js.map +1 -1
- package/dist/range.js +2 -2
- package/dist/range.js.map +1 -1
- package/dist/reference.d.ts +2 -1
- package/dist/reference.d.ts.map +1 -1
- package/dist/reference.js +13 -13
- package/dist/reference.js.map +1 -1
- package/dist/resource-key.js +2 -2
- package/dist/resource-key.js.map +1 -1
- package/dist/result.js +5 -5
- package/dist/result.js.map +1 -1
- package/dist/retry.d.ts.map +1 -1
- package/dist/retry.js +12 -12
- 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.map +1 -1
- package/dist/signature.js +9 -9
- package/dist/signature.js.map +1 -1
- package/dist/sql/sql-expression-parser.js +2 -2
- package/dist/sql/sql-expression-parser.js.map +1 -1
- package/dist/store.d.ts.map +1 -1
- package/dist/store.js +9 -9
- package/dist/store.js.map +1 -1
- package/dist/string.js +4 -4
- package/dist/string.js.map +1 -1
- package/dist/tag.d.ts.map +1 -1
- package/dist/tag.js +10 -10
- package/dist/tag.js.map +1 -1
- package/dist/temporal/clock.d.ts +13 -13
- package/dist/temporal/clock.d.ts.map +1 -1
- package/dist/temporal/clock.js +10 -10
- package/dist/temporal/clock.js.map +1 -1
- package/dist/temporal/duration.d.ts +15 -9
- package/dist/temporal/duration.d.ts.map +1 -1
- package/dist/temporal/duration.js +30 -31
- package/dist/temporal/duration.js.map +1 -1
- package/dist/temporal/instant.d.ts +18 -15
- package/dist/temporal/instant.d.ts.map +1 -1
- package/dist/temporal/instant.js +42 -43
- package/dist/temporal/instant.js.map +1 -1
- package/dist/temporal/plain-date-time.d.ts +16 -13
- package/dist/temporal/plain-date-time.d.ts.map +1 -1
- package/dist/temporal/plain-date-time.js +36 -38
- package/dist/temporal/plain-date-time.js.map +1 -1
- package/dist/temporal/plain-date.d.ts +16 -13
- package/dist/temporal/plain-date.d.ts.map +1 -1
- package/dist/temporal/plain-date.js +35 -37
- package/dist/temporal/plain-date.js.map +1 -1
- package/dist/temporal/plain-month-day.d.ts +37 -0
- package/dist/temporal/plain-month-day.d.ts.map +1 -0
- package/dist/temporal/plain-month-day.js +84 -0
- package/dist/temporal/plain-month-day.js.map +1 -0
- package/dist/temporal/plain-time.d.ts +19 -17
- package/dist/temporal/plain-time.d.ts.map +1 -1
- package/dist/temporal/plain-time.js +43 -42
- package/dist/temporal/plain-time.js.map +1 -1
- package/dist/temporal/plain-year-month.d.ts +57 -0
- package/dist/temporal/plain-year-month.d.ts.map +1 -0
- package/dist/temporal/plain-year-month.js +109 -0
- package/dist/temporal/plain-year-month.js.map +1 -0
- package/dist/temporal/time-zone-id.d.ts +5 -4
- package/dist/temporal/time-zone-id.d.ts.map +1 -1
- package/dist/temporal/time-zone-id.js +11 -11
- package/dist/temporal/time-zone-id.js.map +1 -1
- package/dist/temporal/time-zone-offset.d.ts +12 -11
- package/dist/temporal/time-zone-offset.d.ts.map +1 -1
- package/dist/temporal/time-zone-offset.js +42 -50
- package/dist/temporal/time-zone-offset.js.map +1 -1
- package/dist/temporal/zoned-date-time.d.ts +16 -13
- package/dist/temporal/zoned-date-time.d.ts.map +1 -1
- package/dist/temporal/zoned-date-time.js +35 -36
- package/dist/temporal/zoned-date-time.js.map +1 -1
- package/dist/uuid/ulid.d.ts +3 -3
- package/dist/uuid/ulid.d.ts.map +1 -1
- package/dist/uuid/ulid.js +9 -10
- package/dist/uuid/ulid.js.map +1 -1
- package/dist/uuid/uuid-v4.d.ts +3 -3
- package/dist/uuid/uuid-v4.d.ts.map +1 -1
- package/dist/uuid/uuid-v4.js +13 -14
- package/dist/uuid/uuid-v4.js.map +1 -1
- package/dist/uuid/uuid-v7.d.ts +1 -2
- package/dist/uuid/uuid-v7.d.ts.map +1 -1
- package/dist/uuid/uuid-v7.js +1 -2
- package/dist/uuid/uuid-v7.js.map +1 -1
- package/dist/zod-util.d.ts +4 -21
- package/dist/zod-util.d.ts.map +1 -1
- package/dist/zod-util.js +21 -11
- package/dist/zod-util.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
// src/error/error-event.ts
|
|
2
|
-
import
|
|
2
|
+
import * as Objects from "@bessemer/cornerstone/object";
|
|
3
3
|
import Zod from "zod";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
4
|
+
import * as Lazy from "@bessemer/cornerstone/lazy";
|
|
5
|
+
import * as Errors from "@bessemer/cornerstone/error/error";
|
|
6
|
+
import * as Promises from "@bessemer/cornerstone/promise";
|
|
7
|
+
import * as ResourceKeys from "@bessemer/cornerstone/resource-key";
|
|
8
8
|
import * as Results from "@bessemer/cornerstone/result";
|
|
9
9
|
import * as ErrorCauses from "@bessemer/cornerstone/error/error-cause";
|
|
10
10
|
import * as Assertions from "@bessemer/cornerstone/assertion";
|
|
11
|
-
import
|
|
12
|
-
var Namespace = createNamespace("error-event");
|
|
11
|
+
import * as Arrays from "@bessemer/cornerstone/array";
|
|
12
|
+
var Namespace = ResourceKeys.createNamespace("error-event");
|
|
13
13
|
var Schema2 = Zod.object({
|
|
14
14
|
_type: Namespace,
|
|
15
15
|
message: Zod.string(),
|
|
@@ -25,7 +25,7 @@ var ErrorEventException = class extends Error {
|
|
|
25
25
|
}
|
|
26
26
|
};
|
|
27
27
|
var from2 = (builder) => {
|
|
28
|
-
if (isPresent(builder.code)) {
|
|
28
|
+
if (Objects.isPresent(builder.code)) {
|
|
29
29
|
const code = builder.code;
|
|
30
30
|
return {
|
|
31
31
|
_type: Namespace,
|
|
@@ -35,7 +35,7 @@ var from2 = (builder) => {
|
|
|
35
35
|
};
|
|
36
36
|
} else {
|
|
37
37
|
Assertions.assertPresent(builder.causes);
|
|
38
|
-
Assertions.assert(!isEmpty(builder.causes), () => "ErrorEvent - Unable to construct ErrorEvent with empty causes array.");
|
|
38
|
+
Assertions.assert(!Arrays.isEmpty(builder.causes), () => "ErrorEvent - Unable to construct ErrorEvent with empty causes array.");
|
|
39
39
|
return {
|
|
40
40
|
_type: Namespace,
|
|
41
41
|
causes: builder.causes.map(ErrorCauses.from),
|
|
@@ -48,17 +48,17 @@ var fromThrowable = (throwable) => {
|
|
|
48
48
|
if (isErrorEvent(throwable)) {
|
|
49
49
|
return throwable;
|
|
50
50
|
}
|
|
51
|
-
if (!isError(throwable)) {
|
|
51
|
+
if (!Errors.isError(throwable)) {
|
|
52
52
|
return unhandled2();
|
|
53
53
|
}
|
|
54
|
-
const errorEventException =
|
|
55
|
-
if (isNil(errorEventException)) {
|
|
54
|
+
const errorEventException = Errors.findInCausalChain(throwable, isErrorEventException);
|
|
55
|
+
if (Objects.isNil(errorEventException)) {
|
|
56
56
|
return unhandled2();
|
|
57
57
|
}
|
|
58
58
|
return errorEventException.errorEvent;
|
|
59
59
|
};
|
|
60
60
|
var isErrorEvent = (value) => {
|
|
61
|
-
if (!isObject(value)) {
|
|
61
|
+
if (!Objects.isObject(value)) {
|
|
62
62
|
return false;
|
|
63
63
|
}
|
|
64
64
|
const errorEvent = value;
|
|
@@ -70,13 +70,13 @@ var isErrorEventException = (value) => {
|
|
|
70
70
|
function withPropagation(runnable, attributes) {
|
|
71
71
|
try {
|
|
72
72
|
let result = runnable();
|
|
73
|
-
if (isPromise(result)) {
|
|
74
|
-
return result.then((it) => it).catch((it) => propagate(it, evaluate(attributes)));
|
|
73
|
+
if (Promises.isPromise(result)) {
|
|
74
|
+
return result.then((it) => it).catch((it) => propagate(it, Lazy.evaluate(attributes)));
|
|
75
75
|
} else {
|
|
76
76
|
return result;
|
|
77
77
|
}
|
|
78
78
|
} catch (throwable) {
|
|
79
|
-
throw propagate(throwable, evaluate(attributes));
|
|
79
|
+
throw propagate(throwable, Lazy.evaluate(attributes));
|
|
80
80
|
}
|
|
81
81
|
}
|
|
82
82
|
var propagate = (throwable, context) => {
|
|
@@ -90,35 +90,35 @@ var propagate = (throwable, context) => {
|
|
|
90
90
|
throw new ErrorEventException(contextualizedEvent, throwable);
|
|
91
91
|
}
|
|
92
92
|
};
|
|
93
|
-
var unhandled2 = (builder) => from2(deepMerge(ErrorCauses.unhandled(builder), builder));
|
|
94
|
-
var required2 = (builder) => from2(deepMerge(ErrorCauses.required(builder), builder));
|
|
95
|
-
var unauthorized2 = (builder) => from2(deepMerge(ErrorCauses.unauthorized(builder), builder));
|
|
96
|
-
var forbidden2 = (builder) => from2(deepMerge(ErrorCauses.forbidden(builder), builder));
|
|
97
|
-
var badRequest2 = (builder) => from2(deepMerge(ErrorCauses.badRequest(builder), builder));
|
|
98
|
-
var invalidValue2 = (value, builder) => from2(deepMerge(ErrorCauses.invalidValue(value, builder), builder));
|
|
93
|
+
var unhandled2 = (builder) => from2(Objects.deepMerge(ErrorCauses.unhandled(builder), builder));
|
|
94
|
+
var required2 = (builder) => from2(Objects.deepMerge(ErrorCauses.required(builder), builder));
|
|
95
|
+
var unauthorized2 = (builder) => from2(Objects.deepMerge(ErrorCauses.unauthorized(builder), builder));
|
|
96
|
+
var forbidden2 = (builder) => from2(Objects.deepMerge(ErrorCauses.forbidden(builder), builder));
|
|
97
|
+
var badRequest2 = (builder) => from2(Objects.deepMerge(ErrorCauses.badRequest(builder), builder));
|
|
98
|
+
var invalidValue2 = (value, builder) => from2(Objects.deepMerge(ErrorCauses.invalidValue(value, builder), builder));
|
|
99
99
|
function assertPresent2(value, builder = () => void 0) {
|
|
100
|
-
if (isNil(value)) {
|
|
101
|
-
throw new ErrorEventException(required2(evaluate(builder)));
|
|
100
|
+
if (Objects.isNil(value)) {
|
|
101
|
+
throw new ErrorEventException(required2(Lazy.evaluate(builder)));
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
function assertAuthorized(value, builder = () => void 0) {
|
|
105
105
|
if (!value) {
|
|
106
|
-
throw new ErrorEventException(unauthorized2(evaluate(builder)));
|
|
106
|
+
throw new ErrorEventException(unauthorized2(Lazy.evaluate(builder)));
|
|
107
107
|
}
|
|
108
108
|
}
|
|
109
109
|
function assertPermitted(value, builder = () => void 0) {
|
|
110
110
|
if (!value) {
|
|
111
|
-
throw new ErrorEventException(forbidden2(evaluate(builder)));
|
|
111
|
+
throw new ErrorEventException(forbidden2(Lazy.evaluate(builder)));
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
function assertValid(value, builder = () => void 0) {
|
|
115
115
|
if (!value) {
|
|
116
|
-
throw new ErrorEventException(badRequest2(evaluate(builder)));
|
|
116
|
+
throw new ErrorEventException(badRequest2(Lazy.evaluate(builder)));
|
|
117
117
|
}
|
|
118
118
|
}
|
|
119
119
|
function assert2(value, builder) {
|
|
120
120
|
if (!value) {
|
|
121
|
-
throw new ErrorEventException(from2(evaluate(builder)));
|
|
121
|
+
throw new ErrorEventException(from2(Lazy.evaluate(builder)));
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
var unpackResult = (result) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/error/error-event.ts"],"sourcesContent":["import { Dictionary, Throwable } from '@bessemer/cornerstone/types'\nimport { deepMerge, isNil, isObject, isPresent } from '@bessemer/cornerstone/object'\nimport Zod from 'zod'\nimport { evaluate, LazyValue } from '@bessemer/cornerstone/lazy'\nimport { findInCausalChain as errorsFindInCausalChain, isError } from '@bessemer/cornerstone/error/error'\nimport { isPromise } from '@bessemer/cornerstone/promise'\nimport { createNamespace } from '@bessemer/cornerstone/resource-key'\nimport * as Results from '@bessemer/cornerstone/result'\nimport { Result } from '@bessemer/cornerstone/result'\nimport * as ErrorCauses from '@bessemer/cornerstone/error/error-cause'\nimport { ErrorCause, ErrorCauseAugment, ErrorCauseBuilder } from '@bessemer/cornerstone/error/error-cause'\nimport * as Assertions from '@bessemer/cornerstone/assertion'\nimport { MergeExclusive } from 'type-fest'\nimport { isEmpty } from '@bessemer/cornerstone/array'\n\nexport const Namespace = createNamespace('error-event')\n\nexport const Schema = Zod.object({\n _type: Namespace,\n message: Zod.string(),\n causes: Zod.array(ErrorCauses.Schema),\n context: Zod.record(Zod.string(), Zod.unknown()),\n})\n\nexport type ErrorEvent = {\n _type: typeof Namespace\n message: string\n causes: Array<ErrorCause>\n context: Dictionary<unknown>\n}\n\ntype ErrorEventCommonBuilder = {\n message: string\n context?: Dictionary<unknown>\n}\n\ntype ErrorEventFullBuilder = ErrorEventCommonBuilder & {\n causes: Array<ErrorCauseBuilder>\n}\ntype ErrorEventSingletonBuilder = ErrorEventCommonBuilder & ErrorCauseBuilder\nexport type ErrorEventBuilder = MergeExclusive<ErrorEventFullBuilder, ErrorEventSingletonBuilder>\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 from = (builder: ErrorEventBuilder): ErrorEvent => {\n if (isPresent(builder.code)) {\n const code = builder.code\n return {\n _type: Namespace,\n causes: [ErrorCauses.from({ code, ...builder })],\n message: builder.message,\n context: builder.context ?? {},\n }\n } else {\n Assertions.assertPresent(builder.causes)\n Assertions.assert(!isEmpty(builder.causes), () => 'ErrorEvent - Unable to construct ErrorEvent with empty causes array.')\n\n return {\n _type: Namespace,\n causes: builder.causes.map(ErrorCauses.from),\n message: builder.message,\n context: builder.context ?? {},\n }\n }\n}\n\nexport const fromThrowable = (throwable: Throwable): ErrorEvent => {\n if (isErrorEvent(throwable)) {\n return throwable\n }\n\n if (!isError(throwable)) {\n return unhandled()\n }\n\n const errorEventException = errorsFindInCausalChain(throwable, isErrorEventException) as ErrorEventException | undefined\n if (isNil(errorEventException)) {\n return unhandled()\n }\n\n return errorEventException.errorEvent\n}\n\nexport const isErrorEvent = (value: unknown): value is ErrorEvent => {\n if (!isObject(value)) {\n return false\n }\n\n const errorEvent = value as ErrorEvent\n return errorEvent._type === Namespace\n}\n\nexport const isErrorEventException = (value: unknown): value is ErrorEventException => {\n return value instanceof ErrorEventException\n}\n\nexport function withPropagation<ReturnType>(runnable: () => ReturnType, attributes: LazyValue<Dictionary<unknown>>): ReturnType\nexport function withPropagation<ReturnType>(runnable: () => Promise<ReturnType>, attributes: LazyValue<Dictionary<unknown>>): Promise<ReturnType>\nexport function withPropagation<ReturnType>(\n runnable: () => ReturnType | Promise<ReturnType>,\n attributes: LazyValue<Dictionary<unknown>>\n): ReturnType | Promise<ReturnType> {\n try {\n let result = runnable()\n if (isPromise(result)) {\n return result.then((it) => it).catch((it) => propagate(it, evaluate(attributes)))\n } else {\n return result\n }\n } catch (throwable: Throwable) {\n throw propagate(throwable, evaluate(attributes))\n }\n}\n\nexport const propagate = (throwable: Throwable, context: Dictionary<unknown>): never => {\n if (isErrorEventException(throwable)) {\n // We just mutate the existing error event to avoid nested exceptions\n const errorEvent = throwable.errorEvent\n errorEvent.context = { ...errorEvent.context, ...context }\n throw throwable\n } else {\n const errorEvent = fromThrowable(throwable)\n const contextualizedEvent = from({ ...errorEvent, context: { ...errorEvent.context, ...context } })\n throw new ErrorEventException(contextualizedEvent, throwable)\n }\n}\n\nexport type ErrorEventAugment = ErrorCauseAugment & {\n context?: Dictionary<unknown>\n}\n\nexport const unhandled = (builder?: ErrorEventAugment): ErrorEvent => from(deepMerge(ErrorCauses.unhandled(builder), builder))\n\nexport const required = (builder?: ErrorEventAugment): ErrorEvent => from(deepMerge(ErrorCauses.required(builder), builder))\n\nexport const unauthorized = (builder?: ErrorEventAugment): ErrorEvent => from(deepMerge(ErrorCauses.unauthorized(builder), builder))\n\nexport const forbidden = (builder?: ErrorEventAugment): ErrorEvent => from(deepMerge(ErrorCauses.forbidden(builder), builder))\n\nexport const badRequest = (builder?: ErrorEventAugment): ErrorEvent => from(deepMerge(ErrorCauses.badRequest(builder), builder))\n\nexport const invalidValue = (value: unknown, builder?: ErrorEventAugment): ErrorEvent =>\n from(deepMerge(ErrorCauses.invalidValue(value, builder), builder))\n\nexport function assertPresent<T>(value: T, builder: LazyValue<ErrorEventAugment | undefined> = () => undefined): asserts value is NonNullable<T> {\n if (isNil(value)) {\n throw new ErrorEventException(required(evaluate(builder)))\n }\n}\n\nexport function assertAuthorized(value: boolean, builder: LazyValue<ErrorEventAugment | undefined> = () => undefined): asserts value is true {\n if (!value) {\n throw new ErrorEventException(unauthorized(evaluate(builder)))\n }\n}\n\nexport function assertPermitted(value: boolean, builder: LazyValue<ErrorEventAugment | undefined> = () => undefined): asserts value is true {\n if (!value) {\n throw new ErrorEventException(forbidden(evaluate(builder)))\n }\n}\n\nexport function assertValid(value: boolean, builder: LazyValue<ErrorEventAugment | undefined> = () => undefined): asserts value is true {\n if (!value) {\n throw new ErrorEventException(badRequest(evaluate(builder)))\n }\n}\n\nexport function assert(value: boolean, builder: LazyValue<ErrorEventBuilder>): asserts value is true {\n if (!value) {\n throw new ErrorEventException(from(evaluate(builder)))\n }\n}\n\nexport const unpackResult = <T>(result: Result<T, ErrorEvent>): T => {\n if (Results.isFailure(result)) {\n throw new ErrorEventException(result.value)\n }\n\n return result\n}\n"],"mappings":"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","names":["Schema","from","unhandled","required","unauthorized","forbidden","badRequest","invalidValue","assertPresent","assert"]}
|
|
1
|
+
{"version":3,"sources":["../../src/error/error-event.ts"],"sourcesContent":["import { Dictionary, Throwable } from '@bessemer/cornerstone/types'\nimport * as Objects from '@bessemer/cornerstone/object'\nimport Zod from 'zod'\nimport * as Lazy from '@bessemer/cornerstone/lazy'\nimport { LazyValue } from '@bessemer/cornerstone/lazy'\nimport * as Errors from '@bessemer/cornerstone/error/error'\nimport * as Promises from '@bessemer/cornerstone/promise'\nimport * as ResourceKeys from '@bessemer/cornerstone/resource-key'\nimport * as Results from '@bessemer/cornerstone/result'\nimport { Result } from '@bessemer/cornerstone/result'\nimport * as ErrorCauses from '@bessemer/cornerstone/error/error-cause'\nimport { ErrorCause, ErrorCauseAugment, ErrorCauseBuilder } from '@bessemer/cornerstone/error/error-cause'\nimport * as Assertions from '@bessemer/cornerstone/assertion'\nimport { MergeExclusive } from 'type-fest'\nimport * as Arrays from '@bessemer/cornerstone/array'\n\nexport const Namespace = ResourceKeys.createNamespace('error-event')\n\nexport const Schema = Zod.object({\n _type: Namespace,\n message: Zod.string(),\n causes: Zod.array(ErrorCauses.Schema),\n context: Zod.record(Zod.string(), Zod.unknown()),\n})\n\nexport type ErrorEvent = {\n _type: typeof Namespace\n message: string\n causes: Array<ErrorCause>\n context: Dictionary<unknown>\n}\n\ntype ErrorEventCommonBuilder = {\n message: string\n context?: Dictionary<unknown>\n}\n\ntype ErrorEventFullBuilder = ErrorEventCommonBuilder & {\n causes: Array<ErrorCauseBuilder>\n}\ntype ErrorEventSingletonBuilder = ErrorEventCommonBuilder & ErrorCauseBuilder\nexport type ErrorEventBuilder = MergeExclusive<ErrorEventFullBuilder, ErrorEventSingletonBuilder>\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 from = (builder: ErrorEventBuilder): ErrorEvent => {\n if (Objects.isPresent(builder.code)) {\n const code = builder.code\n return {\n _type: Namespace,\n causes: [ErrorCauses.from({ code, ...builder })],\n message: builder.message,\n context: builder.context ?? {},\n }\n } else {\n Assertions.assertPresent(builder.causes)\n Assertions.assert(!Arrays.isEmpty(builder.causes), () => 'ErrorEvent - Unable to construct ErrorEvent with empty causes array.')\n\n return {\n _type: Namespace,\n causes: builder.causes.map(ErrorCauses.from),\n message: builder.message,\n context: builder.context ?? {},\n }\n }\n}\n\nexport const fromThrowable = (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 isErrorEvent = (value: unknown): value is ErrorEvent => {\n if (!Objects.isObject(value)) {\n return false\n }\n\n const errorEvent = value as ErrorEvent\n return errorEvent._type === Namespace\n}\n\nexport const isErrorEventException = (value: unknown): value is ErrorEventException => {\n return value instanceof ErrorEventException\n}\n\nexport function withPropagation<ReturnType>(runnable: () => ReturnType, attributes: LazyValue<Dictionary<unknown>>): ReturnType\nexport function withPropagation<ReturnType>(runnable: () => Promise<ReturnType>, attributes: LazyValue<Dictionary<unknown>>): Promise<ReturnType>\nexport function withPropagation<ReturnType>(\n runnable: () => ReturnType | Promise<ReturnType>,\n attributes: LazyValue<Dictionary<unknown>>\n): ReturnType | Promise<ReturnType> {\n try {\n let result = runnable()\n if (Promises.isPromise(result)) {\n return result.then((it) => it).catch((it) => propagate(it, Lazy.evaluate(attributes)))\n } else {\n return result\n }\n } catch (throwable: Throwable) {\n throw propagate(throwable, Lazy.evaluate(attributes))\n }\n}\n\nexport const propagate = (throwable: Throwable, context: Dictionary<unknown>): never => {\n if (isErrorEventException(throwable)) {\n // We just mutate the existing error event to avoid nested exceptions\n const errorEvent = throwable.errorEvent\n errorEvent.context = { ...errorEvent.context, ...context }\n throw throwable\n } else {\n const errorEvent = fromThrowable(throwable)\n const contextualizedEvent = from({ ...errorEvent, context: { ...errorEvent.context, ...context } })\n throw new ErrorEventException(contextualizedEvent, throwable)\n }\n}\n\nexport type ErrorEventAugment = ErrorCauseAugment & {\n context?: Dictionary<unknown>\n}\n\nexport const unhandled = (builder?: ErrorEventAugment): ErrorEvent => from(Objects.deepMerge(ErrorCauses.unhandled(builder), builder))\n\nexport const required = (builder?: ErrorEventAugment): ErrorEvent => from(Objects.deepMerge(ErrorCauses.required(builder), builder))\n\nexport const unauthorized = (builder?: ErrorEventAugment): ErrorEvent => from(Objects.deepMerge(ErrorCauses.unauthorized(builder), builder))\n\nexport const forbidden = (builder?: ErrorEventAugment): ErrorEvent => from(Objects.deepMerge(ErrorCauses.forbidden(builder), builder))\n\nexport const badRequest = (builder?: ErrorEventAugment): ErrorEvent => from(Objects.deepMerge(ErrorCauses.badRequest(builder), builder))\n\nexport const invalidValue = (value: unknown, builder?: ErrorEventAugment): ErrorEvent =>\n from(Objects.deepMerge(ErrorCauses.invalidValue(value, builder), builder))\n\nexport function assertPresent<T>(value: T, builder: LazyValue<ErrorEventAugment | undefined> = () => undefined): asserts value is NonNullable<T> {\n if (Objects.isNil(value)) {\n throw new ErrorEventException(required(Lazy.evaluate(builder)))\n }\n}\n\nexport function assertAuthorized(value: boolean, builder: LazyValue<ErrorEventAugment | undefined> = () => undefined): asserts value is true {\n if (!value) {\n throw new ErrorEventException(unauthorized(Lazy.evaluate(builder)))\n }\n}\n\nexport function assertPermitted(value: boolean, builder: LazyValue<ErrorEventAugment | undefined> = () => undefined): asserts value is true {\n if (!value) {\n throw new ErrorEventException(forbidden(Lazy.evaluate(builder)))\n }\n}\n\nexport function assertValid(value: boolean, builder: LazyValue<ErrorEventAugment | undefined> = () => undefined): asserts value is true {\n if (!value) {\n throw new ErrorEventException(badRequest(Lazy.evaluate(builder)))\n }\n}\n\nexport function assert(value: boolean, builder: LazyValue<ErrorEventBuilder>): asserts value is true {\n if (!value) {\n throw new ErrorEventException(from(Lazy.evaluate(builder)))\n }\n}\n\nexport const unpackResult = <T>(result: Result<T, ErrorEvent>): T => {\n if (Results.isFailure(result)) {\n throw new ErrorEventException(result.value)\n }\n\n return result\n}\n"],"mappings":"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","names":["Schema","from","unhandled","required","unauthorized","forbidden","badRequest","invalidValue","assertPresent","assert"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import * as ResourceKeys from '@bessemer/cornerstone/resource-key';
|
|
1
2
|
import { NominalType } from '@bessemer/cornerstone/types';
|
|
2
3
|
import Zod from 'zod';
|
|
3
|
-
export declare const Namespace:
|
|
4
|
+
export declare const Namespace: ResourceKeys.ResourceNamespace<"error-type">;
|
|
4
5
|
export type ErrorType = NominalType<string, typeof Namespace>;
|
|
5
6
|
export declare const Schema: Zod.ZodPipe<Zod.ZodString, Zod.ZodTransform<ErrorType, string>>;
|
|
6
7
|
export declare const Unhandled: ErrorType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-type.d.ts","sourceRoot":"","sources":["../../src/error/error-type.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"error-type.d.ts","sourceRoot":"","sources":["../../src/error/error-type.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,YAAY,MAAM,oCAAoC,CAAA;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AACzD,OAAO,GAAG,MAAM,KAAK,CAAA;AAErB,eAAO,MAAM,SAAS,8CAA6C,CAAA;AACnE,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,SAAS,CAAC,CAAA;AAC7D,eAAO,MAAM,MAAM,iEAAkD,CAAA;AAErE,eAAO,MAAM,SAAS,EAAE,SAAoC,CAAA;AAC5D,eAAO,MAAM,YAAY,EAAE,SAAuC,CAAA;AAClE,eAAO,MAAM,SAAS,EAAE,SAAoC,CAAA;AAC5D,eAAO,MAAM,QAAQ,EAAE,SAAmC,CAAA;AAC1D,eAAO,MAAM,UAAU,EAAE,SAAsC,CAAA;AAC/D,eAAO,MAAM,YAAY,EAAE,SAAwC,CAAA"}
|
package/dist/error/error-type.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/error/error-type.ts
|
|
2
|
-
import
|
|
2
|
+
import * as ResourceKeys from "@bessemer/cornerstone/resource-key";
|
|
3
3
|
import Zod from "zod";
|
|
4
|
-
var Namespace = createNamespace("error-type");
|
|
4
|
+
var Namespace = ResourceKeys.createNamespace("error-type");
|
|
5
5
|
var Schema = Zod.string().transform((it) => it);
|
|
6
6
|
var Unhandled = "unhandled";
|
|
7
7
|
var Unauthorized = "unauthorized";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/error/error-type.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../src/error/error-type.ts"],"sourcesContent":["import * as ResourceKeys from '@bessemer/cornerstone/resource-key'\nimport { NominalType } from '@bessemer/cornerstone/types'\nimport Zod from 'zod'\n\nexport const Namespace = ResourceKeys.createNamespace('error-type')\nexport type ErrorType = NominalType<string, typeof Namespace>\nexport const Schema = Zod.string().transform((it) => it as ErrorType)\n\nexport const Unhandled: ErrorType = 'unhandled' as ErrorType\nexport const Unauthorized: ErrorType = 'unauthorized' as ErrorType\nexport const Forbidden: ErrorType = 'forbidden' as ErrorType\nexport const Required: ErrorType = 'required' as ErrorType\nexport const BadRequest: ErrorType = 'bad-request' as ErrorType\nexport const InvalidValue: ErrorType = 'invalid-value' as ErrorType\n"],"mappings":";AAAA,YAAY,kBAAkB;AAE9B,OAAO,SAAS;AAET,IAAM,YAAyB,6BAAgB,YAAY;AAE3D,IAAM,SAAS,IAAI,OAAO,EAAE,UAAU,CAAC,OAAO,EAAe;AAE7D,IAAM,YAAuB;AAC7B,IAAM,eAA0B;AAChC,IAAM,YAAuB;AAC7B,IAAM,WAAsB;AAC5B,IAAM,aAAwB;AAC9B,IAAM,eAA0B;","names":[]}
|
package/dist/error/error.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
// src/error/error.ts
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import * as Objects from "@bessemer/cornerstone/object";
|
|
3
|
+
import * as Assertions from "@bessemer/cornerstone/assertion";
|
|
4
4
|
var isError = (value) => {
|
|
5
5
|
return value instanceof Error || typeof value === "object" && value !== null && "name" in value && "message" in value && (typeof value.name === "string" || typeof value.name === "undefined") && typeof value.message === "string";
|
|
6
6
|
};
|
|
7
7
|
function assertError(value, message = () => "Errors.assertError failed validation") {
|
|
8
|
-
return assert(isError(value), message);
|
|
8
|
+
return Assertions.assert(isError(value), message);
|
|
9
9
|
}
|
|
10
10
|
var getCausalChain = (error) => {
|
|
11
11
|
const chain = [];
|
|
12
12
|
let current = error;
|
|
13
13
|
while (true) {
|
|
14
14
|
chain.push(current);
|
|
15
|
-
if (!isPresent(current.cause) || !isError(current.cause)) {
|
|
15
|
+
if (!Objects.isPresent(current.cause) || !isError(current.cause)) {
|
|
16
16
|
break;
|
|
17
17
|
}
|
|
18
18
|
current = current.cause;
|
|
@@ -26,7 +26,7 @@ var serialize = (error) => {
|
|
|
26
26
|
if (!isError(error)) {
|
|
27
27
|
return { name: " Can't serialize error", message: "Error is not an instance of Error", stack: null, cause: null };
|
|
28
28
|
}
|
|
29
|
-
const cause = isPresent(error.cause) ? serialize(error.cause) : null;
|
|
29
|
+
const cause = Objects.isPresent(error.cause) ? serialize(error.cause) : null;
|
|
30
30
|
const serialized = {
|
|
31
31
|
name: error.name,
|
|
32
32
|
message: error.message,
|
package/dist/error/error.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/error/error.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../src/error/error.ts"],"sourcesContent":["import * as Objects from '@bessemer/cornerstone/object'\nimport { Throwable } from '@bessemer/cornerstone/types'\nimport { LazyValue } from '@bessemer/cornerstone/lazy'\nimport * as Assertions from '@bessemer/cornerstone/assertion'\n\nexport const isError = (value: unknown): value is Error => {\n return (\n value instanceof Error ||\n (typeof value === 'object' &&\n value !== null &&\n 'name' in value &&\n 'message' in value &&\n (typeof (value as any).name === 'string' || typeof (value as any).name === 'undefined') &&\n typeof (value as any).message === 'string')\n )\n}\n\nexport function assertError(value: unknown, message: LazyValue<string> = () => 'Errors.assertError failed validation'): asserts value is Error {\n return Assertions.assert(isError(value), message)\n}\n\nexport const getCausalChain = (error: Error): Array<Error> => {\n const chain: Array<Error> = []\n let current: Error = error\n\n while (true) {\n chain.push(current)\n\n if (!Objects.isPresent(current.cause) || !isError(current.cause)) {\n break\n }\n\n current = current.cause\n }\n\n return chain\n}\n\nexport const findInCausalChain = (error: Error, predicate: (error: Error) => boolean): Error | undefined => {\n return getCausalChain(error).find(predicate)\n}\n\nexport type ErrorDto = {\n name: string\n message: string\n stack: string | null\n cause: ErrorDto | null\n}\n\nexport const serialize = (error: Throwable): ErrorDto => {\n if (!isError(error)) {\n // JOHN\n return { name: \" Can't serialize error\", message: 'Error is not an instance of Error', stack: null, cause: null }\n }\n\n const cause = Objects.isPresent(error.cause) ? serialize(error.cause) : null\n\n const serialized: ErrorDto = {\n name: error.name,\n message: error.message,\n stack: error.stack ?? null,\n cause,\n }\n\n return serialized\n}\n"],"mappings":";AAAA,YAAY,aAAa;AAGzB,YAAY,gBAAgB;AAErB,IAAM,UAAU,CAAC,UAAmC;AACzD,SACE,iBAAiB,SAChB,OAAO,UAAU,YAChB,UAAU,QACV,UAAU,SACV,aAAa,UACZ,OAAQ,MAAc,SAAS,YAAY,OAAQ,MAAc,SAAS,gBAC3E,OAAQ,MAAc,YAAY;AAExC;AAEO,SAAS,YAAY,OAAgB,UAA6B,MAAM,wCAAgE;AAC7I,SAAkB,kBAAO,QAAQ,KAAK,GAAG,OAAO;AAClD;AAEO,IAAM,iBAAiB,CAAC,UAA+B;AAC5D,QAAM,QAAsB,CAAC;AAC7B,MAAI,UAAiB;AAErB,SAAO,MAAM;AACX,UAAM,KAAK,OAAO;AAElB,QAAI,CAAS,kBAAU,QAAQ,KAAK,KAAK,CAAC,QAAQ,QAAQ,KAAK,GAAG;AAChE;AAAA,IACF;AAEA,cAAU,QAAQ;AAAA,EACpB;AAEA,SAAO;AACT;AAEO,IAAM,oBAAoB,CAAC,OAAc,cAA4D;AAC1G,SAAO,eAAe,KAAK,EAAE,KAAK,SAAS;AAC7C;AASO,IAAM,YAAY,CAAC,UAA+B;AACvD,MAAI,CAAC,QAAQ,KAAK,GAAG;AAEnB,WAAO,EAAE,MAAM,0BAA0B,SAAS,qCAAqC,OAAO,MAAM,OAAO,KAAK;AAAA,EAClH;AAEA,QAAM,QAAgB,kBAAU,MAAM,KAAK,IAAI,UAAU,MAAM,KAAK,IAAI;AAExE,QAAM,aAAuB;AAAA,IAC3B,MAAM,MAAM;AAAA,IACZ,SAAS,MAAM;AAAA,IACf,OAAO,MAAM,SAAS;AAAA,IACtB;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// src/expression/array-expression.ts
|
|
2
|
-
import
|
|
2
|
+
import * as ExpressionInternal from "@bessemer/cornerstone/expression/internal";
|
|
3
3
|
import { Arrays } from "@bessemer/cornerstone";
|
|
4
|
-
var ConcatenateExpression = defineExpression({
|
|
4
|
+
var ConcatenateExpression = ExpressionInternal.defineExpression({
|
|
5
5
|
expressionKey: "Array.Concatenate",
|
|
6
6
|
builder: (operands) => {
|
|
7
7
|
return { operands };
|
|
@@ -12,7 +12,7 @@ var ConcatenateExpression = defineExpression({
|
|
|
12
12
|
}
|
|
13
13
|
});
|
|
14
14
|
var concatenate = ConcatenateExpression.builder;
|
|
15
|
-
var FirstExpression = defineExpression({
|
|
15
|
+
var FirstExpression = ExpressionInternal.defineExpression({
|
|
16
16
|
expressionKey: "Array.First",
|
|
17
17
|
builder: (operands) => {
|
|
18
18
|
return { operands };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/array-expression.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../src/expression/array-expression.ts"],"sourcesContent":["import * as ExpressionInternal from '@bessemer/cornerstone/expression/internal'\nimport { Expression } from '@bessemer/cornerstone/expression'\nimport { Arrays } from '@bessemer/cornerstone'\n\nexport const ConcatenateExpression = ExpressionInternal.defineExpression({\n expressionKey: 'Array.Concatenate',\n builder: (operands: Array<Expression<Array<Expression<unknown>>>>) => {\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = evaluate(operands).map((it) => evaluate(it))\n return Arrays.concatenate(values[0] ?? [], ...Arrays.rest(values))\n },\n})\n\nexport const concatenate = ConcatenateExpression.builder\n\nexport const FirstExpression = ExpressionInternal.defineExpression({\n expressionKey: 'Array.First',\n builder: (operands: Array<Expression<Array<Expression<unknown>>>>) => {\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = evaluate(operands).map((it) => evaluate(it))\n return Arrays.first(values)\n },\n})\n\nexport const first = FirstExpression.builder\n"],"mappings":";AAAA,YAAY,wBAAwB;AAEpC,SAAS,cAAc;AAEhB,IAAM,wBAA2C,oCAAiB;AAAA,EACvE,eAAe;AAAA,EACf,SAAS,CAAC,aAA4D;AACpE,WAAO,EAAE,SAAS;AAAA,EACpB;AAAA,EACA,UAAU,CAAC,EAAE,SAAS,GAAG,aAAa;AACpC,UAAM,SAAS,SAAS,QAAQ,EAAE,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC;AAC1D,WAAO,OAAO,YAAY,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,OAAO,KAAK,MAAM,CAAC;AAAA,EACnE;AACF,CAAC;AAEM,IAAM,cAAc,sBAAsB;AAE1C,IAAM,kBAAqC,oCAAiB;AAAA,EACjE,eAAe;AAAA,EACf,SAAS,CAAC,aAA4D;AACpE,WAAO,EAAE,SAAS;AAAA,EACpB;AAAA,EACA,UAAU,CAAC,EAAE,SAAS,GAAG,aAAa;AACpC,UAAM,SAAS,SAAS,QAAQ,EAAE,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC;AAC1D,WAAO,OAAO,MAAM,MAAM;AAAA,EAC5B;AACF,CAAC;AAEM,IAAM,QAAQ,gBAAgB;","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core-expression.d.ts","sourceRoot":"","sources":["../../src/expression/core-expression.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACvD,OAAO,EAA+B,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAE/E,OAAO,
|
|
1
|
+
{"version":3,"file":"core-expression.d.ts","sourceRoot":"","sources":["../../src/expression/core-expression.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACvD,OAAO,EAA+B,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAE/E,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAGrD,eAAO,MAAM,eAAe;;EAQ1B,CAAA;AAEF,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,KAAG,OAEtD,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,KAAG,MAAM,CAAC,CAAC,CAQ/D,CAAA;AAED,eAAO,MAAM,kBAAkB;;EAU7B,CAAA;AAEF,eAAO,MAAM,aAAa;;EAQxB,CAAA;AAEF,eAAO,MAAM,aAAa;;EAUxB,CAAA;AAEF,eAAO,MAAM,YAAY;;EAUvB,CAAA;AAEF,eAAO,MAAM,gBAAgB;;EAe3B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;EAU7B,CAAA;AAEF,eAAO,MAAM,kBAAkB;;;EAQ7B,CAAA;AAEF,eAAO,MAAM,yBAAyB;;;EAQpC,CAAA;AAEF,eAAO,MAAM,qBAAqB;;;EAQhC,CAAA;AAEF,eAAO,MAAM,4BAA4B;;;EAQvC,CAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// src/expression/core-expression.ts
|
|
2
|
-
import
|
|
2
|
+
import * as ExpressionInternal from "@bessemer/cornerstone/expression/internal";
|
|
3
3
|
import { Arrays, Assertions, Objects, Signatures } from "@bessemer/cornerstone";
|
|
4
|
-
import
|
|
5
|
-
var ValueExpression = defineExpression({
|
|
4
|
+
import * as Results from "@bessemer/cornerstone/result";
|
|
5
|
+
var ValueExpression = ExpressionInternal.defineExpression({
|
|
6
6
|
expressionKey: "Value",
|
|
7
7
|
builder: (value) => {
|
|
8
8
|
return { value };
|
|
@@ -12,18 +12,18 @@ var ValueExpression = defineExpression({
|
|
|
12
12
|
}
|
|
13
13
|
});
|
|
14
14
|
var isValue = (expression) => {
|
|
15
|
-
return isRawValue(expression) || isType(expression, ValueExpression);
|
|
15
|
+
return ExpressionInternal.isRawValue(expression) || ExpressionInternal.isType(expression, ValueExpression);
|
|
16
16
|
};
|
|
17
17
|
var getValue = (expression) => {
|
|
18
|
-
if (isType(expression, ValueExpression)) {
|
|
19
|
-
return success(expression.value);
|
|
20
|
-
} else if (isRawValue(expression)) {
|
|
21
|
-
return success(expression);
|
|
18
|
+
if (ExpressionInternal.isType(expression, ValueExpression)) {
|
|
19
|
+
return Results.success(expression.value);
|
|
20
|
+
} else if (ExpressionInternal.isRawValue(expression)) {
|
|
21
|
+
return Results.success(expression);
|
|
22
22
|
} else {
|
|
23
|
-
return failure();
|
|
23
|
+
return Results.failure();
|
|
24
24
|
}
|
|
25
25
|
};
|
|
26
|
-
var VariableExpression = defineExpression({
|
|
26
|
+
var VariableExpression = ExpressionInternal.defineExpression({
|
|
27
27
|
expressionKey: "Variable",
|
|
28
28
|
builder: (name) => {
|
|
29
29
|
return { name };
|
|
@@ -34,7 +34,7 @@ var VariableExpression = defineExpression({
|
|
|
34
34
|
return value;
|
|
35
35
|
}
|
|
36
36
|
});
|
|
37
|
-
var NotExpression = defineExpression({
|
|
37
|
+
var NotExpression = ExpressionInternal.defineExpression({
|
|
38
38
|
expressionKey: "Not",
|
|
39
39
|
builder: (value) => {
|
|
40
40
|
return { value };
|
|
@@ -43,7 +43,7 @@ var NotExpression = defineExpression({
|
|
|
43
43
|
return !evaluate(expression.value);
|
|
44
44
|
}
|
|
45
45
|
});
|
|
46
|
-
var AndExpression = defineExpression({
|
|
46
|
+
var AndExpression = ExpressionInternal.defineExpression({
|
|
47
47
|
expressionKey: "And",
|
|
48
48
|
builder: (operands) => {
|
|
49
49
|
return { operands };
|
|
@@ -54,7 +54,7 @@ var AndExpression = defineExpression({
|
|
|
54
54
|
return Objects.isNil(falseValue);
|
|
55
55
|
}
|
|
56
56
|
});
|
|
57
|
-
var OrExpression = defineExpression({
|
|
57
|
+
var OrExpression = ExpressionInternal.defineExpression({
|
|
58
58
|
expressionKey: "Or",
|
|
59
59
|
builder: (operands) => {
|
|
60
60
|
return { operands };
|
|
@@ -65,7 +65,7 @@ var OrExpression = defineExpression({
|
|
|
65
65
|
return Objects.isPresent(trueValue);
|
|
66
66
|
}
|
|
67
67
|
});
|
|
68
|
-
var EqualsExpression = defineExpression({
|
|
68
|
+
var EqualsExpression = ExpressionInternal.defineExpression({
|
|
69
69
|
expressionKey: "Equals",
|
|
70
70
|
builder: (operands) => {
|
|
71
71
|
return { operands };
|
|
@@ -79,7 +79,7 @@ var EqualsExpression = defineExpression({
|
|
|
79
79
|
return values.every((val) => val === first);
|
|
80
80
|
}
|
|
81
81
|
});
|
|
82
|
-
var ContainsExpression = defineExpression({
|
|
82
|
+
var ContainsExpression = ExpressionInternal.defineExpression({
|
|
83
83
|
expressionKey: "Contains",
|
|
84
84
|
builder: (collection, operands) => {
|
|
85
85
|
return { collection, operands };
|
|
@@ -90,7 +90,7 @@ var ContainsExpression = defineExpression({
|
|
|
90
90
|
return Arrays.containsAll(collection, values);
|
|
91
91
|
}
|
|
92
92
|
});
|
|
93
|
-
var LessThanExpression = defineExpression({
|
|
93
|
+
var LessThanExpression = ExpressionInternal.defineExpression({
|
|
94
94
|
expressionKey: "Basic.LessThan",
|
|
95
95
|
builder: (left, right) => {
|
|
96
96
|
return { left, right };
|
|
@@ -99,7 +99,7 @@ var LessThanExpression = defineExpression({
|
|
|
99
99
|
return evaluate(left) < evaluate(right);
|
|
100
100
|
}
|
|
101
101
|
});
|
|
102
|
-
var LessThanOrEqualExpression = defineExpression({
|
|
102
|
+
var LessThanOrEqualExpression = ExpressionInternal.defineExpression({
|
|
103
103
|
expressionKey: "Basic.LessThanOrEqual",
|
|
104
104
|
builder: (left, right) => {
|
|
105
105
|
return { left, right };
|
|
@@ -108,7 +108,7 @@ var LessThanOrEqualExpression = defineExpression({
|
|
|
108
108
|
return evaluate(left) <= evaluate(right);
|
|
109
109
|
}
|
|
110
110
|
});
|
|
111
|
-
var GreaterThanExpression = defineExpression({
|
|
111
|
+
var GreaterThanExpression = ExpressionInternal.defineExpression({
|
|
112
112
|
expressionKey: "Basic.GreaterThan",
|
|
113
113
|
builder: (left, right) => {
|
|
114
114
|
return { left, right };
|
|
@@ -117,7 +117,7 @@ var GreaterThanExpression = defineExpression({
|
|
|
117
117
|
return evaluate(left) > evaluate(right);
|
|
118
118
|
}
|
|
119
119
|
});
|
|
120
|
-
var GreaterThanOrEqualExpression = defineExpression({
|
|
120
|
+
var GreaterThanOrEqualExpression = ExpressionInternal.defineExpression({
|
|
121
121
|
expressionKey: "Basic.GreaterThanOrEqual",
|
|
122
122
|
builder: (left, right) => {
|
|
123
123
|
return { left, right };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/core-expression.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"sources":["../../src/expression/core-expression.ts"],"sourcesContent":["import * as ExpressionInternal from '@bessemer/cornerstone/expression/internal'\nimport { Expression } from '@bessemer/cornerstone/expression'\nimport { BasicType } from '@bessemer/cornerstone/types'\nimport { Arrays, Assertions, Objects, Signatures } from '@bessemer/cornerstone'\nimport { Signable } from '@bessemer/cornerstone/signature'\nimport { Result } from '@bessemer/cornerstone/result'\nimport * as Results from '@bessemer/cornerstone/result'\n\nexport const ValueExpression = ExpressionInternal.defineExpression({\n expressionKey: 'Value',\n builder: (value: unknown) => {\n return { value }\n },\n resolver: ({ value }, evaluate, context) => {\n return value\n },\n})\n\nexport const isValue = <T>(expression: Expression<T>): boolean => {\n return ExpressionInternal.isRawValue(expression) || ExpressionInternal.isType(expression, ValueExpression)\n}\n\nexport const getValue = <T>(expression: Expression<T>): Result<T> => {\n if (ExpressionInternal.isType(expression, ValueExpression)) {\n return Results.success(expression.value as T)\n } else if (ExpressionInternal.isRawValue(expression)) {\n return Results.success(expression)\n } else {\n return Results.failure()\n }\n}\n\nexport const VariableExpression = ExpressionInternal.defineExpression({\n expressionKey: 'Variable',\n builder: (name: string) => {\n return { name }\n },\n resolver: ({ name }, evaluate, context) => {\n const value = context.variables[name]\n Assertions.assertPresent(value)\n return value\n },\n})\n\nexport const NotExpression = ExpressionInternal.defineExpression({\n expressionKey: 'Not',\n builder: (value: Expression<boolean>) => {\n return { value }\n },\n resolver: (expression, evaluate) => {\n return !evaluate(expression.value)\n },\n})\n\nexport const AndExpression = ExpressionInternal.defineExpression({\n expressionKey: 'And',\n builder: (operands: Array<Expression<boolean>>) => {\n return { operands }\n },\n resolver: (expression, evaluate) => {\n const values = expression.operands.map((it) => evaluate(it))\n const falseValue = values.find((it) => !it)\n return Objects.isNil(falseValue)\n },\n})\n\nexport const OrExpression = ExpressionInternal.defineExpression({\n expressionKey: 'Or',\n builder: (operands: Array<Expression<boolean>>) => {\n return { operands }\n },\n resolver: (expression, evaluate) => {\n const values = expression.operands.map((it) => evaluate(it))\n const trueValue = values.find((it) => it)\n return Objects.isPresent(trueValue)\n },\n})\n\nexport const EqualsExpression = ExpressionInternal.defineExpression({\n expressionKey: 'Equals',\n builder: (operands: Array<Expression<Signable>>) => {\n return { operands }\n },\n resolver: (expression, evaluate) => {\n const values = expression.operands.map((it) => evaluate(it)).map(Signatures.sign)\n\n if (values.length === 0) {\n return true\n }\n\n const first = values[0]\n return values.every((val) => val === first)\n },\n})\n\nexport const ContainsExpression = ExpressionInternal.defineExpression({\n expressionKey: 'Contains',\n builder: (collection: Expression<Array<Signable>>, operands: Array<Expression<Signable>>) => {\n return { collection, operands }\n },\n resolver: (expression, evaluate) => {\n const collection = evaluate(expression.collection)\n const values = expression.operands.map((it) => evaluate(it))\n return Arrays.containsAll(collection, values)\n },\n})\n\nexport const LessThanExpression = ExpressionInternal.defineExpression({\n expressionKey: 'Basic.LessThan',\n builder: (left: Expression<BasicType>, right: Expression<BasicType>) => {\n return { left, right }\n },\n resolver: ({ left, right }, evaluate) => {\n return evaluate(left) < evaluate(right)\n },\n})\n\nexport const LessThanOrEqualExpression = ExpressionInternal.defineExpression({\n expressionKey: 'Basic.LessThanOrEqual',\n builder: (left: Expression<BasicType>, right: Expression<BasicType>) => {\n return { left, right }\n },\n resolver: ({ left, right }, evaluate) => {\n return evaluate(left) <= evaluate(right)\n },\n})\n\nexport const GreaterThanExpression = ExpressionInternal.defineExpression({\n expressionKey: 'Basic.GreaterThan',\n builder: (left: Expression<BasicType>, right: Expression<BasicType>) => {\n return { left, right }\n },\n resolver: ({ left, right }, evaluate) => {\n return evaluate(left) > evaluate(right)\n },\n})\n\nexport const GreaterThanOrEqualExpression = ExpressionInternal.defineExpression({\n expressionKey: 'Basic.GreaterThanOrEqual',\n builder: (left: Expression<BasicType>, right: Expression<BasicType>) => {\n return { left, right }\n },\n resolver: ({ left, right }, evaluate) => {\n return evaluate(left) >= evaluate(right)\n },\n})\n"],"mappings":"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","names":[]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// src/expression/expression-evaluator.ts
|
|
2
2
|
import { Assertions } from "@bessemer/cornerstone";
|
|
3
|
-
import
|
|
3
|
+
import * as ExpressionInternal from "@bessemer/cornerstone/expression/internal";
|
|
4
4
|
var ExpressionEvaluator = class {
|
|
5
5
|
constructor(expressionDefinitions) {
|
|
6
6
|
this.expressionDefinitions = expressionDefinitions;
|
|
7
7
|
}
|
|
8
8
|
evaluate(expression, context) {
|
|
9
|
-
if (isRawValue(expression)) {
|
|
9
|
+
if (ExpressionInternal.isRawValue(expression)) {
|
|
10
10
|
return expression;
|
|
11
11
|
}
|
|
12
12
|
const matchingExpressionDefinition = this.expressionDefinitions.find((it) => it.expressionKey === expression.expressionKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/expression-evaluator.ts"],"sourcesContent":["import { Expression, ExpressionContext, ExpressionDefinition, ExpressionReference } from '@bessemer/cornerstone/expression'\nimport { Assertions } from '@bessemer/cornerstone'\nimport
|
|
1
|
+
{"version":3,"sources":["../../src/expression/expression-evaluator.ts"],"sourcesContent":["import { Expression, ExpressionContext, ExpressionDefinition, ExpressionReference } from '@bessemer/cornerstone/expression'\nimport { Assertions } from '@bessemer/cornerstone'\nimport * as ExpressionInternal from '@bessemer/cornerstone/expression/internal'\n\n// JOHN need to add tests...\nexport class ExpressionEvaluator {\n constructor(private readonly expressionDefinitions: Array<ExpressionDefinition<unknown, Array<any>, Expression<any>>>) {}\n\n evaluate<T>(expression: Expression<T>, context: ExpressionContext): T {\n if (ExpressionInternal.isRawValue(expression)) {\n return expression\n }\n\n const matchingExpressionDefinition = this.expressionDefinitions.find((it) => it.expressionKey === expression.expressionKey)\n Assertions.assertPresent(matchingExpressionDefinition)\n return matchingExpressionDefinition.resolver(expression, (expression) => this.evaluate(expression, context), context) as T\n }\n\n dereference<ReturnType, ArgumentType extends Array<unknown>>(\n reference: ExpressionReference<ReturnType, ArgumentType>,\n ...args: ArgumentType\n ): Expression<ReturnType> {\n const matchingExpressionDefinition = this.expressionDefinitions.find((it) => it.expressionKey === reference.expressionKey)\n Assertions.assertPresent(matchingExpressionDefinition, () => `Unable to find Expression Definition for type: ${reference.expressionKey}`)\n return matchingExpressionDefinition.builder(...args)\n }\n}\n"],"mappings":";AACA,SAAS,kBAAkB;AAC3B,YAAY,wBAAwB;AAG7B,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,uBAA0F;AAA1F;AAAA,EAA2F;AAAA,EAExH,SAAY,YAA2B,SAA+B;AACpE,QAAuB,8BAAW,UAAU,GAAG;AAC7C,aAAO;AAAA,IACT;AAEA,UAAM,+BAA+B,KAAK,sBAAsB,KAAK,CAAC,OAAO,GAAG,kBAAkB,WAAW,aAAa;AAC1H,eAAW,cAAc,4BAA4B;AACrD,WAAO,6BAA6B,SAAS,YAAY,CAACA,gBAAe,KAAK,SAASA,aAAY,OAAO,GAAG,OAAO;AAAA,EACtH;AAAA,EAEA,YACE,cACG,MACqB;AACxB,UAAM,+BAA+B,KAAK,sBAAsB,KAAK,CAAC,OAAO,GAAG,kBAAkB,UAAU,aAAa;AACzH,eAAW,cAAc,8BAA8B,MAAM,kDAAkD,UAAU,aAAa,EAAE;AACxI,WAAO,6BAA6B,QAAQ,GAAG,IAAI;AAAA,EACrD;AACF;","names":["expression"]}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
// src/expression/expression-mapper.ts
|
|
2
|
-
import
|
|
2
|
+
import * as ExpressionInternal from "@bessemer/cornerstone/expression/internal";
|
|
3
3
|
import { Assertions } from "@bessemer/cornerstone";
|
|
4
|
-
import
|
|
4
|
+
import * as ExpressionDefs from "@bessemer/cornerstone/expression/expression";
|
|
5
5
|
import { ValueExpression } from "@bessemer/cornerstone/expression/core-expression";
|
|
6
6
|
var ExpressionMapper = class {
|
|
7
7
|
resolverMap = {};
|
|
8
8
|
map(expression, context) {
|
|
9
|
-
if (isExpression(expression)) {
|
|
9
|
+
if (ExpressionInternal.isExpression(expression)) {
|
|
10
10
|
const resolver = this.resolverMap[expression.expressionKey];
|
|
11
11
|
Assertions.assertPresent(
|
|
12
12
|
resolver,
|
|
@@ -19,7 +19,7 @@ var ExpressionMapper = class {
|
|
|
19
19
|
resolver,
|
|
20
20
|
() => `Illegal Argument - Attempted to map unknown expression: ${ValueExpression.expressionKey}. You must register(...) a handler for this expression type.`
|
|
21
21
|
);
|
|
22
|
-
const valueExpression = value(expression);
|
|
22
|
+
const valueExpression = ExpressionDefs.value(expression);
|
|
23
23
|
return resolver(valueExpression, (expression2) => this.map(expression2, context), context);
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/expression-mapper.ts"],"sourcesContent":["import { Expression, ExpressionDefinition } from '@bessemer/cornerstone/expression'\nimport { Dictionary } from '@bessemer/cornerstone/types'\nimport
|
|
1
|
+
{"version":3,"sources":["../../src/expression/expression-mapper.ts"],"sourcesContent":["import { Expression, ExpressionDefinition } from '@bessemer/cornerstone/expression'\nimport { Dictionary } from '@bessemer/cornerstone/types'\nimport * as ExpressionInternal from '@bessemer/cornerstone/expression/internal'\nimport { Assertions } from '@bessemer/cornerstone'\nimport * as ExpressionDefs from '@bessemer/cornerstone/expression/expression'\nimport { ValueExpression } from '@bessemer/cornerstone/expression/core-expression'\n\nexport type ExpressionResolver<ExpressionType, MappingType, ContextType> = (\n expression: ExpressionType,\n map: (expression: Expression<unknown>) => MappingType,\n context: ContextType\n) => MappingType\n\nexport class ExpressionMapper<MappingType, ContextType> {\n private readonly resolverMap: Dictionary<ExpressionResolver<any, MappingType, ContextType>> = {}\n\n map(expression: Expression<unknown>, context: ContextType): MappingType {\n if (ExpressionInternal.isExpression(expression)) {\n const resolver = this.resolverMap[expression.expressionKey]\n Assertions.assertPresent(\n resolver,\n () =>\n `Illegal Argument - Attempted to map unknown expression: ${expression.expressionKey}. You must register(...) a handler for this expression type.`\n )\n\n return resolver(expression, (expression) => this.map(expression, context), context)\n } else {\n const resolver = this.resolverMap[ValueExpression.expressionKey]\n Assertions.assertPresent(\n resolver,\n () =>\n `Illegal Argument - Attempted to map unknown expression: ${ValueExpression.expressionKey}. You must register(...) a handler for this expression type.`\n )\n\n const valueExpression = ExpressionDefs.value(expression)\n return resolver(valueExpression, (expression) => this.map(expression, context), context)\n }\n }\n\n register<ExpressionType>(\n definition: ExpressionDefinition<any, any, ExpressionType>,\n resolver: ExpressionResolver<ExpressionType, MappingType, ContextType>\n ): void {\n this.resolverMap[definition.expressionKey] = resolver\n }\n}\n"],"mappings":";AAEA,YAAY,wBAAwB;AACpC,SAAS,kBAAkB;AAC3B,YAAY,oBAAoB;AAChC,SAAS,uBAAuB;AAQzB,IAAM,mBAAN,MAAiD;AAAA,EACrC,cAA6E,CAAC;AAAA,EAE/F,IAAI,YAAiC,SAAmC;AACtE,QAAuB,gCAAa,UAAU,GAAG;AAC/C,YAAM,WAAW,KAAK,YAAY,WAAW,aAAa;AAC1D,iBAAW;AAAA,QACT;AAAA,QACA,MACE,2DAA2D,WAAW,aAAa;AAAA,MACvF;AAEA,aAAO,SAAS,YAAY,CAACA,gBAAe,KAAK,IAAIA,aAAY,OAAO,GAAG,OAAO;AAAA,IACpF,OAAO;AACL,YAAM,WAAW,KAAK,YAAY,gBAAgB,aAAa;AAC/D,iBAAW;AAAA,QACT;AAAA,QACA,MACE,2DAA2D,gBAAgB,aAAa;AAAA,MAC5F;AAEA,YAAM,kBAAiC,qBAAM,UAAU;AACvD,aAAO,SAAS,iBAAiB,CAACA,gBAAe,KAAK,IAAIA,aAAY,OAAO,GAAG,OAAO;AAAA,IACzF;AAAA,EACF;AAAA,EAEA,SACE,YACA,UACM;AACN,SAAK,YAAY,WAAW,aAAa,IAAI;AAAA,EAC/C;AACF;","names":["expression"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// src/expression/internal.ts
|
|
2
|
-
import
|
|
2
|
+
import * as Objects from "@bessemer/cornerstone/object";
|
|
3
3
|
var defineExpression = (options) => {
|
|
4
4
|
return {
|
|
5
5
|
expressionKey: options.expressionKey,
|
|
@@ -18,10 +18,10 @@ var isType = (expression, expressionDefinition) => {
|
|
|
18
18
|
return expression.expressionKey === expressionDefinition.expressionKey;
|
|
19
19
|
};
|
|
20
20
|
var isExpression = (expression) => {
|
|
21
|
-
return isObject(expression) && "expressionKey" in expression;
|
|
21
|
+
return Objects.isObject(expression) && "expressionKey" in expression;
|
|
22
22
|
};
|
|
23
23
|
var isRawValue = (expression) => {
|
|
24
|
-
if (!isObject(expression)) {
|
|
24
|
+
if (!Objects.isObject(expression)) {
|
|
25
25
|
return true;
|
|
26
26
|
}
|
|
27
27
|
const result = expression.expressionKey === void 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/expression/internal.ts"],"sourcesContent":["import { EvaluateExpression, Expression, ExpressionContext, ExpressionDefinition, ExpressionKey, IExpression } from '@bessemer/cornerstone/expression'\nimport { UnknownRecord } from 'type-fest'\nimport
|
|
1
|
+
{"version":3,"sources":["../../src/expression/internal.ts"],"sourcesContent":["import { EvaluateExpression, Expression, ExpressionContext, ExpressionDefinition, ExpressionKey, IExpression } from '@bessemer/cornerstone/expression'\nimport { UnknownRecord } from 'type-fest'\nimport * as Objects from '@bessemer/cornerstone/object'\n\nexport const defineExpression = <ReturnType, ArgumentType extends Array<unknown>, PayloadType extends UnknownRecord>(options: {\n expressionKey: ExpressionKey<ReturnType, ArgumentType>\n builder: (...parameters: ArgumentType) => PayloadType\n resolver: (expression: PayloadType, evaluate: EvaluateExpression, context: ExpressionContext) => ReturnType\n}): ExpressionDefinition<ReturnType, ArgumentType, Expression<ReturnType> & PayloadType> => {\n return {\n expressionKey: options.expressionKey,\n builder: (...parameters) => {\n return { expressionKey: options.expressionKey, ...options.builder(...parameters) }\n },\n resolver: (expression, evaluate, context) => {\n return options.resolver(expression as any, evaluate, context)\n },\n }\n}\n\nexport const isType = <ReturnValue, ArgumentType extends Array<any>, ExpressionType extends Expression<ReturnValue>>(\n expression: Expression<ReturnValue>,\n expressionDefinition: ExpressionDefinition<ReturnValue, ArgumentType, ExpressionType>\n): expression is ReturnType<typeof expressionDefinition['builder']> => {\n if (!isExpression(expression)) {\n return false\n }\n\n return expression.expressionKey === expressionDefinition.expressionKey\n}\n\nexport const isExpression = <T>(expression: Expression<any>): expression is IExpression<T> => {\n return Objects.isObject(expression) && 'expressionKey' in expression\n}\n\nexport const isRawValue = <T>(expression: Expression<T>): expression is T => {\n if (!Objects.isObject(expression)) {\n return true\n }\n\n const result = (expression as unknown as IExpression<T>).expressionKey === undefined\n return result\n}\n"],"mappings":";AAEA,YAAY,aAAa;AAElB,IAAM,mBAAmB,CAAqF,YAIzB;AAC1F,SAAO;AAAA,IACL,eAAe,QAAQ;AAAA,IACvB,SAAS,IAAI,eAAe;AAC1B,aAAO,EAAE,eAAe,QAAQ,eAAe,GAAG,QAAQ,QAAQ,GAAG,UAAU,EAAE;AAAA,IACnF;AAAA,IACA,UAAU,CAAC,YAAY,UAAU,YAAY;AAC3C,aAAO,QAAQ,SAAS,YAAmB,UAAU,OAAO;AAAA,IAC9D;AAAA,EACF;AACF;AAEO,IAAM,SAAS,CACpB,YACA,yBACqE;AACrE,MAAI,CAAC,aAAa,UAAU,GAAG;AAC7B,WAAO;AAAA,EACT;AAEA,SAAO,WAAW,kBAAkB,qBAAqB;AAC3D;AAEO,IAAM,eAAe,CAAI,eAA8D;AAC5F,SAAe,iBAAS,UAAU,KAAK,mBAAmB;AAC5D;AAEO,IAAM,aAAa,CAAI,eAA+C;AAC3E,MAAI,CAAS,iBAAS,UAAU,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,QAAM,SAAU,WAAyC,kBAAkB;AAC3E,SAAO;AACT;","names":[]}
|