@thisisagile/easy 17.22.1 → 17.22.3

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 (35) hide show
  1. package/dist/{chunk-TAR4F7WP.mjs → chunk-27J67KZN.mjs} +2 -2
  2. package/dist/{chunk-DXOU5VHJ.mjs → chunk-5QTARNGR.mjs} +13 -2
  3. package/dist/chunk-5QTARNGR.mjs.map +1 -0
  4. package/dist/{chunk-WG3IUAYI.mjs → chunk-BZXYXP6E.mjs} +5 -3
  5. package/dist/chunk-BZXYXP6E.mjs.map +1 -0
  6. package/dist/{chunk-H7X4TDBJ.mjs → chunk-CI6M6BOL.mjs} +2 -2
  7. package/dist/{chunk-R2PGI7M3.mjs → chunk-KKJA4X4R.mjs} +2 -2
  8. package/dist/{chunk-O6T2ETUB.mjs → chunk-VU7IZYRT.mjs} +2 -2
  9. package/dist/data/Condition.mjs +2 -2
  10. package/dist/data/Field.mjs +2 -2
  11. package/dist/domain/Audit.mjs +3 -3
  12. package/dist/domain/Child.mjs +2 -2
  13. package/dist/domain/Entity.mjs +3 -3
  14. package/dist/domain/Repo.mjs +1 -1
  15. package/dist/domain/Struct.mjs +2 -2
  16. package/dist/domain/Typo.mjs +1 -1
  17. package/dist/index.js +26 -13
  18. package/dist/index.js.map +1 -1
  19. package/dist/services/MappedRouteGateway.mjs +2 -2
  20. package/dist/services/ViewRouteGateway.mjs +2 -2
  21. package/dist/sql/Table.mjs +2 -2
  22. package/dist/types/Json.d.ts +1 -0
  23. package/dist/types/Json.mjs +1 -1
  24. package/dist/utils/Mapper.mjs +2 -2
  25. package/dist/utils/View.d.ts +1 -0
  26. package/dist/utils/View.mjs +2 -2
  27. package/package.json +1 -1
  28. package/src/types/Json.ts +17 -0
  29. package/src/utils/View.ts +5 -2
  30. package/dist/chunk-DXOU5VHJ.mjs.map +0 -1
  31. package/dist/chunk-WG3IUAYI.mjs.map +0 -1
  32. /package/dist/{chunk-TAR4F7WP.mjs.map → chunk-27J67KZN.mjs.map} +0 -0
  33. /package/dist/{chunk-H7X4TDBJ.mjs.map → chunk-CI6M6BOL.mjs.map} +0 -0
  34. /package/dist/{chunk-R2PGI7M3.mjs.map → chunk-KKJA4X4R.mjs.map} +0 -0
  35. /package/dist/{chunk-O6T2ETUB.mjs.map → chunk-VU7IZYRT.mjs.map} +0 -0
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-MDXL65W4.mjs";
4
4
  import {
5
5
  json
6
- } from "./chunk-DXOU5VHJ.mjs";
6
+ } from "./chunk-5QTARNGR.mjs";
7
7
  import {
8
8
  isDefined
9
9
  } from "./chunk-DEJ7A5PY.mjs";
@@ -50,4 +50,4 @@ export {
50
50
  toCondition,
51
51
  isSortCondition
52
52
  };
53
- //# sourceMappingURL=chunk-TAR4F7WP.mjs.map
53
+ //# sourceMappingURL=chunk-27J67KZN.mjs.map
@@ -29,7 +29,18 @@ var json = {
29
29
  omit: (subject, ...keys) => keys.reduce((js, k) => json.delete(js, k), json.parse(subject)),
30
30
  pick: (subject, ...keys) => keys.reduce((js, k) => json.set(js, k, subject[k]), {}),
31
31
  defaults: (options = {}, defaults = {}) => json.merge(defaults, options),
32
- isSubset: (subject, subset) => !entries(subset).some(([k, v]) => subject[k] !== v)
32
+ isSubset: (subject, subset) => !entries(subset).some(([k, v]) => subject[k] !== v),
33
+ split: (t, keys, prop = "extracted") => {
34
+ const extracted = {};
35
+ const rest = { ...t };
36
+ keys.forEach((key) => {
37
+ if (key in t) {
38
+ ifDefined(t[key], (v) => extracted[key] = v);
39
+ delete rest[key];
40
+ }
41
+ });
42
+ return { [prop]: extracted, ...rest };
43
+ }
33
44
  };
