@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.
Files changed (212) hide show
  1. package/dist/array/concat.d.ts +2 -2
  2. package/dist/array/flat.d.ts +1 -1
  3. package/dist/array/flatMap.d.ts +2 -2
  4. package/dist/array/from.d.ts +1 -1
  5. package/dist/array/length.d.ts +3 -2
  6. package/dist/array/push.d.ts +4 -2
  7. package/dist/chrono/createDate.cjs +1 -1
  8. package/dist/chrono/createDate.mjs +1 -1
  9. package/dist/chrono/operators/addTime.d.ts +2 -4
  10. package/dist/common/constraint/cast/index.d.ts +4 -4
  11. package/dist/common/constraint/cast/string.d.ts +4 -0
  12. package/dist/common/constraint/infer/index.d.ts +2 -1
  13. package/dist/common/constraint/infer/string.d.ts +1 -1
  14. package/dist/common/constraint/types/index.d.ts +1 -0
  15. package/dist/common/constraint/types/maybe.d.ts +2 -0
  16. package/dist/common/formData.d.ts +2 -1
  17. package/dist/common/memo.cjs +3 -2
  18. package/dist/common/memo.mjs +3 -2
  19. package/dist/common/memoPromise.cjs +3 -2
  20. package/dist/common/memoPromise.mjs +3 -2
  21. package/dist/common/timeout.cjs +2 -2
  22. package/dist/common/timeout.d.ts +1 -1
  23. package/dist/common/timeout.mjs +2 -2
  24. package/dist/common/types/applyPromiseIf.d.ts +1 -0
  25. package/dist/common/types/index.d.ts +1 -0
  26. package/dist/common/types/json.d.ts +12 -1
  27. package/dist/dataStructure/common/codec/defaults/string.cjs +1 -1
  28. package/dist/dataStructure/common/codec/defaults/string.d.ts +1 -1
  29. package/dist/dataStructure/common/codec/defaults/string.mjs +1 -1
  30. package/dist/dataStructure/common/{error.cjs → error/base.cjs} +18 -3
  31. package/dist/dataStructure/common/{error.d.ts → error/base.d.ts} +14 -7
  32. package/dist/dataStructure/common/{error.mjs → error/base.mjs} +17 -4
  33. package/dist/dataStructure/common/error/defaultInterpreter.cjs +87 -0
  34. package/dist/dataStructure/common/error/defaultInterpreter.d.ts +60 -0
  35. package/dist/dataStructure/common/error/defaultInterpreter.mjs +86 -0
  36. package/dist/dataStructure/common/error/index.d.ts +3 -0
  37. package/dist/dataStructure/common/{errorInterpreter.cjs → error/interpreter.cjs} +11 -12
  38. package/dist/dataStructure/common/error/interpreter.d.ts +32 -0
  39. package/dist/dataStructure/common/{errorInterpreter.mjs → error/interpreter.mjs} +9 -10
  40. package/dist/dataStructure/common/index.d.ts +0 -1
  41. package/dist/dataStructure/constraint/types/constraints.d.ts +1 -0
  42. package/dist/dataStructure/fundamentalType/types/fundamentalTypes.d.ts +1 -0
  43. package/dist/dataStructure/helpers/extend.cjs +1 -1
  44. package/dist/dataStructure/helpers/extend.d.ts +1 -1
  45. package/dist/dataStructure/helpers/extend.mjs +1 -1
  46. package/dist/dataStructure/helpers/index.d.ts +1 -0
  47. package/dist/dataStructure/helpers/partial.cjs +1 -1
  48. package/dist/dataStructure/helpers/partial.mjs +1 -1
  49. package/dist/dataStructure/helpers/required.cjs +1 -1
  50. package/dist/dataStructure/helpers/required.mjs +1 -1
  51. package/dist/dataStructure/helpers/typeStructureIdentifier.cjs +14 -0
  52. package/dist/dataStructure/helpers/typeStructureIdentifier.d.ts +6 -0
  53. package/dist/dataStructure/helpers/typeStructureIdentifier.mjs +14 -0
  54. package/dist/dataStructure/index.cjs +45 -33
  55. package/dist/dataStructure/index.mjs +10 -3
  56. package/dist/dataStructure/structure/base.cjs +31 -19
  57. package/dist/dataStructure/structure/base.d.ts +16 -16
  58. package/dist/dataStructure/structure/base.mjs +25 -13
  59. package/dist/dataStructure/structure/defaults/array.cjs +10 -0
  60. package/dist/dataStructure/structure/defaults/array.mjs +10 -0
  61. package/dist/dataStructure/structure/defaults/lazy.cjs +1 -0
  62. package/dist/dataStructure/structure/defaults/lazy.mjs +1 -0
  63. package/dist/dataStructure/structure/defaults/nonEncodableString.cjs +1 -0
  64. package/dist/dataStructure/structure/defaults/nonEncodableString.mjs +1 -0
  65. package/dist/dataStructure/structure/defaults/object.cjs +18 -7
  66. package/dist/dataStructure/structure/defaults/object.d.ts +2 -1
  67. package/dist/dataStructure/structure/defaults/object.mjs +18 -7
  68. package/dist/dataStructure/structure/defaults/record.cjs +20 -7
  69. package/dist/dataStructure/structure/defaults/record.mjs +20 -7
  70. package/dist/dataStructure/structure/defaults/type.cjs +1 -0
  71. package/dist/dataStructure/structure/defaults/type.mjs +1 -0
  72. package/dist/dataStructure/structure/defaults/union.cjs +26 -6
  73. package/dist/dataStructure/structure/defaults/union.mjs +21 -1
  74. package/dist/dataStructure/structure/types/value.d.ts +2 -0
  75. package/dist/dataStructure/type/types/types.d.ts +1 -0
  76. package/dist/either/index.cjs +1 -1
  77. package/dist/either/index.mjs +1 -1
  78. package/dist/either/left/create.d.ts +2 -1
  79. package/dist/either/left/none.cjs +2 -2
  80. package/dist/either/left/none.d.ts +2 -2
  81. package/dist/either/left/none.mjs +2 -2
  82. package/dist/either/right/create.d.ts +2 -1
  83. package/dist/either/types/index.d.ts +1 -0
  84. package/dist/either/types/mayBe.d.ts +1 -1
  85. package/dist/invocation/evidence.d.ts +1 -1
  86. package/dist/invocation/flow/base.cjs +4 -4
  87. package/dist/invocation/flow/base.d.ts +1 -1
  88. package/dist/invocation/flow/base.mjs +4 -4
  89. package/dist/invocation/flow/controller/defaults/debounce.cjs +1 -1
  90. package/dist/invocation/flow/controller/defaults/debounce.mjs +1 -1
  91. package/dist/invocation/flow/controller/defaults/throttling.cjs +1 -1
  92. package/dist/invocation/flow/controller/defaults/throttling.mjs +1 -1
  93. package/dist/invocation/index.cjs +10 -0
  94. package/dist/invocation/index.d.ts +2 -0
  95. package/dist/invocation/index.mjs +7 -1
  96. package/dist/invocation/reader.cjs +5 -1
  97. package/dist/invocation/reader.d.ts +5 -3
  98. package/dist/invocation/reader.mjs +5 -1
  99. package/dist/invocation/resolver.cjs +31 -0
  100. package/dist/invocation/resolver.d.ts +14 -0
  101. package/dist/invocation/resolver.mjs +31 -0
  102. package/dist/invocation/signature.cjs +8 -0
  103. package/dist/invocation/signature.d.ts +7 -0
  104. package/dist/invocation/signature.mjs +8 -0
  105. package/dist/modeling/entity/base.cjs +19 -25
  106. package/dist/modeling/entity/base.d.ts +15 -14
  107. package/dist/modeling/entity/base.mjs +14 -19
  108. package/dist/modeling/entity/helper.d.ts +6 -8
  109. package/dist/modeling/entity/namespace.cjs +0 -2
  110. package/dist/modeling/entity/namespace.d.ts +0 -2
  111. package/dist/modeling/entity/namespace.mjs +0 -2
  112. package/dist/modeling/fact/base.cjs +36 -0
  113. package/dist/modeling/fact/base.d.ts +29 -0
  114. package/dist/modeling/fact/base.mjs +35 -0
  115. package/dist/modeling/fact/index.d.ts +1 -0
  116. package/dist/modeling/flag/base.cjs +1 -1
  117. package/dist/modeling/flag/base.d.ts +8 -8
  118. package/dist/modeling/flag/base.mjs +1 -1
  119. package/dist/modeling/index.cjs +17 -18
  120. package/dist/modeling/index.d.ts +1 -0
  121. package/dist/modeling/index.mjs +8 -8
  122. package/dist/modeling/newType/base.cjs +11 -28
  123. package/dist/modeling/newType/base.d.ts +8 -15
  124. package/dist/modeling/newType/base.mjs +5 -20
  125. package/dist/modeling/taggedObject/base.cjs +19 -25
  126. package/dist/modeling/taggedObject/base.d.ts +12 -14
  127. package/dist/modeling/taggedObject/base.mjs +14 -19
  128. package/dist/object/assign.d.ts +3 -3
  129. package/dist/object/deepOverride.cjs +33 -0
  130. package/dist/object/deepOverride.d.ts +20 -0
  131. package/dist/object/deepOverride.mjs +33 -0
  132. package/dist/object/entries.d.ts +3 -3
  133. package/dist/object/index.cjs +4 -1
  134. package/dist/object/index.d.ts +1 -0
  135. package/dist/object/index.mjs +4 -2
  136. package/dist/object/isSimple.cjs +1 -1
  137. package/dist/object/isSimple.mjs +1 -1
  138. package/dist/object/keys.d.ts +1 -1
  139. package/dist/object/override.cjs +1 -1
  140. package/dist/object/override.d.ts +5 -2
  141. package/dist/object/override.mjs +1 -1
  142. package/dist/object/types/assign.d.ts +2 -0
  143. package/dist/object/types/forbiddenKey.d.ts +1 -1
  144. package/dist/object/types/hasKeySignature.d.ts +1 -0
  145. package/dist/object/types/index.d.ts +4 -1
  146. package/dist/object/types/keyofWithoutSignature.d.ts +3 -0
  147. package/dist/object/types/override.d.ts +4 -0
  148. package/dist/object/values.d.ts +1 -1
  149. package/dist/path/create.cjs +11 -0
  150. package/dist/path/create.d.ts +3 -0
  151. package/dist/path/create.mjs +11 -0
  152. package/dist/path/createAbsolute.cjs +12 -0
  153. package/dist/path/createAbsolute.d.ts +3 -0
  154. package/dist/path/createAbsolute.mjs +12 -0
  155. package/dist/path/createAbsoluteOrThrow.cjs +22 -0
  156. package/dist/path/createAbsoluteOrThrow.d.ts +9 -0
  157. package/dist/path/createAbsoluteOrThrow.mjs +21 -0
  158. package/dist/path/createOrThrow.cjs +22 -0
  159. package/dist/path/createOrThrow.d.ts +9 -0
  160. package/dist/path/createOrThrow.mjs +21 -0
  161. package/dist/path/createSegment.cjs +12 -0
  162. package/dist/path/createSegment.d.ts +3 -0
  163. package/dist/path/createSegment.mjs +12 -0
  164. package/dist/path/createSegmentOrThrow.cjs +22 -0
  165. package/dist/path/createSegmentOrThrow.d.ts +9 -0
  166. package/dist/path/createSegmentOrThrow.mjs +21 -0
  167. package/dist/path/declareAbsolutePath.cjs +6 -0
  168. package/dist/path/declareAbsolutePath.d.ts +3 -0
  169. package/dist/path/declareAbsolutePath.mjs +6 -0
  170. package/dist/path/declarePath.cjs +6 -0
  171. package/dist/path/declarePath.d.ts +3 -0
  172. package/dist/path/declarePath.mjs +6 -0
  173. package/dist/path/declareSegment.cjs +6 -0
  174. package/dist/path/declareSegment.d.ts +3 -0
  175. package/dist/path/declareSegment.mjs +6 -0
  176. package/dist/path/index.cjs +39 -3
  177. package/dist/path/index.d.ts +10 -0
  178. package/dist/path/index.mjs +27 -4
  179. package/dist/path/kind.cjs +4 -0
  180. package/dist/path/kind.d.ts +2 -0
  181. package/dist/path/kind.mjs +5 -0
  182. package/dist/pattern/index.cjs +6 -0
  183. package/dist/pattern/index.d.ts +2 -0
  184. package/dist/pattern/index.mjs +5 -1
  185. package/dist/pattern/match/builder.cjs +1 -1
  186. package/dist/pattern/match/builder.mjs +1 -1
  187. package/dist/pattern/matchWithEntityOtherwise.d.ts +2 -2
  188. package/dist/pattern/matchWithFact.cjs +12 -0
  189. package/dist/pattern/matchWithFact.d.ts +12 -0
  190. package/dist/pattern/matchWithFact.mjs +12 -0
  191. package/dist/pattern/matchWithFactOtherwise.cjs +13 -0
  192. package/dist/pattern/matchWithFactOtherwise.d.ts +14 -0
  193. package/dist/pattern/matchWithFactOtherwise.mjs +13 -0
  194. package/dist/pattern/matchWithNumberOtherwise.d.ts +2 -2
  195. package/dist/pattern/matchWithStringOtherwise.d.ts +2 -2
  196. package/dist/pattern/matchWithTaggedObjectOtherwise.d.ts +2 -2
  197. package/dist/pattern/types/complexUnMatchedValue/getIncompleteUnion.d.ts +8 -8
  198. package/dist/string/capitalize.d.ts +1 -1
  199. package/dist/string/concat.d.ts +2 -2
  200. package/dist/string/prepend.d.ts +2 -2
  201. package/dist/string/split.cjs +1 -0
  202. package/dist/string/split.d.ts +3 -3
  203. package/dist/string/split.mjs +1 -0
  204. package/dist/string/toLowerCase.d.ts +1 -1
  205. package/dist/string/toUpperCase.d.ts +1 -1
  206. package/dist/string/types/IsAllowedString.d.ts +4 -2
  207. package/dist/string/uncapitalize.d.ts +1 -1
  208. package/dist/tuple/types/map.d.ts +1 -1
  209. package/package.json +16 -30
  210. package/dist/dataStructure/common/errorInterpreter.d.ts +0 -36
  211. package/dist/object/types/assignObjects.d.ts +0 -2
  212. /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
