@thisisagile/easy 14.1.28 → 14.2.2

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,13 +5,14 @@ type MetaParseOptions = {
5
5
  initial?: any;
6
6
  skipUndefined?: boolean;
7
7
  };
8
+ type Entry<T = unknown> = [key: string, value: T];
8
9
  declare class ClassMeta {
9
10
  readonly subject: any;
10
11
  private readonly data;
11
12
  constructor(subject: any, data?: any);
12
13
  get: <T>(key: string) => T;
13
14
  set: <T>(key: string, value: T) => T;
14
- entries: <T = unknown>() => List<[key: string, value: T]>;
15
+ entries: <T = unknown>() => List<Entry<T>>;
15
16
  parse: (p: (v: unknown) => unknown, options?: MetaParseOptions) => any;
16
17
  properties: (key?: string) => List<PropertyMeta>;
17
18
  keys: <T = any>(key: string) => List<T>;
@@ -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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"}
@@ -33,7 +33,10 @@ export type Uri = {
33
33
  isInternal: boolean;
34
34
  toString: () => string;
35
35
  };
36
- export declare class EasyUri implements Uri {
36
+ export type UriExpandProps = {
37
+ q: string;
38
+ };
39
+ export declare class EasyUri<Props = UriExpandProps> implements Uri {
37
40
  readonly segments: Segment[];
38
41
  static readonly id: Segment;
39
42
  static readonly ids: Segment;
@@ -56,5 +59,6 @@ export declare class EasyUri implements Uri {
56
59
  query: (q?: unknown) => this;
57
60
  skip: (index?: number) => this;
58
61
  take: (items?: number) => this;
62
+ expand(props: Partial<Props>): this;
59
63
  }
60
64
  export {};
package/dist/types/Uri.js CHANGED
@@ -62,9 +62,15 @@ class EasyUri {
62
62
  return (0, Try_1.tryTo)(() => this.props)
63
63
  .map(ps => ps.filter(p => p.segment?.segment))
64
64
  .map(ps => ps.reduce((r, p) => r.replace((0, Text_1.asString)(p.segment.segment), (0, Text_1.asString)(p.value)), this.complete))
65
- .map(route => ({ route, query: this.props.mapDefined(p => (p.segment?.query ? p.segment?.query(p.value) : undefined))?.join('&') }))
65
+ .map(route => ({
66
+ route,
67
+ query: this.props.mapDefined(p => (p.segment?.query ? p.segment?.query(p.value) : undefined))?.join('&')
68
+ }))
66
69
  .map(({ route, query }) => ((0, Is_1.isNotEmpty)(query) ? `${route}?${query}` : route)).value;
67
70
  }
71
+ expand(props) {
72
+ return (0, Meta_1.meta)(props).entries().reduce((u, [k, v]) => (0, Is_1.isBoolean)(v) ? u.set(exports.uri.boolean(k), v) : u.set(exports.uri.query(k), (0, Array_1.toArray)(v).join(",")), this);
73
+ }
68
74
  }
69
75
  EasyUri.id = exports.uri.path('id');
70
76
  EasyUri.ids = exports.uri.query('ids');
@@ -1 +1 @@
1
- {"version":3,"file":"Uri.js","sourceRoot":"","sources":["../../src/types/Uri.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Uri.js","sourceRoot":"","sources":["../../src/types/Uri.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.1.28",
3
+ "version": "14.2.2",
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.1.28",
34
+ "@thisisagile/easy-test": "14.2.2",
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
@@ -6,6 +6,8 @@ import { Optional } from './Types';
6
6
 
7
7
  type MetaParseOptions = { initial?: any; skipUndefined?: boolean };
8
8
 
9
+ type Entry<T = unknown> = [key: string, value: T];
10
+
9
11
  class ClassMeta {
10
12
  constructor(readonly subject: any, private readonly data: any = (subject.prototype ?? subject).constructor) {}
11
13
 
@@ -16,8 +18,8 @@ class ClassMeta {
16
18
  return value;
17
19
  };
18
20
 
19
- entries = <T = unknown>(): List<[key: string, value: T]> =>
20
- toList([...Object.entries(this.subject), ...Object.entries(Object.getPrototypeOf(this.subject))]) as List<[any, T]>;
21
+ entries = <T = unknown>(): List<Entry<T>> =>
22
+ toList([...Object.entries(this.subject), ...Object.entries(Object.getPrototypeOf(this.subject))]) as List<Entry<T>>;
21
23
 
22
24
  parse = (p: (v: unknown) => unknown, options: MetaParseOptions = {}): any => {
23
25
  const { initial = {}, skipUndefined = false } = options;
package/src/types/Uri.ts CHANGED
@@ -1,100 +1,115 @@
1
- import { isDefined, isNotEmpty, isTrue } from './Is';
2
- import { asString, Text } from './Text';
3
- import { toName } from './Constructor';
4
- import { ctx } from './Context';
5
- import { List, toList } from './List';
6
- import { meta } from './Meta';
7
- import { tryTo } from './Try';
8
- import { Optional } from './Types';
1
+ import {isBoolean, isDefined, isNotEmpty, isTrue} from './Is';
2
+ import {asString, Text} from './Text';
3
+ import {toName} from './Constructor';
4
+ import {ctx} from './Context';
5
+ import {List, toList} from './List';
6
+ import {meta} from './Meta';
7
+ import {tryTo} from './Try';
8
+ import {Optional} from './Types';
9
9
  import {OneOrMore, toArray} from "./Array";
10
10
 
11
11
  export type Segment = Text & { key?: string; segment?: string; query?: (value: unknown) => string };
12
12
 
13
- export const toSegment = (key?: Text, { segment, query }: { segment?: string; query?: (value: unknown) => string } = {}): Segment => ({
14
- key: key as string,
15
- segment,
16
- query,
17
- toString: () => asString(key),
13
+ export const toSegment = (key?: Text, {segment, query}: {
14
+ segment?: string;
15
+ query?: (value: unknown) => string
16
+ } = {}): Segment => ({
17
+ key: key as string,
18
+ segment,
19
+ query,
20
+ toString: () => asString(key),
18
21
  });
19
22
 
20
23
  export const uri = {
21
- host: (key?: string): Segment => toSegment(key, { segment: key ?? ctx.env.host ?? '$host' }),
22
- resource: (resource: Uri): Segment => toSegment(toName(resource, 'Uri'), { segment: toName(resource, 'Uri') }),
23
- segment: (key?: Text): Segment => toSegment(key, { segment: key as string }),
24
- path: (key: Text): Segment => toSegment(key, { segment: `:${key}` }),
25
- query: (key: Text): Segment => toSegment(key, { query: (value: unknown): string => (isDefined(value) ? `${key}=${value}` : '') }),
26
- boolean: (key: Text): Segment => toSegment(key, { query: (value: unknown): string => (isTrue(value) ? `${key}` : '') }),
24
+ host: (key?: string): Segment => toSegment(key, {segment: key ?? ctx.env.host ?? '$host'}),
25
+ resource: (resource: Uri): Segment => toSegment(toName(resource, 'Uri'), {segment: toName(resource, 'Uri')}),
26
+ segment: (key?: Text): Segment => toSegment(key, {segment: key as string}),
27
+ path: (key: Text): Segment => toSegment(key, {segment: `:${key}`}),
28
+ query: (key: Text): Segment => toSegment(key, {query: (value: unknown): string => (isDefined(value) ? `${key}=${value}` : '')}),
29
+ boolean: (key: Text): Segment => toSegment(key, {query: (value: unknown): string => (isTrue(value) ? `${key}` : '')}),
27
30
  };
28
31
 
29
32
  type Prop = { segment: Segment; value: any };
30
33
 
31
34
  const toRoute = (...segments: Segment[]): string =>
32
- toList(segments)
33
- .mapDefined(s => s.segment)
34
- .join('/');
35
+ toList(segments)
36
+ .mapDefined(s => s.segment)
37
+ .join('/');
35
38
 
36
39
  export type Uri = {
37
- id: (id?: unknown) => Uri;
38
- query: (q?: unknown) => Uri;
39
- skip: (n?: number) => Uri;
40
- take: (n?: number) => Uri;
41
- path: string;
42
- route: (resource: string) => string;
43
- isInternal: boolean;
44
- toString: () => string;
40
+ id: (id?: unknown) => Uri;
41
+ query: (q?: unknown) => Uri;
42
+ skip: (n?: number) => Uri;
43
+ take: (n?: number) => Uri;
44
+ path: string;
45
+ route: (resource: string) => string;
46
+ isInternal: boolean;
47
+ toString: () => string;
45
48
  };
46
49
 
47
- export class EasyUri implements Uri {
48
- static readonly id = uri.path('id');
49
- static readonly ids = uri.query('ids');
50
- static readonly query = uri.query('q');
51
- static readonly skip = uri.query('skip');
52
- static readonly take = uri.query('take');
53
-
54
- readonly host = uri.host();
55
- readonly resource = uri.resource(this);
56
-
57
- protected state: any = {};
58
-
59
- constructor(readonly segments: Segment[] = []) {}
60
-
61
- get path(): string {
62
- return toRoute(uri.segment(''), this.resource, ...this.segments);
63
- }
64
-
65
- get complete(): string {
66
- return toRoute(this.host, this.resource, ...this.segments);
67
- }
68
-
69
- get isInternal(): boolean {
70
- return toRoute(this.host) === (ctx.env.host ?? '$host');
71
- }
72
-
73
- protected get props(): List<Prop> {
74
- return meta(this.state).values<Prop>();
75
- }
76
-
77
- route = (resource: Optional<string> = this.resource.key): string => toRoute(uri.segment(''), uri.segment(resource?.toLowerCase()), ...this.segments);
78
-
79
- set = (segment: Segment, value?: unknown): this => {
80
- tryTo(value)
81
- .is.defined()
82
- .accept(value => (this.state[segment.key ?? ''] = { segment, value }));
83
- return this;
84
- };
85
-
86
- toString(): string {
87
- return tryTo(() => this.props)
88
- .map(ps => ps.filter(p => p.segment?.segment))
89
- .map(ps => ps.reduce((r: string, p: Prop) => r.replace(asString(p.segment.segment), asString(p.value)), this.complete))
90
- .map(route => ({ route, query: this.props.mapDefined(p => (p.segment?.query ? p.segment?.query(p.value) : undefined))?.join('&') }))
91
- .map(({ route, query }) => (isNotEmpty(query) ? `${route}?${query}` : route)).value;
92
- }
93
-
94
- id = (id?: unknown): this => this.set(EasyUri.id, id);
95
- ids = (ids: OneOrMore<unknown>): this => this.set(EasyUri.ids, toArray(ids).join(','));
96
- query = (q?: unknown): this => this.set(EasyUri.query, q);
97
-
98
- skip = (index?: number): this => this.set(EasyUri.skip, index);
99
- take = (items?: number): this => this.set(EasyUri.take, items);
50
+ export type UriExpandProps = { q: string };
51
+
52
+ export class EasyUri<Props = UriExpandProps> implements Uri {
53
+ static readonly id = uri.path('id');
54
+ static readonly ids = uri.query('ids');
55
+ static readonly query = uri.query('q');
56
+ static readonly skip = uri.query('skip');
57
+ static readonly take = uri.query('take');
58
+
59
+ readonly host = uri.host();
60
+ readonly resource = uri.resource(this);
61
+
62
+ protected state: any = {};
63
+
64
+ constructor(readonly segments: Segment[] = []) {
65
+ }
66
+
67
+ get path(): string {
68
+ return toRoute(uri.segment(''), this.resource, ...this.segments);
69
+ }
70
+
71
+ get complete(): string {
72
+ return toRoute(this.host, this.resource, ...this.segments);
73
+ }
74
+
75
+ get isInternal(): boolean {
76
+ return toRoute(this.host) === (ctx.env.host ?? '$host');
77
+ }
78
+
79
+ protected get props(): List<Prop> {
80
+ return meta(this.state).values<Prop>();
81
+ }
82
+
83
+ route = (resource: Optional<string> = this.resource.key): string => toRoute(uri.segment(''), uri.segment(resource?.toLowerCase()), ...this.segments);
84
+
85
+ set = (segment: Segment, value?: unknown): this => {
86
+ tryTo(value)
87
+ .is.defined()
88
+ .accept(value => (this.state[segment.key ?? ''] = {segment, value}));
89
+ return this;
90
+ };
91
+
92
+ toString(): string {
93
+ return tryTo(() => this.props)
94
+ .map(ps => ps.filter(p => p.segment?.segment))
95
+ .map(ps => ps.reduce((r: string, p: Prop) => r.replace(asString(p.segment.segment), asString(p.value)), this.complete))
96
+ .map(route => ({
97
+ route,
98
+ query: this.props.mapDefined(p => (p.segment?.query ? p.segment?.query(p.value) : undefined))?.join('&')
99
+ }))
100
+ .map(({route, query}) => (isNotEmpty(query) ? `${route}?${query}` : route)).value;
101
+ }
102
+
103
+ id = (id?: unknown): this => this.set(EasyUri.id, id);
104
+ ids = (ids: OneOrMore<unknown>): this => this.set(EasyUri.ids, toArray(ids).join(','));
105
+ query = (q?: unknown): this => this.set(EasyUri.query, q);
106
+
107
+ skip = (index?: number): this => this.set(EasyUri.skip, index);
108
+ take = (items?: number): this => this.set(EasyUri.take, items);
109
+
110
+ expand(props: Partial<Props>): this {
111
+ return meta(props).entries().reduce((u, [k, v]) =>
112
+ isBoolean(v) ? u.set(uri.boolean(k), v) : u.set(uri.query(k), toArray(v).join(","))
113
+ , this)
114
+ }
100
115
  }