@bessemer/cornerstone 0.5.1 → 0.5.4
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 +57 -0
- package/dist/array.d.ts.map +1 -0
- package/dist/array.js +137 -0
- package/dist/array.js.map +1 -0
- package/dist/async.d.ts +59 -0
- package/dist/async.d.ts.map +1 -0
- package/dist/async.js +62 -0
- package/dist/async.js.map +1 -0
- package/dist/cache.d.ts +106 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +112 -0
- package/dist/cache.js.map +1 -0
- package/dist/combinable.d.ts +16 -0
- package/dist/combinable.d.ts.map +1 -0
- package/dist/combinable.js +31 -0
- package/dist/combinable.js.map +1 -0
- package/dist/comparator.d.ts +9 -0
- package/dist/comparator.d.ts.map +1 -0
- package/dist/comparator.js +76 -0
- package/dist/comparator.js.map +1 -0
- package/dist/content.d.ts +68 -0
- package/dist/content.d.ts.map +1 -0
- package/dist/content.js +79 -0
- package/dist/content.js.map +1 -0
- package/dist/context.d.ts +7 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +1 -0
- package/dist/context.js.map +1 -0
- package/dist/crypto.d.ts +3 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +15 -0
- package/dist/crypto.js.map +1 -0
- package/dist/date.d.ts +10 -0
- package/dist/date.d.ts.map +1 -0
- package/dist/date.js +24 -0
- package/dist/date.js.map +1 -0
- package/dist/duration.d.ts +39 -0
- package/dist/duration.d.ts.map +1 -0
- package/dist/duration.js +52 -0
- package/dist/duration.js.map +1 -0
- package/dist/either.d.ts +20 -0
- package/dist/either.d.ts.map +1 -0
- package/dist/either.js +25 -0
- package/dist/either.js.map +1 -0
- package/dist/entry.d.ts +7 -0
- package/dist/entry.d.ts.map +1 -0
- package/dist/entry.js +24 -0
- package/dist/entry.js.map +1 -0
- package/dist/equalitor.d.ts +5 -0
- package/dist/equalitor.d.ts.map +1 -0
- package/dist/equalitor.js +10 -0
- package/dist/equalitor.js.map +1 -0
- package/dist/error-event.d.ts +34 -0
- package/dist/error-event.d.ts.map +1 -0
- package/dist/error-event.js +91 -0
- package/dist/error-event.js.map +1 -0
- package/dist/error.d.ts +3 -0
- package/dist/error.d.ts.map +1 -0
- package/dist/error.js +18 -0
- package/dist/error.js.map +1 -0
- package/dist/expression/array-expression.d.ts +14 -0
- package/dist/expression/array-expression.d.ts.map +1 -0
- package/dist/expression/array-expression.js +32 -0
- package/dist/expression/array-expression.js.map +1 -0
- package/dist/expression/expression-evaluator.d.ts +8 -0
- package/dist/expression/expression-evaluator.d.ts.map +1 -0
- package/dist/expression/expression-evaluator.js +31 -0
- package/dist/expression/expression-evaluator.js.map +1 -0
- package/dist/expression/expression.d.ts +54 -0
- package/dist/expression/expression.d.ts.map +1 -0
- package/dist/expression/expression.js +173 -0
- package/dist/expression/expression.js.map +1 -0
- package/dist/expression/internal.d.ts +10 -0
- package/dist/expression/internal.d.ts.map +1 -0
- package/dist/expression/internal.js +28 -0
- package/dist/expression/internal.js.map +1 -0
- package/dist/expression/numeric-expression.d.ts +79 -0
- package/dist/expression/numeric-expression.d.ts.map +1 -0
- package/dist/expression/numeric-expression.js +177 -0
- package/dist/expression/numeric-expression.js.map +1 -0
- package/dist/expression/string-expression.d.ts +24 -0
- package/dist/expression/string-expression.d.ts.map +1 -0
- package/dist/expression/string-expression.js +41 -0
- package/dist/expression/string-expression.js.map +1 -0
- package/dist/expression.d.ts +35 -0
- package/dist/expression.d.ts.map +1 -0
- package/dist/expression.js +12 -0
- package/dist/expression.js.map +1 -0
- package/dist/function.d.ts +2 -0
- package/dist/function.d.ts.map +1 -0
- package/dist/function.js +7 -0
- package/dist/function.js.map +1 -0
- package/dist/glob.d.ts +8 -0
- package/dist/glob.d.ts.map +1 -0
- package/dist/glob.js +20 -0
- package/dist/glob.js.map +1 -0
- package/dist/global-variable.d.ts +7 -0
- package/dist/global-variable.d.ts.map +1 -0
- package/dist/global-variable.js +34 -0
- package/dist/global-variable.js.map +1 -0
- package/dist/hash.d.ts +11 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +30 -0
- package/dist/hash.js.map +1 -0
- package/dist/hex-code.d.ts +5 -0
- package/dist/hex-code.d.ts.map +1 -0
- package/dist/hex-code.js +7 -0
- package/dist/hex-code.js.map +1 -0
- package/dist/index.d.ts +41 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/lazy.d.ts +3 -0
- package/dist/lazy.d.ts.map +1 -0
- package/dist/lazy.js +13 -0
- package/dist/lazy.js.map +1 -0
- package/dist/logger.d.ts +30 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +124 -0
- package/dist/logger.js.map +1 -0
- package/dist/math.d.ts +22 -0
- package/dist/math.d.ts.map +1 -0
- package/dist/math.js +123 -0
- package/dist/math.js.map +1 -0
- package/dist/misc.d.ts +3 -0
- package/dist/misc.d.ts.map +1 -0
- package/dist/misc.js +21 -0
- package/dist/misc.js.map +1 -0
- package/dist/object.d.ts +62 -0
- package/dist/object.d.ts.map +1 -0
- package/dist/object.js +170 -0
- package/dist/object.js.map +1 -0
- package/dist/patch.d.ts +41 -0
- package/dist/patch.d.ts.map +1 -0
- package/dist/patch.js +87 -0
- package/dist/patch.js.map +1 -0
- package/dist/precondition.d.ts +8 -0
- package/dist/precondition.d.ts.map +1 -0
- package/dist/precondition.js +27 -0
- package/dist/precondition.js.map +1 -0
- package/dist/promise.d.ts +8 -0
- package/dist/promise.d.ts.map +1 -0
- package/dist/promise.js +18 -0
- package/dist/promise.js.map +1 -0
- package/dist/property.d.ts +11 -0
- package/dist/property.d.ts.map +1 -0
- package/dist/property.js +21 -0
- package/dist/property.js.map +1 -0
- package/dist/reference.d.ts +22 -0
- package/dist/reference.d.ts.map +1 -0
- package/dist/reference.js +51 -0
- package/dist/reference.js.map +1 -0
- package/dist/resource.d.ts +13 -0
- package/dist/resource.d.ts.map +1 -0
- package/dist/resource.js +27 -0
- package/dist/resource.js.map +1 -0
- package/dist/result.d.ts +18 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +50 -0
- package/dist/result.js.map +1 -0
- package/dist/retry.d.ts +18 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +51 -0
- package/dist/retry.js.map +1 -0
- package/dist/rich-text.d.ts +17 -0
- package/dist/rich-text.d.ts.map +1 -0
- package/dist/rich-text.js +9 -0
- package/dist/rich-text.js.map +1 -0
- package/dist/set.d.ts +5 -0
- package/dist/set.d.ts.map +1 -0
- package/dist/set.js +44 -0
- package/dist/set.js.map +1 -0
- package/dist/signature.d.ts +9 -0
- package/dist/signature.d.ts.map +1 -0
- package/dist/signature.js +20 -0
- package/dist/signature.js.map +1 -0
- package/dist/store.d.ts +40 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +50 -0
- package/dist/store.js.map +1 -0
- package/dist/string.d.ts +40 -0
- package/dist/string.d.ts.map +1 -0
- package/dist/string.js +154 -0
- package/dist/string.js.map +1 -0
- package/dist/tag.d.ts +24 -0
- package/dist/tag.d.ts.map +1 -0
- package/dist/tag.js +50 -0
- package/dist/tag.js.map +1 -0
- package/dist/types.d.ts +16 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/dist/ulid.d.ts +8 -0
- package/dist/ulid.d.ts.map +1 -0
- package/dist/ulid.js +28 -0
- package/dist/ulid.js.map +1 -0
- package/dist/unit.d.ts +4 -0
- package/dist/unit.d.ts.map +1 -0
- package/dist/unit.js +6 -0
- package/dist/unit.js.map +1 -0
- package/dist/uri.d.ts +47 -0
- package/dist/uri.d.ts.map +1 -0
- package/dist/uri.js +211 -0
- package/dist/uri.js.map +1 -0
- package/dist/url.d.ts +25 -0
- package/dist/url.d.ts.map +1 -0
- package/dist/url.js +120 -0
- package/dist/url.js.map +1 -0
- package/dist/uuid.d.ts +8 -0
- package/dist/uuid.d.ts.map +1 -0
- package/dist/uuid.js +35 -0
- package/dist/uuid.js.map +1 -0
- package/dist/zod.d.ts +17 -0
- package/dist/zod.d.ts.map +1 -0
- package/dist/zod.js +31 -0
- package/dist/zod.js.map +1 -0
- package/package.json +5 -3
- package/jest.config.js +0 -3
- package/src/array.ts +0 -142
- package/src/async.ts +0 -114
- package/src/cache.ts +0 -236
- package/src/combinable.ts +0 -40
- package/src/comparator.ts +0 -78
- package/src/content.ts +0 -138
- package/src/context.ts +0 -6
- package/src/crypto.ts +0 -11
- package/src/date.ts +0 -18
- package/src/duration.ts +0 -57
- package/src/either.ts +0 -29
- package/src/entry.ts +0 -21
- package/src/equalitor.ts +0 -12
- package/src/error-event.ts +0 -126
- package/src/error.ts +0 -16
- package/src/expression/array-expression.ts +0 -29
- package/src/expression/expression-evaluator.ts +0 -34
- package/src/expression/expression.ts +0 -188
- package/src/expression/internal.ts +0 -34
- package/src/expression/numeric-expression.ts +0 -182
- package/src/expression/string-expression.ts +0 -38
- package/src/expression.ts +0 -48
- package/src/function.ts +0 -3
- package/src/glob.ts +0 -19
- package/src/global-variable.ts +0 -40
- package/src/hash.ts +0 -28
- package/src/hex-code.ts +0 -6
- package/src/index.ts +0 -82
- package/src/lazy.ts +0 -11
- package/src/logger.ts +0 -144
- package/src/math.ts +0 -132
- package/src/misc.ts +0 -22
- package/src/object.ts +0 -236
- package/src/patch.ts +0 -128
- package/src/precondition.ts +0 -25
- package/src/promise.ts +0 -16
- package/src/property.ts +0 -29
- package/src/reference.ts +0 -68
- package/src/resource.ts +0 -32
- package/src/result.ts +0 -66
- package/src/retry.ts +0 -70
- package/src/rich-text.ts +0 -24
- package/src/set.ts +0 -46
- package/src/signature.ts +0 -20
- package/src/store.ts +0 -91
- package/src/string.ts +0 -173
- package/src/tag.ts +0 -68
- package/src/types.ts +0 -21
- package/src/ulid.ts +0 -28
- package/src/unit.ts +0 -4
- package/src/uri.ts +0 -321
- package/src/url.ts +0 -155
- package/src/uuid.ts +0 -37
- package/src/zod.ts +0 -24
- package/test/comparator.test.ts +0 -1
- package/test/expression.test.ts +0 -12
- package/test/object.test.ts +0 -104
- package/test/patch.test.ts +0 -170
- package/test/set.test.ts +0 -20
- package/test/string.test.ts +0 -22
- package/test/uri.test.ts +0 -111
- package/test/url.test.ts +0 -174
- package/tsconfig.build.json +0 -13
- package/tsup.config.ts +0 -4
@@ -0,0 +1,10 @@
|
|
1
|
+
// src/equalitor.ts
|
2
|
+
var fromComparator = (comparator) => {
|
3
|
+
return (first, second) => comparator(first, second) === 0;
|
4
|
+
};
|
5
|
+
var reference = () => (first, second) => first === second;
|
6
|
+
export {
|
7
|
+
fromComparator,
|
8
|
+
reference
|
9
|
+
};
|
10
|
+
//# sourceMappingURL=equalitor.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/equalitor.ts"],"sourcesContent":["import { Comparator } from '@bessemer/cornerstone/comparator'\n\nexport type Equalitor<T> = (first: T, second: T) => boolean\n\nexport const fromComparator = <T>(comparator: Comparator<T>): Equalitor<T> => {\n return (first, second) => comparator(first, second) === 0\n}\n\nexport const reference =\n <T>(): Equalitor<T> =>\n (first, second) =>\n first === second\n"],"mappings":";AAIO,IAAM,iBAAiB,CAAI,eAA4C;AAC5E,SAAO,CAAC,OAAO,WAAW,WAAW,OAAO,MAAM,MAAM;AAC1D;AAEO,IAAM,YACX,MACA,CAAC,OAAO,WACN,UAAU;","names":[]}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import { NominalType, Throwable } from '@bessemer/cornerstone/types';
|
2
|
+
import { RecordAttribute } from '@bessemer/cornerstone/object';
|
3
|
+
export type ErrorCode = NominalType<string, 'ErrorCode'>;
|
4
|
+
export type ErrorAttribute<Type = unknown> = RecordAttribute<Type, 'ErrorAttribute'>;
|
5
|
+
export type ErrorEvent = {
|
6
|
+
code: ErrorCode;
|
7
|
+
message: string;
|
8
|
+
attributes: Record<ErrorAttribute, unknown>;
|
9
|
+
causes: Array<ErrorEvent>;
|
10
|
+
};
|
11
|
+
export type ErrorEventBuilder = {
|
12
|
+
code: ErrorCode;
|
13
|
+
message?: string | null;
|
14
|
+
attributes?: Record<ErrorAttribute, unknown>;
|
15
|
+
causes?: Array<ErrorEvent>;
|
16
|
+
};
|
17
|
+
export declare class ErrorEventException extends Error {
|
18
|
+
readonly errorEvent: ErrorEvent;
|
19
|
+
constructor(errorEvent: ErrorEvent, cause?: unknown);
|
20
|
+
}
|
21
|
+
export declare const isErrorEvent: (throwable: Throwable) => throwable is ErrorEvent;
|
22
|
+
export declare const isErrorEventException: (throwable: Throwable) => throwable is ErrorEventException;
|
23
|
+
export declare const of: (builder: ErrorEventBuilder) => ErrorEvent;
|
24
|
+
export declare const from: (throwable: Throwable) => ErrorEvent;
|
25
|
+
export declare const findByCodeInCausalChain: (error: ErrorEvent, code: string) => ErrorEvent | undefined;
|
26
|
+
export declare const findInCausalChain: (error: ErrorEvent, predicate: (error: ErrorEvent) => boolean) => ErrorEvent | undefined;
|
27
|
+
export declare const aggregate: (builder: ErrorEventBuilder, causes: Array<ErrorEvent>) => ErrorEvent | undefined;
|
28
|
+
export declare const UnhandledErrorCode: ErrorCode;
|
29
|
+
export declare const NotFoundErrorCode: ErrorCode;
|
30
|
+
export declare const RequestCorrelationIdAttribute: ErrorAttribute<string>;
|
31
|
+
export declare const HttpStatusCodeAttribute: ErrorAttribute<number>;
|
32
|
+
export declare const unhandled: (builder?: ErrorEventBuilder) => ErrorEvent;
|
33
|
+
export declare const notFound: (builder?: ErrorEventBuilder) => ErrorEvent;
|
34
|
+
//# sourceMappingURL=error-event.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"error-event.d.ts","sourceRoot":"","sources":["../src/error-event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAO9D,MAAM,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AACxD,MAAM,MAAM,cAAc,CAAC,IAAI,GAAG,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;AAEpF,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAC3C,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAC1B,CAAA;AAGD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,SAAS,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;IAC5C,MAAM,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAA;CAC3B,CAAA;AAGD,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;gBAEnB,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,EAAE,OAAO;CAKpD;AAED,eAAO,MAAM,YAAY,GAAI,WAAW,SAAS,KAAG,SAAS,IAAI,UAMhE,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,WAAW,SAAS,KAAG,SAAS,IAAI,mBAEzE,CAAA;AAED,eAAO,MAAM,EAAE,GAAI,SAAS,iBAAiB,KAAG,UAS/C,CAAA;AAED,eAAO,MAAM,IAAI,GAAI,WAAW,SAAS,KAAG,UAe3C,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,OAAO,UAAU,EAAE,MAAM,MAAM,KAAG,UAAU,GAAG,SAEtF,CAAA;AAOD,eAAO,MAAM,iBAAiB,GAAI,OAAO,UAAU,EAAE,WAAW,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,KAAG,UAAU,GAAG,SAM7G,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,SAAS,iBAAiB,EAAE,QAAQ,KAAK,CAAC,UAAU,CAAC,KAAG,UAAU,GAAG,SAM9F,CAAA;AAED,eAAO,MAAM,kBAAkB,EAAE,SAAmC,CAAA;AACpE,eAAO,MAAM,iBAAiB,EAAE,SAAmC,CAAA;AAEnE,eAAO,MAAM,6BAA6B,EAAE,cAAc,CAAC,MAAM,CAA0B,CAAA;AAC3F,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAAC,MAAM,CAAoB,CAAA;AAE/E,eAAO,MAAM,SAAS,GAAI,UAAU,iBAAiB,eAOlD,CAAA;AAEH,eAAO,MAAM,QAAQ,GAAI,UAAU,iBAAiB,eAOjD,CAAA"}
|
@@ -0,0 +1,91 @@
|
|
1
|
+
// src/error-event.ts
|
2
|
+
import { Arrays, Errors, Objects } from "@bessemer/cornerstone";
|
3
|
+
var ErrorEventException = class extends Error {
|
4
|
+
errorEvent;
|
5
|
+
constructor(errorEvent, cause) {
|
6
|
+
super(errorEvent.message ?? "", { cause });
|
7
|
+
this.name = this.constructor.name;
|
8
|
+
this.errorEvent = errorEvent;
|
9
|
+
}
|
10
|
+
};
|
11
|
+
var isErrorEvent = (throwable) => {
|
12
|
+
if (!Objects.isObject(throwable)) {
|
13
|
+
return false;
|
14
|
+
}
|
15
|
+
return "code" in throwable && "message" in throwable && "attributes" in throwable && "causes" in throwable;
|
16
|
+
};
|
17
|
+
var isErrorEventException = (throwable) => {
|
18
|
+
return throwable instanceof ErrorEventException;
|
19
|
+
};
|
20
|
+
var of = (builder) => {
|
21
|
+
const code = builder.code;
|
22
|
+
return {
|
23
|
+
code,
|
24
|
+
message: builder.message ?? code,
|
25
|
+
attributes: builder.attributes ?? {},
|
26
|
+
causes: builder.causes ?? []
|
27
|
+
};
|
28
|
+
};
|
29
|
+
var from = (throwable) => {
|
30
|
+
if (isErrorEvent(throwable)) {
|
31
|
+
return throwable;
|
32
|
+
}
|
33
|
+
if (!Errors.isError(throwable)) {
|
34
|
+
return unhandled();
|
35
|
+
}
|
36
|
+
const errorEventException = Errors.findInCausalChain(throwable, isErrorEventException);
|
37
|
+
if (Objects.isNil(errorEventException)) {
|
38
|
+
return unhandled();
|
39
|
+
}
|
40
|
+
return errorEventException.errorEvent;
|
41
|
+
};
|
42
|
+
var findByCodeInCausalChain = (error, code) => {
|
43
|
+
return findInCausalChain(error, (it) => it.code === code);
|
44
|
+
};
|
45
|
+
var findInCausalChain = (error, predicate) => {
|
46
|
+
if (predicate(error)) {
|
47
|
+
return error;
|
48
|
+
}
|
49
|
+
return Arrays.first(error.causes.map((it) => findInCausalChain(it, predicate)).filter(Objects.isPresent));
|
50
|
+
};
|
51
|
+
var aggregate = (builder, causes) => {
|
52
|
+
if (causes.length === 0) {
|
53
|
+
return void 0;
|
54
|
+
}
|
55
|
+
return of({ ...builder, causes });
|
56
|
+
};
|
57
|
+
var UnhandledErrorCode = "error-event.unhandled";
|
58
|
+
var NotFoundErrorCode = "error-event.not-found";
|
59
|
+
var RequestCorrelationIdAttribute = "requestCorrelationId";
|
60
|
+
var HttpStatusCodeAttribute = "httpStatusCode";
|
61
|
+
var unhandled = (builder) => of(
|
62
|
+
Objects.merge(builder, {
|
63
|
+
code: UnhandledErrorCode,
|
64
|
+
message: "An Unhandled Error has occurred.",
|
65
|
+
attributes: { [HttpStatusCodeAttribute]: 500 }
|
66
|
+
})
|
67
|
+
);
|
68
|
+
var notFound = (builder) => of(
|
69
|
+
Objects.merge(builder, {
|
70
|
+
code: NotFoundErrorCode,
|
71
|
+
message: "The requested Resource could not be found.",
|
72
|
+
attributes: { [HttpStatusCodeAttribute]: 404 }
|
73
|
+
})
|
74
|
+
);
|
75
|
+
export {
|
76
|
+
ErrorEventException,
|
77
|
+
HttpStatusCodeAttribute,
|
78
|
+
NotFoundErrorCode,
|
79
|
+
RequestCorrelationIdAttribute,
|
80
|
+
UnhandledErrorCode,
|
81
|
+
aggregate,
|
82
|
+
findByCodeInCausalChain,
|
83
|
+
findInCausalChain,
|
84
|
+
from,
|
85
|
+
isErrorEvent,
|
86
|
+
isErrorEventException,
|
87
|
+
notFound,
|
88
|
+
of,
|
89
|
+
unhandled
|
90
|
+
};
|
91
|
+
//# sourceMappingURL=error-event.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/error-event.ts"],"sourcesContent":["import { Arrays, Errors, Objects } from '@bessemer/cornerstone'\nimport { NominalType, Throwable } from '@bessemer/cornerstone/types'\nimport { RecordAttribute } from '@bessemer/cornerstone/object'\n\n/*\n Represents a structured error event. The code can be mapped to a unique type of error while the\n message and attributes can provide contextual information about the error. Finally,\n an ErrorEvent could have multiple causes which get aggregated into a single parent error.\n */\nexport type ErrorCode = NominalType<string, 'ErrorCode'>\nexport type ErrorAttribute<Type = unknown> = RecordAttribute<Type, 'ErrorAttribute'>\n\nexport type ErrorEvent = {\n code: ErrorCode\n message: string\n attributes: Record<ErrorAttribute, unknown>\n causes: Array<ErrorEvent>\n}\n\n// Builder object that allows for 'partial' representation of ErrorEvents\nexport type ErrorEventBuilder = {\n code: ErrorCode\n message?: string | null\n attributes?: Record<ErrorAttribute, unknown>\n causes?: Array<ErrorEvent>\n}\n\n// An exception type that contains an ErrorEvent\nexport class ErrorEventException extends Error {\n readonly errorEvent: ErrorEvent\n\n constructor(errorEvent: ErrorEvent, cause?: unknown) {\n super(errorEvent.message ?? '', { cause })\n this.name = this.constructor.name\n this.errorEvent = errorEvent\n }\n}\n\nexport const isErrorEvent = (throwable: Throwable): throwable is ErrorEvent => {\n if (!Objects.isObject(throwable)) {\n return false\n }\n\n return 'code' in throwable && 'message' in throwable && 'attributes' in throwable && 'causes' in throwable\n}\n\nexport const isErrorEventException = (throwable: Throwable): throwable is ErrorEventException => {\n return throwable instanceof ErrorEventException\n}\n\nexport const of = (builder: ErrorEventBuilder): ErrorEvent => {\n const code = builder.code\n\n return {\n code,\n message: builder.message ?? code,\n attributes: builder.attributes ?? {},\n causes: builder.causes ?? [],\n }\n}\n\nexport const from = (throwable: Throwable): ErrorEvent => {\n if (isErrorEvent(throwable)) {\n return throwable\n }\n\n if (!Errors.isError(throwable)) {\n return unhandled()\n }\n\n const errorEventException = Errors.findInCausalChain(throwable, isErrorEventException) as ErrorEventException | undefined\n if (Objects.isNil(errorEventException)) {\n return unhandled()\n }\n\n return errorEventException.errorEvent\n}\n\nexport const findByCodeInCausalChain = (error: ErrorEvent, code: string): ErrorEvent | undefined => {\n return findInCausalChain(error, (it) => it.code === code)\n}\n\n/*\n Traverses the causal chain of the ErrorEvent, searching for a predicate that matches (including matching on the parent error event)\n This is useful if you want to find whether or not a given error was caused by a specific failure. The search executes depth-first and\n will return te first matching instance that satisfies the predicate, or undefined otherwise\n */\nexport const findInCausalChain = (error: ErrorEvent, predicate: (error: ErrorEvent) => boolean): ErrorEvent | undefined => {\n if (predicate(error)) {\n return error\n }\n\n return Arrays.first(error.causes.map((it) => findInCausalChain(it, predicate)).filter(Objects.isPresent))\n}\n\nexport const aggregate = (builder: ErrorEventBuilder, causes: Array<ErrorEvent>): ErrorEvent | undefined => {\n if (causes.length === 0) {\n return undefined\n }\n\n return of({ ...builder, causes })\n}\n\nexport const UnhandledErrorCode: ErrorCode = 'error-event.unhandled'\nexport const NotFoundErrorCode: ErrorCode = 'error-event.not-found'\n\nexport const RequestCorrelationIdAttribute: ErrorAttribute<string> = 'requestCorrelationId'\nexport const HttpStatusCodeAttribute: ErrorAttribute<number> = 'httpStatusCode'\n\nexport const unhandled = (builder?: ErrorEventBuilder) =>\n of(\n Objects.merge(builder, {\n code: UnhandledErrorCode,\n message: 'An Unhandled Error has occurred.',\n attributes: { [HttpStatusCodeAttribute]: 500 },\n })\n )\n\nexport const notFound = (builder?: ErrorEventBuilder) =>\n of(\n Objects.merge(builder, {\n code: NotFoundErrorCode,\n message: 'The requested Resource could not be found.',\n attributes: { [HttpStatusCodeAttribute]: 404 },\n })\n )\n"],"mappings":";AAAA,SAAS,QAAQ,QAAQ,eAAe;AA4BjC,IAAM,sBAAN,cAAkC,MAAM;AAAA,EACpC;AAAA,EAET,YAAY,YAAwB,OAAiB;AACnD,UAAM,WAAW,WAAW,IAAI,EAAE,MAAM,CAAC;AACzC,SAAK,OAAO,KAAK,YAAY;AAC7B,SAAK,aAAa;AAAA,EACpB;AACF;AAEO,IAAM,eAAe,CAAC,cAAkD;AAC7E,MAAI,CAAC,QAAQ,SAAS,SAAS,GAAG;AAChC,WAAO;AAAA,EACT;AAEA,SAAO,UAAU,aAAa,aAAa,aAAa,gBAAgB,aAAa,YAAY;AACnG;AAEO,IAAM,wBAAwB,CAAC,cAA2D;AAC/F,SAAO,qBAAqB;AAC9B;AAEO,IAAM,KAAK,CAAC,YAA2C;AAC5D,QAAM,OAAO,QAAQ;AAErB,SAAO;AAAA,IACL;AAAA,IACA,SAAS,QAAQ,WAAW;AAAA,IAC5B,YAAY,QAAQ,cAAc,CAAC;AAAA,IACnC,QAAQ,QAAQ,UAAU,CAAC;AAAA,EAC7B;AACF;AAEO,IAAM,OAAO,CAAC,cAAqC;AACxD,MAAI,aAAa,SAAS,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,OAAO,QAAQ,SAAS,GAAG;AAC9B,WAAO,UAAU;AAAA,EACnB;AAEA,QAAM,sBAAsB,OAAO,kBAAkB,WAAW,qBAAqB;AACrF,MAAI,QAAQ,MAAM,mBAAmB,GAAG;AACtC,WAAO,UAAU;AAAA,EACnB;AAEA,SAAO,oBAAoB;AAC7B;AAEO,IAAM,0BAA0B,CAAC,OAAmB,SAAyC;AAClG,SAAO,kBAAkB,OAAO,CAAC,OAAO,GAAG,SAAS,IAAI;AAC1D;AAOO,IAAM,oBAAoB,CAAC,OAAmB,cAAsE;AACzH,MAAI,UAAU,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,MAAM,MAAM,OAAO,IAAI,CAAC,OAAO,kBAAkB,IAAI,SAAS,CAAC,EAAE,OAAO,QAAQ,SAAS,CAAC;AAC1G;AAEO,IAAM,YAAY,CAAC,SAA4B,WAAsD;AAC1G,MAAI,OAAO,WAAW,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,SAAO,GAAG,EAAE,GAAG,SAAS,OAAO,CAAC;AAClC;AAEO,IAAM,qBAAgC;AACtC,IAAM,oBAA+B;AAErC,IAAM,gCAAwD;AAC9D,IAAM,0BAAkD;AAExD,IAAM,YAAY,CAAC,YACxB;AAAA,EACE,QAAQ,MAAM,SAAS;AAAA,IACrB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,YAAY,EAAE,CAAC,uBAAuB,GAAG,IAAI;AAAA,EAC/C,CAAC;AACH;AAEK,IAAM,WAAW,CAAC,YACvB;AAAA,EACE,QAAQ,MAAM,SAAS;AAAA,IACrB,MAAM;AAAA,IACN,SAAS;AAAA,IACT,YAAY,EAAE,CAAC,uBAAuB,GAAG,IAAI;AAAA,EAC/C,CAAC;AACH;","names":[]}
|
package/dist/error.d.ts
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,gCAAW,CAAA;AAE/B,eAAO,MAAM,iBAAiB,GAAI,OAAO,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,KAAG,KAAK,GAAG,SAU9F,CAAA"}
|
package/dist/error.js
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
// src/error.ts
|
2
|
+
import { Objects } from "@bessemer/cornerstone";
|
3
|
+
import { isError as _isError } from "lodash-es";
|
4
|
+
var isError = _isError;
|
5
|
+
var findInCausalChain = (error, predicate) => {
|
6
|
+
if (predicate(error)) {
|
7
|
+
return error;
|
8
|
+
}
|
9
|
+
if (Objects.isPresent(error.cause) && error.cause instanceof Error) {
|
10
|
+
return findInCausalChain(error.cause, predicate);
|
11
|
+
}
|
12
|
+
return void 0;
|
13
|
+
};
|
14
|
+
export {
|
15
|
+
findInCausalChain,
|
16
|
+
isError
|
17
|
+
};
|
18
|
+
//# sourceMappingURL=error.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/error.ts"],"sourcesContent":["import { Objects } from '@bessemer/cornerstone'\nimport { isError as _isError } from 'lodash-es'\n\nexport const isError = _isError\n\nexport const findInCausalChain = (error: Error, predicate: (error: Error) => boolean): Error | undefined => {\n if (predicate(error)) {\n return error\n }\n\n if (Objects.isPresent(error.cause) && error.cause instanceof Error) {\n return findInCausalChain(error.cause, predicate)\n }\n\n return undefined\n}\n"],"mappings":";AAAA,SAAS,eAAe;AACxB,SAAS,WAAW,gBAAgB;AAE7B,IAAM,UAAU;AAEhB,IAAM,oBAAoB,CAAC,OAAc,cAA4D;AAC1G,MAAI,UAAU,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,MAAI,QAAQ,UAAU,MAAM,KAAK,KAAK,MAAM,iBAAiB,OAAO;AAClE,WAAO,kBAAkB,MAAM,OAAO,SAAS;AAAA,EACjD;AAEA,SAAO;AACT;","names":[]}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { Expression } from '@bessemer/cornerstone/expression';
|
2
|
+
export declare const ConcatenateExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<unknown[], [operands: Expression<unknown[]>[]], Expression<unknown[]> & {
|
3
|
+
operands: Expression<unknown[]>[];
|
4
|
+
}>;
|
5
|
+
export declare const concatenate: (operands: Expression<unknown[]>[]) => Expression<unknown[]> & {
|
6
|
+
operands: Expression<unknown[]>[];
|
7
|
+
};
|
8
|
+
export declare const FirstExpression: import("@bessemer/cornerstone/expression").ExpressionDefinition<unknown[] | undefined, [operands: Expression<unknown[]>[]], Expression<unknown[] | undefined> & {
|
9
|
+
operands: Expression<unknown[]>[];
|
10
|
+
}>;
|
11
|
+
export declare const first: (operands: Expression<unknown[]>[]) => Expression<unknown[] | undefined> & {
|
12
|
+
operands: Expression<unknown[]>[];
|
13
|
+
};
|
14
|
+
//# sourceMappingURL=array-expression.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"array-expression.d.ts","sourceRoot":"","sources":["../../src/expression/array-expression.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAG7D,eAAO,MAAM,qBAAqB;;EAShC,CAAA;AAEF,eAAO,MAAM,WAAW;;CAAgC,CAAA;AAExD,eAAO,MAAM,eAAe;;EAS1B,CAAA;AAEF,eAAO,MAAM,KAAK;;CAA0B,CAAA"}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
// src/expression/array-expression.ts
|
2
|
+
import { defineExpression } from "@bessemer/cornerstone/expression/internal";
|
3
|
+
import { Arrays } from "@bessemer/cornerstone";
|
4
|
+
var ConcatenateExpression = defineExpression({
|
5
|
+
expressionKey: "Array.Concatenate",
|
6
|
+
builder: (operands) => {
|
7
|
+
return { operands };
|
8
|
+
},
|
9
|
+
resolver: ({ operands }, evaluate) => {
|
10
|
+
const values = evaluate(operands).map((it) => evaluate(it));
|
11
|
+
return Arrays.concatenate(values[0], ...Arrays.rest(values));
|
12
|
+
}
|
13
|
+
});
|
14
|
+
var concatenate = ConcatenateExpression.builder;
|
15
|
+
var FirstExpression = defineExpression({
|
16
|
+
expressionKey: "Array.First",
|
17
|
+
builder: (operands) => {
|
18
|
+
return { operands };
|
19
|
+
},
|
20
|
+
resolver: ({ operands }, evaluate) => {
|
21
|
+
const values = evaluate(operands).map((it) => evaluate(it));
|
22
|
+
return Arrays.first(values);
|
23
|
+
}
|
24
|
+
});
|
25
|
+
var first = FirstExpression.builder;
|
26
|
+
export {
|
27
|
+
ConcatenateExpression,
|
28
|
+
FirstExpression,
|
29
|
+
concatenate,
|
30
|
+
first
|
31
|
+
};
|
32
|
+
//# sourceMappingURL=array-expression.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/expression/array-expression.ts"],"sourcesContent":["import { defineExpression } from '@bessemer/cornerstone/expression/internal'\nimport { Expression } from '@bessemer/cornerstone/expression'\nimport { Arrays } from '@bessemer/cornerstone'\n\nexport const ConcatenateExpression = defineExpression({\n expressionKey: 'Array.Concatenate',\n builder: (operands: Array<Expression<Array<Expression<unknown>>>>) => {\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = evaluate(operands).map((it) => evaluate(it))\n return Arrays.concatenate(values[0], ...Arrays.rest(values))\n },\n})\n\nexport const concatenate = ConcatenateExpression.builder\n\nexport const FirstExpression = defineExpression({\n expressionKey: 'Array.First',\n builder: (operands: Array<Expression<Array<Expression<unknown>>>>) => {\n return { operands }\n },\n resolver: ({ operands }, evaluate) => {\n const values = evaluate(operands).map((it) => evaluate(it))\n return Arrays.first(values)\n },\n})\n\nexport const first = FirstExpression.builder\n"],"mappings":";AAAA,SAAS,wBAAwB;AAEjC,SAAS,cAAc;AAEhB,IAAM,wBAAwB,iBAAiB;AAAA,EACpD,eAAe;AAAA,EACf,SAAS,CAAC,aAA4D;AACpE,WAAO,EAAE,SAAS;AAAA,EACpB;AAAA,EACA,UAAU,CAAC,EAAE,SAAS,GAAG,aAAa;AACpC,UAAM,SAAS,SAAS,QAAQ,EAAE,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC;AAC1D,WAAO,OAAO,YAAY,OAAO,CAAC,GAAG,GAAG,OAAO,KAAK,MAAM,CAAC;AAAA,EAC7D;AACF,CAAC;AAEM,IAAM,cAAc,sBAAsB;AAE1C,IAAM,kBAAkB,iBAAiB;AAAA,EAC9C,eAAe;AAAA,EACf,SAAS,CAAC,aAA4D;AACpE,WAAO,EAAE,SAAS;AAAA,EACpB;AAAA,EACA,UAAU,CAAC,EAAE,SAAS,GAAG,aAAa;AACpC,UAAM,SAAS,SAAS,QAAQ,EAAE,IAAI,CAAC,OAAO,SAAS,EAAE,CAAC;AAC1D,WAAO,OAAO,MAAM,MAAM;AAAA,EAC5B;AACF,CAAC;AAEM,IAAM,QAAQ,gBAAgB;","names":[]}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { Expression, ExpressionContext, ExpressionDefinition, ExpressionReference } from '@bessemer/cornerstone/expression';
|
2
|
+
export declare class ExpressionEvaluator {
|
3
|
+
private readonly expressionDefinitions;
|
4
|
+
constructor(expressionDefinitions: Array<ExpressionDefinition<unknown, Array<any>, Expression<any>>>);
|
5
|
+
evaluate<T>(expression: Expression<T>, context: ExpressionContext): T;
|
6
|
+
dereference<ReturnType, ArgumentType extends Array<unknown>>(reference: ExpressionReference<ReturnType, ArgumentType>, ...args: ArgumentType): Expression<ReturnType>;
|
7
|
+
}
|
8
|
+
//# sourceMappingURL=expression-evaluator.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"expression-evaluator.d.ts","sourceRoot":"","sources":["../../src/expression/expression-evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,mBAAmB,EAAe,MAAM,kCAAkC,CAAA;AAGxI,qBAAa,mBAAmB;IAClB,OAAO,CAAC,QAAQ,CAAC,qBAAqB;gBAArB,qBAAqB,EAAE,KAAK,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IAErH,QAAQ,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,iBAAiB,GAAG,CAAC;IAUrE,WAAW,CAAC,UAAU,EAAE,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC,EACzD,SAAS,EAAE,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,EACxD,GAAG,IAAI,EAAE,YAAY,GACpB,UAAU,CAAC,UAAU,CAAC;CAK1B"}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
// src/expression/expression-evaluator.ts
|
2
|
+
import { Objects, Preconditions } from "@bessemer/cornerstone";
|
3
|
+
var ExpressionEvaluator = class {
|
4
|
+
constructor(expressionDefinitions) {
|
5
|
+
this.expressionDefinitions = expressionDefinitions;
|
6
|
+
}
|
7
|
+
evaluate(expression, context) {
|
8
|
+
if (isValue(expression)) {
|
9
|
+
return expression;
|
10
|
+
}
|
11
|
+
const matchingExpressionDefinition = this.expressionDefinitions.find((it) => it.expressionKey === expression.expressionKey);
|
12
|
+
Preconditions.isPresent(matchingExpressionDefinition);
|
13
|
+
return matchingExpressionDefinition.resolver(expression, (expression2) => this.evaluate(expression2, context), context);
|
14
|
+
}
|
15
|
+
dereference(reference, ...args) {
|
16
|
+
const matchingExpressionDefinition = this.expressionDefinitions.find((it) => it.expressionKey === reference.expressionKey);
|
17
|
+
Preconditions.isPresent(matchingExpressionDefinition, () => `Unable to find Expression Definition for type: ${reference.expressionKey}`);
|
18
|
+
return matchingExpressionDefinition.builder(...args);
|
19
|
+
}
|
20
|
+
};
|
21
|
+
var isValue = (expression) => {
|
22
|
+
if (!Objects.isObject(expression)) {
|
23
|
+
return true;
|
24
|
+
}
|
25
|
+
const result = expression.expressionKey === void 0;
|
26
|
+
return result;
|
27
|
+
};
|
28
|
+
export {
|
29
|
+
ExpressionEvaluator
|
30
|
+
};
|
31
|
+
//# sourceMappingURL=expression-evaluator.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/expression/expression-evaluator.ts"],"sourcesContent":["import { Expression, ExpressionContext, ExpressionDefinition, ExpressionReference, IExpression } from '@bessemer/cornerstone/expression'\nimport { Objects, Preconditions } from '@bessemer/cornerstone'\n\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 (isValue(expression)) {\n return expression\n }\n\n const matchingExpressionDefinition = this.expressionDefinitions.find((it) => it.expressionKey === expression.expressionKey)\n Preconditions.isPresent(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 Preconditions.isPresent(matchingExpressionDefinition, () => `Unable to find Expression Definition for type: ${reference.expressionKey}`)\n return matchingExpressionDefinition.builder(...args)\n }\n}\n\nconst isValue = <T>(expression: Expression<T>): expression is T => {\n if (!Objects.isObject(expression)) {\n return true\n }\n\n const result = (expression as IExpression<T>).expressionKey === undefined\n return result\n}\n"],"mappings":";AACA,SAAS,SAAS,qBAAqB;AAEhC,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,uBAA0F;AAA1F;AAAA,EAA2F;AAAA,EAExH,SAAY,YAA2B,SAA+B;AACpE,QAAI,QAAQ,UAAU,GAAG;AACvB,aAAO;AAAA,IACT;AAEA,UAAM,+BAA+B,KAAK,sBAAsB,KAAK,CAAC,OAAO,GAAG,kBAAkB,WAAW,aAAa;AAC1H,kBAAc,UAAU,4BAA4B;AACpD,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,kBAAc,UAAU,8BAA8B,MAAM,kDAAkD,UAAU,aAAa,EAAE;AACvI,WAAO,6BAA6B,QAAQ,GAAG,IAAI;AAAA,EACrD;AACF;AAEA,IAAM,UAAU,CAAI,eAA+C;AACjE,MAAI,CAAC,QAAQ,SAAS,UAAU,GAAG;AACjC,WAAO;AAAA,EACT;AAEA,QAAM,SAAU,WAA8B,kBAAkB;AAChE,SAAO;AACT;","names":["expression"]}
|
@@ -0,0 +1,54 @@
|
|
1
|
+
import { EvaluateExpression, Expression, ExpressionContext, ExpressionDefinition, ExpressionReference, ExpressionVariable, ParameterizedVariable } from '@bessemer/cornerstone/expression';
|
2
|
+
import { Signatures } from '@bessemer/cornerstone';
|
3
|
+
import { Signable } from '@bessemer/cornerstone/signature';
|
4
|
+
import { UnknownRecord } from 'type-fest';
|
5
|
+
export declare const evaluate: <T>(expression: Expression<T>, context: ExpressionContext) => T;
|
6
|
+
export declare const evaluateDefault: <T>(expression: Expression<T>) => T;
|
7
|
+
export declare const evaluator: (context: ExpressionContext) => EvaluateExpression;
|
8
|
+
export declare const defaultEvaluator: () => EvaluateExpression;
|
9
|
+
export declare const defaultContext: () => ExpressionContext;
|
10
|
+
export declare const dereference: <ReturnType, ArgumentType extends Array<unknown>>(reference: ExpressionReference<ReturnType, ArgumentType>, ...args: ArgumentType) => Expression<ReturnType>;
|
11
|
+
export declare const parameterizedVariable: <ValueType, ParameterType extends Array<Signable>>(name: string) => ParameterizedVariable<ValueType, ParameterType>;
|
12
|
+
export declare const buildVariable: <T>(variable: ExpressionVariable<T>, value: T) => UnknownRecord;
|
13
|
+
export declare const reference: <ReturnType, ArgumentType extends Array<unknown>, ExpressionType extends Expression<ReturnType>>(expressionDefinition: ExpressionDefinition<ReturnType, ArgumentType, ExpressionType>) => ExpressionReference<ReturnType, ArgumentType>;
|
14
|
+
export declare const ValueExpression: ExpressionDefinition<unknown, [value: unknown], {
|
15
|
+
value: unknown;
|
16
|
+
}>;
|
17
|
+
export declare const value: <T>(value: T) => Expression<T>;
|
18
|
+
export declare const VariableExpression: ExpressionDefinition<{}, [name: string], Expression<{}> & {
|
19
|
+
name: string;
|
20
|
+
}>;
|
21
|
+
export declare const variable: <T>(name: string) => ExpressionVariable<T>;
|
22
|
+
export declare const NotExpression: ExpressionDefinition<boolean, [value: Expression<boolean>], Expression<boolean> & {
|
23
|
+
value: Expression<boolean>;
|
24
|
+
}>;
|
25
|
+
export declare const not: (value: Expression<boolean>) => Expression<boolean> & {
|
26
|
+
value: Expression<boolean>;
|
27
|
+
};
|
28
|
+
export declare const AndExpression: ExpressionDefinition<boolean, [operands: Expression<boolean>[]], Expression<boolean> & {
|
29
|
+
operands: Expression<boolean>[];
|
30
|
+
}>;
|
31
|
+
export declare const and: (operands: Expression<boolean>[]) => Expression<boolean> & {
|
32
|
+
operands: Expression<boolean>[];
|
33
|
+
};
|
34
|
+
export declare const OrExpression: ExpressionDefinition<boolean, [operands: Expression<boolean>[]], Expression<boolean> & {
|
35
|
+
operands: Expression<boolean>[];
|
36
|
+
}>;
|
37
|
+
export declare const or: (operands: Expression<boolean>[]) => Expression<boolean> & {
|
38
|
+
operands: Expression<boolean>[];
|
39
|
+
};
|
40
|
+
export declare const EqualsExpression: ExpressionDefinition<boolean, [operands: Expression<Signatures.Signable>[]], Expression<boolean> & {
|
41
|
+
operands: Expression<Signatures.Signable>[];
|
42
|
+
}>;
|
43
|
+
export declare const equals: (operands: Expression<Signatures.Signable>[]) => Expression<boolean> & {
|
44
|
+
operands: Expression<Signatures.Signable>[];
|
45
|
+
};
|
46
|
+
export declare const ContainsExpression: ExpressionDefinition<boolean, [collection: Expression<Signatures.Signable[]>, operands: Expression<Signatures.Signable>[]], Expression<boolean> & {
|
47
|
+
collection: Expression<Signatures.Signable[]>;
|
48
|
+
operands: Expression<Signatures.Signable>[];
|
49
|
+
}>;
|
50
|
+
export declare const contains: (collection: Expression<Signatures.Signable[]>, operands: Expression<Signatures.Signable>[]) => Expression<boolean> & {
|
51
|
+
collection: Expression<Signatures.Signable[]>;
|
52
|
+
operands: Expression<Signatures.Signable>[];
|
53
|
+
};
|
54
|
+
//# sourceMappingURL=expression.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"expression.d.ts","sourceRoot":"","sources":["../../src/expression/expression.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,kBAAkB,EAClB,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAElB,qBAAqB,EAEtB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAkC,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAE1D,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,iBAAiB,KAAG,CAEnF,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,YAAY,UAAU,CAAC,CAAC,CAAC,KAAG,CAE9D,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,SAAS,iBAAiB,KAAG,kBAEtD,CAAA;AAED,eAAO,MAAM,gBAAgB,QAAO,kBAEnC,CAAA;AAED,eAAO,MAAM,cAAc,QAAO,iBAEjC,CAAA;AAED,eAAO,MAAM,WAAW,GAAI,UAAU,EAAE,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC,EACzE,WAAW,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAAC,EACxD,GAAG,MAAM,YAAY,KACpB,UAAU,CAAC,UAAU,CAEvB,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,SAAS,EAAE,aAAa,SAAS,KAAK,CAAC,QAAQ,CAAC,EACpF,MAAM,MAAM,KACX,qBAAqB,CAAC,SAAS,EAAE,aAAa,CAOhD,CAAA;AAED,eAAO,MAAM,aAAa,GAAI,CAAC,EAAE,UAAU,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,KAAG,aAE5E,CAAA;AAED,eAAO,MAAM,SAAS,GAAI,UAAU,EAAE,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC,EAAE,cAAc,SAAS,UAAU,CAAC,UAAU,CAAC,EACtH,sBAAsB,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,cAAc,CAAC,KACnF,mBAAmB,CAAC,UAAU,EAAE,YAAY,CAE9C,CAAA;AAED,eAAO,MAAM,eAAe;;EAQ1B,CAAA;AAEF,eAAO,MAAM,KAAK,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,UAAU,CAAC,CAAC,CAAoD,CAAA;AAEpG,eAAO,MAAM,kBAAkB;;EAU7B,CAAA;AAEF,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,MAAM,MAAM,KAAG,kBAAkB,CAAC,CAAC,CAA8D,CAAA;AAE7H,eAAO,MAAM,aAAa;;EAQxB,CAAA;AAEF,eAAO,MAAM,GAAG;;CAAwB,CAAA;AAExC,eAAO,MAAM,aAAa;;EAUxB,CAAA;AAEF,eAAO,MAAM,GAAG;;CAAwB,CAAA;AAExC,eAAO,MAAM,YAAY;;EAUvB,CAAA;AAEF,eAAO,MAAM,EAAE;;CAAuB,CAAA;AAEtC,eAAO,MAAM,gBAAgB;;EAe3B,CAAA;AAEF,eAAO,MAAM,MAAM;;CAA2B,CAAA;AAE9C,eAAO,MAAM,kBAAkB;;;EAU7B,CAAA;AAEF,eAAO,MAAM,QAAQ;;;CAA6B,CAAA"}
|
@@ -0,0 +1,173 @@
|
|
1
|
+
// src/expression/expression.ts
|
2
|
+
import { ExpressionEvaluator } from "@bessemer/cornerstone/expression/expression-evaluator";
|
3
|
+
import {
|
4
|
+
ArrayExpressions,
|
5
|
+
NumericExpressions,
|
6
|
+
StringExpressions
|
7
|
+
} from "@bessemer/cornerstone/expression";
|
8
|
+
import { Arrays, Objects, Preconditions, Signatures } from "@bessemer/cornerstone";
|
9
|
+
import { defineExpression } from "@bessemer/cornerstone/expression/internal";
|
10
|
+
var evaluate = (expression, context) => {
|
11
|
+
return new ExpressionEvaluator(DEFAULT_EXPRESSION_DEFINITIONS).evaluate(expression, context);
|
12
|
+
};
|
13
|
+
var evaluateDefault = (expression) => {
|
14
|
+
return evaluate(expression, defaultContext());
|
15
|
+
};
|
16
|
+
var evaluator = (context) => {
|
17
|
+
return (it) => evaluate(it, context);
|
18
|
+
};
|
19
|
+
var defaultEvaluator = () => {
|
20
|
+
return evaluator(defaultContext());
|
21
|
+
};
|
22
|
+
var defaultContext = () => {
|
23
|
+
return { variables: {} };
|
24
|
+
};
|
25
|
+
var dereference = (reference2, ...args) => {
|
26
|
+
return new ExpressionEvaluator(DEFAULT_EXPRESSION_DEFINITIONS).dereference(reference2, ...args);
|
27
|
+
};
|
28
|
+
var parameterizedVariable = (name) => {
|
29
|
+
return {
|
30
|
+
apply(...parameters) {
|
31
|
+
const parameterString = parameters.map(Signatures.sign).join(".");
|
32
|
+
return variable(`${name}.${parameterString}`);
|
33
|
+
}
|
34
|
+
};
|
35
|
+
};
|
36
|
+
var buildVariable = (variable2, value2) => {
|
37
|
+
return { [variable2.name]: value2 };
|
38
|
+
};
|
39
|
+
var reference = (expressionDefinition) => {
|
40
|
+
return { expressionKey: expressionDefinition.expressionKey };
|
41
|
+
};
|
42
|
+
var ValueExpression = defineExpression({
|
43
|
+
expressionKey: "Value",
|
44
|
+
builder: (value2) => {
|
45
|
+
return { value: value2 };
|
46
|
+
},
|
47
|
+
resolver: ({ value: value2 }, evaluate2, context) => {
|
48
|
+
return value2;
|
49
|
+
}
|
50
|
+
});
|
51
|
+
var value = (value2) => ValueExpression.builder(value2);
|
52
|
+
var VariableExpression = defineExpression({
|
53
|
+
expressionKey: "Variable",
|
54
|
+
builder: (name) => {
|
55
|
+
return { name };
|
56
|
+
},
|
57
|
+
resolver: ({ name }, evaluate2, context) => {
|
58
|
+
const value2 = context.variables[name];
|
59
|
+
Preconditions.isPresent(value2);
|
60
|
+
return value2;
|
61
|
+
}
|
62
|
+
});
|
63
|
+
var variable = (name) => VariableExpression.builder(name);
|
64
|
+
var NotExpression = defineExpression({
|
65
|
+
expressionKey: "Not",
|
66
|
+
builder: (value2) => {
|
67
|
+
return { value: value2 };
|
68
|
+
},
|
69
|
+
resolver: (expression, evaluate2) => {
|
70
|
+
return !evaluate2(expression.value);
|
71
|
+
}
|
72
|
+
});
|
73
|
+
var not = NotExpression.builder;
|
74
|
+
var AndExpression = defineExpression({
|
75
|
+
expressionKey: "And",
|
76
|
+
builder: (operands) => {
|
77
|
+
return { operands };
|
78
|
+
},
|
79
|
+
resolver: (expression, evaluate2) => {
|
80
|
+
const values = expression.operands.map((it) => evaluate2(it));
|
81
|
+
const falseValue = values.find((it) => !it);
|
82
|
+
return Objects.isNil(falseValue);
|
83
|
+
}
|
84
|
+
});
|
85
|
+
var and = AndExpression.builder;
|
86
|
+
var OrExpression = defineExpression({
|
87
|
+
expressionKey: "Or",
|
88
|
+
builder: (operands) => {
|
89
|
+
return { operands };
|
90
|
+
},
|
91
|
+
resolver: (expression, evaluate2) => {
|
92
|
+
const values = expression.operands.map((it) => evaluate2(it));
|
93
|
+
const trueValue = values.find((it) => it);
|
94
|
+
return Objects.isPresent(trueValue);
|
95
|
+
}
|
96
|
+
});
|
97
|
+
var or = OrExpression.builder;
|
98
|
+
var EqualsExpression = defineExpression({
|
99
|
+
expressionKey: "Equals",
|
100
|
+
builder: (operands) => {
|
101
|
+
return { operands };
|
102
|
+
},
|
103
|
+
resolver: (expression, evaluate2) => {
|
104
|
+
const values = expression.operands.map((it) => evaluate2(it)).map(Signatures.sign);
|
105
|
+
if (values.length === 0) {
|
106
|
+
return true;
|
107
|
+
}
|
108
|
+
const first = values[0];
|
109
|
+
return values.every((val) => val === first);
|
110
|
+
}
|
111
|
+
});
|
112
|
+
var equals = EqualsExpression.builder;
|
113
|
+
var ContainsExpression = defineExpression({
|
114
|
+
expressionKey: "Contains",
|
115
|
+
builder: (collection, operands) => {
|
116
|
+
return { collection, operands };
|
117
|
+
},
|
118
|
+
resolver: (expression, evaluate2) => {
|
119
|
+
const collection = evaluate2(expression.collection);
|
120
|
+
const values = expression.operands.map((it) => evaluate2(it));
|
121
|
+
return Arrays.containsAll(collection, values);
|
122
|
+
}
|
123
|
+
});
|
124
|
+
var contains = ContainsExpression.builder;
|
125
|
+
var DEFAULT_EXPRESSION_DEFINITIONS = [
|
126
|
+
ValueExpression,
|
127
|
+
VariableExpression,
|
128
|
+
AndExpression,
|
129
|
+
OrExpression,
|
130
|
+
ContainsExpression,
|
131
|
+
EqualsExpression,
|
132
|
+
NumericExpressions.SumExpression,
|
133
|
+
NumericExpressions.MultiplyExpression,
|
134
|
+
NumericExpressions.GreaterThanExpression,
|
135
|
+
NumericExpressions.LessThanExpression,
|
136
|
+
NumericExpressions.FloorExpression,
|
137
|
+
NumericExpressions.CeilingExpression,
|
138
|
+
NumericExpressions.BoundsExpression,
|
139
|
+
NumericExpressions.RoundExpression,
|
140
|
+
NumericExpressions.MaxExpression,
|
141
|
+
NumericExpressions.MinExpression,
|
142
|
+
StringExpressions.ConcatenateExpression,
|
143
|
+
StringExpressions.SubstringExpression,
|
144
|
+
StringExpressions.UppercaseExpression,
|
145
|
+
ArrayExpressions.ConcatenateExpression,
|
146
|
+
ArrayExpressions.FirstExpression
|
147
|
+
];
|
148
|
+
export {
|
149
|
+
AndExpression,
|
150
|
+
ContainsExpression,
|
151
|
+
EqualsExpression,
|
152
|
+
NotExpression,
|
153
|
+
OrExpression,
|
154
|
+
ValueExpression,
|
155
|
+
VariableExpression,
|
156
|
+
and,
|
157
|
+
buildVariable,
|
158
|
+
contains,
|
159
|
+
defaultContext,
|
160
|
+
defaultEvaluator,
|
161
|
+
dereference,
|
162
|
+
equals,
|
163
|
+
evaluate,
|
164
|
+
evaluateDefault,
|
165
|
+
evaluator,
|
166
|
+
not,
|
167
|
+
or,
|
168
|
+
parameterizedVariable,
|
169
|
+
reference,
|
170
|
+
value,
|
171
|
+
variable
|
172
|
+
};
|
173
|
+
//# sourceMappingURL=expression.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/expression/expression.ts"],"sourcesContent":["import { ExpressionEvaluator } from '@bessemer/cornerstone/expression/expression-evaluator'\nimport {\n ArrayExpressions,\n EvaluateExpression,\n Expression,\n ExpressionContext,\n ExpressionDefinition,\n ExpressionReference,\n ExpressionVariable,\n NumericExpressions,\n ParameterizedVariable,\n StringExpressions,\n} from '@bessemer/cornerstone/expression'\nimport { Arrays, Objects, Preconditions, Signatures } from '@bessemer/cornerstone'\nimport { Signable } from '@bessemer/cornerstone/signature'\nimport { defineExpression } from '@bessemer/cornerstone/expression/internal'\nimport { UnknownRecord } from 'type-fest'\n\nexport const evaluate = <T>(expression: Expression<T>, context: ExpressionContext): T => {\n return new ExpressionEvaluator(DEFAULT_EXPRESSION_DEFINITIONS).evaluate(expression, context)\n}\n\nexport const evaluateDefault = <T>(expression: Expression<T>): T => {\n return evaluate(expression, defaultContext())\n}\n\nexport const evaluator = (context: ExpressionContext): EvaluateExpression => {\n return (it) => evaluate(it, context)\n}\n\nexport const defaultEvaluator = (): EvaluateExpression => {\n return evaluator(defaultContext())\n}\n\nexport const defaultContext = (): ExpressionContext => {\n return { variables: {} }\n}\n\nexport const dereference = <ReturnType, ArgumentType extends Array<unknown>>(\n reference: ExpressionReference<ReturnType, ArgumentType>,\n ...args: ArgumentType\n): Expression<ReturnType> => {\n return new ExpressionEvaluator(DEFAULT_EXPRESSION_DEFINITIONS).dereference(reference, ...args)\n}\n\nexport const parameterizedVariable = <ValueType, ParameterType extends Array<Signable>>(\n name: string\n): ParameterizedVariable<ValueType, ParameterType> => {\n return {\n apply(...parameters: ParameterType): ExpressionVariable<ValueType> {\n const parameterString = parameters.map(Signatures.sign).join('.')\n return variable(`${name}.${parameterString}`)\n },\n }\n}\n\nexport const buildVariable = <T>(variable: ExpressionVariable<T>, value: T): UnknownRecord => {\n return { [variable.name]: value }\n}\n\nexport const reference = <ReturnType, ArgumentType extends Array<unknown>, ExpressionType extends Expression<ReturnType>>(\n expressionDefinition: ExpressionDefinition<ReturnType, ArgumentType, ExpressionType>\n): ExpressionReference<ReturnType, ArgumentType> => {\n return { expressionKey: expressionDefinition.expressionKey }\n}\n\nexport const ValueExpression = 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 value = <T>(value: T): Expression<T> => ValueExpression.builder(value) as Expression<T>\n\nexport const VariableExpression = defineExpression({\n expressionKey: 'Variable',\n builder: (name: string) => {\n return { name }\n },\n resolver: ({ name }, evaluate, context) => {\n const value = context.variables[name]\n Preconditions.isPresent(value)\n return value\n },\n})\n\nexport const variable = <T>(name: string): ExpressionVariable<T> => VariableExpression.builder(name) as ExpressionVariable<T>\n\nexport const NotExpression = 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 not = NotExpression.builder\n\nexport const AndExpression = 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 and = AndExpression.builder\n\nexport const OrExpression = 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 or = OrExpression.builder\n\nexport const EqualsExpression = 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 equals = EqualsExpression.builder\n\nexport const ContainsExpression = 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 contains = ContainsExpression.builder\n\nconst DEFAULT_EXPRESSION_DEFINITIONS: Array<ExpressionDefinition<unknown, Array<any>, Expression<any>>> = [\n ValueExpression,\n VariableExpression,\n AndExpression,\n OrExpression,\n ContainsExpression,\n EqualsExpression,\n NumericExpressions.SumExpression,\n NumericExpressions.MultiplyExpression,\n NumericExpressions.GreaterThanExpression,\n NumericExpressions.LessThanExpression,\n NumericExpressions.FloorExpression,\n NumericExpressions.CeilingExpression,\n NumericExpressions.BoundsExpression,\n NumericExpressions.RoundExpression,\n NumericExpressions.MaxExpression,\n NumericExpressions.MinExpression,\n StringExpressions.ConcatenateExpression,\n StringExpressions.SubstringExpression,\n StringExpressions.UppercaseExpression,\n ArrayExpressions.ConcatenateExpression,\n ArrayExpressions.FirstExpression,\n]\n"],"mappings":"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","names":["reference","variable","value","evaluate"]}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { EvaluateExpression, Expression, ExpressionContext, ExpressionDefinition, ExpressionKey, IExpression } from '@bessemer/cornerstone/expression';
|
2
|
+
import { UnknownRecord } from 'type-fest';
|
3
|
+
export declare const defineExpression: <ReturnType, ArgumentType extends Array<unknown>, PayloadType extends UnknownRecord>(options: {
|
4
|
+
expressionKey: ExpressionKey<ReturnType, ArgumentType>;
|
5
|
+
builder: (...parameters: ArgumentType) => PayloadType;
|
6
|
+
resolver: (expression: PayloadType, evaluate: EvaluateExpression, context: ExpressionContext) => ReturnType;
|
7
|
+
}) => ExpressionDefinition<ReturnType, ArgumentType, Expression<ReturnType> & PayloadType>;
|
8
|
+
export declare const isType: <ReturnValue, ArgumentType extends Array<any>, ExpressionType extends Expression<ReturnValue>>(expression: Expression<ReturnValue>, expressionDefinition: ExpressionDefinition<ReturnValue, ArgumentType, ExpressionType>) => expression is ReturnType<(typeof expressionDefinition)["builder"]>;
|
9
|
+
export declare const isExpression: <T>(expression: Expression<any>) => expression is IExpression<T>;
|
10
|
+
//# sourceMappingURL=internal.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/expression/internal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAA;AAEtJ,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAEzC,eAAO,MAAM,gBAAgB,GAAI,UAAU,EAAE,YAAY,SAAS,KAAK,CAAC,OAAO,CAAC,EAAE,WAAW,SAAS,aAAa,EAAE,SAAS;IAC5H,aAAa,EAAE,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;IACtD,OAAO,EAAE,CAAC,GAAG,UAAU,EAAE,YAAY,KAAK,WAAW,CAAA;IACrD,QAAQ,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,iBAAiB,KAAK,UAAU,CAAA;CAC5G,KAAG,oBAAoB,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,CAAC,UAAU,CAAC,GAAG,WAAW,CAUtF,CAAA;AAED,eAAO,MAAM,MAAM,GAAI,WAAW,EAAE,YAAY,SAAS,KAAK,CAAC,GAAG,CAAC,EAAE,cAAc,SAAS,UAAU,CAAC,WAAW,CAAC,EACjH,YAAY,UAAU,CAAC,WAAW,CAAC,EACnC,sBAAsB,oBAAoB,CAAC,WAAW,EAAE,YAAY,EAAE,cAAc,CAAC,KACpF,UAAU,IAAI,UAAU,CAAC,CAAA,OAAO,oBAAoB,EAAC,SAAS,CAAC,CAMjE,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,YAAY,UAAU,CAAC,GAAG,CAAC,KAAG,UAAU,IAAI,WAAW,CAAC,CAAC,CAExF,CAAA"}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
// src/expression/internal.ts
|
2
|
+
import { Objects } from "@bessemer/cornerstone";
|
3
|
+
var defineExpression = (options) => {
|
4
|
+
return {
|
5
|
+
expressionKey: options.expressionKey,
|
6
|
+
builder: (...parameters) => {
|
7
|
+
return { expressionKey: options.expressionKey, ...options.builder(...parameters) };
|
8
|
+
},
|
9
|
+
resolver: (expression, evaluate, context) => {
|
10
|
+
return options.resolver(expression, evaluate, context);
|
11
|
+
}
|
12
|
+
};
|
13
|
+
};
|
14
|
+
var isType = (expression, expressionDefinition) => {
|
15
|
+
if (!isExpression(expression)) {
|
16
|
+
return false;
|
17
|
+
}
|
18
|
+
return expression.expressionKey === expressionDefinition.expressionKey;
|
19
|
+
};
|
20
|
+
var isExpression = (expression) => {
|
21
|
+
return Objects.isObject(expression) && "expressionKey" in expression;
|
22
|
+
};
|
23
|
+
export {
|
24
|
+
defineExpression,
|
25
|
+
isExpression,
|
26
|
+
isType
|
27
|
+
};
|
28
|
+
//# sourceMappingURL=internal.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../../src/expression/internal.ts"],"sourcesContent":["import { EvaluateExpression, Expression, ExpressionContext, ExpressionDefinition, ExpressionKey, IExpression } from '@bessemer/cornerstone/expression'\nimport { Objects } from '@bessemer/cornerstone'\nimport { UnknownRecord } from 'type-fest'\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"],"mappings":";AACA,SAAS,eAAe;AAGjB,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,SAAO,QAAQ,SAAS,UAAU,KAAK,mBAAmB;AAC5D;","names":[]}
|