@thisisagile/easy 8.37.6 → 8.38.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.
@@ -5,4 +5,4 @@ export declare class Email extends Value {
5
5
  get name(): string;
6
6
  }
7
7
  export declare const email: (email?: unknown) => Email;
8
- export declare const isEmail: (email?: unknown) => boolean;
8
+ export declare const isEmail: (e?: unknown) => boolean;
@@ -20,8 +20,6 @@ class Email extends types_1.Value {
20
20
  exports.Email = Email;
21
21
  const email = (email) => new Email(email);
22
22
  exports.email = email;
23
- const isEmail = (email) => {
24
- return !(0, types_1.isEmpty)(email) && validator_1.default.isEmail((0, types_1.asString)(email));
25
- };
23
+ const isEmail = (e) => !(0, types_1.isEmpty)(e) && validator_1.default.isEmail((0, types_1.asString)(e));
26
24
  exports.isEmail = isEmail;
27
25
  //# sourceMappingURL=Email.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Email.js","sourceRoot":"","sources":["../../../src/domain/values/Email.ts"],"names":[],"mappings":";;;;;;AAAA,uCAA6D;AAC7D,0DAAkC;AAElC,MAAa,KAAM,SAAQ,aAAK;IAC9B,YAAY,KAAe;QACzB,KAAK,CAAC,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAA,eAAO,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAA,YAAI,EAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC3E,CAAC;CACF;AAZD,sBAYC;AAEM,MAAM,KAAK,GAAG,CAAC,KAAe,EAAS,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AAArD,QAAA,KAAK,SAAgD;AAE3D,MAAM,OAAO,GAAG,CAAC,KAAe,EAAW,EAAE;IAClD,OAAO,CAAC,IAAA,eAAO,EAAC,KAAK,CAAC,IAAI,mBAAS,CAAC,OAAO,CAAC,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC;AAFW,QAAA,OAAO,WAElB"}
1
+ {"version":3,"file":"Email.js","sourceRoot":"","sources":["../../../src/domain/values/Email.ts"],"names":[],"mappings":";;;;;;AAAA,uCAA6D;AAC7D,0DAAkC;AAElC,MAAa,KAAM,SAAQ,aAAK;IAC9B,YAAY,KAAe;QACzB,KAAK,CAAC,IAAA,gBAAQ,EAAC,KAAK,CAAC,CAAC,CAAC;IACzB,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAA,eAAO,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAA,YAAI,EAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC3E,CAAC;CACF;AAZD,sBAYC;AAEM,MAAM,KAAK,GAAG,CAAC,KAAe,EAAS,EAAE,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AAArD,QAAA,KAAK,SAAgD;AAE3D,MAAM,OAAO,GAAG,CAAC,CAAW,EAAW,EAAE,CAAC,CAAC,IAAA,eAAO,EAAC,CAAC,CAAC,IAAI,mBAAS,CAAC,OAAO,CAAC,IAAA,gBAAQ,EAAC,CAAC,CAAC,CAAC,CAAC;AAAlF,QAAA,OAAO,WAA2E"}
@@ -13,6 +13,8 @@ export declare class Table extends Mapper {
13
13
  column: <T = unknown>(name: string, options?: PropertyOptions<T> | undefined) => Column;
14
14
  item: (property: string, options?: PropertyOptions<unknown> | undefined) => import("../utils").Property<unknown>;
15
15
  ignore: (property?: string) => import("../utils").Mapping;
16
+ skipIn: (property: string) => import("../utils").Mapping;
17
+ skipOut: (property: string) => import("../utils").Mapping;
16
18
  func: (property: string, funcIn: import("../types").Get<import("../types").JsonValue | undefined, Json>, funcOut: import("../types").Get<import("../types").JsonValue | undefined, Json>) => import("../utils").Mapping;
17
19
  add: (funcIn: import("../types").Get<import("../types").JsonValue, Json>) => import("../utils").Mapping;
18
20
  map: (mapper: import("../types").Construct<Mapper>, property?: string) => import("../utils").Mapping;
@@ -8,13 +8,13 @@ const isJson = (subject) => (0, IsA_1.isA)(subject, 'toJSON');
8
8
  exports.isJson = isJson;
9
9
  exports.json = {
10
10
  parse: (subject) => JSON.parse(JSON.stringify(subject ?? {})),
11
- merge: (...subjects) => subjects.map(s => exports.json.parse(s)).reduce((js, j) => ({ ...js, ...j }), {}),
11
+ merge: (...subjects) => exports.json.parse(subjects.map(s => (0, exports.asJson)(s, s => exports.json.parse(s))).reduce((js, j) => ({ ...js, ...j }), {})),
12
12
  omit: (subject, ...keys) => keys.reduce((js, k) => {
13
13
  delete js[k];
14
14
  return js;
15
15
  }, exports.json.parse(subject)),
16
16
  };
17
17
  exports.toJson = exports.json.merge;
18
- const asJson = (j, alt = {}) => ((0, exports.isJson)(j) ? j.toJSON() : (0, Is_1.isObject)(j) ? j : (0, Get_1.ofGet)(alt));
18
+ const asJson = (j, alt = {}) => ((0, exports.isJson)(j) ? j.toJSON() : (0, Is_1.isObject)(j) ? j : (0, Get_1.ofGet)(alt, j));
19
19
  exports.asJson = asJson;
20
20
  //# sourceMappingURL=Json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Json.js","sourceRoot":"","sources":["../../src/types/Json.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAC5B,6BAAgC;AAChC,+BAAmC;AAK5B,MAAM,MAAM,GAAG,CAAC,OAAiB,EAAqC,EAAE,CAAC,IAAA,SAAG,EAAyB,OAAO,EAAE,QAAQ,CAAC,CAAC;AAAlH,QAAA,MAAM,UAA4G;AAElH,QAAA,IAAI,GAAG;IAClB,KAAK,EAAE,CAAC,OAAgB,EAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC5E,KAAK,EAAE,CAAC,GAAG,QAAmB,EAAQ,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,YAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IAClH,IAAI,EAAE,CAAC,OAAgB,EAAE,GAAG,IAAc,EAAQ,EAAE,CAClD,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACpB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,YAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CAC1B,CAAC;AAEW,QAAA,MAAM,GAAG,YAAI,CAAC,KAAK,CAAC;AAE1B,MAAM,MAAM,GAAG,CAAC,CAAW,EAAE,MAAiB,EAAE,EAAQ,EAAE,CAAC,CAAC,IAAA,cAAM,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAA,aAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAU,CAAC,CAAC,CAAC,IAAA,WAAK,EAAC,GAAG,CAAC,CAAC,CAAC;AAAvH,QAAA,MAAM,UAAiH"}
1
+ {"version":3,"file":"Json.js","sourceRoot":"","sources":["../../src/types/Json.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAC5B,6BAAgC;AAChC,+BAAmC;AAK5B,MAAM,MAAM,GAAG,CAAC,OAAiB,EAAqC,EAAE,CAAC,IAAA,SAAG,EAAyB,OAAO,EAAE,QAAQ,CAAC,CAAC;AAAlH,QAAA,MAAM,UAA4G;AAElH,QAAA,IAAI,GAAG;IAClB,KAAK,EAAE,CAAC,OAAgB,EAAQ,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC5E,KAAK,EAAE,CAAC,GAAG,QAAmB,EAAQ,EAAE,CAAC,YAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAA,cAAM,EAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,YAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9I,IAAI,EAAE,CAAC,OAAgB,EAAE,GAAG,IAAc,EAAQ,EAAE,CAClD,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE;QACpB,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC,EAAE,YAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CAC1B,CAAC;AAEW,QAAA,MAAM,GAAG,YAAI,CAAC,KAAK,CAAC;AAE1B,MAAM,MAAM,GAAG,CAAC,CAAW,EAAE,MAAiB,EAAE,EAAQ,EAAE,CAAC,CAAC,IAAA,cAAM,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAA,aAAQ,EAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAU,CAAC,CAAC,CAAC,IAAA,WAAK,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAA1H,QAAA,MAAM,UAAoH"}
@@ -4,6 +4,7 @@ declare class Case<T, V = unknown> {
4
4
  protected outcome?: T | undefined;
5
5
  constructor(value: V, outcome?: T | undefined);
6
6
  case(pred: Predicate<V>, out: Get<T, V>): Case<T, V>;
7
+ type<U>(pred: (v: unknown) => v is U, out: Get<T, U>): Case<T, V>;
7
8
  else(alt: Get<T, V>): T;
8
9
  }
9
10
  export declare class Found<T, V> extends Case<T, V> {
@@ -14,6 +14,13 @@ class Case {
14
14
  .map(res => new Found(this.value, res))
15
15
  .or(this);
16
16
  }
17
+ type(pred, out) {
18
+ return (0, types_1.tryTo)(pred, this.value)
19
+ .is.true()
20
+ .map(() => (0, types_1.ofGet)(out, this.value))
21
+ .map(res => new Found(this.value, res))
22
+ .or(this);
23
+ }
17
24
  else(alt) {
18
25
  return (0, types_1.ofGet)(alt, this.value);
19
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Case.js","sourceRoot":"","sources":["../../src/utils/Case.ts"],"names":[],"mappings":";;;AAAA,oCAAwD;AAExD,MAAM,IAAI;IACR,YAAsB,KAAQ,EAAY,OAAW;QAA/B,UAAK,GAAL,KAAK,CAAG;QAAY,YAAO,GAAP,OAAO,CAAI;IAAG,CAAC;IAEzD,IAAI,CAAC,IAAkB,EAAE,GAAc;QACrC,OAAO,IAAA,aAAK,EAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;aAC3B,EAAE,CAAC,IAAI,EAAE;aACT,GAAG,CAAC,GAAG,EAAE,CAAC,IAAA,aAAK,EAAO,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACvC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAe,CAAC;aACpD,EAAE,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAED,IAAI,CAAC,GAAc;QACjB,OAAO,IAAA,aAAK,EAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF;AAED,MAAa,KAAY,SAAQ,IAAU;IACzC,YAAsB,KAAQ,EAAY,OAAU;QAClD,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QADF,UAAK,GAAL,KAAK,CAAG;QAAY,YAAO,GAAP,OAAO,CAAG;IAEpD,CAAC;IAED,IAAI,CAAC,IAAkB,EAAE,GAAc;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,GAAc;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAZD,sBAYC;AAEM,MAAM,MAAM,GAAG,CAAiB,KAAQ,EAAc,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAAnE,QAAA,MAAM,UAA6D"}
1
+ {"version":3,"file":"Case.js","sourceRoot":"","sources":["../../src/utils/Case.ts"],"names":[],"mappings":";;;AAAA,oCAAwD;AAExD,MAAM,IAAI;IACR,YAAsB,KAAQ,EAAY,OAAW;QAA/B,UAAK,GAAL,KAAK,CAAG;QAAY,YAAO,GAAP,OAAO,CAAI;IAAG,CAAC;IAEzD,IAAI,CAAC,IAAkB,EAAE,GAAc;QACrC,OAAO,IAAA,aAAK,EAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;aAC3B,EAAE,CAAC,IAAI,EAAE;aACT,GAAG,CAAC,GAAG,EAAE,CAAC,IAAA,aAAK,EAAO,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACvC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAe,CAAC;aACpD,EAAE,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAED,IAAI,CAAI,IAA4B,EAAE,GAAc;QAClD,OAAO,IAAA,aAAK,EAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;aAC3B,EAAE,CAAC,IAAI,EAAE;aACT,GAAG,CAAC,GAAG,EAAE,CAAC,IAAA,aAAK,EAAO,GAAG,EAAE,IAAI,CAAC,KAAqB,CAAC,CAAC;aACvD,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAe,CAAC;aACpD,EAAE,CAAC,IAAI,CAAC,CAAC;IACd,CAAC;IAED,IAAI,CAAC,GAAc;QACjB,OAAO,IAAA,aAAK,EAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;CACF;AAED,MAAa,KAAY,SAAQ,IAAU;IACzC,YAAsB,KAAQ,EAAY,OAAU;QAClD,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QADF,UAAK,GAAL,KAAK,CAAG;QAAY,YAAO,GAAP,OAAO,CAAG;IAEpD,CAAC;IAED,IAAI,CAAC,IAAkB,EAAE,GAAc;QACrC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,GAAc;QACjB,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;CACF;AAZD,sBAYC;AAEM,MAAM,MAAM,GAAG,CAAiB,KAAQ,EAAc,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAAnE,QAAA,MAAM,UAA6D"}
@@ -17,6 +17,8 @@ export declare class Mapper extends State implements Mapping {
17
17
  protected readonly map: {
18
18
  item: (property: string, options?: PropertyOptions<unknown> | undefined) => Property<unknown>;
19
19
  ignore: (property?: string) => Mapping;
20
+ skipIn: (property: string) => Mapping;
21
+ skipOut: (property: string) => Mapping;
20
22
  func: (property: string, funcIn: Get<JsonValue | undefined, Json>, funcOut: Get<JsonValue | undefined, Json>) => Mapping;
21
23
  add: (funcIn: Get<JsonValue, Json>) => Mapping;
22
24
  map: (mapper: Construct<Mapper>, property?: string) => Mapping;
@@ -36,6 +38,8 @@ export declare class Mapper extends State implements Mapping {
36
38
  export declare const mappings: {
37
39
  item: (property: string, options?: PropertyOptions<unknown> | undefined) => Property;
38
40
  ignore: (property?: string) => Mapping;
41
+ skipIn: (property: string) => Mapping;
42
+ skipOut: (property: string) => Mapping;
39
43
  func: (property: string, funcIn: Get<JsonValue | undefined, Json>, funcOut: Get<JsonValue | undefined, Json>) => Mapping;
40
44
  add: (funcIn: Get<JsonValue, Json>) => Mapping;
41
45
  map: (mapper: Construct<Mapper>, property?: string) => Mapping;
@@ -4,6 +4,7 @@ exports.mappings = exports.Mapper = exports.isMapping = void 0;
4
4
  const types_1 = require("../types");
5
5
  const Property_1 = require("./Property");
6
6
  const State_1 = require("./State");
7
+ const If_1 = require("./If");
7
8
  const isMapping = (m) => (0, types_1.isA)(m, 'in', 'out');
8
9
  exports.isMapping = isMapping;
9
10
  class Mapper extends State_1.State {
@@ -22,7 +23,7 @@ class Mapper extends State_1.State {
22
23
  return this.get('keys', () => this.properties.map(([k]) => k));
23
24
  }
24
25
  get columns() {
25
- return this.get('columns', () => this.properties.map(([, p]) => p.property ?? ''));
26
+ return this.get('columns', () => this.properties.mapDefined(([, p]) => (0, If_1.ifNotEmpty)(p.property, p.property))).distinct();
26
27
  }
27
28
  get droppedIn() {
28
29
  return this.get('droppedIn', () => this.columns.filter(c => !this.keys.some(k => k === c)));
@@ -48,6 +49,16 @@ exports.mappings = {
48
49
  in: () => undefined,
49
50
  out: () => undefined,
50
51
  }),
52
+ skipIn: (property) => ({
53
+ property,
54
+ in: () => undefined,
55
+ out: (source = {}) => source[property],
56
+ }),
57
+ skipOut: (property) => ({
58
+ property,
59
+ in: (source = {}) => source[property],
60
+ out: () => undefined,
61
+ }),
51
62
  func: (property, funcIn, funcOut) => ({
52
63
  property,
53
64
  in: (source = {}) => (0, types_1.ofGet)(funcIn, source),
@@ -1 +1 @@
1
- {"version":3,"file":"Mapper.js","sourceRoot":"","sources":["../../src/utils/Mapper.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Mapper.js","sourceRoot":"","sources":["../../src/utils/Mapper.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thisisagile/easy",
3
- "version": "8.37.6",
3
+ "version": "8.38.1",
4
4
  "description": "Straightforward library for building domain-driven microservice architectures",
5
5
  "author": "Sander Hoogendoorn",
6
6
  "license": "MIT",
@@ -31,7 +31,7 @@
31
31
  "access": "public"
32
32
  },
33
33
  "devDependencies": {
34
- "@thisisagile/easy-test": "8.37.6",
34
+ "@thisisagile/easy-test": "8.38.1",
35
35
  "@types/form-urlencoded": "^4.4.0",
36
36
  "@types/jsonwebtoken": "^8.5.8",
37
37
  "@types/validator": "^13.7.1"
@@ -17,6 +17,4 @@ export class Email extends Value {
17
17
 
18
18
  export const email = (email?: unknown): Email => new Email(email);
19
19
 
20
- export const isEmail = (email?: unknown): boolean => {
21
- return !isEmpty(email) && validator.isEmail(asString(email));
22
- };
20
+ export const isEmail = (e?: unknown): boolean => !isEmpty(e) && validator.isEmail(asString(e));
package/src/types/Json.ts CHANGED
@@ -9,7 +9,7 @@ export const isJson = (subject?: unknown): subject is { toJSON: () => Json } =>
9
9
 
10
10
  export const json = {
11
11
  parse: (subject: unknown): Json => JSON.parse(JSON.stringify(subject ?? {})),
12
- merge: (...subjects: unknown[]): Json => subjects.map(s => json.parse(s)).reduce((js, j) => ({ ...js, ...j }), {}),
12
+ merge: (...subjects: unknown[]): Json => json.parse(subjects.map(s => asJson(s, s => json.parse(s))).reduce((js, j) => ({ ...js, ...j }), {})),
13
13
  omit: (subject: unknown, ...keys: string[]): Json =>
14
14
  keys.reduce((js, k) => {
15
15
  delete js[k];
@@ -19,4 +19,4 @@ export const json = {
19
19
 
20
20
  export const toJson = json.merge;
21
21
 
22
- export const asJson = (j?: unknown, alt: Get<Json> = {}): Json => (isJson(j) ? j.toJSON() : isObject(j) ? (j as Json) : ofGet(alt));
22
+ export const asJson = (j?: unknown, alt: Get<Json> = {}): Json => (isJson(j) ? j.toJSON() : isObject(j) ? (j as Json) : ofGet(alt, j));
package/src/utils/Case.ts CHANGED
@@ -11,6 +11,14 @@ class Case<T, V = unknown> {
11
11
  .or(this);
12
12
  }
13
13
 
14
+ type<U>(pred: (v: unknown) => v is U, out: Get<T, U>): Case<T, V> {
15
+ return tryTo(pred, this.value)
16
+ .is.true()
17
+ .map(() => ofGet<T, U>(out, this.value as unknown as U))
18
+ .map(res => new Found(this.value, res) as Case<T, V>)
19
+ .or(this);
20
+ }
21
+
14
22
  else(alt: Get<T, V>): T {
15
23
  return ofGet(alt, this.value);
16
24
  }
@@ -1,6 +1,7 @@
1
1
  import { Construct, Get, isA, isEmpty, json, Json, JsonValue, List, meta, ofConstruct, ofGet, toList } from '../types';
2
2
  import { Property, PropertyOptions } from './Property';
3
3
  import { State } from './State';
4
+ import { ifNotEmpty } from './If';
4
5
 
5
6
  export type Mapping = {
6
7
  property: string;
@@ -19,34 +20,40 @@ export class Mapper extends State implements Mapping {
19
20
  super();
20
21
  }
21
22
 
23
+ // All properties that are a mapping
22
24
  get properties(): List<[string, Mapping]> {
23
25
  return this.get('props', () =>
24
26
  meta(this)
25
27
  .entries<Mapping>()
26
- .filter(([, v]) => isMapping(v))
28
+ .filter(([, v]) => isMapping(v)),
27
29
  );
28
30
  }
29
31
 
32
+ // All names of properties (in target) that have a Mapping
30
33
  get keys(): List<string> {
31
34
  return this.get('keys', () => this.properties.map(([k]) => k));
32
35
  }
33
36
 
37
+ // All names of properties (in source) that are named in a Mapping
34
38
  get columns(): List<string> {
35
- return this.get('columns', () => this.properties.map(([, p]) => p.property ?? ''));
39
+ return this.get('columns', () => this.properties.mapDefined(([, p]) => ifNotEmpty(p.property, p.property))).distinct();
36
40
  }
37
41
 
42
+ // All names of properties (in source) that are NOT properties in target
38
43
  private get droppedIn(): List<string> {
39
44
  return this.get('droppedIn', () => this.columns.filter(c => !this.keys.some(k => k === c)));
40
45
  }
41
46
 
47
+ // All names op properties (in target) that are NOT properties in source
42
48
  private get droppedOut(): List<string> {
43
49
  return this.get('droppedOut', () => this.properties.filter(([, p]) => !this.keys.some(k => k === p.property ?? '')).map(([k]) => k));
44
50
  }
45
51
 
46
52
  public in(from: Json = {}): Json {
47
53
  return json.omit(
48
- this.properties.reduce((a, [k, p]) => json.merge(a, { [k]: p.in({ ...a, ...from }) }), this.options.startFrom === 'source' ? from : {}),
49
- ...this.droppedIn
54
+ this.properties.reduce((a, [k, p]) => json.merge(a, { [k]: p.in({ ...a, ...from }) }),
55
+ this.options.startFrom === 'source' ? from : {}),
56
+ ...this.droppedIn,
50
57
  );
51
58
  }
52
59
 
@@ -54,9 +61,9 @@ export class Mapper extends State implements Mapping {
54
61
  return json.omit(
55
62
  this.properties.reduce(
56
63
  (a, [k, p]) => json.merge(a, isEmpty(p.property) ? p.out(to, k) : { [p.property ?? '']: p.out({ ...a, ...to }, k) }),
57
- this.options.startFrom === 'source' ? to : {}
64
+ this.options.startFrom === 'source' ? to : {},
58
65
  ),
59
- ...this.droppedOut
66
+ ...this.droppedOut,
60
67
  );
61
68
  }
62
69
 
@@ -72,6 +79,16 @@ export const mappings = {
72
79
  in: (): JsonValue | undefined => undefined,
73
80
  out: (): JsonValue | undefined => undefined,
74
81
  }),
82
+ skipIn: (property : string): Mapping => ({
83
+ property,
84
+ in: (): JsonValue | undefined => undefined,
85
+ out: (source: Json = {}): JsonValue => source[property],
86
+ }),
87
+ skipOut: (property: string ): Mapping => ({
88
+ property,
89
+ in: (source: Json = {}): JsonValue => source[property],
90
+ out: (): JsonValue | undefined => undefined,
91
+ }),
75
92
  func: (property: string, funcIn: Get<JsonValue | undefined, Json>, funcOut: Get<JsonValue | undefined, Json>): Mapping => ({
76
93
  property,
77
94
  in: (source: Json = {}): JsonValue | undefined => ofGet(funcIn, source),
@@ -97,7 +114,6 @@ export const mappings = {
97
114
  return { ...a, [m.property]: out ?? {} };
98
115
  }, {}),
99
116
  }),
100
-
101
117
  list: (mapper: Mapping, property: string): Mapping => ({
102
118
  property: property,
103
119
  in: (source: Json = {}): JsonValue =>