@thisisagile/easy 8.40.3 → 8.40.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/types/Json.d.ts +1 -0
- package/dist/types/Json.js +1 -0
- package/dist/types/Json.js.map +1 -1
- package/dist/utils/View.d.ts +7 -16
- package/dist/utils/View.js +15 -25
- package/dist/utils/View.js.map +1 -1
- package/package.json +2 -2
- package/src/types/Json.ts +2 -1
- package/src/utils/View.ts +23 -27
package/dist/types/Json.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export declare const json: {
|
|
|
10
10
|
parse: (subject: unknown) => Json;
|
|
11
11
|
merge: (...subjects: unknown[]) => Json;
|
|
12
12
|
omit: (subject: unknown, ...keys: string[]) => Json;
|
|
13
|
+
add: (subject: Json, key: string, value?: unknown) => Json;
|
|
13
14
|
};
|
|
14
15
|
export declare const toJson: (...subjects: unknown[]) => Json;
|
|
15
16
|
export declare const asJson: (j?: unknown, alt?: Get<Json>) => Json;
|
package/dist/types/Json.js
CHANGED
|
@@ -13,6 +13,7 @@ exports.json = {
|
|
|
13
13
|
delete js[k];
|
|
14
14
|
return js;
|
|
15
15
|
}, exports.json.parse(subject)),
|
|
16
|
+
add: (subject, key, value) => (0, Is_1.isDefined)(value) ? ({ ...subject, ...{ [key]: value } }) : subject,
|
|
16
17
|
};
|
|
17
18
|
exports.toJson = exports.json.merge;
|
|
18
19
|
const asJson = (j, alt = {}) => ((0, exports.isJson)(j) ? j.toJSON() : (0, Is_1.isObject)(j) ? j : (0, Get_1.ofGet)(alt, j));
|
package/dist/types/Json.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Json.js","sourceRoot":"","sources":["../../src/types/Json.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAC5B,
|
|
1
|
+
{"version":3,"file":"Json.js","sourceRoot":"","sources":["../../src/types/Json.ts"],"names":[],"mappings":";;;AAAA,+BAA4B;AAC5B,6BAA2C;AAC3C,+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;IACzB,GAAG,EAAE,CAAC,OAAa,EAAE,GAAW,EAAE,KAAe,EAAQ,EAAE,CAAC,IAAA,cAAS,EAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,KAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO;CACvI,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"}
|
package/dist/utils/View.d.ts
CHANGED
|
@@ -1,33 +1,24 @@
|
|
|
1
|
+
import { Json } from '../types';
|
|
1
2
|
declare type Func<T = unknown> = (a: any) => T;
|
|
2
3
|
export declare type InOut = {
|
|
3
4
|
in?: Func | View;
|
|
4
5
|
col?: string;
|
|
5
6
|
};
|
|
6
|
-
|
|
7
|
-
export declare const isInOnly: (v: unknown) => v is InOut;
|
|
8
|
-
export declare const isInOutWithFunction: (v: unknown) => v is {
|
|
9
|
-
col: string;
|
|
10
|
-
in: Func;
|
|
11
|
-
};
|
|
12
|
-
export declare const isInOutWithView: (v: unknown) => v is {
|
|
13
|
-
col: string;
|
|
14
|
-
in: View;
|
|
15
|
-
};
|
|
16
|
-
export declare type Views = {
|
|
7
|
+
declare type Views = {
|
|
17
8
|
[key: string]: string | Func | InOut;
|
|
18
9
|
};
|
|
19
|
-
|
|
20
|
-
in
|
|
10
|
+
declare type Viewer = {
|
|
11
|
+
in: {
|
|
21
12
|
key: string;
|
|
22
|
-
f
|
|
13
|
+
f: Func;
|
|
23
14
|
};
|
|
24
15
|
};
|
|
25
|
-
export declare const toViewers: (views: Views) => Viewer[];
|
|
26
16
|
export declare class View {
|
|
27
17
|
readonly startsFrom: 'scratch' | 'source';
|
|
28
18
|
readonly viewers: Viewer[];
|
|
29
19
|
constructor(views?: Views, startsFrom?: 'scratch' | 'source', viewers?: Viewer[]);
|
|
30
|
-
|
|
20
|
+
reduce: (i: any) => any;
|
|
21
|
+
from: (source: unknown) => Json[] | Json;
|
|
31
22
|
}
|
|
32
23
|
export declare const view: (views: Views, startsFrom?: "scratch" | "source" | undefined) => View;
|
|
33
24
|
export {};
|
package/dist/utils/View.js
CHANGED
|
@@ -1,41 +1,31 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.view = exports.View =
|
|
3
|
+
exports.view = exports.View = void 0;
|
|
4
4
|
const types_1 = require("../types");
|
|
5
5
|
const Traverse_1 = require("./Traverse");
|
|
6
6
|
const Case_1 = require("./Case");
|
|
7
7
|
const isColOnly = (v) => (0, types_1.isObject)(v) && (0, types_1.isDefined)(v.col) && !(0, types_1.isDefined)(v.in);
|
|
8
|
-
exports.isColOnly = isColOnly;
|
|
9
8
|
const isInOnly = (v) => (0, types_1.isObject)(v) && !(0, types_1.isDefined)(v.col) && (0, types_1.isFunction)(v.in);
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
.
|
|
17
|
-
.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
return (0, Case_1.choose)(value)
|
|
22
|
-
.type(types_1.isString, s => toViewer(key, (a) => toFunc(a, s)(a)))
|
|
23
|
-
.type(exports.isColOnly, io => toViewer(key, io.col))
|
|
24
|
-
.type(types_1.isFunction, f => toViewer(key, { in: { key, f } }))
|
|
25
|
-
.type(exports.isInOnly, io => toViewer(key, { in: { key, f: io.in } }))
|
|
26
|
-
.type(exports.isInOutWithFunction, io => toViewer(key, { in: { key, f: (a) => toFunc(a, io.col, io.in)(a) } }))
|
|
27
|
-
.type(exports.isInOutWithView, io => toViewer(key, { in: { key, f: (a) => toFunc(a, io.col, io.in.from)(a) } }))
|
|
28
|
-
.else(m => m);
|
|
29
|
-
};
|
|
9
|
+
const isColAndFunction = (v) => (0, types_1.isObject)(v) && (0, types_1.isDefined)(v.col) && (0, types_1.isFunction)(v.in);
|
|
10
|
+
const isColAndView = (v) => (0, types_1.isObject)(v) && (0, types_1.isDefined)(v.col) && v.in instanceof View;
|
|
11
|
+
const toFunc = (a, col, f = a => a) => (0, types_1.tryTo)((0, Traverse_1.traverse)(a, col)).map(v => (0, types_1.isArray)(v) ? () => v.map(i => f(i)) : (a) => f((0, Traverse_1.traverse)(a, col))).value;
|
|
12
|
+
const toViewer = (key, value) => (0, Case_1.choose)(value)
|
|
13
|
+
.type(types_1.isString, s => toViewer(key, (a) => toFunc(a, s)(a)))
|
|
14
|
+
.type(isColOnly, io => toViewer(key, io.col))
|
|
15
|
+
.type(types_1.isFunction, f => toViewer(key, { in: { key, f } }))
|
|
16
|
+
.type(isInOnly, io => toViewer(key, { in: { key, f: io.in } }))
|
|
17
|
+
.type(isColAndFunction, io => toViewer(key, { in: { key, f: (a) => toFunc(a, io.col, io.in)(a) } }))
|
|
18
|
+
.type(isColAndView, io => toViewer(key, { in: { key, f: (a) => toFunc(a, io.col, io.in.from)(a) } }))
|
|
19
|
+
.else(v => v);
|
|
30
20
|
const toViewers = (views) => (0, types_1.meta)(views)
|
|
31
21
|
.entries()
|
|
32
22
|
.map(([k, v]) => toViewer(k, v));
|
|
33
|
-
exports.toViewers = toViewers;
|
|
34
23
|
class View {
|
|
35
|
-
constructor(views = {}, startsFrom = 'scratch', viewers =
|
|
24
|
+
constructor(views = {}, startsFrom = 'scratch', viewers = toViewers(views)) {
|
|
36
25
|
this.startsFrom = startsFrom;
|
|
37
26
|
this.viewers = viewers;
|
|
38
|
-
this.
|
|
27
|
+
this.reduce = (i) => this.viewers.reduce((a, v) => types_1.json.add(a, v.in.key, v.in.f(i)), this.startsFrom === 'scratch' ? {} : i);
|
|
28
|
+
this.from = (source) => (0, types_1.isArray)(source) ? source.map(s => this.reduce((0, types_1.asJson)(s))) : this.reduce((0, types_1.asJson)(source));
|
|
39
29
|
}
|
|
40
30
|
}
|
|
41
31
|
exports.View = View;
|
package/dist/utils/View.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"View.js","sourceRoot":"","sources":["../../src/utils/View.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"View.js","sourceRoot":"","sources":["../../src/utils/View.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.40.
|
|
3
|
+
"version": "8.40.4",
|
|
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.40.
|
|
34
|
+
"@thisisagile/easy-test": "8.40.4",
|
|
35
35
|
"@types/form-urlencoded": "^4.4.0",
|
|
36
36
|
"@types/jsonwebtoken": "^8.5.8",
|
|
37
37
|
"@types/validator": "^13.7.1"
|
package/src/types/Json.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { isA } from './IsA';
|
|
2
|
-
import { isObject } from './Is';
|
|
2
|
+
import { isDefined, isObject } from './Is';
|
|
3
3
|
import { Get, ofGet } from './Get';
|
|
4
4
|
|
|
5
5
|
export type JsonValue = string | number | boolean | null | Json | JsonValue[];
|
|
@@ -15,6 +15,7 @@ export const json = {
|
|
|
15
15
|
delete js[k];
|
|
16
16
|
return js;
|
|
17
17
|
}, json.parse(subject)),
|
|
18
|
+
add: (subject: Json, key: string, value?: unknown): Json => isDefined(value) ? ({ ...subject, ...{ [key]: value as Json } }) : subject,
|
|
18
19
|
};
|
|
19
20
|
|
|
20
21
|
export const toJson = json.merge;
|
package/src/utils/View.ts
CHANGED
|
@@ -1,37 +1,32 @@
|
|
|
1
|
-
import { asJson, isArray, isDefined, isFunction, isObject, isString, meta, tryTo } from '../types';
|
|
1
|
+
import { asJson, isArray, isDefined, isFunction, isObject, isString, Json, json, meta, tryTo } from '../types';
|
|
2
2
|
import { traverse } from './Traverse';
|
|
3
3
|
import { choose } from './Case';
|
|
4
4
|
|
|
5
5
|
type Func<T = unknown> = (a: any) => T;
|
|
6
6
|
|
|
7
7
|
export type InOut = { in?: Func | View, col?: string };
|
|
8
|
-
export const isColOnly = (v: unknown): v is InOut => isObject(v) && isDefined(v.col) && !isDefined(v.in);
|
|
9
|
-
export const isInOnly = (v: unknown): v is InOut => isObject(v) && !isDefined(v.col) && isFunction(v.in);
|
|
10
|
-
export const isInOutWithFunction = (v: unknown): v is { col: string, in: Func } => isObject(v) && isDefined(v.col) && isFunction(v.in);
|
|
11
|
-
export const isInOutWithView = (v: unknown): v is { col: string, in: View } => isObject(v) && isDefined(v.col) && v.in instanceof View;
|
|
12
8
|
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
const isColOnly = (v: unknown): v is InOut => isObject(v) && isDefined(v.col) && !isDefined(v.in);
|
|
10
|
+
const isInOnly = (v: unknown): v is InOut => isObject(v) && !isDefined(v.col) && isFunction(v.in);
|
|
11
|
+
const isColAndFunction = (v: unknown): v is { col: string, in: Func } => isObject(v) && isDefined(v.col) && isFunction(v.in);
|
|
12
|
+
const isColAndView = (v: unknown): v is { col: string, in: View } => isObject(v) && isDefined(v.col) && v.in instanceof View;
|
|
13
|
+
|
|
14
|
+
type Views = { [key: string]: string | Func | InOut };
|
|
15
|
+
type Viewer = { in: { key: string, f: Func } };
|
|
15
16
|
|
|
16
17
|
const toFunc = (a: any, col: string, f: Func = a => a): Func =>
|
|
17
|
-
tryTo(traverse(a, col))
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
.type(isInOutWithFunction, io => toViewer(key, { in: { key, f: (a: any) => toFunc(a, io.col, io.in)(a) } }))
|
|
30
|
-
.type(isInOutWithView, io => toViewer(key, { in: { key, f: (a: any) => toFunc(a, io.col, io.in.from)(a) } }))
|
|
31
|
-
.else(m => m as Viewer);
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
export const toViewers = (views: Views): Viewer[] =>
|
|
18
|
+
tryTo(traverse(a, col)).map(v => isArray(v) ? () => v.map(i => f(i)) : (a: any) => f(traverse(a, col))).value;
|
|
19
|
+
|
|
20
|
+
const toViewer = (key: string, value: unknown): Viewer => choose<Viewer>(value)
|
|
21
|
+
.type(isString, s => toViewer(key, (a: any) => toFunc(a, s)(a)))
|
|
22
|
+
.type(isColOnly, io => toViewer(key, io.col))
|
|
23
|
+
.type(isFunction, f => toViewer(key, { in: { key, f } }))
|
|
24
|
+
.type(isInOnly, io => toViewer(key, { in: { key, f: io.in } }))
|
|
25
|
+
.type(isColAndFunction, io => toViewer(key, { in: { key, f: (a: any) => toFunc(a, io.col, io.in)(a) } }))
|
|
26
|
+
.type(isColAndView, io => toViewer(key, { in: { key, f: (a: any) => toFunc(a, io.col, io.in.from)(a) } }))
|
|
27
|
+
.else(v => v as Viewer);
|
|
28
|
+
|
|
29
|
+
const toViewers = (views: Views): Viewer[] =>
|
|
35
30
|
meta(views)
|
|
36
31
|
.entries()
|
|
37
32
|
.map(([k, v]) => toViewer(k, v));
|
|
@@ -40,8 +35,9 @@ export class View {
|
|
|
40
35
|
constructor(views: Views = {}, readonly startsFrom: 'scratch' | 'source' = 'scratch', readonly viewers: Viewer[] = toViewers(views)) {
|
|
41
36
|
}
|
|
42
37
|
|
|
43
|
-
|
|
44
|
-
}
|
|
38
|
+
reduce = (i: any): any => this.viewers.reduce((a: any, v) => json.add(a, v.in.key, v.in.f(i)), this.startsFrom === 'scratch' ? {} : i);
|
|
45
39
|
|
|
40
|
+
from = (source: unknown): Json[] | Json => isArray(source) ? source.map(s => this.reduce(asJson(s))): this.reduce(asJson(source));
|
|
41
|
+
}
|
|
46
42
|
|
|
47
43
|
export const view = (views: Views, startsFrom?: 'scratch' | 'source'): View => new View(views, startsFrom);
|