@thisisagile/easy 17.17.1 → 17.18.0

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 (113) hide show
  1. package/dist/{chunk-JVDKV5HE.mjs → chunk-3AB2A6WF.mjs} +9 -5
  2. package/dist/chunk-3AB2A6WF.mjs.map +1 -0
  3. package/dist/{chunk-SRXIPWW3.mjs → chunk-3Q26WV4F.mjs} +11 -5
  4. package/dist/chunk-3Q26WV4F.mjs.map +1 -0
  5. package/dist/{chunk-O75J6WWI.mjs → chunk-6LGUOSH3.mjs} +3 -3
  6. package/dist/{chunk-64S6C743.mjs → chunk-6TR4LD27.mjs} +3 -3
  7. package/dist/{chunk-YMTOGXYB.mjs → chunk-7JFDA4UI.mjs} +2 -2
  8. package/dist/{chunk-2KZ5UP6A.mjs → chunk-D5KAY6YW.mjs} +3 -3
  9. package/dist/{chunk-7KQ4QLP2.mjs → chunk-FDXSIWRM.mjs} +2 -2
  10. package/dist/{chunk-W5WWSCMG.mjs → chunk-IABTCMHB.mjs} +4 -4
  11. package/dist/{chunk-UGUAZFM4.mjs → chunk-KD36HS3N.mjs} +2 -2
  12. package/dist/{chunk-CRSP7OQT.mjs → chunk-KDK2E7CA.mjs} +2 -2
  13. package/dist/{chunk-LLTFR25V.mjs → chunk-LJPESIYZ.mjs} +2 -2
  14. package/dist/{chunk-K2QIYLIW.mjs → chunk-MBXA7ZCQ.mjs} +2 -2
  15. package/dist/{chunk-RBQOVMPC.mjs → chunk-MLAU6FXE.mjs} +2 -2
  16. package/dist/{chunk-CSKOVGAP.mjs → chunk-MMGVG4ZW.mjs} +2 -2
  17. package/dist/{chunk-Z56QALMP.mjs → chunk-OEL3QKBX.mjs} +4 -4
  18. package/dist/{chunk-HAXA65A3.mjs → chunk-OYQIOBV7.mjs} +2 -2
  19. package/dist/{chunk-RDLH6MXX.mjs → chunk-P2GDPTZ3.mjs} +2 -2
  20. package/dist/{chunk-WD4PRE6L.mjs → chunk-Q56PAJ4T.mjs} +2 -2
  21. package/dist/{chunk-L3BSQAT3.mjs → chunk-ROJDO7ZE.mjs} +2 -2
  22. package/dist/{chunk-GWZRZHFR.mjs → chunk-S33RXRXR.mjs} +7 -7
  23. package/dist/{chunk-B3AQ7EZQ.mjs → chunk-SEWX25XP.mjs} +2 -2
  24. package/dist/{chunk-UR544PJT.mjs → chunk-SGLNDTMQ.mjs} +2 -2
  25. package/dist/{chunk-3BJDTSKH.mjs → chunk-SVHSS4IV.mjs} +5 -5
  26. package/dist/{chunk-R2SXNUU3.mjs → chunk-T3CJ5MZK.mjs} +3 -3
  27. package/dist/{chunk-ECXNGUIP.mjs → chunk-TU7SVDUE.mjs} +4 -4
  28. package/dist/{chunk-XH6PFRYM.mjs → chunk-VAT2WY5Y.mjs} +3 -3
  29. package/dist/{chunk-IMREIDHQ.mjs → chunk-WIBQ7LKH.mjs} +3 -3
  30. package/dist/{chunk-ROTFIQND.mjs → chunk-ZZ65BSDI.mjs} +2 -2
  31. package/dist/data/Database.mjs +2 -2
  32. package/dist/data/InMemoryGateway.mjs +5 -5
  33. package/dist/domain/Audit.mjs +7 -7
  34. package/dist/domain/Child.mjs +5 -5
  35. package/dist/domain/DateTime.mjs +4 -4
  36. package/dist/domain/Entity.mjs +7 -7
  37. package/dist/domain/Repo.mjs +4 -4
  38. package/dist/domain/Struct.mjs +4 -4
  39. package/dist/domain/Typo.mjs +4 -4
  40. package/dist/http/CacheControl.mjs +5 -5
  41. package/dist/http/ContentType.mjs +2 -2
  42. package/dist/http/HttpStatus.mjs +2 -2
  43. package/dist/http/HttpVerb.mjs +2 -2
  44. package/dist/http/RequestOptions.mjs +3 -3
  45. package/dist/http/RestResult.mjs +5 -5
  46. package/dist/http/toResponse.mjs +6 -6
  47. package/dist/index.js +11 -4
  48. package/dist/index.js.map +1 -1
  49. package/dist/process/App.mjs +2 -2
  50. package/dist/process/Manage.mjs +5 -5
  51. package/dist/process/Scope.mjs +2 -2
  52. package/dist/process/Search.mjs +5 -5
  53. package/dist/process/UseCase.mjs +1 -1
  54. package/dist/resources/Req.mjs +4 -4
  55. package/dist/services/Api.mjs +13 -13
  56. package/dist/services/ApiGateway.mjs +16 -16
  57. package/dist/services/AxiosProvider.mjs +11 -11
  58. package/dist/services/MappedRouteGateway.mjs +17 -17
  59. package/dist/services/RouteGateway.mjs +17 -17
  60. package/dist/services/ViewRouteGateway.mjs +19 -19
  61. package/dist/sql/Column.mjs +4 -4
  62. package/dist/sql/Table.mjs +5 -5
  63. package/dist/sql/TableGateway.mjs +5 -5
  64. package/dist/types/CacheAge.mjs +5 -5
  65. package/dist/types/Case.mjs +3 -3
  66. package/dist/types/Enum.d.ts +8 -1
  67. package/dist/types/Enum.mjs +5 -3
  68. package/dist/types/Environment.mjs +1 -1
  69. package/dist/types/Exception.mjs +2 -2
  70. package/dist/types/Gateway.mjs +3 -3
  71. package/dist/types/IsEqual.mjs +4 -4
  72. package/dist/types/Number.mjs +4 -4
  73. package/dist/types/PageList.mjs +4 -4
  74. package/dist/types/Parser.mjs +3 -3
  75. package/dist/types/Repository.mjs +3 -3
  76. package/dist/types/Try.mjs +3 -3
  77. package/dist/types/Uri.mjs +3 -3
  78. package/dist/utils/View.d.ts +2 -1
  79. package/dist/utils/View.mjs +6 -6
  80. package/dist/validation/Contraints.mjs +4 -4
  81. package/dist/validation/Validate.mjs +3 -3
  82. package/dist/validation/When.mjs +3 -3
  83. package/package.json +1 -1
  84. package/src/types/Enum.ts +20 -6
  85. package/src/utils/View.ts +7 -1
  86. package/dist/chunk-JVDKV5HE.mjs.map +0 -1
  87. package/dist/chunk-SRXIPWW3.mjs.map +0 -1
  88. /package/dist/{chunk-O75J6WWI.mjs.map → chunk-6LGUOSH3.mjs.map} +0 -0
  89. /package/dist/{chunk-64S6C743.mjs.map → chunk-6TR4LD27.mjs.map} +0 -0
  90. /package/dist/{chunk-YMTOGXYB.mjs.map → chunk-7JFDA4UI.mjs.map} +0 -0
  91. /package/dist/{chunk-2KZ5UP6A.mjs.map → chunk-D5KAY6YW.mjs.map} +0 -0
  92. /package/dist/{chunk-7KQ4QLP2.mjs.map → chunk-FDXSIWRM.mjs.map} +0 -0
  93. /package/dist/{chunk-W5WWSCMG.mjs.map → chunk-IABTCMHB.mjs.map} +0 -0
  94. /package/dist/{chunk-UGUAZFM4.mjs.map → chunk-KD36HS3N.mjs.map} +0 -0
  95. /package/dist/{chunk-CRSP7OQT.mjs.map → chunk-KDK2E7CA.mjs.map} +0 -0
  96. /package/dist/{chunk-LLTFR25V.mjs.map → chunk-LJPESIYZ.mjs.map} +0 -0
  97. /package/dist/{chunk-K2QIYLIW.mjs.map → chunk-MBXA7ZCQ.mjs.map} +0 -0
  98. /package/dist/{chunk-RBQOVMPC.mjs.map → chunk-MLAU6FXE.mjs.map} +0 -0
  99. /package/dist/{chunk-CSKOVGAP.mjs.map → chunk-MMGVG4ZW.mjs.map} +0 -0
  100. /package/dist/{chunk-Z56QALMP.mjs.map → chunk-OEL3QKBX.mjs.map} +0 -0
  101. /package/dist/{chunk-HAXA65A3.mjs.map → chunk-OYQIOBV7.mjs.map} +0 -0
  102. /package/dist/{chunk-RDLH6MXX.mjs.map → chunk-P2GDPTZ3.mjs.map} +0 -0
  103. /package/dist/{chunk-WD4PRE6L.mjs.map → chunk-Q56PAJ4T.mjs.map} +0 -0
  104. /package/dist/{chunk-L3BSQAT3.mjs.map → chunk-ROJDO7ZE.mjs.map} +0 -0
  105. /package/dist/{chunk-GWZRZHFR.mjs.map → chunk-S33RXRXR.mjs.map} +0 -0
  106. /package/dist/{chunk-B3AQ7EZQ.mjs.map → chunk-SEWX25XP.mjs.map} +0 -0
  107. /package/dist/{chunk-UR544PJT.mjs.map → chunk-SGLNDTMQ.mjs.map} +0 -0
  108. /package/dist/{chunk-3BJDTSKH.mjs.map → chunk-SVHSS4IV.mjs.map} +0 -0
  109. /package/dist/{chunk-R2SXNUU3.mjs.map → chunk-T3CJ5MZK.mjs.map} +0 -0
  110. /package/dist/{chunk-ECXNGUIP.mjs.map → chunk-TU7SVDUE.mjs.map} +0 -0
  111. /package/dist/{chunk-XH6PFRYM.mjs.map → chunk-VAT2WY5Y.mjs.map} +0 -0
  112. /package/dist/{chunk-IMREIDHQ.mjs.map → chunk-WIBQ7LKH.mjs.map} +0 -0
  113. /package/dist/{chunk-ROTFIQND.mjs.map → chunk-ZZ65BSDI.mjs.map} +0 -0
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  asNumber
3
- } from "../chunk-B3AQ7EZQ.mjs";
4
- import "../chunk-2KZ5UP6A.mjs";
3
+ } from "../chunk-SEWX25XP.mjs";
4
+ import "../chunk-D5KAY6YW.mjs";
5
5
  import "../chunk-OFGI5FLG.mjs";