- Uncapitalize<Extract<Prop, string>>,
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 = any, GenericOutput extends unknown = unknown> extends DKind.Kind<typeof readerKind> {
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 require_error = require("../../dataStructure/common/error.cjs");
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
- var EncodeEntityError = class extends require_parentClass.parentClass(require_kind.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
- 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 = require_error.createGetErrorHandler();
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", void 0);
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 = require_error.createGetErrorHandler();
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", void 0);
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 = require_error.createGetErrorHandler();
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 = require_error.createGetErrorHandler();
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
- encodeEntity: async (self, codecs, data) => {
95
- const result = await self.asyncEncode(codecs, data);
96
- if (require_is.isLeft(result)) throw new EncodeEntityError(require_unwrap.unwrapLeft(result));
97
- return require_unwrap$1.unwrapRight(result);
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<DKind.Remove<DDataStructure.StructureValue<this>>>, GenericCodecs>) => (DEither.Right<"map-success", DDataStructure.StructureValue<this>> | DEither.Left<"async-error", undefined> | DEither.Left<"map-error", DDataStructure.Error>);
40
- decodeMap<GenericCodecs extends DDataStructure.Codecs>(codecs: GenericCodecs, data: DDataStructure.EncodedValue<EntityMap<DKind.Remove<DDataStructure.StructureValue<this>>>, GenericCodecs>): (DEither.Right<"map-success", DDataStructure.StructureValue<this>> | DEither.Left<"async-error", undefined> | DEither.Left<"map-error", DDataStructure.Error>);
41
- map(data: EntityMap<DKind.Remove<DDataStructure.StructureValue<this>>>): (DEither.Right<"map-success", DDataStructure.StructureValue<this>> | DEither.Left<"async-error", undefined> | DEither.Left<"map-error", DDataStructure.Error>);
42
- asyncDecodeMap<GenericCodecs extends DDataStructure.Codecs>(codecs: GenericCodecs): (data: DDataStructure.EncodedValue<EntityMap<DKind.Remove<DDataStructure.StructureValue<this>>>, GenericCodecs>) => Promise<DEither.Right<"map-success", DDataStructure.StructureValue<this>> | DEither.Left<"map-error", DDataStructure.Error>>;
43
- asyncDecodeMap<GenericCodecs extends DDataStructure.Codecs>(codecs: GenericCodecs, data: DDataStructure.EncodedValue<EntityMap<DKind.Remove<DDataStructure.StructureValue<this>>>, GenericCodecs>): Promise<DEither.Right<"map-success", DDataStructure.StructureValue<this>> | DEither.Left<"map-error", DDataStructure.Error>>;
44
- asyncMap(data: EntityMap<DKind.Remove<DDataStructure.StructureValue<this>>>): Promise<DEither.Right<"map-success", DDataStructure.StructureValue<this>> | DEither.Left<"map-error", DDataStructure.Error>>;
45
- encodeEntity<GenericCodecs extends DDataStructure.Codecs>(codecs: GenericCodecs, data: DDataStructure.StructureValue<this>): Promise<DDataStructure.EncodedValue<EntityMap<DKind.Remove<DDataStructure.StructureValue<this>>>, GenericCodecs>>;
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", void 0);
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", void 0);
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
- encodeEntity: async (self, codecs, data) => {
95
- const result = await self.asyncEncode(codecs, data);
96
- if (isLeft(result)) throw new EncodeEntityError(unwrapLeft(result));
97
- return unwrapRight(result);
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 { EncodeEntityError, EntityStructure, entityKind, entityStructureKind };
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.Or<[
7
- DCommon.IsExtends<GenericValue, readonly any[]>,
8
- DCommon.And<[
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]: ForbiddenMissingNewTypeInEntityShape<GenericValue[Prop], readonly [...GenericPath, `${Extract<Prop, string | number>}`]>;
14
- }[keyof GenericValue] : GenericValue extends Entity ? never : DCommon.ComputedTypeError<`Value at '${DString.Join<GenericPath>}' is not a NewType.`> : DCommon.ComputedTypeError<`Value at '${DString.Join<GenericPath>}' is not a NewType.`>;
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';
@@ -18,7 +18,7 @@ function createFlag(name) {
18
18
  return {
19
19
  name,
20
20
  append,
21
- getValue(entity) {
21
+ getPayload(entity) {
22
22
  return flagKind.getValue(entity)[name];
23
23
  },
24
24
  has(entity) {