@duplojs/lang 0.0.1-beta.9 → 0.1.0-beta.1
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/concat.d.ts +2 -2
- package/dist/array/flat.d.ts +1 -1
- package/dist/array/flatMap.d.ts +2 -2
- package/dist/array/from.d.ts +1 -1
- package/dist/array/length.d.ts +3 -2
- package/dist/array/push.d.ts +4 -2
- package/dist/chrono/createDate.cjs +1 -1
- package/dist/chrono/createDate.mjs +1 -1
- package/dist/chrono/operators/addTime.d.ts +2 -4
- package/dist/common/constraint/cast/index.d.ts +4 -4
- package/dist/common/constraint/cast/string.d.ts +4 -0
- package/dist/common/constraint/infer/index.d.ts +2 -1
- package/dist/common/constraint/infer/string.d.ts +1 -1
- package/dist/common/constraint/types/index.d.ts +1 -0
- package/dist/common/constraint/types/maybe.d.ts +2 -0
- package/dist/common/formData.d.ts +2 -1
- package/dist/common/memo.cjs +3 -2
- package/dist/common/memo.mjs +3 -2
- package/dist/common/memoPromise.cjs +3 -2
- package/dist/common/memoPromise.mjs +3 -2
- package/dist/common/timeout.cjs +2 -2
- package/dist/common/timeout.d.ts +1 -1
- package/dist/common/timeout.mjs +2 -2
- package/dist/common/types/applyPromiseIf.d.ts +1 -0
- package/dist/common/types/index.d.ts +1 -0
- package/dist/common/types/json.d.ts +12 -1
- package/dist/dataStructure/common/codec/defaults/string.cjs +1 -1
- package/dist/dataStructure/common/codec/defaults/string.d.ts +1 -1
- package/dist/dataStructure/common/codec/defaults/string.mjs +1 -1
- package/dist/dataStructure/common/{error.cjs → error/base.cjs} +18 -3
- package/dist/dataStructure/common/{error.d.ts → error/base.d.ts} +14 -7
- package/dist/dataStructure/common/{error.mjs → error/base.mjs} +17 -4
- package/dist/dataStructure/common/error/defaultInterpreter.cjs +87 -0
- package/dist/dataStructure/common/error/defaultInterpreter.d.ts +60 -0
- package/dist/dataStructure/common/error/defaultInterpreter.mjs +86 -0
- package/dist/dataStructure/common/error/index.d.ts +3 -0
- package/dist/dataStructure/common/{errorInterpreter.cjs → error/interpreter.cjs} +11 -12
- package/dist/dataStructure/common/error/interpreter.d.ts +32 -0
- package/dist/dataStructure/common/{errorInterpreter.mjs → error/interpreter.mjs} +9 -10
- package/dist/dataStructure/common/index.d.ts +0 -1
- package/dist/dataStructure/constraint/types/constraints.d.ts +1 -0
- package/dist/dataStructure/fundamentalType/types/fundamentalTypes.d.ts +1 -0
- package/dist/dataStructure/helpers/extend.cjs +1 -1
- package/dist/dataStructure/helpers/extend.d.ts +1 -1
- package/dist/dataStructure/helpers/extend.mjs +1 -1
- package/dist/dataStructure/helpers/index.d.ts +1 -0
- package/dist/dataStructure/helpers/partial.cjs +1 -1
- package/dist/dataStructure/helpers/partial.mjs +1 -1
- package/dist/dataStructure/helpers/required.cjs +1 -1
- package/dist/dataStructure/helpers/required.mjs +1 -1
- package/dist/dataStructure/helpers/typeStructureIdentifier.cjs +14 -0
- package/dist/dataStructure/helpers/typeStructureIdentifier.d.ts +6 -0
- package/dist/dataStructure/helpers/typeStructureIdentifier.mjs +14 -0
- package/dist/dataStructure/index.cjs +45 -33
- package/dist/dataStructure/index.mjs +10 -3
- package/dist/dataStructure/structure/base.cjs +31 -19
- package/dist/dataStructure/structure/base.d.ts +16 -16
- package/dist/dataStructure/structure/base.mjs +25 -13
- package/dist/dataStructure/structure/defaults/array.cjs +10 -0
- package/dist/dataStructure/structure/defaults/array.mjs +10 -0
- package/dist/dataStructure/structure/defaults/lazy.cjs +1 -0
- package/dist/dataStructure/structure/defaults/lazy.mjs +1 -0
- package/dist/dataStructure/structure/defaults/nonEncodableString.cjs +1 -0
- package/dist/dataStructure/structure/defaults/nonEncodableString.mjs +1 -0
- package/dist/dataStructure/structure/defaults/object.cjs +18 -7
- package/dist/dataStructure/structure/defaults/object.d.ts +2 -1
- package/dist/dataStructure/structure/defaults/object.mjs +18 -7
- package/dist/dataStructure/structure/defaults/record.cjs +20 -7
- package/dist/dataStructure/structure/defaults/record.mjs +20 -7
- package/dist/dataStructure/structure/defaults/type.cjs +1 -0
- package/dist/dataStructure/structure/defaults/type.mjs +1 -0
- package/dist/dataStructure/structure/defaults/union.cjs +26 -6
- package/dist/dataStructure/structure/defaults/union.mjs +21 -1
- package/dist/dataStructure/structure/types/value.d.ts +2 -0
- package/dist/dataStructure/type/types/types.d.ts +1 -0
- package/dist/either/index.cjs +1 -1
- package/dist/either/index.mjs +1 -1
- package/dist/either/left/create.d.ts +2 -1
- package/dist/either/left/none.cjs +2 -2
- package/dist/either/left/none.d.ts +2 -2
- package/dist/either/left/none.mjs +2 -2
- package/dist/either/right/create.d.ts +2 -1
- package/dist/either/types/index.d.ts +1 -0
- package/dist/either/types/mayBe.d.ts +1 -1
- package/dist/invocation/evidence.d.ts +1 -1
- package/dist/invocation/flow/base.cjs +4 -4
- package/dist/invocation/flow/base.d.ts +1 -1
- package/dist/invocation/flow/base.mjs +4 -4
- package/dist/invocation/flow/controller/defaults/debounce.cjs +1 -1
- package/dist/invocation/flow/controller/defaults/debounce.mjs +1 -1
- package/dist/invocation/flow/controller/defaults/throttling.cjs +1 -1
- package/dist/invocation/flow/controller/defaults/throttling.mjs +1 -1
- package/dist/invocation/index.cjs +10 -0
- package/dist/invocation/index.d.ts +2 -0
- package/dist/invocation/index.mjs +7 -1
- package/dist/invocation/reader.cjs +5 -1
- package/dist/invocation/reader.d.ts +5 -3
- package/dist/invocation/reader.mjs +5 -1
- package/dist/invocation/resolver.cjs +31 -0
- package/dist/invocation/resolver.d.ts +14 -0
- package/dist/invocation/resolver.mjs +31 -0
- package/dist/invocation/signature.cjs +8 -0
- package/dist/invocation/signature.d.ts +7 -0
- package/dist/invocation/signature.mjs +8 -0
- package/dist/modeling/entity/base.cjs +19 -25
- package/dist/modeling/entity/base.d.ts +15 -14
- package/dist/modeling/entity/base.mjs +14 -19
- package/dist/modeling/entity/helper.d.ts +6 -8
- package/dist/modeling/entity/namespace.cjs +0 -2
- package/dist/modeling/entity/namespace.d.ts +0 -2
- package/dist/modeling/entity/namespace.mjs +0 -2
- package/dist/modeling/fact/base.cjs +36 -0
- package/dist/modeling/fact/base.d.ts +29 -0
- package/dist/modeling/fact/base.mjs +35 -0
- package/dist/modeling/fact/index.d.ts +1 -0
- package/dist/modeling/flag/base.cjs +1 -1
- package/dist/modeling/flag/base.d.ts +8 -8
- package/dist/modeling/flag/base.mjs +1 -1
- package/dist/modeling/index.cjs +17 -18
- package/dist/modeling/index.d.ts +1 -0
- package/dist/modeling/index.mjs +8 -8
- package/dist/modeling/newType/base.cjs +11 -28
- package/dist/modeling/newType/base.d.ts +8 -15
- package/dist/modeling/newType/base.mjs +5 -20
- package/dist/modeling/taggedObject/base.cjs +19 -25
- package/dist/modeling/taggedObject/base.d.ts +12 -14
- package/dist/modeling/taggedObject/base.mjs +14 -19
- package/dist/object/assign.d.ts +3 -3
- package/dist/object/deepOverride.cjs +33 -0
- package/dist/object/deepOverride.d.ts +20 -0
- package/dist/object/deepOverride.mjs +33 -0
- package/dist/object/entries.d.ts +3 -3
- package/dist/object/index.cjs +4 -1
- package/dist/object/index.d.ts +1 -0
- package/dist/object/index.mjs +4 -2
- package/dist/object/isSimple.cjs +1 -1
- package/dist/object/isSimple.mjs +1 -1
- package/dist/object/keys.d.ts +1 -1
- package/dist/object/override.cjs +1 -1
- package/dist/object/override.d.ts +5 -2
- package/dist/object/override.mjs +1 -1
- package/dist/object/types/assign.d.ts +2 -0
- package/dist/object/types/forbiddenKey.d.ts +1 -1
- package/dist/object/types/hasKeySignature.d.ts +1 -0
- package/dist/object/types/index.d.ts +4 -1
- package/dist/object/types/keyofWithoutSignature.d.ts +3 -0
- package/dist/object/types/override.d.ts +4 -0
- package/dist/object/values.d.ts +1 -1
- package/dist/path/create.cjs +11 -0
- package/dist/path/create.d.ts +3 -0
- package/dist/path/create.mjs +11 -0
- package/dist/path/createAbsolute.cjs +12 -0
- package/dist/path/createAbsolute.d.ts +3 -0
- package/dist/path/createAbsolute.mjs +12 -0
- package/dist/path/createAbsoluteOrThrow.cjs +22 -0
- package/dist/path/createAbsoluteOrThrow.d.ts +9 -0
- package/dist/path/createAbsoluteOrThrow.mjs +21 -0
- package/dist/path/createOrThrow.cjs +22 -0
- package/dist/path/createOrThrow.d.ts +9 -0
- package/dist/path/createOrThrow.mjs +21 -0
- package/dist/path/createSegment.cjs +12 -0
- package/dist/path/createSegment.d.ts +3 -0
- package/dist/path/createSegment.mjs +12 -0
- package/dist/path/createSegmentOrThrow.cjs +22 -0
- package/dist/path/createSegmentOrThrow.d.ts +9 -0
- package/dist/path/createSegmentOrThrow.mjs +21 -0
- package/dist/path/declareAbsolutePath.cjs +6 -0
- package/dist/path/declareAbsolutePath.d.ts +3 -0
- package/dist/path/declareAbsolutePath.mjs +6 -0
- package/dist/path/declarePath.cjs +6 -0
- package/dist/path/declarePath.d.ts +3 -0
- package/dist/path/declarePath.mjs +6 -0
- package/dist/path/declareSegment.cjs +6 -0
- package/dist/path/declareSegment.d.ts +3 -0
- package/dist/path/declareSegment.mjs +6 -0
- package/dist/path/index.cjs +39 -3
- package/dist/path/index.d.ts +10 -0
- package/dist/path/index.mjs +27 -4
- package/dist/path/kind.cjs +4 -0
- package/dist/path/kind.d.ts +2 -0
- package/dist/path/kind.mjs +5 -0
- package/dist/pattern/index.cjs +6 -0
- package/dist/pattern/index.d.ts +2 -0
- package/dist/pattern/index.mjs +5 -1
- package/dist/pattern/match/builder.cjs +1 -1
- package/dist/pattern/match/builder.mjs +1 -1
- package/dist/pattern/matchWithEntityOtherwise.d.ts +2 -2
- package/dist/pattern/matchWithFact.cjs +12 -0
- package/dist/pattern/matchWithFact.d.ts +12 -0
- package/dist/pattern/matchWithFact.mjs +12 -0
- package/dist/pattern/matchWithFactOtherwise.cjs +13 -0
- package/dist/pattern/matchWithFactOtherwise.d.ts +14 -0
- package/dist/pattern/matchWithFactOtherwise.mjs +13 -0
- package/dist/pattern/matchWithNumberOtherwise.d.ts +2 -2
- package/dist/pattern/matchWithStringOtherwise.d.ts +2 -2
- package/dist/pattern/matchWithTaggedObjectOtherwise.d.ts +2 -2
- package/dist/pattern/types/complexUnMatchedValue/getIncompleteUnion.d.ts +8 -8
- package/dist/string/capitalize.d.ts +1 -1
- package/dist/string/concat.d.ts +2 -2
- package/dist/string/prepend.d.ts +2 -2
- package/dist/string/split.cjs +1 -0
- package/dist/string/split.d.ts +3 -3
- package/dist/string/split.mjs +1 -0
- package/dist/string/toLowerCase.d.ts +1 -1
- package/dist/string/toUpperCase.d.ts +1 -1
- package/dist/string/types/IsAllowedString.d.ts +4 -2
- package/dist/string/uncapitalize.d.ts +1 -1
- package/dist/tuple/types/map.d.ts +1 -1
- package/package.json +16 -30
- package/dist/dataStructure/common/errorInterpreter.d.ts +0 -36
- package/dist/object/types/assignObjects.d.ts +0 -2
- /package/{README.md → README} +0 -0
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { PortHandler } from './port';
|
|
2
2
|
import * as DCommon from '../common';
|
|
3
3
|
import type * as DKind from '../kind';
|
|
4
|
+
type FormatPortName<GenericValue extends string> = Uncapitalize<GenericValue> extends infer InferredResult extends string ? InferredResult extends `${infer InferredName}Port` ? InferredName : InferredResult : never;
|
|
4
5
|
export type ReaderDependencies = Record<string, Reader | PortHandler>;
|
|
5
6
|
export type ReaderDependenciesValue<GenericDependencies extends ReaderDependencies> = DCommon.SimplifyTopLevel<{
|
|
6
|
-
[Prop in keyof GenericDependencies as Uncapitalize<Extract<Prop, string>>]: GenericDependencies[Prop] extends PortHandler ? ReturnType<GenericDependencies[Prop]["createImplementation"]> : GenericDependencies[Prop] extends Reader ? ReturnType<GenericDependencies[Prop]["run"]> : never;
|
|
7
|
+
[Prop in keyof GenericDependencies as (GenericDependencies[Prop] extends PortHandler ? FormatPortName<Extract<Prop, string>> : Uncapitalize<Extract<Prop, string>>)]: GenericDependencies[Prop] extends PortHandler ? ReturnType<GenericDependencies[Prop]["createImplementation"]> : GenericDependencies[Prop] extends Reader ? ReturnType<GenericDependencies[Prop]["run"]> : never;
|
|
7
8
|
}>;
|
|
8
9
|
export type GetAllPorts<GenericDependenciesValue extends ReaderDependencies> = GenericDependenciesValue extends any ? ({
|
|
9
10
|
[Prop in keyof GenericDependenciesValue]: (GenericDependenciesValue[Prop] extends PortHandler ? [
|
|
10
|
-
|
|
11
|
+
FormatPortName<Extract<Prop, string>>,
|
|
11
12
|
ReturnType<GenericDependenciesValue[Prop]["createImplementation"]>
|
|
12
13
|
] : GenericDependenciesValue[Prop] extends Reader ? GetAllPorts<GenericDependenciesValue[Prop]["dependencies"]> : never);
|
|
13
14
|
})[keyof GenericDependenciesValue] : never;
|
|
14
15
|
export declare const readerKind: DKind.Handler<DKind.Definition<"@DuplojsLangInvocation/reader", unknown>>;
|
|
15
|
-
export interface Reader<GenericDependencies extends ReaderDependencies =
|
|
16
|
+
export interface Reader<GenericDependencies extends ReaderDependencies = ReaderDependencies, GenericOutput extends unknown = unknown> extends DKind.Kind<typeof readerKind> {
|
|
16
17
|
dependencies: GenericDependencies;
|
|
17
18
|
run(ports: DCommon.SimplifyTopLevel<(GetAllPorts<GenericDependencies> extends infer InferredEntriesDependenciesValue extends DCommon.ObjectEntry ? {
|
|
18
19
|
[Entry in InferredEntriesDependenciesValue as Entry[0]]: Entry[1];
|
|
@@ -26,3 +27,4 @@ export declare function resolveReaders<GenericReaders extends Record<string, Rea
|
|
|
26
27
|
[Entry in InferredEntriesDependenciesValue as Entry[0]]: Entry[1];
|
|
27
28
|
} : never;
|
|
28
29
|
}[keyof GenericReaders]>>): ReaderDependenciesValue<GenericReaders>;
|
|
30
|
+
export {};
|
|
@@ -4,15 +4,19 @@ import { fromEntries } from "../object/fromEntries.mjs";
|
|
|
4
4
|
import { map } from "../array/map.mjs";
|
|
5
5
|
import { forward } from "../common/forward.mjs";
|
|
6
6
|
import { pipe } from "../common/pipe.mjs";
|
|
7
|
+
import { replace } from "../string/replace.mjs";
|
|
7
8
|
import { uncapitalize } from "../string/uncapitalize.mjs";
|
|
8
9
|
import { createKind } from "./kind.mjs";
|
|
9
10
|
//#region scripts/invocation/reader.ts
|
|
10
11
|
const readerKind = createKind("reader");
|
|
12
|
+
function formatPortName(value) {
|
|
13
|
+
return pipe(value, uncapitalize, replace(/Port$/, ""));
|
|
14
|
+
}
|
|
11
15
|
function createReader(dependencies, read) {
|
|
12
16
|
return {
|
|
13
17
|
dependencies,
|
|
14
18
|
run: (injectedDependencies) => read(pipe(forward(dependencies), entries, map(([key, value]) => {
|
|
15
|
-
const formattedKey = uncapitalize(key);
|
|
19
|
+
const formattedKey = readerKind.has(value) ? uncapitalize(key) : formatPortName(key);
|
|
16
20
|
return entry(formattedKey, readerKind.has(value) && !injectedDependencies[formattedKey] ? value.run(injectedDependencies) : injectedDependencies[formattedKey]);
|
|
17
21
|
}), fromEntries)),
|
|
18
22
|
[readerKind.runTimeKey]: null
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const require_callThen = require("../common/callThen.cjs");
|
|
2
|
+
const require_create = require("../either/left/create.cjs");
|
|
3
|
+
const require_is = require("../either/left/is.cjs");
|
|
4
|
+
const require_create$1 = require("../either/right/create.cjs");
|
|
5
|
+
//#region scripts/invocation/resolver.ts
|
|
6
|
+
const resolverKind = require("./kind.cjs").createKind("resolver");
|
|
7
|
+
function createResolver(value) {
|
|
8
|
+
function resolve(subscribers, whenError) {
|
|
9
|
+
return Promise.resolve().then(() => Object.values(subscribers).reduce((accumulator, element) => require_callThen.callThen(accumulator, (awaitedAccumulator) => {
|
|
10
|
+
if (require_is.isLeft(awaitedAccumulator)) return awaitedAccumulator;
|
|
11
|
+
return element(value);
|
|
12
|
+
}), null)).then((result) => {
|
|
13
|
+
if (require_is.isLeft(result)) return require_callThen.callThen(whenError(result, value), (output) => require_create.left("resolve-error", output));
|
|
14
|
+
return require_create$1.right("resolve-success", value);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function runAndResolve(theFunction, subscribers, whenError) {
|
|
18
|
+
return Promise.resolve().then(() => theFunction(value)).then((result) => {
|
|
19
|
+
if (require_is.isLeft(result)) return require_callThen.callThen(whenError(result, value), (output) => require_create.left("resolve-error", output));
|
|
20
|
+
return resolve(subscribers, whenError);
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
return () => ({
|
|
24
|
+
resolve,
|
|
25
|
+
runAndResolve,
|
|
26
|
+
[resolverKind.runTimeKey]: null
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
exports.createResolver = createResolver;
|
|
31
|
+
exports.resolverKind = resolverKind;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as DCommon from '../common';
|
|
2
|
+
import type * as DKind from '../kind';
|
|
3
|
+
import type * as DObject from '../object';
|
|
4
|
+
import * as DEither from '../either';
|
|
5
|
+
export declare const resolverKind: DKind.Handler<DKind.Definition<"@DuplojsLangInvocation/resolver", unknown>>;
|
|
6
|
+
export interface Resolver<GenericValue extends unknown = unknown, GenericSubscribers extends Record<string, (value: GenericValue) => unknown> = Record<string, (value: GenericValue) => unknown>> extends DKind.Kind<typeof resolverKind> {
|
|
7
|
+
runAndResolve<GenericOutput extends DCommon.MaybePromise<DEither.Right | DEither.Left | undefined | DCommon.EscapeVoid>, const GenericWrapperSubscribers extends GenericSubscribers, GenericOutputHandlerLeft extends unknown = never>(theFunction: (value: GenericValue) => GenericOutput, subscribers: GenericWrapperSubscribers, ...args: (DCommon.ContainExtends<Extract<Awaited<GenericOutput> | Awaited<ReturnType<DObject.Values<GenericWrapperSubscribers>>>, DEither.Left>, DEither.Left> extends true ? [
|
|
8
|
+
whenLeft: (result: Extract<Awaited<GenericOutput> | Awaited<ReturnType<DObject.Values<GenericWrapperSubscribers>>>, DEither.Left>, value: GenericValue) => GenericOutputHandlerLeft
|
|
9
|
+
] : [])): Promise<(DCommon.IsNever<GenericOutputHandlerLeft> extends true ? never : DEither.Left<"resolve-error", Awaited<GenericOutputHandlerLeft>>) | DEither.Right<"resolve-success", GenericValue>>;
|
|
10
|
+
resolve<const GenericWrapperSubscribers extends GenericSubscribers, GenericOutputHandlerLeft extends unknown = never>(subscribers: GenericWrapperSubscribers, ...args: (DCommon.ContainExtends<Extract<Awaited<ReturnType<DObject.Values<GenericWrapperSubscribers>>>, DEither.Left>, DEither.Left> extends true ? [
|
|
11
|
+
whenLeft: (result: Extract<Awaited<ReturnType<DObject.Values<GenericWrapperSubscribers>>>, DEither.Left>, value: GenericValue) => GenericOutputHandlerLeft
|
|
12
|
+
] : [])): Promise<(DCommon.IsNever<GenericOutputHandlerLeft> extends true ? never : DEither.Left<"resolve-error", Awaited<GenericOutputHandlerLeft>>) | DEither.Right<"resolve-success", GenericValue>>;
|
|
13
|
+
}
|
|
14
|
+
export declare function createResolver<const GenericValue extends unknown>(value: GenericValue): <GenericSubscribers extends (Record<string, (value: GenericValue) => unknown> | DCommon.AnyTuple<string>)>() => Resolver<GenericValue, GenericSubscribers extends readonly string[] ? Record<GenericSubscribers[number], (value: GenericValue) => unknown> : GenericSubscribers>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { callThen } from "../common/callThen.mjs";
|
|
2
|
+
import { left } from "../either/left/create.mjs";
|
|
3
|
+
import { isLeft } from "../either/left/is.mjs";
|
|
4
|
+
import { right } from "../either/right/create.mjs";
|
|
5
|
+
import { createKind } from "./kind.mjs";
|
|
6
|
+
//#region scripts/invocation/resolver.ts
|
|
7
|
+
const resolverKind = createKind("resolver");
|
|
8
|
+
function createResolver(value) {
|
|
9
|
+
function resolve(subscribers, whenError) {
|
|
10
|
+
return Promise.resolve().then(() => Object.values(subscribers).reduce((accumulator, element) => callThen(accumulator, (awaitedAccumulator) => {
|
|
11
|
+
if (isLeft(awaitedAccumulator)) return awaitedAccumulator;
|
|
12
|
+
return element(value);
|
|
13
|
+
}), null)).then((result) => {
|
|
14
|
+
if (isLeft(result)) return callThen(whenError(result, value), (output) => left("resolve-error", output));
|
|
15
|
+
return right("resolve-success", value);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
function runAndResolve(theFunction, subscribers, whenError) {
|
|
19
|
+
return Promise.resolve().then(() => theFunction(value)).then((result) => {
|
|
20
|
+
if (isLeft(result)) return callThen(whenError(result, value), (output) => left("resolve-error", output));
|
|
21
|
+
return resolve(subscribers, whenError);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
return () => ({
|
|
25
|
+
resolve,
|
|
26
|
+
runAndResolve,
|
|
27
|
+
[resolverKind.runTimeKey]: null
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
//#endregion
|
|
31
|
+
export { createResolver, resolverKind };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
//#region scripts/invocation/signature.ts
|
|
2
|
+
const signatureKind = require("./kind.cjs").createKind("signature");
|
|
3
|
+
function signedFunction(name, theFunction) {
|
|
4
|
+
return signatureKind.setTo(theFunction, name);
|
|
5
|
+
}
|
|
6
|
+
//#endregion
|
|
7
|
+
exports.signatureKind = signatureKind;
|
|
8
|
+
exports.signedFunction = signedFunction;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type * as DCommon from '../common';
|
|
2
|
+
import type * as DKind from '../kind';
|
|
3
|
+
export declare const signatureKind: DKind.Handler<DKind.Definition<"@DuplojsLangInvocation/signature", string>>;
|
|
4
|
+
export interface Signature<GenericName extends string = string> extends DKind.Kind<typeof signatureKind, GenericName> {
|
|
5
|
+
}
|
|
6
|
+
export type SignedFunction<GenericName extends string = string, GenericFunction extends DCommon.AnyFunction = DCommon.AnyFunction> = (Signature<GenericName> & GenericFunction);
|
|
7
|
+
export declare function signedFunction<GenericName extends string, GenericFunction extends DCommon.AnyFunction>(name: NoInfer<GenericName>, theFunction: NoInfer<GenericFunction>): SignedFunction<GenericName, GenericFunction>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { createKind } from "./kind.mjs";
|
|
2
|
+
//#region scripts/invocation/signature.ts
|
|
3
|
+
const signatureKind = createKind("signature");
|
|
4
|
+
function signedFunction(name, theFunction) {
|
|
5
|
+
return signatureKind.setTo(theFunction, name);
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
8
|
+
export { signatureKind, signedFunction };
|
|
@@ -1,29 +1,18 @@
|
|
|
1
|
-
const require_parentClass = require("../../kind/parentClass.cjs");
|
|
2
1
|
const require_isSimple = require("../../object/isSimple.cjs");
|
|
3
2
|
const require_create = require("../../either/left/create.cjs");
|
|
4
|
-
const require_is = require("../../either/left/is.cjs");
|
|
5
3
|
const require_create$1 = require("../../either/right/create.cjs");
|
|
6
|
-
const require_unwrap = require("../../either/left/unwrap.cjs");
|
|
7
|
-
const require_unwrap$1 = require("../../either/right/unwrap.cjs");
|
|
8
4
|
const require_justExec = require("../../common/justExec.cjs");
|
|
9
5
|
const require_memo = require("../../common/memo.cjs");
|
|
10
6
|
const require_resultSymbol = require("../../dataStructure/common/resultSymbol.cjs");
|
|
11
|
-
const
|
|
12
|
-
const require_base = require("../../dataStructure/structure/base.cjs");
|
|
7
|
+
const require_base = require("../../dataStructure/common/error/base.cjs");
|
|
8
|
+
const require_base$1 = require("../../dataStructure/structure/base.cjs");
|
|
13
9
|
const require_nonEncodableString = require("../../dataStructure/structure/defaults/nonEncodableString.cjs");
|
|
14
10
|
const require_object = require("../../dataStructure/structure/defaults/object.cjs");
|
|
15
11
|
const require_kind = require("../kind.cjs");
|
|
16
12
|
//#region scripts/modeling/entity/base.ts
|
|
17
13
|
const entityKind = require_kind.createKind("entity");
|
|
18
14
|
const entityStructureKind = require_kind.createKind("entity-structure");
|
|
19
|
-
|
|
20
|
-
error;
|
|
21
|
-
constructor(error) {
|
|
22
|
-
super(void 0, "An error occurred while encoding an Entity. This can only happen if you are bypassing the type system.");
|
|
23
|
-
this.error = error;
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
|
-
const EntityStructure = require_base.createStructure(entityStructureKind, ({ init }) => (name, shape) => init({
|
|
15
|
+
const EntityStructure = require_base$1.createStructure(entityStructureKind, ({ init }) => (name, shape) => init({
|
|
27
16
|
inner: require_memo.memo(() => require_object.ObjectStructure({
|
|
28
17
|
...shape(),
|
|
29
18
|
[entityKind.runTimeKey]: require_nonEncodableString.NonEncodableStringStructure(name)
|
|
@@ -33,6 +22,7 @@ const EntityStructure = require_base.createStructure(entityStructureKind, ({ ini
|
|
|
33
22
|
executeCheck: (self, data, errorHandler) => self.definition.inner.value.executeCheck(data, errorHandler),
|
|
34
23
|
executeEncode: (self, codecContext, data, errorHandler) => self.definition.inner.value.executeEncode(codecContext, data, errorHandler),
|
|
35
24
|
executeDecode: (self, codecContext, data, errorHandler) => self.definition.inner.value.executeDecode(codecContext, data, errorHandler),
|
|
25
|
+
executeParse: (self, codecContext, data, errorHandler) => self.definition.inner.value.executeParse(codecContext, data, errorHandler),
|
|
36
26
|
isAsynchronous: (self) => self.definition.inner.value.isAsynchronous()
|
|
37
27
|
}, {
|
|
38
28
|
name,
|
|
@@ -45,24 +35,24 @@ const EntityStructure = require_base.createStructure(entityStructureKind, ({ ini
|
|
|
45
35
|
const [codecs] = args;
|
|
46
36
|
return (value) => self.decodeMap(codecs, value);
|
|
47
37
|
}
|
|
48
|
-
const errorHandler =
|
|
38
|
+
const errorHandler = require_base.createGetErrorHandler();
|
|
49
39
|
const [codecs, data] = args;
|
|
50
40
|
const result = self.executeDecode(codecs.context.value, require_isSimple.isSimple(data) ? {
|
|
51
41
|
...data,
|
|
52
42
|
[entityKind.runTimeKey]: name
|
|
53
43
|
} : data, errorHandler);
|
|
54
|
-
if (result instanceof Promise) return require_create.left("async-error",
|
|
44
|
+
if (result instanceof Promise) return require_create.left("async-error", new require_base.ErrorPromise());
|
|
55
45
|
if (result === require_resultSymbol.ErrorSymbol) return require_create.left("map-error", errorHandler().createError());
|
|
56
46
|
return require_create$1.right("map-success", result);
|
|
57
47
|
},
|
|
58
48
|
map: (self, data) => {
|
|
59
|
-
const errorHandler =
|
|
49
|
+
const errorHandler = require_base.createGetErrorHandler();
|
|
60
50
|
const formattedData = require_isSimple.isSimple(data) ? {
|
|
61
51
|
...data,
|
|
62
52
|
[entityKind.runTimeKey]: name
|
|
63
53
|
} : data;
|
|
64
54
|
const result = self.executeCheck(formattedData, errorHandler);
|
|
65
|
-
if (result instanceof Promise) return require_create.left("async-error",
|
|
55
|
+
if (result instanceof Promise) return require_create.left("async-error", new require_base.ErrorPromise());
|
|
66
56
|
if (result === require_resultSymbol.ErrorSymbol) return require_create.left("map-error", errorHandler().createError());
|
|
67
57
|
return require_create$1.right("map-success", formattedData);
|
|
68
58
|
},
|
|
@@ -72,7 +62,7 @@ const EntityStructure = require_base.createStructure(entityStructureKind, ({ ini
|
|
|
72
62
|
return (value) => self.asyncDecodeMap(codecs, value);
|
|
73
63
|
}
|
|
74
64
|
return require_justExec.justExec(async () => {
|
|
75
|
-
const errorHandler =
|
|
65
|
+
const errorHandler = require_base.createGetErrorHandler();
|
|
76
66
|
const [codecs, data] = args;
|
|
77
67
|
const result = await self.executeDecode(codecs.context.value, require_isSimple.isSimple(data) ? {
|
|
78
68
|
...data,
|
|
@@ -83,7 +73,7 @@ const EntityStructure = require_base.createStructure(entityStructureKind, ({ ini
|
|
|
83
73
|
});
|
|
84
74
|
},
|
|
85
75
|
asyncMap: async (self, data) => {
|
|
86
|
-
const errorHandler =
|
|
76
|
+
const errorHandler = require_base.createGetErrorHandler();
|
|
87
77
|
const formattedData = require_isSimple.isSimple(data) ? {
|
|
88
78
|
...data,
|
|
89
79
|
[entityKind.runTimeKey]: name
|
|
@@ -91,14 +81,18 @@ const EntityStructure = require_base.createStructure(entityStructureKind, ({ ini
|
|
|
91
81
|
if (await self.executeCheck(formattedData, errorHandler) === require_resultSymbol.ErrorSymbol) return require_create.left("map-error", errorHandler().createError());
|
|
92
82
|
return require_create$1.right("map-success", formattedData);
|
|
93
83
|
},
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
84
|
+
update: (self, ...args) => {
|
|
85
|
+
if (args.length === 1) {
|
|
86
|
+
const [update] = args;
|
|
87
|
+
return (input) => self.update(input, update);
|
|
88
|
+
}
|
|
89
|
+
const [input, update] = args;
|
|
90
|
+
const updatedEntity = { [entityKind.runTimeKey]: name };
|
|
91
|
+
for (const key of self.definition.inner.value.definition.keys) updatedEntity[key] = update[key] === void 0 ? input[key] : update[key];
|
|
92
|
+
return updatedEntity;
|
|
98
93
|
}
|
|
99
94
|
}));
|
|
100
95
|
//#endregion
|
|
101
|
-
exports.EncodeEntityError = EncodeEntityError;
|
|
102
96
|
exports.EntityStructure = EntityStructure;
|
|
103
97
|
exports.entityKind = entityKind;
|
|
104
98
|
exports.entityStructureKind = entityStructureKind;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { NewType, NewTypeMap } from '../newType';
|
|
2
|
-
import * as DKind from '../../kind';
|
|
2
|
+
import type * as DKind from '../../kind';
|
|
3
3
|
import * as DCommon from '../../common';
|
|
4
4
|
import * as DDataStructure from '../../dataStructure';
|
|
5
5
|
import * as DEither from '../../either';
|
|
6
|
+
import * as DObject from '../../object';
|
|
6
7
|
declare module '../../dataStructure' {
|
|
7
8
|
interface StructuresStore {
|
|
8
9
|
entity: EntityStructure;
|
|
@@ -33,21 +34,21 @@ export type EntityMap<GenericValue extends unknown, GenericRawValue = DCommon.Re
|
|
|
33
34
|
]> extends true ? {
|
|
34
35
|
[Prop in keyof GenericRawValue]: EntityMap<GenericRawValue[Prop]>;
|
|
35
36
|
} : GenericRawValue : GenericRawValue;
|
|
37
|
+
export type EntityUpdate<GenericEntity extends Entity, GenericNewProperties extends object> = Extract<(Entity<GetEntityName<GenericEntity>> & DCommon.SimplifyTopLevel<DKind.Remove<GenericEntity> extends infer InferredProperties ? {
|
|
38
|
+
[Prop in keyof InferredProperties]: Prop extends keyof GenericNewProperties ? GenericNewProperties[Prop] extends infer InferredNewValue ? InferredNewValue extends undefined ? InferredProperties[Prop] : InferredNewValue : never : InferredProperties[Prop];
|
|
39
|
+
} : never>), any>;
|
|
40
|
+
type ForbiddenMoreKey<GenericProperties extends Record<string, unknown>, GenericNewProperties extends Record<string, unknown>> = DObject.ForbiddenKey<GenericNewProperties, Extract<Exclude<keyof GenericNewProperties, keyof GenericProperties>, string>>;
|
|
36
41
|
export interface EntityStructure<out GenericName extends string = string, out GenericProperties extends Record<string, unknown> = Record<string, unknown>> extends DCommon.Forward<DDataStructure.Structure<Entity<GenericName> & GenericProperties, EntityStructureDefinition> & DKind.Kind<typeof entityStructureKind>> {
|
|
37
42
|
readonly name: GenericName;
|
|
38
|
-
"new"<GenericNewProperties extends GenericProperties>(properties: GenericNewProperties): (Entity<GenericName> & GenericNewProperties);
|
|
39
|
-
decodeMap<GenericCodecs extends DDataStructure.Codecs>(codecs: GenericCodecs): (data: DDataStructure.EncodedValue<EntityMap<
|
|
40
|
-
decodeMap<GenericCodecs extends DDataStructure.Codecs>(codecs: GenericCodecs, data: DDataStructure.EncodedValue<EntityMap<
|
|
41
|
-
map(data: EntityMap<
|
|
42
|
-
asyncDecodeMap<GenericCodecs extends DDataStructure.Codecs>(codecs: GenericCodecs): (data: DDataStructure.EncodedValue<EntityMap<
|
|
43
|
-
asyncDecodeMap<GenericCodecs extends DDataStructure.Codecs>(codecs: GenericCodecs, data: DDataStructure.EncodedValue<EntityMap<
|
|
44
|
-
asyncMap(data: EntityMap<
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
declare const EncodeEntityError_base: DKind.KindClass<DKind.Handler<DKind.Definition<"@DuplojsLangModeling/encode-entity-error", unknown>>, ErrorConstructor>;
|
|
48
|
-
export declare class EncodeEntityError extends EncodeEntityError_base {
|
|
49
|
-
error: DDataStructure.Error;
|
|
50
|
-
constructor(error: DDataStructure.Error);
|
|
43
|
+
"new"<GenericNewProperties extends GenericProperties>(properties: (GenericNewProperties & ForbiddenMoreKey<GenericProperties, GenericNewProperties>)): (Entity<GenericName> & DCommon.SimplifyTopLevel<Readonly<GenericNewProperties>>);
|
|
44
|
+
decodeMap<GenericCodecs extends DDataStructure.Codecs>(codecs: GenericCodecs): (data: DDataStructure.EncodedValue<EntityMap<GenericProperties>, GenericCodecs>) => (DEither.Right<"map-success", Entity<GenericName> & GenericProperties> | DEither.Left<"async-error", DDataStructure.ErrorPromise> | DEither.Left<"map-error", DDataStructure.Error>);
|
|
45
|
+
decodeMap<GenericCodecs extends DDataStructure.Codecs>(codecs: GenericCodecs, data: DDataStructure.EncodedValue<EntityMap<GenericProperties>, GenericCodecs>): (DEither.Right<"map-success", Entity<GenericName> & GenericProperties> | DEither.Left<"async-error", DDataStructure.ErrorPromise> | DEither.Left<"map-error", DDataStructure.Error>);
|
|
46
|
+
map(data: EntityMap<GenericProperties>): (DEither.Right<"map-success", Entity<GenericName> & GenericProperties> | DEither.Left<"async-error", DDataStructure.ErrorPromise> | DEither.Left<"map-error", DDataStructure.Error>);
|
|
47
|
+
asyncDecodeMap<GenericCodecs extends DDataStructure.Codecs>(codecs: GenericCodecs): (data: DDataStructure.EncodedValue<EntityMap<GenericProperties>, GenericCodecs>) => Promise<DEither.Right<"map-success", Entity<GenericName> & GenericProperties> | DEither.Left<"map-error", DDataStructure.Error>>;
|
|
48
|
+
asyncDecodeMap<GenericCodecs extends DDataStructure.Codecs>(codecs: GenericCodecs, data: DDataStructure.EncodedValue<EntityMap<GenericProperties>, GenericCodecs>): Promise<DEither.Right<"map-success", Entity<GenericName> & GenericProperties> | DEither.Left<"map-error", DDataStructure.Error>>;
|
|
49
|
+
asyncMap(data: EntityMap<GenericProperties>): Promise<DEither.Right<"map-success", Entity<GenericName> & GenericProperties> | DEither.Left<"map-error", DDataStructure.Error>>;
|
|
50
|
+
update<GenericInputEntity extends (Entity<GenericName> & GenericProperties), const GenericPayload extends Partial<GenericProperties>>(update: GenericPayload): (input: GenericInputEntity) => EntityUpdate<GenericInputEntity, GenericPayload>;
|
|
51
|
+
update<GenericInputEntity extends (Entity<GenericName> & GenericProperties), const GenericPayload extends Partial<GenericProperties>>(input: GenericInputEntity, update: GenericPayload): EntityUpdate<GenericInputEntity, GenericPayload>;
|
|
51
52
|
}
|
|
52
53
|
export declare const EntityStructure: <GenericName extends string, GenericShape extends DDataStructure.ShapeObjectStructure, const GenericProperties extends DDataStructure.ShapeObjectStructureValue<GenericShape>>(name: GenericName, shape: () => GenericShape) => EntityStructure<GenericName, GenericProperties>;
|
|
53
54
|
export {};
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import { parentClass } from "../../kind/parentClass.mjs";
|
|
2
1
|
import { isSimple } from "../../object/isSimple.mjs";
|
|
3
2
|
import { left } from "../../either/left/create.mjs";
|
|
4
|
-
import { isLeft } from "../../either/left/is.mjs";
|
|
5
3
|
import { right } from "../../either/right/create.mjs";
|
|
6
|
-
import { unwrapLeft } from "../../either/left/unwrap.mjs";
|
|
7
|
-
import { unwrapRight } from "../../either/right/unwrap.mjs";
|
|
8
4
|
import { justExec } from "../../common/justExec.mjs";
|
|
9
5
|
import { memo } from "../../common/memo.mjs";
|
|
10
6
|
import { ErrorSymbol } from "../../dataStructure/common/resultSymbol.mjs";
|
|
11
|
-
import { createGetErrorHandler } from "../../dataStructure/common/error.mjs";
|
|
7
|
+
import { ErrorPromise, createGetErrorHandler } from "../../dataStructure/common/error/base.mjs";
|
|
12
8
|
import { createStructure } from "../../dataStructure/structure/base.mjs";
|
|
13
9
|
import { NonEncodableStringStructure } from "../../dataStructure/structure/defaults/nonEncodableString.mjs";
|
|
14
10
|
import { ObjectStructure } from "../../dataStructure/structure/defaults/object.mjs";
|
|
@@ -16,13 +12,6 @@ import { createKind } from "../kind.mjs";
|
|
|
16
12
|
//#region scripts/modeling/entity/base.ts
|
|
17
13
|
const entityKind = createKind("entity");
|
|
18
14
|
const entityStructureKind = createKind("entity-structure");
|
|
19
|
-
var EncodeEntityError = class extends parentClass(createKind("encode-entity-error"), Error) {
|
|
20
|
-
error;
|
|
21
|
-
constructor(error) {
|
|
22
|
-
super(void 0, "An error occurred while encoding an Entity. This can only happen if you are bypassing the type system.");
|
|
23
|
-
this.error = error;
|
|
24
|
-
}
|
|
25
|
-
};
|
|
26
15
|
const EntityStructure = createStructure(entityStructureKind, ({ init }) => (name, shape) => init({
|
|
27
16
|
inner: memo(() => ObjectStructure({
|
|
28
17
|
...shape(),
|
|
@@ -33,6 +22,7 @@ const EntityStructure = createStructure(entityStructureKind, ({ init }) => (name
|
|
|
33
22
|
executeCheck: (self, data, errorHandler) => self.definition.inner.value.executeCheck(data, errorHandler),
|
|
34
23
|
executeEncode: (self, codecContext, data, errorHandler) => self.definition.inner.value.executeEncode(codecContext, data, errorHandler),
|
|
35
24
|
executeDecode: (self, codecContext, data, errorHandler) => self.definition.inner.value.executeDecode(codecContext, data, errorHandler),
|
|
25
|
+
executeParse: (self, codecContext, data, errorHandler) => self.definition.inner.value.executeParse(codecContext, data, errorHandler),
|
|
36
26
|
isAsynchronous: (self) => self.definition.inner.value.isAsynchronous()
|
|
37
27
|
}, {
|
|
38
28
|
name,
|
|
@@ -51,7 +41,7 @@ const EntityStructure = createStructure(entityStructureKind, ({ init }) => (name
|
|
|
51
41
|
...data,
|
|
52
42
|
[entityKind.runTimeKey]: name
|
|
53
43
|
} : data, errorHandler);
|
|
54
|
-
if (result instanceof Promise) return left("async-error",
|
|
44
|
+
if (result instanceof Promise) return left("async-error", new ErrorPromise());
|
|
55
45
|
if (result === ErrorSymbol) return left("map-error", errorHandler().createError());
|
|
56
46
|
return right("map-success", result);
|
|
57
47
|
},
|
|
@@ -62,7 +52,7 @@ const EntityStructure = createStructure(entityStructureKind, ({ init }) => (name
|
|
|
62
52
|
[entityKind.runTimeKey]: name
|
|
63
53
|
} : data;
|
|
64
54
|
const result = self.executeCheck(formattedData, errorHandler);
|
|
65
|
-
if (result instanceof Promise) return left("async-error",
|
|
55
|
+
if (result instanceof Promise) return left("async-error", new ErrorPromise());
|
|
66
56
|
if (result === ErrorSymbol) return left("map-error", errorHandler().createError());
|
|
67
57
|
return right("map-success", formattedData);
|
|
68
58
|
},
|
|
@@ -91,11 +81,16 @@ const EntityStructure = createStructure(entityStructureKind, ({ init }) => (name
|
|
|
91
81
|
if (await self.executeCheck(formattedData, errorHandler) === ErrorSymbol) return left("map-error", errorHandler().createError());
|
|
92
82
|
return right("map-success", formattedData);
|
|
93
83
|
},
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
84
|
+
update: (self, ...args) => {
|
|
85
|
+
if (args.length === 1) {
|
|
86
|
+
const [update] = args;
|
|
87
|
+
return (input) => self.update(input, update);
|
|
88
|
+
}
|
|
89
|
+
const [input, update] = args;
|
|
90
|
+
const updatedEntity = { [entityKind.runTimeKey]: name };
|
|
91
|
+
for (const key of self.definition.inner.value.definition.keys) updatedEntity[key] = update[key] === void 0 ? input[key] : update[key];
|
|
92
|
+
return updatedEntity;
|
|
98
93
|
}
|
|
99
94
|
}));
|
|
100
95
|
//#endregion
|
|
101
|
-
export {
|
|
96
|
+
export { EntityStructure, entityKind, entityStructureKind };
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { Entity, EntityStructure } from './base';
|
|
2
2
|
import { NewType } from '../newType';
|
|
3
|
+
import { ObjectTag } from '../taggedObject';
|
|
3
4
|
import type * as DCommon from '../../common';
|
|
4
5
|
import type * as DDataStructure from '../../dataStructure';
|
|
5
6
|
import type * as DString from '../../string';
|
|
6
|
-
export type ForbiddenMissingNewTypeInEntityShape<GenericValue extends unknown, GenericPath extends readonly string[] = readonly []> = GenericValue extends NewType ? never : GenericValue extends object ? DCommon.
|
|
7
|
-
DCommon.IsExtends<GenericValue,
|
|
8
|
-
DCommon.
|
|
9
|
-
DCommon.IsExtends<keyof GenericValue, string>,
|
|
10
|
-
DCommon.Not<DCommon.IsExtends<DCommon.AnyFunction, GenericValue[keyof GenericValue]>>
|
|
11
|
-
]>
|
|
7
|
+
export type ForbiddenMissingNewTypeInEntityShape<GenericValue extends unknown, GenericPath extends readonly string[] = readonly []> = GenericValue extends (ObjectTag | NewType | null | undefined | Entity) ? never : GenericValue extends readonly (infer InferredElement)[] ? ForbiddenMissingNewTypeInEntityShape<InferredElement, readonly [...GenericPath, "[number]"]> : GenericValue extends object ? DCommon.And<[
|
|
8
|
+
DCommon.IsExtends<keyof GenericValue, string>,
|
|
9
|
+
DCommon.Not<DCommon.IsExtends<DCommon.AnyFunction, GenericValue[keyof GenericValue]>>
|
|
12
10
|
]> extends true ? {
|
|
13
|
-
[Prop in keyof GenericValue]
|
|
14
|
-
}[keyof GenericValue] :
|
|
11
|
+
[Prop in keyof GenericValue]-?: ForbiddenMissingNewTypeInEntityShape<GenericValue[Prop], readonly [...GenericPath, `${Extract<Prop, string | number>}`]>;
|
|
12
|
+
}[keyof GenericValue] : DCommon.ComputedTypeError<`Value at '${DString.Join<GenericPath, ".">}' is not a NewType.`> : DCommon.ComputedTypeError<`Value at '${DString.Join<GenericPath, ".">}' is not a NewType.`>;
|
|
15
13
|
export declare function createEntity<GenericName extends Capitalize<string>, GenericShape extends DDataStructure.ShapeObjectStructure>(name: GenericName, shape: () => (GenericShape & DCommon.NeverCoalescing<ForbiddenMissingNewTypeInEntityShape<DDataStructure.ShapeObjectStructureValue<GenericShape>>, unknown>)): EntityStructure<GenericName, DDataStructure.ShapeObjectStructureValue<GenericShape & DCommon.NeverCoalescing<ForbiddenMissingNewTypeInEntityShape<DDataStructure.ShapeObjectStructureValue<GenericShape>, readonly []>, unknown>>>;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
const require_kind = require("../kind.cjs");
|
|
2
2
|
const require_helper = require("./helper.cjs");
|
|
3
3
|
const require_helper$1 = require("../newType/helper.cjs");
|
|
4
|
-
const require_base = require("../flag/base.cjs");
|
|
5
4
|
//#region scripts/modeling/entity/namespace.ts
|
|
6
5
|
const namespaceKind = require_kind.createKind("namespace");
|
|
7
6
|
function createEntityNamespace(entityName) {
|
|
@@ -9,7 +8,6 @@ function createEntityNamespace(entityName) {
|
|
|
9
8
|
name: entityName,
|
|
10
9
|
createNewType: (name, structure, newTypeConstraints = []) => require_helper$1.createNewType(`${entityName}${name}`, structure, newTypeConstraints),
|
|
11
10
|
createEntity: (shape) => require_helper.createEntity(entityName, shape),
|
|
12
|
-
createFlag: (name) => require_base.createFlag(`${entityName}${name}`),
|
|
13
11
|
[namespaceKind.runTimeKey]: null
|
|
14
12
|
};
|
|
15
13
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { ForbiddenTopLevelNewType, NewTypeStructure } from '../newType';
|
|
2
2
|
import { ForbiddenMissingNewTypeInEntityShape } from './helper';
|
|
3
3
|
import { EntityStructure } from './base';
|
|
4
|
-
import { FlagHandler } from '../flag';
|
|
5
4
|
import type * as DCommon from '../../common';
|
|
6
5
|
import type * as DDataStructure from '../../dataStructure';
|
|
7
6
|
import type * as DKind from '../../kind';
|
|
@@ -10,6 +9,5 @@ export interface EntityNamespace<GenericEntityName extends Capitalize<string> =
|
|
|
10
9
|
readonly name: GenericEntityName;
|
|
11
10
|
createNewType<GenericName extends Capitalize<string>, GenericStructure extends DDataStructure.Structure, const GenericNewTypeConstraint extends readonly DDataStructure.Constraint<DDataStructure.StructureValue<GenericStructure>>[] = readonly []>(name: (GenericName & DCommon.NeverCoalescing<ForbiddenTopLevelNewType<DDataStructure.StructureValue<GenericStructure>>, unknown>), structure: GenericStructure, newTypeConstraints?: GenericNewTypeConstraint): NewTypeStructure<`${GenericEntityName}${GenericName}`, DDataStructure.StructureValue<GenericStructure>, GenericNewTypeConstraint>;
|
|
12
11
|
createEntity<GenericShape extends DDataStructure.ShapeObjectStructure>(shape: () => (GenericShape & DCommon.NeverCoalescing<ForbiddenMissingNewTypeInEntityShape<DDataStructure.ShapeObjectStructureValue<GenericShape>>, unknown>)): EntityStructure<GenericEntityName, DDataStructure.ShapeObjectStructureValue<GenericShape>>;
|
|
13
|
-
createFlag<GenericName extends Capitalize<string>, GenericEntityStructure extends EntityStructure<GenericEntityName>, GenericPayload extends unknown = {}>(name: DCommon.IsEqual<GenericName, Capitalize<string>> extends true ? never : NoInfer<GenericName>): FlagHandler<`${GenericEntityName}${GenericName}`, DDataStructure.StructureValue<GenericEntityStructure>, GenericPayload>;
|
|
14
12
|
}
|
|
15
13
|
export declare function createEntityNamespace<GenericName extends Capitalize<string>>(entityName: GenericName): EntityNamespace<GenericName>;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { createKind } from "../kind.mjs";
|
|
2
2
|
import { createEntity } from "./helper.mjs";
|
|
3
3
|
import { createNewType } from "../newType/helper.mjs";
|
|
4
|
-
import { createFlag } from "../flag/base.mjs";
|
|
5
4
|
//#region scripts/modeling/entity/namespace.ts
|
|
6
5
|
const namespaceKind = createKind("namespace");
|
|
7
6
|
function createEntityNamespace(entityName) {
|
|
@@ -9,7 +8,6 @@ function createEntityNamespace(entityName) {
|
|
|
9
8
|
name: entityName,
|
|
10
9
|
createNewType: (name, structure, newTypeConstraints = []) => createNewType(`${entityName}${name}`, structure, newTypeConstraints),
|
|
11
10
|
createEntity: (shape) => createEntity(entityName, shape),
|
|
12
|
-
createFlag: (name) => createFlag(`${entityName}${name}`),
|
|
13
11
|
[namespaceKind.runTimeKey]: null
|
|
14
12
|
};
|
|
15
13
|
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
const require_create = require("../../either/right/create.cjs");
|
|
2
|
+
const require_kind = require("../kind.cjs");
|
|
3
|
+
//#region scripts/modeling/fact/base.ts
|
|
4
|
+
const factKind = require_kind.createKind("fact");
|
|
5
|
+
const factHandlerKind = require_kind.createKind("fact-handler");
|
|
6
|
+
function createFact(name) {
|
|
7
|
+
function applyFact(...args) {
|
|
8
|
+
if (args.length === 1) {
|
|
9
|
+
const [payload] = args;
|
|
10
|
+
return (entity) => applyFact(entity, payload);
|
|
11
|
+
}
|
|
12
|
+
const [entity, payload] = args;
|
|
13
|
+
const entityWithFact = {
|
|
14
|
+
...entity,
|
|
15
|
+
[factKind.runTimeKey]: {
|
|
16
|
+
name,
|
|
17
|
+
payload
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
return require_create.right(`fact-result-${name}`, entityWithFact);
|
|
21
|
+
}
|
|
22
|
+
return (createRun) => ({
|
|
23
|
+
name,
|
|
24
|
+
run: createRun({ applyFact }),
|
|
25
|
+
getPayload(entity) {
|
|
26
|
+
return factKind.getValue(entity).payload;
|
|
27
|
+
},
|
|
28
|
+
has(entity) {
|
|
29
|
+
return factKind.has(entity) && factKind.getValue(entity).name === name;
|
|
30
|
+
},
|
|
31
|
+
[factHandlerKind.runTimeKey]: null
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
exports.createFact = createFact;
|
|
36
|
+
exports.factKind = factKind;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { EntityStructure, Entity } from '../entity';
|
|
2
|
+
import type * as DCommon from '../../common';
|
|
3
|
+
import type * as DKind from '../../kind';
|
|
4
|
+
import type * as DDataStructure from '../../dataStructure';
|
|
5
|
+
import * as DEither from '../../either';
|
|
6
|
+
export interface FactValue<GenericName extends string = string, GenericPayload extends unknown = unknown> {
|
|
7
|
+
name: GenericName;
|
|
8
|
+
payload: GenericPayload;
|
|
9
|
+
}
|
|
10
|
+
export declare const factKind: DKind.Handler<DKind.Definition<"@DuplojsLangModeling/fact", FactValue<string, unknown>>>;
|
|
11
|
+
export interface Fact<GenericName extends Capitalize<string> = Capitalize<string>, GenericValue extends unknown = unknown> extends DKind.Kind<typeof factKind, FactValue<GenericName, GenericValue>> {
|
|
12
|
+
}
|
|
13
|
+
export type GetFactName<GenericHandler extends Fact> = GenericHandler extends Fact<infer InferredName extends Capitalize<string>> ? InferredName : never;
|
|
14
|
+
export type GetFactPayload<GenericHandler extends Fact> = GenericHandler extends Fact<any, infer InferredPayload extends object> ? InferredPayload : never;
|
|
15
|
+
export type FactRun<GenericName extends string = string> = DCommon.AnyFunction<any[], DEither.Left | DEither.Right<`fact-result-${GenericName}`, unknown>>;
|
|
16
|
+
declare const factHandlerKind: DKind.Handler<DKind.Definition<"@DuplojsLangModeling/fact-handler", unknown>>;
|
|
17
|
+
export interface FactHandler<GenericName extends Capitalize<string> = Capitalize<string>, GenericEntity extends Entity = Entity, GenericPayload extends object = object, GenericRun extends FactRun<GenericName> = FactRun<GenericName>> extends DKind.Kind<typeof factHandlerKind> {
|
|
18
|
+
readonly name: GenericName;
|
|
19
|
+
run: GenericRun;
|
|
20
|
+
getPayload<GenericInputEntity extends Fact<GenericName, GenericPayload>>(entity: GenericInputEntity): DKind.GetValue<typeof factKind, GenericInputEntity>["payload"];
|
|
21
|
+
has<GenericInputEntity extends GenericEntity>(entity: GenericInputEntity): entity is Extract<GenericInputEntity, Fact<GenericName>>;
|
|
22
|
+
}
|
|
23
|
+
type RemoveFact<GenericEntity extends Entity> = GenericEntity extends Fact<infer InferredName, infer InferredValue> ? GenericEntity extends (infer InferredEntity & Fact<InferredName, InferredValue>) ? InferredEntity : GenericEntity : GenericEntity;
|
|
24
|
+
export interface CreateFactConstructorParams<GenericName extends Capitalize<string> = Capitalize<string>, GenericEntity extends Entity = Entity, GenericPayload extends object = object> {
|
|
25
|
+
applyFact<GenericInputEntity extends GenericEntity, GenericInputPayload extends GenericPayload>(payload: GenericInputPayload): (entity: GenericInputEntity) => DEither.Right<`fact-result-${GenericName}`, RemoveFact<GenericInputEntity> & Fact<GenericName, GenericInputPayload>>;
|
|
26
|
+
applyFact<GenericInputEntity extends GenericEntity, GenericInputPayload extends GenericPayload>(entity: GenericInputEntity, payload: GenericInputPayload): DEither.Right<`fact-result-${GenericName}`, RemoveFact<GenericInputEntity> & Fact<GenericName, GenericInputPayload>>;
|
|
27
|
+
}
|
|
28
|
+
export declare function createFact<GenericFact extends Fact, GenericEntityStructure extends EntityStructure>(name: GetFactName<GenericFact>): <GenericRun extends FactRun<GetFactName<GenericFact>>>(createRun: (params: CreateFactConstructorParams<GetFactName<GenericFact>, DDataStructure.StructureValue<GenericEntityStructure>, GetFactPayload<GenericFact>>) => GenericRun) => FactHandler<GetFactName<GenericFact>, DDataStructure.StructureValue<GenericEntityStructure>, GetFactPayload<GenericFact>, GenericRun>;
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { right } from "../../either/right/create.mjs";
|
|
2
|
+
import { createKind } from "../kind.mjs";
|
|
3
|
+
//#region scripts/modeling/fact/base.ts
|
|
4
|
+
const factKind = createKind("fact");
|
|
5
|
+
const factHandlerKind = createKind("fact-handler");
|
|
6
|
+
function createFact(name) {
|
|
7
|
+
function applyFact(...args) {
|
|
8
|
+
if (args.length === 1) {
|
|
9
|
+
const [payload] = args;
|
|
10
|
+
return (entity) => applyFact(entity, payload);
|
|
11
|
+
}
|
|
12
|
+
const [entity, payload] = args;
|
|
13
|
+
const entityWithFact = {
|
|
14
|
+
...entity,
|
|
15
|
+
[factKind.runTimeKey]: {
|
|
16
|
+
name,
|
|
17
|
+
payload
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
return right(`fact-result-${name}`, entityWithFact);
|
|
21
|
+
}
|
|
22
|
+
return (createRun) => ({
|
|
23
|
+
name,
|
|
24
|
+
run: createRun({ applyFact }),
|
|
25
|
+
getPayload(entity) {
|
|
26
|
+
return factKind.getValue(entity).payload;
|
|
27
|
+
},
|
|
28
|
+
has(entity) {
|
|
29
|
+
return factKind.has(entity) && factKind.getValue(entity).name === name;
|
|
30
|
+
},
|
|
31
|
+
[factHandlerKind.runTimeKey]: null
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
export { createFact, factKind };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './base';
|