6
6
  import "../chunk-NCEWAKOZ.mjs";
7
7
  import "../chunk-Q3WMGUO2.mjs";
8
8
  import "../chunk-5HENJTR6.mjs";
9
- import "../chunk-LLTFR25V.mjs";
9
+ import "../chunk-LJPESIYZ.mjs";
10
10
  import "../chunk-WSBULPUZ.mjs";
11
11
  import "../chunk-NDCIZJXB.mjs";
12
12
  import "../chunk-MCCIBDEH.mjs";
13
- import "../chunk-JVDKV5HE.mjs";
13
+ import "../chunk-3AB2A6WF.mjs";
14
14
  import "../chunk-WTFW6DLP.mjs";
15
15
  import "../chunk-H2762RTS.mjs";
16
16
  import "../chunk-A7C3XND3.mjs";
@@ -5,17 +5,17 @@ import {
5
5
  toFilter,
6
6
  toPageList,
7
7
  toShortFilter
8
- } from "../chunk-CRSP7OQT.mjs";
9
- import "../chunk-2KZ5UP6A.mjs";
8
+ } from "../chunk-KDK2E7CA.mjs";
9
+ import "../chunk-D5KAY6YW.mjs";
10
10
  import "../chunk-OFGI5FLG.mjs";
11
11
  import "../chunk-NCEWAKOZ.mjs";