34
45
  var toJson = json.merge;
35
46
  var asJson = (j, alt = {}) => isJson(j) ? j.toJSON() : isObject(j) ? j : ofGet(alt, j);
@@ -56,4 +67,4 @@ export {
56
67
  takeFirstKey,
57
68
  any
58
69
  };
59
- //# sourceMappingURL=chunk-DXOU5VHJ.mjs.map
70
+ //# sourceMappingURL=chunk-5QTARNGR.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types/Json.ts"],"sourcesContent":["import { isA } from './IsA';\nimport { isDefined, isEmpty, isObject } from './Is';\nimport { Get, ofGet } from './Get';\nimport { ifDefined } from '../utils/If';\nimport { TypeGuard } from './TypeGuard';\nimport { entries } from './Object';\n\nexport type JsonValue = string | number | boolean | null | Json | JsonValue[];\nexport type Json = { [key: string]: JsonValue };\n\nexport const isJson: TypeGuard<{ toJSON: () => Json }> = (subject?: unknown): subject is { toJSON: () => Json } =>\n isA<{ toJSON: () => Json }>(subject, 'toJSON');\n\nexport const json = {\n parse: <T extends Json = Json>(subject: unknown): T => JSON.parse(JSON.stringify(subject ?? {})),\n merge: (...subjects: unknown[]): Json => json.parse(subjects.map(s => asJson(s, s => json.parse(s))).reduce((js, j) => ({ ...js, ...j }), {})),\n delete: <T extends Json = Json>(subject: T, key: string): T => {\n ifDefined(subject, () => delete (subject as any)[key]);\n return subject;\n },\n set: <T extends Json = Json>(subject: T, key = '', value?: unknown): T =>\n isEmpty(key) ? subject : value !== undefined ? { ...(subject as any), ...{ [key]: value as JsonValue } } : json.delete(subject, key),\n omit: <T extends Json = Json>(subject: T, ...keys: string[]): T => keys.reduce((js, k) => json.delete(js, k), json.parse<T>(subject)),\n pick: <T extends Json = Json>(subject: T, ...keys: string[]): T => keys.reduce((js, k) => json.set(js, k, (subject as any)[k]), {} as T),\n defaults: <T extends Json = Json>(options: Partial<T> = {}, defaults: Partial<T> = {}): T => json.merge(defaults, options) as T,\n isSubset: (subject: Json, subset: Json): boolean => !entries(subset).some(([k, v]) => subject[k] !== v),\n split: <T extends Record<string, unknown>, K extends string = 'extracted'>(\n t: T,\n keys: readonly (keyof T)[],\n prop: K = 'extracted' as K\n ): {\n [P in K]: Partial<T>;\n } => {\n const extracted = {} as Partial<T>;\n const rest = { ...t };\n keys.forEach(key => {\n if (key in t) {\n ifDefined(t[key], v => (extracted[key] = v));\n delete rest[key as string];\n }\n });\n return { [prop]: extracted, ...rest };\n },\n};\n\nexport const toJson = json.merge;\n\nexport const asJson = (j?: unknown, alt: Get<Json> = {}): Json => (isJson(j) ? j.toJSON() : isObject(j) ? (j as Json) : ofGet(alt, j));\n\nclass Any<T extends Json> {\n constructor(readonly value: T) {}\n\n merge = (...subjects: T[]): Any<T> => any<T>(json.merge(this.value, ...subjects) as T);\n delete = (key: keyof T): Any<T> => any<T>(json.delete<T>(this.value, key as string));\n omit = (...keys: (keyof T)[]): Any<T> => any<T>(json.omit<T>(this.value, ...(keys as string[])));\n set = (key: keyof T, value?: unknown): Any<T> => any<T>(json.set(this.value, key as string, value));\n\n toJSON(): Json {\n return this.value;\n }\n}\n\nexport const takeFirstKey = (j: unknown, alt: string = ''): string => entries(asJson(j)).first(([, v]) => isDefined(v))?.[0] ?? alt;\n\nexport const any = <T extends Json = Json>(value: T): Any<T> => new Any<T>(value);\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAUO,IAAM,SAA4C,CAAC,YACxD,IAA4B,SAAS,QAAQ;AAExC,IAAM,OAAO;AAAA,EAClB,OAAO,CAAwB,YAAwB,KAAK,MAAM,KAAK,UAAU,WAAW,CAAC,CAAC,CAAC;AAAA,EAC/F,OAAO,IAAI,aAA8B,KAAK,MAAM,SAAS,IAAI,OAAK,OAAO,GAAG,CAAAA,OAAK,KAAK,MAAMA,EAAC,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,OAAO,EAAE,GAAG,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAAA,EAC7I,QAAQ,CAAwB,SAAY,QAAmB;AAC7D,cAAU,SAAS,MAAM,OAAQ,QAAgB,GAAG,CAAC;AACrD,WAAO;AAAA,EACT;AAAA,EACA,KAAK,CAAwB,SAAY,MAAM,IAAI,UACjD,QAAQ,GAAG,IAAI,UAAU,UAAU,SAAY,EAAE,GAAI,SAAiB,GAAG,EAAE,CAAC,GAAG,GAAG,MAAmB,EAAE,IAAI,KAAK,OAAO,SAAS,GAAG;AAAA,EACrI,MAAM,CAAwB,YAAe,SAAsB,KAAK,OAAO,CAAC,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,GAAG,KAAK,MAAS,OAAO,CAAC;AAAA,EACpI,MAAM,CAAwB,YAAe,SAAsB,KAAK,OAAO,CAAC,IAAI,MAAM,KAAK,IAAI,IAAI,GAAI,QAAgB,CAAC,CAAC,GAAG,CAAC,CAAM;AAAA,EACvI,UAAU,CAAwB,UAAsB,CAAC,GAAG,WAAuB,CAAC,MAAS,KAAK,MAAM,UAAU,OAAO;AAAA,EACzH,UAAU,CAAC,SAAe,WAA0B,CAAC,QAAQ,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,QAAQ,CAAC,MAAM,CAAC;AAAA,EACtG,OAAO,CACL,GACA,MACA,OAAU,gBAGP;AACH,UAAM,YAAY,CAAC;AACnB,UAAM,OAAO,EAAE,GAAG,EAAE;AACpB,SAAK,QAAQ,SAAO;AAClB,UAAI,OAAO,GAAG;AACZ,kBAAU,EAAE,GAAG,GAAG,OAAM,UAAU,GAAG,IAAI,CAAE;AAC3C,eAAO,KAAK,GAAa;AAAA,MAC3B;AAAA,IACF,CAAC;AACD,WAAO,EAAE,CAAC,IAAI,GAAG,WAAW,GAAG,KAAK;AAAA,EACtC;AACF;AAEO,IAAM,SAAS,KAAK;AAEpB,IAAM,SAAS,CAAC,GAAa,MAAiB,CAAC,MAAa,OAAO,CAAC,IAAI,EAAE,OAAO,IAAI,SAAS,CAAC,IAAK,IAAa,MAAM,KAAK,CAAC;AAEpI,IAAM,MAAN,MAA0B;AAAA,EACxB,YAAqB,OAAU;AAAV;AAAA,EAAW;AAAA,EAEhC,QAAQ,IAAI,aAA0B,IAAO,KAAK,MAAM,KAAK,OAAO,GAAG,QAAQ,CAAM;AAAA,EACrF,SAAS,CAAC,QAAyB,IAAO,KAAK,OAAU,KAAK,OAAO,GAAa,CAAC;AAAA,EACnF,OAAO,IAAI,SAA8B,IAAO,KAAK,KAAQ,KAAK,OAAO,GAAI,IAAiB,CAAC;AAAA,EAC/F,MAAM,CAAC,KAAc,UAA4B,IAAO,KAAK,IAAI,KAAK,OAAO,KAAe,KAAK,CAAC;AAAA,EAElG,SAAe;AACb,WAAO,KAAK;AAAA,EACd;AACF;AAEO,IAAM,eAAe,CAAC,GAAY,MAAc,OAAe,QAAQ,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK;AAEzH,IAAM,MAAM,CAAwB,UAAqB,IAAI,IAAO,KAAK;","names":["s"]}
@@ -11,7 +11,7 @@ import {
11
11
  import {
12
12
  asJson,
13
13
  json
14
- } from "./chunk-DXOU5VHJ.mjs";
14
+ } from "./chunk-5QTARNGR.mjs";
15
15
  import {
16
16
  choose
17
17
  } from "./chunk-7ZZDLHN4.mjs";
