@thisisagile/easy 14.2.12 → 15.0.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.
@@ -13,7 +13,7 @@ declare class ClassMeta {
13
13
  get: <T>(key: string) => T;
14
14
  set: <T>(key: string, value: T) => T;
15
15
  entries: <T = unknown>() => List<Entry<T>>;
16
- parse: (p: (v: unknown) => unknown, options?: MetaParseOptions) => any;
16
+ parse: <Out, Value>(f: (v: Value) => Out, options?: MetaParseOptions) => Record<string, Out>;
17
17
  properties: (key?: string) => List<PropertyMeta>;
18
18
  keys: <T = any>(key: string) => List<T>;
19
19
  values: <T = unknown>() => List<T>;
@@ -15,12 +15,9 @@ class ClassMeta {
15
15
  return value;
16
16
  };
17
17
  this.entries = () => (0, List_1.toList)([...Object.entries(this.subject), ...Object.entries(Object.getPrototypeOf(this.subject))]);
18
- this.parse = (p, options = {}) => {
18
+ this.parse = (f, options = {}) => {
19
19
  const { initial = {}, skipUndefined = false } = options;
20
- return this.entries().reduce((a, [key, value]) => {
21
- const v = p(value);
22
- return (0, Is_1.isDefined)(v) || !skipUndefined ? (0, Constructor_1.on)(a, a => (a[key] = v)) : a;
23
- }, initial);
20
+ return this.entries().reduce((a, [k, val]) => (0, Constructor_1.use)(f(val), v => (0, Is_1.isDefined)(v) || !skipUndefined ? (0, Constructor_1.on)(a, a => a[k] = v) : a), initial);
24
21
  };
25
22
  this.properties = (key) => (0, List_1.toList)([...Object.getOwnPropertyNames(this.subject), ...Object.getOwnPropertyNames(Object.getPrototypeOf(this.subject))])
26
23
  .map(p => this.property(p))
@@ -1 +1 @@
1
- {"version":3,"file":"Meta.js","sourceRoot":"","sources":["../../src/types/Meta.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Meta.js","sourceRoot":"","sources":["../../src/types/Meta.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,17 @@
1
- import { Constructor, DontInfer, Json, List, PageList } from '../types';
1
+ import { Constructor, DontInfer, Json, List, PageList, Primitive } from '../types';
2
2
  type Func<T = unknown> = (a: any, key?: string) => T;
3
- export type InOut = {
4
- in?: Func | View<any>;
5
- col?: string;
6
- };
7
- type Views<V = Json> = Partial<Record<keyof V, string | Func | InOut | number | boolean | undefined>>;
8
3
  type Viewer = {
9
- in: {
10
- key: string;
11
- f: Func;
12
- };
4
+ key: string;
5
+ f: Func;
13
6
  };
7
+ type ViewType = Primitive | Constructor | Func | View | undefined;
8
+ type ViewRecord<V = Json> = Partial<Record<keyof V, ViewType>>;
9
+ export declare const toViewer: (key: string, value: ViewType) => Viewer;
14
10
  export declare class View<V = Json> {
15
11
  private views;
16
12
  readonly startsFrom: 'scratch' | 'source';
17
13
  readonly viewers: Viewer[];
18
- constructor(views?: Views<V>, startsFrom?: 'scratch' | 'source', viewers?: Viewer[]);
14
+ constructor(views?: Partial<Record<keyof V, ViewType>>, startsFrom?: 'scratch' | 'source', viewers?: Viewer[]);
19
15
  get fromSource(): View<V>;
20
16
  from<T = unknown>(source: PageList<T>): PageList<V>;
21
17
  from<T = unknown>(source: List<T>): List<V>;
@@ -24,15 +20,17 @@ export declare class View<V = Json> {
24
20
  same: (one?: unknown, another?: unknown) => boolean;
25
21
  private reduce;
26
22
  }
27
- export declare const skip: () => undefined;
28
- export declare const view: <V = Json>(views: Partial<Record<keyof DontInfer<V>, string | number | boolean | Func<unknown> | InOut | undefined>>) => View<V>;
23
+ export declare const isSimpleView: (a: unknown) => a is View<Json>;
24
+ export declare const view: <V = Json>(views: Partial<Record<keyof DontInfer<V>, ViewType>>) => View<V>;
29
25
  export declare const views: {
30
- ignore: () => undefined;
31
- skip: () => undefined;
32
- keep: (a: unknown, key?: string) => unknown;
33
- keepOr: (alt?: unknown) => (a: unknown, key?: string) => unknown;
34
- or: (key: string, alt?: string) => (a: unknown) => {};
26
+ ignore: symbol;
27
+ keep: symbol;
28
+ skip: symbol;
35
29
  value: (value: unknown) => () => unknown;
36
- to: <T>(ctor: Constructor<T>) => (a: unknown, key?: string) => T;
30
+ or: {
31
+ key: (altKey: string) => (a: unknown, key?: string) => unknown;
32
+ value: (altValue: unknown) => (a: unknown, key?: string) => unknown;
33
+ func: (altFunc: Func) => (a: unknown, key?: string) => unknown;
34
+ };
37
35
  };
38
36
  export {};
@@ -1,58 +1,60 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.views = exports.view = exports.skip = exports.View = void 0;
3
+ exports.views = exports.view = exports.isSimpleView = exports.View = exports.toViewer = void 0;
4
4
  const types_1 = require("../types");
5
5
  const Traverse_1 = require("./Traverse");
6
- const isColOnly = (v) => (0, types_1.isObject)(v) && (0, types_1.isDefined)(v.col) && !(0, types_1.isDefined)(v.in);
7
- const isInOnly = (v) => (0, types_1.isObject)(v) && !(0, types_1.isDefined)(v.col) && (0, types_1.isFunction)(v.in);
8
- const isColAndFunction = (v) => (0, types_1.isObject)(v) && (0, types_1.isDefined)(v.col) && (0, types_1.isFunction)(v.in);
9
- const isColAndView = (v) => (0, types_1.isObject)(v) && (0, types_1.isDefined)(v.col) && v.in instanceof View;
10
- 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, col)) : (a) => f((0, Traverse_1.traverse)(a, col)))).value;
6
+ const ignore = Symbol('view.ignore');
7
+ const keep = Symbol('view.keep');
11
8
  const toViewer = (key, value) => (0, types_1.choose)(value)
12
- .is.not.defined(v => v, () => toViewer(key, () => undefined))
13
- .type(types_1.isBoolean, b => toViewer(key, () => b))
14
- .type(types_1.isNumber, n => toViewer(key, () => n))
15
- .type(types_1.isString, s => toViewer(key, (a) => toFunc(a, s)(a)))
16
- .type(isColOnly, io => toViewer(key, io.col))
17
- .type(types_1.isFunction, f => toViewer(key, { in: { key, f } }))
18
- .type(isInOnly, io => toViewer(key, { in: { key, f: io.in } }))
19
- .type(isColAndFunction, io => toViewer(key, { in: { key, f: (a) => toFunc(a, io.col, io.in)(a) } }))
20
- .type(isColAndView, io => toViewer(key, { in: { key, f: (a) => io.in.from((0, Traverse_1.traverse)(a, io.col)) } }))
21
- .else(v => v);
22
- const toViewers = (views) => (0, types_1.meta)(views)
23
- .entries()
24
- .map(([k, v]) => toViewer(k, v));
9
+ .is.not.defined(v => v, { key, f: () => undefined })
10
+ .type(types_1.isBoolean, b => ({ key, f: () => b }))
11
+ .equals(ignore, { key, f: () => undefined })
12
+ .equals(0, { key, f: () => undefined })
13
+ .equals(keep, { key, f: (a) => (0, Traverse_1.traverse)(a, key) })
14
+ .equals(1, { key, f: (a) => (0, Traverse_1.traverse)(a, key) })
15
+ .type(types_1.isString, s => ({ key, f: (a) => (0, Traverse_1.traverse)(a, s) }))
16
+ .type(types_1.isConstructor, c => ({
17
+ key,
18
+ f: (a, key) => (0, types_1.use)((0, Traverse_1.traverse)(a, key), v => (0, types_1.isArray)(v) ? v.map(i => new c(i)) : new c(v))
19
+ }))
20
+ .type(exports.isSimpleView, f => ({ key, f: (a) => f.from((0, Traverse_1.traverse)(a, key)) }))
21
+ .type(types_1.isFunction, f => ({ key, f }))
22
+ .else(v => ({ key, f: () => v }));
23
+ exports.toViewer = toViewer;
24
+ const toViewers = (views) => (0, types_1.meta)(views).entries().map(([k, v]) => (0, exports.toViewer)(k, v));
25
25
  class View {
26
26
  constructor(views = {}, startsFrom = 'scratch', viewers = toViewers(views)) {
27
27
  this.views = views;
28
28
  this.startsFrom = startsFrom;
29
29
  this.viewers = viewers;
30
30
  this.same = (one, another) => (0, types_1.isEqual)(this.from(one), this.from(another));
31
- this.reduce = (i) => this.viewers.reduce((a, v) => types_1.json.set(a, v.in.key, v.in.f(i, v.in.key)), this.startsFrom === 'scratch' ? {} : i);
31
+ this.reduce = (source) => (0, types_1.use)((0, types_1.asJson)(source), src => this.viewers.reduce((acc, v) => types_1.json.set(acc, v.key, v.f(src, v.key)), this.startsFrom === 'scratch' ? {} : src));
32
32
  }
33
33
  get fromSource() {
34
34
  return new View(this.views, 'source', this.viewers);
35
35
  }
36
36
  from(source) {
37
37
  if ((0, types_1.isPageList)(source))
38
- return (0, types_1.toPageList)(source.map(s => this.reduce((0, types_1.asJson)(s))), source);
38
+ return (0, types_1.toPageList)(source.map(s => this.reduce(s)), source);
39
39
  if ((0, types_1.isArray)(source))
40
- return source.map(s => this.reduce((0, types_1.asJson)(s)));
41
- return this.reduce((0, types_1.asJson)(source));
40
+ return source.map(s => this.reduce(s));
41
+ return this.reduce(source);
42
42
  }
43
43
  }
44
44
  exports.View = View;
45
- const skip = () => undefined;
46
- exports.skip = skip;
45
+ const isSimpleView = (a) => a instanceof View;
46
+ exports.isSimpleView = isSimpleView;
47
47
  const view = (views) => new View(views);
48
48
  exports.view = view;
49
49
  exports.views = {
50
- ignore: () => undefined,
51
- skip: () => undefined,
52
- keep: (a, key) => (0, Traverse_1.traverse)(a, key),
53
- keepOr: (alt) => (a, key) => (0, Traverse_1.traverse)(a, key) ?? alt,
54
- or: (key, alt = '') => (a) => (0, Traverse_1.traverse)(a, key) ?? alt,
50
+ ignore,
51
+ keep,
52
+ skip: ignore,
55
53
  value: (value) => () => value,
56
- to: (ctor) => (a, key) => new ctor((0, Traverse_1.traverse)(a, key)),
54
+ or: {
55
+ key: (altKey) => (a, key) => (0, Traverse_1.traverse)(a, key) ?? (0, Traverse_1.traverse)(a, altKey),
56
+ value: (altValue) => (a, key) => (0, Traverse_1.traverse)(a, key) ?? altValue,
57
+ func: (altFunc) => (a, key) => (0, Traverse_1.traverse)(a, key) ?? altFunc(a, key),
58
+ },
57
59
  };
58
60
  //# sourceMappingURL=View.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"View.js","sourceRoot":"","sources":["../../src/utils/View.ts"],"names":[],"mappings":"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"}
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": "14.2.12",
3
+ "version": "15.0.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": "14.2.12",
34
+ "@thisisagile/easy-test": "15.0.1",
35
35
  "@types/form-urlencoded": "^4.4.0",
36
36
  "@types/jsonwebtoken": "^8.5.9",
37
37
  "@types/luxon": "3.2.0",
package/src/types/Meta.ts CHANGED
@@ -1,62 +1,61 @@
1
1
  import 'reflect-metadata';
2
- import { List, toList } from './List';
3
- import { isDefined } from './Is';
4
- import { on } from './Constructor';
5
- import { Optional } from './Types';
2
+ import {List, toList} from './List';
3
+ import {isDefined} from './Is';
4
+ import {on, use} from './Constructor';
5
+ import {Optional} from './Types';
6
6
 
7
7
  type MetaParseOptions = { initial?: any; skipUndefined?: boolean };
8
8
 
9
9
  type Entry<T = unknown> = [key: string, value: T];
10
10
 
11
11
  class ClassMeta {
12
- constructor(readonly subject: any, private readonly data: any = (subject.prototype ?? subject).constructor) {}
12
+ constructor(readonly subject: any, private readonly data: any = (subject.prototype ?? subject).constructor) {
13
+ }
13
14
 
14
- get = <T>(key: string): T => Reflect.getMetadata(key, this.data) as T;
15
+ get = <T>(key: string): T => Reflect.getMetadata(key, this.data) as T;
15
16
 
16
- set = <T>(key: string, value: T): T => {
17
- Reflect.defineMetadata(key, value, this.data);
18
- return value;
19
- };
17
+ set = <T>(key: string, value: T): T => {
18
+ Reflect.defineMetadata(key, value, this.data);
19
+ return value;
20
+ };
20
21
 
21
- entries = <T = unknown>(): List<Entry<T>> =>
22
- toList([...Object.entries(this.subject), ...Object.entries(Object.getPrototypeOf(this.subject))]) as List<Entry<T>>;
22
+ entries = <T = unknown>(): List<Entry<T>> =>
23
+ toList([...Object.entries(this.subject), ...Object.entries(Object.getPrototypeOf(this.subject))]) as List<Entry<T>>;
23
24
 
24
- parse = (p: (v: unknown) => unknown, options: MetaParseOptions = {}): any => {
25
- const { initial = {}, skipUndefined = false } = options;
26
- return this.entries().reduce((a, [key, value]) => {
27
- const v = p(value);
28
- return isDefined(v) || !skipUndefined ? on(a, a => (a[key] = v)) : a;
29
- }, initial);
30
- };
25
+ parse = <Out, Value>(f: (v: Value) => Out, options: MetaParseOptions = {}): Record<string, Out> => {
26
+ const {initial = {}, skipUndefined = false} = options;
27
+ return this.entries<Value>().reduce((a, [k, val]) => use(f(val), v => isDefined(v) || !skipUndefined ? on(a, a => a[k] = v) : a), initial);
28
+ };
31
29
 
32
- properties = (key?: string): List<PropertyMeta> =>
33
- toList([...Object.getOwnPropertyNames(this.subject), ...Object.getOwnPropertyNames(Object.getPrototypeOf(this.subject))])
34
- .map(p => this.property(p))
35
- .filter(p => (key ? p.get(key) : p));
30
+ properties = (key?: string): List<PropertyMeta> =>
31
+ toList([...Object.getOwnPropertyNames(this.subject), ...Object.getOwnPropertyNames(Object.getPrototypeOf(this.subject))])
32
+ .map(p => this.property(p))
33
+ .filter(p => (key ? p.get(key) : p));
36
34
 
37
- keys = <T = any>(key: string): List<T> =>
38
- this.properties()
39
- .map(p => p.get<T>(key))
40
- .reduce((list, u) => (u ? list.add(u) : list), toList<T>());
35
+ keys = <T = any>(key: string): List<T> =>
36
+ this.properties()
37
+ .map(p => p.get<T>(key))
38
+ .reduce((list, u) => (u ? list.add(u) : list), toList<T>());
41
39
 
42
- values = <T = unknown>(): List<T> => toList([...Object.values<T>(this.subject), ...Object.values<T>(Object.getPrototypeOf(this.subject))]);
40
+ values = <T = unknown>(): List<T> => toList([...Object.values<T>(this.subject), ...Object.values<T>(Object.getPrototypeOf(this.subject))]);
43
41
 
44
- property = (property: string | symbol): PropertyMeta => new PropertyMeta(this.subject, property);
42
+ property = (property: string | symbol): PropertyMeta => new PropertyMeta(this.subject, property);
45
43
  }
46
44
 
47
45
  class PropertyMeta {
48
- constructor(readonly subject: any, readonly property: string | symbol, private readonly data = Reflect.getMetadata(property, subject)) {}
46
+ constructor(readonly subject: any, readonly property: string | symbol, private readonly data = Reflect.getMetadata(property, subject)) {
47
+ }
49
48
 
50
- get value(): any {
51
- return this.subject[this.property];
52
- }
49
+ get value(): any {
50
+ return this.subject[this.property];
51
+ }
53
52
 
54
- get = <T>(key: string): Optional<T> => (isDefined(this.data) && isDefined(this.data[key]) ? (this.data[key] as T) : undefined);
53
+ get = <T>(key: string): Optional<T> => (isDefined(this.data) && isDefined(this.data[key]) ? (this.data[key] as T) : undefined);
55
54
 
56
- set = <T>(key: string, value: T): T => {
57
- Reflect.defineMetadata(this.property, { ...this.data, [key]: value }, this.subject);
58
- return value;
59
- };
55
+ set = <T>(key: string, value: T): T => {
56
+ Reflect.defineMetadata(this.property, {...this.data, [key]: value}, this.subject);
57
+ return value;
58
+ };
60
59
  }
61
60
 
62
61
  export const meta = (subject: unknown): ClassMeta => new ClassMeta(subject ?? {});
package/src/utils/View.ts CHANGED
@@ -1,114 +1,91 @@
1
1
  import {
2
- asJson,
3
- choose,
4
- Constructor,
5
- DontInfer,
6
- isArray,
7
- isBoolean,
8
- isDefined,
9
- isEqual,
10
- isFunction,
11
- isNumber,
12
- isObject,
13
- isPageList,
14
- isString,
15
- Json,
16
- json,
17
- List,
18
- meta,
19
- PageList,
20
- toPageList,
21
- tryTo,
2
+ asJson,
3
+ choose,
4
+ Constructor,
5
+ DontInfer,
6
+ isArray,
7
+ isBoolean,
8
+ isConstructor,
9
+ isEqual,
10
+ isFunction,
11
+ isPageList,
12
+ isString,
13
+ json,
14
+ Json,
15
+ List,
16
+ meta,
17
+ PageList,
18
+ Primitive,
19
+ toPageList,
20
+ use,
22
21
  } from '../types';
23
- import { traverse } from './Traverse';
22
+ import {traverse} from './Traverse';
24
23
 
25
24
  type Func<T = unknown> = (a: any, key?: string) => T;
25
+ type Viewer = { key: string; f: Func };
26
26
 
27
- export type InOut = { in?: Func | View<any>; col?: string };
27
+ type ViewType = Primitive | Constructor | Func | View | undefined;
28
+ type ViewRecord<V = Json> = Partial<Record<keyof V, ViewType>>;
28
29
 
29
- const isColOnly = (v: unknown): v is InOut => isObject(v) && isDefined(v.col) && !isDefined(v.in);
30
- const isInOnly = (v: unknown): v is InOut => isObject(v) && !isDefined(v.col) && isFunction(v.in);
31
- const isColAndFunction = (
32
- v: unknown
33
- ): v is {
34
- col: string;
35
- in: Func;
36
- } => isObject(v) && isDefined(v.col) && isFunction(v.in);
37
- const isColAndView = (
38
- v: unknown
39
- ): v is {
40
- col: string;
41
- in: View;
42
- } => isObject(v) && isDefined(v.col) && v.in instanceof View;
30
+ const ignore = Symbol('view.ignore');
31
+ const keep = Symbol('view.keep');
43
32
 
44
- type Views<V = Json> = Partial<Record<keyof V, string | Func | InOut | number | boolean | undefined>>;
45
- type Viewer = { in: { key: string; f: Func } };
33
+ export const toViewer = (key: string, value: ViewType): Viewer =>
34
+ choose(value)
35
+ .is.not.defined(v => v, {key, f: () => undefined} as Viewer)
36
+ .type(isBoolean, b => ({key, f: () => b}))
37
+ .equals(ignore, {key, f: () => undefined})
38
+ .equals(0, {key, f: () => undefined})
39
+ .equals(keep, {key, f: (a: any) => traverse(a, key)})
40
+ .equals(1, {key, f: (a: any) => traverse(a, key)})
41
+ .type(isString, s => ({key, f: (a: any) => traverse(a, s)}))
42
+ .type(isConstructor, c => ({
43
+ key,
44
+ f: (a, key) => use(traverse(a, key), v => isArray(v) ? v.map(i => new c(i)) : new c(v))
45
+ }))
46
+ .type(isSimpleView, f => ({key, f: (a: any) => f.from(traverse(a, key))}))
47
+ .type(isFunction, f => ({key, f}))
48
+ .else(v => ({key, f: () => v}));
46
49
 
47
- const toFunc = (a: any, col: string, f: Func = a => a): Func =>
48
- tryTo(traverse(a, col)).map(v => (isArray(v) ? () => v.map(i => f(i, col)) : (a: any) => f(traverse(a, col)))).value;
49
-
50
- const toViewer = (key: string, value: unknown): Viewer =>
51
- choose(value)
52
- .is.not.defined(
53
- v => v,
54
- () => toViewer(key, () => undefined)
55
- )
56
- .type(isBoolean, b => toViewer(key, () => b))
57
- .type(isNumber, n => toViewer(key, () => n))
58
- .type(isString, s => toViewer(key, (a: any) => toFunc(a, s)(a)))
59
- .type(isColOnly, io => toViewer(key, io.col))
60
- .type(isFunction, f => toViewer(key, { in: { key, f } }))
61
- .type(isInOnly, io => toViewer(key, { in: { key, f: io.in } }))
62
- .type(isColAndFunction, io => toViewer(key, { in: { key, f: (a: any) => toFunc(a, io.col, io.in)(a) } }))
63
- .type(isColAndView, io => toViewer(key, { in: { key, f: (a: any) => io.in.from(traverse(a, io.col)) } }))
64
- .else(v => v as Viewer);
65
-
66
- const toViewers = (views: Views): Viewer[] =>
67
- meta(views)
68
- .entries()
69
- .map(([k, v]) => toViewer(k, v));
50
+ const toViewers = (views: ViewRecord): Viewer[] => meta(views).entries<ViewType>().map(([k, v]) => toViewer(k, v));
70
51
 
71
52
  export class View<V = Json> {
72
- constructor(private views: Views<V> = {} as Views<V>, readonly startsFrom: 'scratch' | 'source' = 'scratch', readonly viewers: Viewer[] = toViewers(views)) {}
53
+ constructor(private views = {} as ViewRecord<V>, readonly startsFrom: 'scratch' | 'source' = 'scratch', readonly viewers: Viewer[] = toViewers(views)) {
54
+ }
73
55
 
74
- get fromSource(): View<V> {
75
- return new View(this.views, 'source', this.viewers);
76
- }
56
+ get fromSource(): View<V> {
57
+ return new View(this.views, 'source', this.viewers);
58
+ }
77
59
 
78
- from<T = unknown>(source: PageList<T>): PageList<V>;
79
- from<T = unknown>(source: List<T>): List<V>;
80
- from<T = unknown>(source: T[]): V[];
81
- from<T = unknown>(source: T): V;
82
- from<T = unknown>(source: PageList<T> | List<T> | T[] | T): PageList<V> | List<V> | V[] | V {
83
- if (isPageList(source))
84
- return toPageList(
85
- source.map(s => this.reduce(asJson(s))),
86
- source
87
- );
88
- if (isArray(source)) return source.map(s => this.reduce(asJson(s)));
89
- return this.reduce(asJson(source));
90
- }
60
+ from<T = unknown>(source: PageList<T>): PageList<V>;
61
+ from<T = unknown>(source: List<T>): List<V>;
62
+ from<T = unknown>(source: T[]): V[];
63
+ from<T = unknown>(source: T): V;
64
+ from<T = unknown>(source: PageList<T> | List<T> | T[] | T): PageList<V> | List<V> | V[] | V {
65
+ if (isPageList(source)) return toPageList(source.map(s => this.reduce(s)), source);
66
+ if (isArray(source)) return source.map(s => this.reduce(s));
67
+ return this.reduce(source);
68
+ }
91
69
 
92
- same = (one?: unknown, another?: unknown): boolean => isEqual(this.from(one), this.from(another));
70
+ same = (one?: unknown, another?: unknown): boolean => isEqual(this.from(one), this.from(another));
93
71
 
94
- private reduce = (i: any): any => this.viewers.reduce((a: any, v) => json.set(a, v.in.key, v.in.f(i, v.in.key)), this.startsFrom === 'scratch' ? {} : i);
72
+ private reduce = (source: any): any => use(asJson(source), src => this.viewers.reduce((acc, v) => json.set(acc, v.key, v.f(src, v.key)), this.startsFrom === 'scratch' ? {} : src));
95
73
  }
96
74
 
97
- export const skip = () => undefined;
98
- export const view = <V = Json>(views: Views<DontInfer<V>>): View<V> => new View<V>(views);
75
+ export const isSimpleView = (a: unknown): a is View => a instanceof View;
76
+
77
+ export const view = <V = Json>(views: ViewRecord<DontInfer<V>>): View<V> => new View<V>(views);
99
78
 
100
79
  export const views = {
101
- ignore: () => undefined,
102
- skip: () => undefined,
103
- keep: (a: unknown, key?: string) => traverse(a, key),
104
- keepOr: (alt?: unknown) => (a: unknown, key?: string) => traverse(a, key) ?? alt,
105
- or:
106
- (key: string, alt = '') =>
107
- (a: unknown) =>
108
- traverse(a, key) ?? alt,
109
- value: (value: unknown) => () => value,
110
- to:
111
- <T>(ctor: Constructor<T>) =>
112
- (a: unknown, key?: string) =>
113
- new ctor(traverse(a, key)),
80
+ ignore,
81
+ keep,
82
+ skip: ignore,
83
+ value: (value: unknown) => () => value,
84
+ or: {
85
+ key: (altKey: string) => (a: unknown, key?: string) => traverse(a, key) ?? traverse(a, altKey),
86
+ value: (altValue: unknown) => (a: unknown, key?: string) => traverse(a, key) ?? altValue,
87
+ func: (altFunc: Func) => (a: unknown, key?: string) => traverse(a, key) ?? altFunc(a, key),
88
+ },
114
89
  };
90
+
91
+ // spread: (a: any, key: string) => ({...a, ...(use(traverse(a, key), v => isObject(v) ? v : ({[key]: v})))}),