12
12
  import "../chunk-Q3WMGUO2.mjs";
13
13
  import "../chunk-5HENJTR6.mjs";
14
- import "../chunk-LLTFR25V.mjs";
14
+ import "../chunk-LJPESIYZ.mjs";
15
15
  import "../chunk-WSBULPUZ.mjs";
16
16
  import "../chunk-NDCIZJXB.mjs";
17
17
  import "../chunk-MCCIBDEH.mjs";
18
- import "../chunk-JVDKV5HE.mjs";
18
+ import "../chunk-3AB2A6WF.mjs";
19
19
  import "../chunk-WTFW6DLP.mjs";
20
20
  import "../chunk-H2762RTS.mjs";
21
21
  import "../chunk-A7C3XND3.mjs";
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  isValid
3
- } from "../chunk-2KZ5UP6A.mjs";
3
+ } from "../chunk-D5KAY6YW.mjs";
4
4
  import "../chunk-OFGI5FLG.mjs";
5
5
  import "../chunk-NCEWAKOZ.mjs";
6
6
  import "../chunk-Q3WMGUO2.mjs";
7
7
  import "../chunk-5HENJTR6.mjs";
8
- import "../chunk-LLTFR25V.mjs";
8
+ import "../chunk-LJPESIYZ.mjs";
9
9
  import "../chunk-WSBULPUZ.mjs";
10
10
  import "../chunk-NDCIZJXB.mjs";
11
11
  import "../chunk-MCCIBDEH.mjs";
12
- import "../chunk-JVDKV5HE.mjs";
12
+ import "../chunk-3AB2A6WF.mjs";
13
13
  import "../chunk-WTFW6DLP.mjs";