@@ -38,8 +38,9 @@ import {
38
38
  // src/utils/View.ts
39
39
  var ignore = Symbol("view.ignore");
40
40
  var keep = Symbol("view.keep");
41
+ var json2 = Symbol("view.json");
41
42
  var spread = "view.spread";
42
- var toViewer = (key, value) => choose(value).is.not.defined((v) => v, { key, f: () => void 0 }).type(isBoolean, (b) => ({ key, f: () => b })).equals(ignore, { key, f: () => void 0 }).equals(keep, { key, f: (a) => traverse(a, key) }).type(isString, (s) => ({ key, f: (a) => traverse(a, s) })).type(isEnumConstructor, (c) => ({
43
+ var toViewer = (key, value) => choose(value).is.not.defined((v) => v, { key, f: () => void 0 }).type(isBoolean, (b) => ({ key, f: () => b })).equals(ignore, { key, f: () => void 0 }).equals(keep, { key, f: (a) => traverse(a, key) }).equals(json2, { key, f: (a) => asJson(traverse(a, key)) }).type(isString, (s) => ({ key, f: (a) => traverse(a, s) })).type(isEnumConstructor, (c) => ({
43
44
  key,
44
45
  f: (a, key2) => use(traverse(a, key2), (v) => isArray(v) ? c.byIds(v) : c.byId(v))
45
46
  })).type(isConstructor, (c) => ({
@@ -85,6 +86,7 @@ var view = (views2) => new View(views2);
85
86
  var views = {
86
87
  ignore,
87
88
  keep,
89
+ json: json2,
88
90
  spread,
89
91
  skip: ignore,
90
92
  value: (value) => () => value,
@@ -102,4 +104,4 @@ export {
102
104
  view,
103
105
  views
104
106
  };
105
- //# sourceMappingURL=chunk-WG3IUAYI.mjs.map
107
+ //# sourceMappingURL=chunk-BZXYXP6E.mjs.map
@@ -0,0 +1 @@
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 as typesJson } 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';\nimport { EnumConstructor, isEnumConstructor } from '../types/Enum';\nimport { Id } from '../types/Id';\n\ntype Func<T = unknown> = (a: any, key?: string) => T;\ntype Viewer = { key: string; f: Func };\n\ntype ViewType<V = any> = Primitive | EnumConstructor | 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 json = Symbol('view.json');\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 .equals(json, { key, f: (a: any) => asJson(traverse(a, key)) })\n .type(isString, s => ({ key, f: (a: any) => traverse(a, s) }))\n .type(isEnumConstructor, c => ({\n key,\n f: (a, key) => use(traverse(a, key), v => (isArray(v) ? c.byIds(v) : c.byId(v as Id))),\n }))\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) => ifDefined(traverse(a, key), v => f.from(v)) }))\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)) } : typesJson.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 json,\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":["json","key","views"]}
@@ -6,7 +6,7 @@ import {
6
6
  } from "./chunk-GCY5A63A.mjs";
7
7
  import {
8
8
  json
9
- } from "./chunk-DXOU5VHJ.mjs";
9
+ } from "./chunk-5QTARNGR.mjs";
10
10
  import {
11
11
  meta
12
12
  } from "./chunk-UY6RVBBM.mjs";
@@ -131,4 +131,4 @@ export {
131
131
  Mapper,
132
132
  mappings
133
133
  };
134
- //# sourceMappingURL=chunk-H7X4TDBJ.mjs.map
134
+ //# sourceMappingURL=chunk-CI6M6BOL.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  json
3
- } from "./chunk-DXOU5VHJ.mjs";
3
+ } from "./chunk-5QTARNGR.mjs";
4
4
  import {
5
5
  validate
6
6
  } from "./chunk-7ZZDLHN4.mjs";
@@ -37,4 +37,4 @@ export {
37
37
  Struct,
38
38
  isStruct
39
39
  };
40
- //# sourceMappingURL=chunk-R2PGI7M3.mjs.map
40
+ //# sourceMappingURL=chunk-KKJA4X4R.mjs.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-AZZRYKCI.mjs";
8
8
  import {
9
9
  Struct
10
- } from "./chunk-R2PGI7M3.mjs";
10
+ } from "./chunk-KKJA4X4R.mjs";
11
11
  import {
12
12
  choose
13
13
  } from "./chunk-7ZZDLHN4.mjs";
@@ -47,4 +47,4 @@ __decorateClass([
47
47
  export {
48
48
  Audit
49
49
  };
50
- //# sourceMappingURL=chunk-O6T2ETUB.mjs.map
50
+ //# sourceMappingURL=chunk-VU7IZYRT.mjs.map
@@ -4,9 +4,9 @@ import {
4
4
  SortCondition,
5
5
  isSortCondition,
6
6
  toCondition
7
- } from "../chunk-TAR4F7WP.mjs";
7
+ } from "../chunk-27J67KZN.mjs";
8
8
  import "../chunk-MDXL65W4.mjs";
9
- import "../chunk-DXOU5VHJ.mjs";
9
+ import "../chunk-5QTARNGR.mjs";
10
10
  import "../chunk-2KE4PKDO.mjs";
11
11
  import "../chunk-MEV33JDQ.mjs";
12
12
  import "../chunk-CO2AFYVD.mjs";
@@ -4,9 +4,9 @@ import {
4
4
  import {
5
5
  SortCondition,
6
6
  toCondition
7
- } from "../chunk-TAR4F7WP.mjs";
7
+ } from "../chunk-27J67KZN.mjs";
8
8
  import "../chunk-MDXL65W4.mjs";
9
- import "../chunk-DXOU5VHJ.mjs";
9
+ import "../chunk-5QTARNGR.mjs";
10
10
  import "../chunk-2KE4PKDO.mjs";
11
11
  import "../chunk-MEV33JDQ.mjs";
12
12
  import {
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  Audit
3
- } from "../chunk-O6T2ETUB.mjs";
3
+ } from "../chunk-VU7IZYRT.mjs";
4
4
  import "../chunk-T7AXBVW5.mjs";
5
5
  import "../chunk-AZZRYKCI.mjs";
6
6
  import "../chunk-AX6TRH4S.mjs";
7
7
  import "../chunk-ADJAEGCT.mjs";
8
- import "../chunk-R2PGI7M3.mjs";
9
- import "../chunk-DXOU5VHJ.mjs";
8
+ import "../chunk-KKJA4X4R.mjs";
9
+ import "../chunk-5QTARNGR.mjs";
10
10
  import "../chunk-7ZZDLHN4.mjs";
11
11
  import "../chunk-OFGI5FLG.mjs";
12
12
  import "../chunk-GAEU5FXE.mjs";
@@ -8,10 +8,10 @@ import {
8
8
  import "../chunk-ADJAEGCT.mjs";
9
9
  import {
10
10
  Struct
11
- } from "../chunk-R2PGI7M3.mjs";
11
+ } from "../chunk-KKJA4X4R.mjs";
12
12
  import {
13
13
  json
14
- } from "../chunk-DXOU5VHJ.mjs";
14
+ } from "../chunk-5QTARNGR.mjs";
15
15
  import "../chunk-7ZZDLHN4.mjs";
16
16
  import "../chunk-OFGI5FLG.mjs";
17
17
  import "../chunk-GAEU5FXE.mjs";
@@ -4,7 +4,7 @@ import {
4
4
  import "../chunk-SJ4YFZKO.mjs";
5
5
  import {
6
6
  Audit
7
- } from "../chunk-O6T2ETUB.mjs";
7
+ } from "../chunk-VU7IZYRT.mjs";
8
8
  import {
9
9
  required
10
10
  } from "../chunk-T7AXBVW5.mjs";
@@ -13,10 +13,10 @@ import "../chunk-AX6TRH4S.mjs";
13
13
  import "../chunk-ADJAEGCT.mjs";
14
14
  import {
15
15
  Struct
16
- } from "../chunk-R2PGI7M3.mjs";
16
+ } from "../chunk-KKJA4X4R.mjs";
17
17
  import {
18
18
  json
19
- } from "../chunk-DXOU5VHJ.mjs";
19
+ } from "../chunk-5QTARNGR.mjs";
20
20
  import "../chunk-7ZZDLHN4.mjs";