14
14
  import "../chunk-H2762RTS.mjs";
15
15
  import "../chunk-A7C3XND3.mjs";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  Repository
3
- } from "../chunk-ROTFIQND.mjs";
3
+ } from "../chunk-ZZ65BSDI.mjs";
4
4
  import "../chunk-5HENJTR6.mjs";
5
- import "../chunk-LLTFR25V.mjs";
5
+ import "../chunk-LJPESIYZ.mjs";
6
6
  import "../chunk-MCCIBDEH.mjs";
7
- import "../chunk-JVDKV5HE.mjs";
7
+ import "../chunk-3AB2A6WF.mjs";
8
8
  import "../chunk-WTFW6DLP.mjs";
9
9
  import "../chunk-H2762RTS.mjs";
10
10
  import "../chunk-A7C3XND3.mjs";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  Try,
3
3
  tryTo
4
- } from "../chunk-2KZ5UP6A.mjs";
4
+ } from "../chunk-D5KAY6YW.mjs";
5
5
  import "../chunk-OFGI5FLG.mjs";
6
6
  import "../chunk-NCEWAKOZ.mjs";
7
7
  import "../chunk-Q3WMGUO2.mjs";
8
8
  import "../chunk-5HENJTR6.mjs";
9
- import "../chunk-LLTFR25V.mjs";
9
+ import "../chunk-LJPESIYZ.mjs";
10
10
  import "../chunk-WSBULPUZ.mjs";
11
11
  import "../chunk-NDCIZJXB.mjs";
12
12
  import "../chunk-MCCIBDEH.mjs";
13
- import "../chunk-JVDKV5HE.mjs";
13
+ import "../chunk-3AB2A6WF.mjs";
14
14
  import "../chunk-WTFW6DLP.mjs";
15
15
  import "../chunk-H2762RTS.mjs";
16
16
  import "../chunk-A7C3XND3.mjs";
@@ -1,17 +1,17 @@
1
1
  import {
2
2
  tryTo
3
- } from "../chunk-2KZ5UP6A.mjs";
3
+ } from "../chunk-D5KAY6YW.mjs";
4
4
  import "../chunk-OFGI5FLG.mjs";
5
5
  import "../chunk-NCEWAKOZ.mjs";
6
6
  import "../chunk-Q3WMGUO2.mjs";
7
7
  import "../chunk-5HENJTR6.mjs";
8
- import "../chunk-LLTFR25V.mjs";
8
+ import "../chunk-LJPESIYZ.mjs";
9
9
  import "../chunk-WSBULPUZ.mjs";
10
10
  import {
11
11
  ctx
12
12
  } from "../chunk-NDCIZJXB.mjs";
13
13
  import "../chunk-MCCIBDEH.mjs";
14
- import "../chunk-JVDKV5HE.mjs";
14
+ import "../chunk-3AB2A6WF.mjs";
15
15
  import {
16
16
  meta
17
17
  } from "../chunk-WTFW6DLP.mjs";
@@ -3,12 +3,13 @@ import { Constructor } from '../types/Constructor';
3
3
  import { PageList } from '../types/PageList';
4
4
  import { List } from '../types/List';
5
5
  import { DontInfer } from '../types/Types';
6
+ import { EnumConstructor } from '../types/Enum';
6
7
  type Func<T = unknown> = (a: any, key?: string) => T;
7
8
  type Viewer = {
8
9
  key: string;
9
10
  f: Func;
10
11
  };
11
- type ViewType<V = any> = Primitive | Constructor | Func | View<V> | undefined;
12
+ type ViewType<V = any> = Primitive | EnumConstructor | Constructor | Func | View<V> | undefined;
12
13
  type ViewRecord<V = any> = Partial<Record<keyof V, ViewType>>;
13
14
  export declare const toViewer: (key: string, value: ViewType) => Viewer;
14
15
  export declare class View<V = any> {
@@ -4,21 +4,21 @@ import {
4
4
  toViewer,
5
5
  view,
6
6
  views
7
- } from "../chunk-SRXIPWW3.mjs";
7
+ } from "../chunk-3Q26WV4F.mjs";
8
8
  import "../chunk-SSROJBD5.mjs";
9
- import "../chunk-WD4PRE6L.mjs";
10
- import "../chunk-CRSP7OQT.mjs";
9
+ import "../chunk-Q56PAJ4T.mjs";
10
+ import "../chunk-KDK2E7CA.mjs";
11
11
  import "../chunk-KTENM2OG.mjs";
12
- import "../chunk-2KZ5UP6A.mjs";
12
+ import "../chunk-D5KAY6YW.mjs";
13
13
  import "../chunk-OFGI5FLG.mjs";
14
14
  import "../chunk-NCEWAKOZ.mjs";
15
15
  import "../chunk-Q3WMGUO2.mjs";
16
16
  import "../chunk-5HENJTR6.mjs";
17
- import "../chunk-LLTFR25V.mjs";
17
+ import "../chunk-LJPESIYZ.mjs";
18
18
  import "../chunk-WSBULPUZ.mjs";
19
19
  import "../chunk-NDCIZJXB.mjs";
20
20
  import "../chunk-MCCIBDEH.mjs";
21
- import "../chunk-JVDKV5HE.mjs";
21
+ import "../chunk-3AB2A6WF.mjs";
22
22
  import "../chunk-WTFW6DLP.mjs";
23
23
  import "../chunk-H2762RTS.mjs";
24
24
  import "../chunk-A7C3XND3.mjs";
@@ -17,18 +17,18 @@ import {
17
17
  required,
18
18
  rule,
19
19
  valid
20
- } from "../chunk-RBQOVMPC.mjs";
20
+ } from "../chunk-MLAU6FXE.mjs";
21
21
  import "../chunk-ADJAEGCT.mjs";
22
- import "../chunk-2KZ5UP6A.mjs";
22
+ import "../chunk-D5KAY6YW.mjs";
23
23
  import "../chunk-OFGI5FLG.mjs";
24
24
  import "../chunk-NCEWAKOZ.mjs";
25
25
  import "../chunk-Q3WMGUO2.mjs";
26
26
  import "../chunk-5HENJTR6.mjs";
27
- import "../chunk-LLTFR25V.mjs";
27
+ import "../chunk-LJPESIYZ.mjs";
28
28
  import "../chunk-WSBULPUZ.mjs";
29
29
  import "../chunk-NDCIZJXB.mjs";
30
30
  import "../chunk-MCCIBDEH.mjs";
31
- import "../chunk-JVDKV5HE.mjs";
31
+ import "../chunk-3AB2A6WF.mjs";
32
32
  import "../chunk-WTFW6DLP.mjs";
33
33
  import "../chunk-H2762RTS.mjs";
34
34
  import "../chunk-A7C3XND3.mjs";
@@ -3,16 +3,16 @@ import {
3
3
  isValid,
4
4
  validate,
5
5
  validateReject
6
- } from "../chunk-2KZ5UP6A.mjs";
6
+ } from "../chunk-D5KAY6YW.mjs";
7
7
  import "../chunk-OFGI5FLG.mjs";
8
8
  import "../chunk-NCEWAKOZ.mjs";
9
9
  import "../chunk-Q3WMGUO2.mjs";
10
10
  import "../chunk-5HENJTR6.mjs";
11
- import "../chunk-LLTFR25V.mjs";
11
+ import "../chunk-LJPESIYZ.mjs";
12
12
  import "../chunk-WSBULPUZ.mjs";
13
13
  import "../chunk-NDCIZJXB.mjs";
14
14
  import "../chunk-MCCIBDEH.mjs";
15
- import "../chunk-JVDKV5HE.mjs";
15
+ import "../chunk-3AB2A6WF.mjs";
16
16
  import "../chunk-WTFW6DLP.mjs";
17
17
  import "../chunk-H2762RTS.mjs";
18
18
  import "../chunk-A7C3XND3.mjs";
@@ -1,16 +1,16 @@
1
1
  import {
2
2
  When,
3
3
  when
4
- } from "../chunk-2KZ5UP6A.mjs";
4
+ } from "../chunk-D5KAY6YW.mjs";
5
5
  import "../chunk-OFGI5FLG.mjs";
6
6
  import "../chunk-NCEWAKOZ.mjs";
7
7
  import "../chunk-Q3WMGUO2.mjs";
8
8
  import "../chunk-5HENJTR6.mjs";
9
- import "../chunk-LLTFR25V.mjs";
9
+ import "../chunk-LJPESIYZ.mjs";
10
10
  import "../chunk-WSBULPUZ.mjs";
11
11
  import "../chunk-NDCIZJXB.mjs";
12
12
  import "../chunk-MCCIBDEH.mjs";
13
- import "../chunk-JVDKV5HE.mjs";
13
+ import "../chunk-3AB2A6WF.mjs";
14
14
  import "../chunk-WTFW6DLP.mjs";
15
15
  import "../chunk-H2762RTS.mjs";
16
16
  import "../chunk-A7C3XND3.mjs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thisisagile/easy",
3
- "version": "17.17.1",
3
+ "version": "17.18.0",
4
4
  "description": "Straightforward library for building domain-driven microservice architectures",
5
5
  "author": "Sander Hoogendoorn",