21
21
  import "../chunk-OFGI5FLG.mjs";
22
22
  import "../chunk-GAEU5FXE.mjs";
@@ -3,7 +3,7 @@ import {
3
3
  } from "../chunk-4CVSIG7C.mjs";
4
4
  import {
5
5
  toJson
6
- } from "../chunk-DXOU5VHJ.mjs";
6
+ } from "../chunk-5QTARNGR.mjs";
7
7
  import {
8
8
  when
9
9
  } from "../chunk-7ZZDLHN4.mjs";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  Struct,
3
3
  isStruct
4
- } from "../chunk-R2PGI7M3.mjs";
5
- import "../chunk-DXOU5VHJ.mjs";
4
+ } from "../chunk-KKJA4X4R.mjs";
5
+ import "../chunk-5QTARNGR.mjs";
6
6
  import "../chunk-7ZZDLHN4.mjs";
7
7
  import "../chunk-OFGI5FLG.mjs";
8
8
  import "../chunk-GAEU5FXE.mjs";
@@ -3,7 +3,7 @@ import {
3
3
  } from "../chunk-4CVSIG7C.mjs";
4
4
  import {
5
5
  toJson
6
- } from "../chunk-DXOU5VHJ.mjs";
6
+ } from "../chunk-5QTARNGR.mjs";
7
7
  import {
8
8
  when
9
9
  } from "../chunk-7ZZDLHN4.mjs";