6
6
  "license": "MIT",
package/src/types/Enum.ts CHANGED
@@ -2,14 +2,28 @@ import { Id } from './Id';
2
2
  import { List, toList } from './List';
3
3
  import { isAn } from './IsA';
4
4
  import { meta } from './Meta';
5
- import { isDefined } from './Is';
5
+ import { isDefined, isFunction } from './Is';
6
6
  import { Validatable } from './Validatable';
7
7
  import { JsonValue } from './Json';
8
8
  import { Get, ofGet } from './Get';
9
9
  import { TypeGuard } from './TypeGuard';
10
10
 
11
+ export type EnumConstructor<E = unknown> = {
12
+ byIds<E extends Enum>(ids: Id[]): List<E>;
13
+ byId<E extends Enum>(id: Id, alt?: Get<E, unknown>): E;
14
+ isEnum: boolean;
15
+ };
16
+
17
+ export const isEnumConstructor = <E = unknown>(c: unknown): c is EnumConstructor<E> => isFunction(c) && (c as any).isEnum;
18
+
11
19
  export abstract class Enum implements Validatable {
12
- protected constructor(readonly name: string, readonly id: Id = name.toLowerCase(), readonly code: string = id.toString()) {}
20
+ static isEnum = true;
21
+
22
+ protected constructor(
23
+ readonly name: string,
24
+ readonly id: Id = name.toLowerCase(),
25
+ readonly code: string = id.toString()
26
+ ) {}
13
27
 
14
28
  get isValid(): boolean {
15
29
  return isDefined(this.id);
@@ -19,10 +33,6 @@ export abstract class Enum implements Validatable {
19
33
  return meta(this.allTuple<E>()).values<E>();
20
34
  }
21
35
 
22
- protected static allTuple<E extends Enum>(): Record<Id, E> {
23
- return meta(this).get(`all-${this.name}`) ?? meta(this).set(`all-${this.name}`, meta(this).values<E>().filter(isEnum).toObject('id'));
24
- }
25
-
26
36
  static filter<E extends Enum>(p: (value: E, index: number, array: E[]) => unknown, params?: unknown): List<E> {
27
37
  return this.all<E>().filter(p, params);
28
38
  }
@@ -41,6 +51,10 @@ export abstract class Enum implements Validatable {
41
51
  return this.allTuple<E>()[id] ?? ofGet(alt);
42
52
  }
43
53
 
54
+ protected static allTuple<E extends Enum>(): Record<Id, E> {
55
+ return meta(this).get(`all-${this.name}`) ?? meta(this).set(`all-${this.name}`, meta(this).values<E>().filter(isEnum).toObject('id'));
56
+ }
57
+
44
58
  equals<E extends Enum>(other: E | Id): other is E {
45
59
  return this.id === (isEnum(other) ? other.id : other);
46
60
  }
package/src/utils/View.ts CHANGED
@@ -10,11 +10,13 @@ import { isPageList, PageList, toPageList } from '../types/PageList';
10
10
  import { List } from '../types/List';
11
11
  import { isEqual } from '../types/IsEqual';
12
12
  import { DontInfer } from '../types/Types';
13
+ import { EnumConstructor, isEnumConstructor } from '../types/Enum';
14
+ import { Id } from '../types/Id';
13
15
 
14
16
  type Func<T = unknown> = (a: any, key?: string) => T;
15
17
  type Viewer = { key: string; f: Func };
16
18
 
17
- type ViewType<V = any> = Primitive | Constructor | Func | View<V> | undefined;
19
+ type ViewType<V = any> = Primitive | EnumConstructor | Constructor | Func | View<V> | undefined;
18
20
  type ViewRecord<V = any> = Partial<Record<keyof V, ViewType>>;
19
21
 
20
22
  const ignore = Symbol('view.ignore');
@@ -28,6 +30,10 @@ export const toViewer = (key: string, value: ViewType): Viewer =>
28
30
  .equals(ignore, { key, f: () => undefined })
29
31
  .equals(keep, { key, f: (a: any) => traverse(a, key) })
30
32
  .type(isString, s => ({ key, f: (a: any) => traverse(a, s) }))
33
+ .type(isEnumConstructor, c => ({
34
+ key,
35
+ f: (a, key) => use(traverse(a, key), v => (isArray(v) ? c.byIds(v) : c.byId(v as Id))),
36
+ }))
31
37
  .type(isConstructor, c => ({
32
38
  key,
33
39
  f: (a, key) => use(traverse(a, key), v => (isArray(v) ? v.map(i => optional(c, i)) : optional(c, v))),
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/types/Enum.ts"],"sourcesContent":["import { Id } from './Id';\nimport { List, toList } from './List';\nimport { isAn } from './IsA';\nimport { meta } from './Meta';\nimport { isDefined } from './Is';\nimport { Validatable } from './Validatable';\nimport { JsonValue } from './Json';\nimport { Get, ofGet } from './Get';\nimport { TypeGuard } from './TypeGuard';\n\nexport abstract class Enum implements Validatable {\n protected constructor(readonly name: string, readonly id: Id = name.toLowerCase(), readonly code: string = id.toString()) {}\n\n get isValid(): boolean {\n return isDefined(this.id);\n }\n\n static all<E extends Enum>(): List<E> {\n return meta(this.allTuple<E>()).values<E>();\n }\n\n protected static allTuple<E extends Enum>(): Record<Id, E> {\n return meta(this).get(`all-${this.name}`) ?? meta(this).set(`all-${this.name}`, meta(this).values<E>().filter(isEnum).toObject('id'));\n }\n\n static filter<E extends Enum>(p: (value: E, index: number, array: E[]) => unknown, params?: unknown): List<E> {\n return this.all<E>().filter(p, params);\n }\n\n static first<E extends Enum>(p?: (value: E, index: number, array: E[]) => unknown, params?: unknown): E {\n return this.all<E>().first(p, params);\n }\n\n static byIds<E extends Enum>(ids: Id[] = []): List<E> {\n return toList(ids)\n .mapDefined(id => this.byId<E>(id))\n .distinct();\n }\n\n static byId<E extends Enum>(id: Id, alt?: Get<E, unknown>): E {\n return this.allTuple<E>()[id] ?? ofGet(alt);\n }\n\n equals<E extends Enum>(other: E | Id): other is E {\n return this.id === (isEnum(other) ? other.id : other);\n }\n\n isIn<E extends Enum>(...items: E[] | Id[]): boolean {\n return items.some(i => this.equals(i));\n }\n\n toJSON(): JsonValue {\n return this.id;\n }\n\n toString(): string {\n return this.id.toString();\n }\n}\n\nexport const isEnum: TypeGuard<Enum> = (e?: unknown): e is Enum => isDefined(e) && e instanceof Enum && isAn<Enum>(e, 'name', 'id', 'code');\n"],"mappings":";;;;;;;;;;;;;;;;;AAUO,IAAe,OAAf,MAA2C;AAAA,EACtC,YAAqB,MAAuB,KAAS,KAAK,YAAY,GAAY,OAAe,GAAG,SAAS,GAAG;AAA3F;AAAuB;AAAsC;AAAA,EAA+B;AAAA,EAE3H,IAAI,UAAmB;AACrB,WAAO,UAAU,KAAK,EAAE;AAAA,EAC1B;AAAA,EAEA,OAAO,MAA+B;AACpC,WAAO,KAAK,KAAK,SAAY,CAAC,EAAE,OAAU;AAAA,EAC5C;AAAA,EAEA,OAAiB,WAA0C;AACzD,WAAO,KAAK,IAAI,EAAE,IAAI,OAAO,KAAK,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,IAAI,EAAE,OAAU,EAAE,OAAO,MAAM,EAAE,SAAS,IAAI,CAAC;AAAA,EACtI;AAAA,EAEA,OAAO,OAAuB,GAAqD,QAA2B;AAC5G,WAAO,KAAK,IAAO,EAAE,OAAO,GAAG,MAAM;AAAA,EACvC;AAAA,EAEA,OAAO,MAAsB,GAAsD,QAAqB;AACtG,WAAO,KAAK,IAAO,EAAE,MAAM,GAAG,MAAM;AAAA,EACtC;AAAA,EAEA,OAAO,MAAsB,MAAY,CAAC,GAAY;AACpD,WAAO,OAAO,GAAG,EACd,WAAW,QAAM,KAAK,KAAQ,EAAE,CAAC,EACjC,SAAS;AAAA,EACd;AAAA,EAEA,OAAO,KAAqB,IAAQ,KAA0B;AAC5D,WAAO,KAAK,SAAY,EAAE,EAAE,KAAK,MAAM,GAAG;AAAA,EAC5C;AAAA,EAEA,OAAuB,OAA2B;AAChD,WAAO,KAAK,QAAQ,OAAO,KAAK,IAAI,MAAM,KAAK;AAAA,EACjD;AAAA,EAEA,QAAwB,OAA4B;AAClD,WAAO,MAAM,KAAK,OAAK,KAAK,OAAO,CAAC,CAAC;AAAA,EACvC;AAAA,EAEA,SAAoB;AAClB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,WAAmB;AACjB,WAAO,KAAK,GAAG,SAAS;AAAA,EAC1B;AACF;AAEO,IAAM,SAA0B,CAAC,MAA2B,UAAU,CAAC,KAAK,aAAa,QAAQ,KAAW,GAAG,QAAQ,MAAM,MAAM;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/utils/View.ts"],"sourcesContent":["import { traverse } from './Traverse';\nimport { ifDefined } from './If';\nimport { Primitive } from '../types/Primitive';\nimport { Constructor, isConstructor, use } from '../types/Constructor';\nimport { asJson, json } from '../types/Json';\nimport { choose } from '../types/Case';\nimport { isArray, isBoolean, isFunction, isString } from '../types/Is';\nimport { meta } from '../types/Meta';\nimport { isPageList, PageList, toPageList } from '../types/PageList';\nimport { List } from '../types/List';\nimport { isEqual } from '../types/IsEqual';\nimport { DontInfer } from '../types/Types';\n\ntype Func<T = unknown> = (a: any, key?: string) => T;\ntype Viewer = { key: string; f: Func };\n\ntype ViewType<V = any> = Primitive | Constructor | Func | View<V> | undefined;\ntype ViewRecord<V = any> = Partial<Record<keyof V, ViewType>>;\n\nconst ignore = Symbol('view.ignore');\nconst keep = Symbol('view.keep');\nconst spread = 'view.spread';\n\nexport const toViewer = (key: string, value: ViewType): Viewer =>\n choose(value)\n .is.not.defined(v => v, { key, f: () => undefined } as Viewer)\n .type(isBoolean, b => ({ key, f: () => b }))\n .equals(ignore, { key, f: () => undefined })\n .equals(keep, { key, f: (a: any) => traverse(a, key) })\n .type(isString, s => ({ key, f: (a: any) => traverse(a, s) }))\n .type(isConstructor, c => ({\n key,\n f: (a, key) => use(traverse(a, key), v => (isArray(v) ? v.map(i => optional(c, i)) : optional(c, v))),\n }))\n .type(isSimpleView, f => ({ key, f: (a: any) => f.from(traverse(a, key)) }))\n .type(isFunction, f => ({ key, f }))\n .else(v => ({ key, f: () => v }));\n\nconst optional = (c: Constructor, v: any) =>\n ifDefined(\n v,\n i => new c(i),\n () => v\n );\n\nconst toViewers = (views: ViewRecord): Viewer[] =>\n meta(views)\n .entries<ViewType>()\n .map(([k, v]) => toViewer(k, v));\n\nexport class View<V = any> {\n constructor(\n private views = {} as ViewRecord<V>,\n readonly startsFrom: 'scratch' | 'source' = 'scratch',\n readonly viewers: Viewer[] = toViewers(views)\n ) {}\n\n get fromSource(): View<V> {\n return new View(this.views, 'source', this.viewers);\n }\n\n from<T = unknown>(source: PageList<T>): PageList<V>;\n from<T = unknown>(source: List<T>): List<V>;\n from<T = unknown>(source: T[]): V[];\n from<T = unknown>(source: T): V;\n from<T = unknown>(source: PageList<T> | List<T> | T[] | T): PageList<V> | List<V> | V[] | V {\n if (isPageList(source))\n return toPageList(\n source.map(s => this.reduce(s)),\n source.options\n );\n if (isArray(source)) return source.map(s => this.reduce(s));\n return this.reduce(source);\n }\n\n same = (one?: unknown, another?: unknown): boolean => isEqual(this.from(one), this.from(another));\n\n private reduce = (source: any): any =>\n use(asJson(source), src =>\n this.viewers.reduce(\n (acc, v) => (v.key === spread ? { ...acc, ...asJson(v.f(src, v.key)) } : json.set(acc, v.key, v.f(src, v.key))),\n this.startsFrom === 'scratch' ? {} : src\n )\n );\n}\n\nexport const isSimpleView = (a: unknown): a is View => a instanceof View;\n\nexport const view = <V = any>(views: ViewRecord<DontInfer<V>>): View<V> => new View<V>(views);\n\nexport const views = {\n ignore,\n keep,\n spread,\n skip: ignore,\n value: (value: unknown) => () => value,\n or: {\n key: (altKey: string) => (a: unknown, key?: string) => traverse(a, key) ?? traverse(a, altKey),\n value: (altValue: unknown) => (a: unknown, key?: string) => traverse(a, key) ?? altValue,\n func: (altFunc: Func) => (a: unknown, key?: string) => traverse(a, key) ?? altFunc(a, key),\n },\n};\n\n// spread: (a: any, key: string) => ({...a, ...(use(traverse(a, key), v => isObject(v) ? v : ({[key]: v})))}),\n"],"mappings":"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","names":["key","views"]}