package/dist/index.js CHANGED
@@ -669,7 +669,18 @@ var json = {
669
669
  omit: (subject, ...keys2) => keys2.reduce((js, k) => json.delete(js, k), json.parse(subject)),
670
670
  pick: (subject, ...keys2) => keys2.reduce((js, k) => json.set(js, k, subject[k]), {}),
671
671
  defaults: (options = {}, defaults = {}) => json.merge(defaults, options),
672
- isSubset: (subject, subset) => !entries(subset).some(([k, v]) => subject[k] !== v)
672
+ isSubset: (subject, subset) => !entries(subset).some(([k, v]) => subject[k] !== v),
673
+ split: (t, keys2, prop = "extracted") => {
674
+ const extracted = {};
675
+ const rest2 = { ...t };
676
+ keys2.forEach((key) => {
677
+ if (key in t) {
678
+ ifDefined(t[key], (v) => extracted[key] = v);
679
+ delete rest2[key];
680
+ }
681
+ });
682
+ return { [prop]: extracted, ...rest2 };
683
+ }
673
684
  };
674
685
  var toJson = json.merge;
675
686
  var asJson = (j, alt = {}) => isJson(j) ? j.toJSON() : isObject(j) ? j : ofGet(alt, j);
@@ -1853,9 +1864,9 @@ var rule = (message) => constraint((v) => isFunction(v) ? v() : isBoolean(v) ? v
1853
1864
  var Audit = class extends Struct {
1854
1865
  by = { id: this.state.by?.id, user: this.state.by?.user };
1855
1866
  when = new DateTime(this.state.when);
1856
- constructor(json2) {
1867
+ constructor(json3) {
1857
1868
  super(
1858
- choose(json2).is.defined(
1869
+ choose(json3).is.defined(
1859
1870
  (j) => j,
1860
1871
  (j) => j
1861
1872
  ).else({
@@ -1946,7 +1957,7 @@ var Repository = class {
1946
1957
  add(t) {
1947
1958
  return reject(Exception.IsNotImplemented);
1948
1959
  }
1949
- update(id, json2) {
1960
+ update(id, json3) {
1950
1961
  return reject(Exception.IsNotImplemented);
1951
1962
  }
1952
1963
  remove(id) {
@@ -1992,8 +2003,8 @@ var Repo = class extends Repository {
1992
2003
  add(t) {
1993
2004
  return this.extend(this.create(t), "add").then((i) => when(i).not.isValid.reject()).then((i) => this.validate(i, "add")).then((i) => this.gateway.add(toJson(i))).then((j) => new this.ctor(j));
1994
2005
  }
1995
- update(id, json2) {
1996
- return this.gateway.byId(id).then((j) => when(j).not.isDefined.reject(Exception.DoesNotExist)).then((j) => new this.ctor(j).update(json2)).then((i) => this.extend(i, "update")).then((i) => when(i).not.isValid.reject()).then((i) => this.validate(i, "update")).then((i) => this.gateway.update(toJson(i))).then((j) => new this.ctor(j));
2006
+ update(id, json3) {
2007
+ return this.gateway.byId(id).then((j) => when(j).not.isDefined.reject(Exception.DoesNotExist)).then((j) => new this.ctor(j).update(json3)).then((i) => this.extend(i, "update")).then((i) => when(i).not.isValid.reject()).then((i) => this.validate(i, "update")).then((i) => this.gateway.update(toJson(i))).then((j) => new this.ctor(j));
1997
2008
  }
1998
2009
  remove(id) {
1999
2010
  return this.gateway.remove(id);
@@ -2428,14 +2439,14 @@ var Search = class {
2428
2439
 
2429
2440
  // src/process/Manage.ts
2430
2441
  var Manage = class extends Search {
2431
- add(json2) {
2432
- return this.repo.add(json2);
2442
+ add(json3) {
2443
+ return this.repo.add(json3);
2433
2444
  }
2434
- update(id, json2) {
2435
- return this.repo.update(id, json2);
2445
+ update(id, json3) {
2446
+ return this.repo.update(id, json3);
2436
2447
  }
2437
- upsert(id, json2) {
2438
- return this.repo.upsert(id, json2);
2448
+ upsert(id, json3) {
2449
+ return this.repo.upsert(id, json3);
2439
2450
  }
2440
2451
  remove(id) {
2441
2452
  return this.repo.remove(id);
@@ -2878,8 +2889,9 @@ var isEqual = (one, another) => choose([one, another]).case(([o, a]) => o === a,
2878
2889
  // src/utils/View.ts
2879
2890
  var ignore = Symbol("view.ignore");
2880
2891
  var keep = Symbol("view.keep");
2892
+ var json2 = Symbol("view.json");
2881
2893
  var spread = "view.spread";
2882
- var toViewer = (key, value) => choose(value).is.not.defined((v) => v, { key, f: () => void 0 }).type(isBoolean, (b) => ({ key, f: () => b })).equals(ignore, { key, f: () => void 0 }).equals(keep, { key, f: (a) => traverse(a, key) }).type(isString, (s) => ({ key, f: (a) => traverse(a, s) })).type(isEnumConstructor, (c) => ({
2894
+ var toViewer = (key, value) => choose(value).is.not.defined((v) => v, { key, f: () => void 0 }).type(isBoolean, (b) => ({ key, f: () => b })).equals(ignore, { key, f: () => void 0 }).equals(keep, { key, f: (a) => traverse(a, key) }).equals(json2, { key, f: (a) => asJson(traverse(a, key)) }).type(isString, (s) => ({ key, f: (a) => traverse(a, s) })).type(isEnumConstructor, (c) => ({
2883
2895
  key,
2884
2896
  f: (a, key2) => use(traverse(a, key2), (v) => isArray(v) ? c.byIds(v) : c.byId(v))
2885
2897
  })).type(isConstructor, (c) => ({
@@ -2925,6 +2937,7 @@ var view = (views2) => new View(views2);
2925
2937
  var views = {
2926
2938
  ignore,
2927
2939
  keep,
2940
+ json: json2,
2928
2941
  spread,
2929
2942
  skip: ignore,
2930
2943
  value: (value) => () => value,