angular-odata 0.95.0 → 0.99.0

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 (32) hide show
  1. package/esm2020/lib/resources/query/expressions/base.mjs +20 -0
  2. package/esm2020/lib/resources/query/expressions/compute.mjs +38 -0
  3. package/esm2020/lib/resources/query/expressions/expand.mjs +57 -0
  4. package/esm2020/lib/resources/query/expressions/filter.mjs +154 -0
  5. package/esm2020/lib/resources/query/expressions/index.mjs +7 -0
  6. package/esm2020/lib/resources/query/expressions/orderby.mjs +54 -0
  7. package/esm2020/lib/resources/query/expressions/search.mjs +113 -0
  8. package/esm2020/lib/resources/query/expressions/select.mjs +32 -0
  9. package/esm2020/lib/resources/query/expressions/syntax.mjs +371 -0
  10. package/esm2020/lib/resources/query/handlers.mjs +16 -14
  11. package/esm2020/lib/resources/query/options.mjs +2 -2
  12. package/esm2020/lib/resources/resource.mjs +2 -2
  13. package/esm2020/lib/resources/types/batch.mjs +31 -10
  14. package/fesm2015/angular-odata.mjs +359 -123
  15. package/fesm2015/angular-odata.mjs.map +1 -1
  16. package/fesm2020/angular-odata.mjs +359 -123
  17. package/fesm2020/angular-odata.mjs.map +1 -1
  18. package/lib/resources/query/expressions/base.d.ts +19 -0
  19. package/lib/resources/query/expressions/compute.d.ts +26 -0
  20. package/lib/resources/query/expressions/expand.d.ts +40 -0
  21. package/lib/resources/query/expressions/filter.d.ts +58 -0
  22. package/lib/resources/query/expressions/index.d.ts +6 -0
  23. package/lib/resources/query/expressions/orderby.d.ts +37 -0
  24. package/lib/resources/query/expressions/search.d.ts +47 -0
  25. package/lib/resources/query/expressions/select.d.ts +21 -0
  26. package/lib/resources/query/{syntax.d.ts → expressions/syntax.d.ts} +8 -6
  27. package/lib/resources/query/handlers.d.ts +24 -9
  28. package/lib/resources/types/batch.d.ts +9 -0
  29. package/package.json +1 -1
  30. package/esm2020/lib/resources/query/expressions.mjs +0 -207
  31. package/esm2020/lib/resources/query/syntax.mjs +0 -406
  32. package/lib/resources/query/expressions.d.ts +0 -63
@@ -0,0 +1,19 @@
1
+ import type { QueryCustomType } from '../builder';
2
+ import { Renderable } from './syntax';
3
+ export declare abstract class Expression<T> implements Renderable {
4
+ protected _children: Renderable[];
5
+ constructor({ children, }?: {
6
+ children?: Renderable[];
7
+ });
8
+ get [Symbol.toStringTag](): string;
9
+ abstract render({ aliases, escape, prefix, }: {
10
+ aliases?: QueryCustomType[] | undefined;
11
+ escape?: boolean | undefined;
12
+ prefix?: string | undefined;
13
+ }): string;
14
+ children(): Renderable[];
15
+ length(): number;
16
+ toJSON(): {
17
+ children: any[];
18
+ };
19
+ }
@@ -0,0 +1,26 @@
1
+ import type { QueryCustomType } from '../builder';
2
+ import { Expression } from './base';
3
+ import { ODataFunctions, ODataOperators, Renderable } from './syntax';
4
+ export declare class ComputeExpression<T> extends Expression<T> {
5
+ names: string[];
6
+ constructor({ children, names, }?: {
7
+ children?: Renderable[];
8
+ names?: string[];
9
+ });
10
+ static e<T>(): ComputeExpression<T>;
11
+ static s<T extends object>(): T;
12
+ static compute<T extends object>(opts: (e: {
13
+ s: T;
14
+ e: () => ComputeExpression<T>;
15
+ }) => ComputeExpression<T>): ComputeExpression<T>;
16
+ render({ aliases, escape, prefix, }?: {
17
+ aliases?: QueryCustomType[] | undefined;
18
+ escape?: boolean | undefined;
19
+ prefix?: string | undefined;
20
+ }): string;
21
+ private _add;
22
+ field<T extends object>(name: string, opts: (e: {
23
+ o: ODataOperators<T>;
24
+ f: ODataFunctions<T>;
25
+ }) => Renderable): ComputeExpression<T>;
26
+ }
@@ -0,0 +1,40 @@
1
+ import type { QueryCustomType } from '../builder';
2
+ import { Expression } from './base';
3
+ import { Renderable } from './syntax';
4
+ export declare class ExpandField<T> implements Renderable {
5
+ protected field: Renderable;
6
+ constructor(field: Renderable);
7
+ get [Symbol.toStringTag](): string;
8
+ toJSON(): {
9
+ field: any;
10
+ };
11
+ render({ aliases, escape, prefix, }: {
12
+ aliases?: QueryCustomType[];
13
+ escape?: boolean;
14
+ prefix?: string;
15
+ }): string;
16
+ select(): void;
17
+ filter(): void;
18
+ levels(): void;
19
+ orderBy(): void;
20
+ top(): void;
21
+ skip(): void;
22
+ }
23
+ export declare class ExpandExpression<T> extends Expression<T> {
24
+ constructor({ children, }?: {
25
+ children?: Renderable[];
26
+ });
27
+ static e<T>(): ExpandExpression<T>;
28
+ static s<T extends object>(): T;
29
+ static expand<T extends object>(opts: (e: {
30
+ s: T;
31
+ e: () => ExpandExpression<T>;
32
+ }) => ExpandExpression<T>): ExpandExpression<T>;
33
+ render({ aliases, escape, prefix, }?: {
34
+ aliases?: QueryCustomType[] | undefined;
35
+ escape?: boolean | undefined;
36
+ prefix?: string | undefined;
37
+ }): string;
38
+ private _add;
39
+ field<T extends object>(field: any, opts?: (e: ExpandField<keyof T>) => void): ExpandExpression<T>;
40
+ }
@@ -0,0 +1,58 @@
1
+ import type { QueryCustomType } from '../builder';
2
+ import { Expression } from './base';
3
+ import { ODataFunctions, ODataOperators, Renderable } from './syntax';
4
+ export declare type FilterConnector = 'and' | 'or';
5
+ export declare class FilterExpression<T> extends Expression<T> {
6
+ private _connector;
7
+ private _negated;
8
+ constructor({ children, connector, negated, }?: {
9
+ children?: Renderable[];
10
+ connector?: FilterConnector;
11
+ negated?: boolean;
12
+ });
13
+ static s<T extends object>(): T;
14
+ static e<T>(connector?: FilterConnector): FilterExpression<T>;
15
+ static filter<T extends object>(opts: (e: {
16
+ s: T;
17
+ e: (connector?: FilterConnector) => FilterExpression<T>;
18
+ o: ODataOperators<T>;
19
+ f: ODataFunctions<T>;
20
+ }) => FilterExpression<T>): FilterExpression<T>;
21
+ toJSON(): {
22
+ children: any[];
23
+ connector: FilterConnector;
24
+ negated: boolean;
25
+ };
26
+ connector(): FilterConnector;
27
+ negated(): boolean;
28
+ render({ aliases, escape, prefix, }?: {
29
+ aliases?: QueryCustomType[];
30
+ escape?: boolean;
31
+ prefix?: string;
32
+ }): string;
33
+ private _add;
34
+ or(exp: FilterExpression<T>): FilterExpression<T>;
35
+ and(exp: FilterExpression<T>): FilterExpression<T>;
36
+ not(exp: FilterExpression<T>): FilterExpression<T>;
37
+ eq(left: any, right: any, normalize?: boolean): FilterExpression<T>;
38
+ ne(left: any, right: any, normalize?: boolean): FilterExpression<T>;
39
+ gt(left: any, right: any, normalize?: boolean): FilterExpression<T>;
40
+ ge(left: any, right: any, normalize?: boolean): FilterExpression<T>;
41
+ lt(left: any, right: any, normalize?: boolean): FilterExpression<T>;
42
+ le(left: any, right: any, normalize?: boolean): FilterExpression<T>;
43
+ has(left: any, right: any, normalize?: boolean): FilterExpression<T>;
44
+ in(left: any, right: any, normalize?: boolean): FilterExpression<T>;
45
+ contains(left: any, right: any, normalize?: boolean): FilterExpression<T>;
46
+ startsWith(left: any, right: any, normalize?: boolean): FilterExpression<T>;
47
+ endsWith(left: any, right: any, normalize?: boolean): FilterExpression<T>;
48
+ any<N extends object>(left: N[], opts: (e: {
49
+ s: N;
50
+ e: (connector?: FilterConnector) => FilterExpression<N>;
51
+ }) => FilterExpression<N>, alias?: string): FilterExpression<T>;
52
+ all<N extends object>(left: N[], opts: (e: {
53
+ s: N;
54
+ e: (connector?: FilterConnector) => FilterExpression<N>;
55
+ }) => FilterExpression<N>, alias?: string): FilterExpression<T>;
56
+ isof(type: string): FilterExpression<T>;
57
+ isof(left: T, type: string): FilterExpression<T>;
58
+ }
@@ -0,0 +1,6 @@
1
+ export * from './base';
2
+ export * from './compute';
3
+ export * from './filter';
4
+ export * from './orderby';
5
+ export * from './search';
6
+ export * from './syntax';
@@ -0,0 +1,37 @@
1
+ import type { QueryCustomType } from '../builder';
2
+ import { Expression } from './base';
3
+ import { Renderable } from './syntax';
4
+ export declare class OrderByField implements Renderable {
5
+ protected field: Renderable;
6
+ protected order: 'asc' | 'desc';
7
+ constructor(field: Renderable, order: 'asc' | 'desc');
8
+ get [Symbol.toStringTag](): string;
9
+ toJSON(): {
10
+ field: any;
11
+ order: "desc" | "asc";
12
+ };
13
+ render({ aliases, escape, prefix, }: {
14
+ aliases?: QueryCustomType[];
15
+ escape?: boolean;
16
+ prefix?: string;
17
+ }): string;
18
+ }
19
+ export declare class OrderByExpression<T> extends Expression<T> {
20
+ constructor({ children, }?: {
21
+ children?: Renderable[];
22
+ });
23
+ static e<T>(): OrderByExpression<T>;
24
+ static s<T extends object>(): T;
25
+ static orderBy<T extends object>(opts: (e: {
26
+ s: T;
27
+ e: () => OrderByExpression<T>;
28
+ }) => OrderByExpression<T>): OrderByExpression<T>;
29
+ private _add;
30
+ render({ aliases, escape, prefix, }?: {
31
+ aliases?: QueryCustomType[] | undefined;
32
+ escape?: boolean | undefined;
33
+ prefix?: string | undefined;
34
+ }): string;
35
+ ascending(field: any): OrderByExpression<T>;
36
+ descending(field: any): OrderByExpression<T>;
37
+ }
@@ -0,0 +1,47 @@
1
+ import type { QueryCustomType } from '../builder';
2
+ import { Expression } from './base';
3
+ import { Renderable } from './syntax';
4
+ export declare type SearchConnector = 'AND' | 'OR';
5
+ export declare class SearchTerm implements Renderable {
6
+ protected value: string;
7
+ constructor(value: string);
8
+ get [Symbol.toStringTag](): string;
9
+ toJSON(): {
10
+ value: string;
11
+ };
12
+ render({ aliases, escape, prefix, }: {
13
+ aliases?: QueryCustomType[];
14
+ escape?: boolean;
15
+ prefix?: string;
16
+ }): string;
17
+ }
18
+ export declare class SearchExpression<T> extends Expression<T> {
19
+ private _connector;
20
+ private _negated;
21
+ constructor({ children, connector, negated, }?: {
22
+ children?: Renderable[];
23
+ connector?: SearchConnector;
24
+ negated?: boolean;
25
+ });
26
+ static e<T>(connector?: SearchConnector): SearchExpression<T>;
27
+ static search<T extends object>(opts: (e: {
28
+ e: (connector?: SearchConnector) => SearchExpression<T>;
29
+ }) => SearchExpression<T>): SearchExpression<T>;
30
+ private _add;
31
+ render({ aliases, escape, prefix, }?: {
32
+ aliases?: QueryCustomType[] | undefined;
33
+ escape?: boolean | undefined;
34
+ prefix?: string | undefined;
35
+ }): string;
36
+ toJSON(): {
37
+ children: any[];
38
+ connector: SearchConnector;
39
+ negated: boolean;
40
+ };
41
+ connector(): SearchConnector;
42
+ negated(): boolean;
43
+ or(exp: SearchExpression<T>): SearchExpression<T>;
44
+ and(exp: SearchExpression<T>): SearchExpression<T>;
45
+ not(exp: SearchExpression<T>): SearchExpression<T>;
46
+ term(value: any): SearchExpression<T>;
47
+ }
@@ -0,0 +1,21 @@
1
+ import type { QueryCustomType } from '../builder';
2
+ import { Expression } from './base';
3
+ import { Renderable } from './syntax';
4
+ export declare class SelectExpression<T> extends Expression<T> {
5
+ constructor({ children, }?: {
6
+ children?: Renderable[];
7
+ });
8
+ static e<T>(): SelectExpression<T>;
9
+ static s<T extends object>(): T;
10
+ static select<T extends object>(opts: (e: {
11
+ s: T;
12
+ e: () => SelectExpression<T>;
13
+ }) => SelectExpression<T>): SelectExpression<T>;
14
+ render({ aliases, escape, prefix, }?: {
15
+ aliases?: QueryCustomType[] | undefined;
16
+ escape?: boolean | undefined;
17
+ prefix?: string | undefined;
18
+ }): string;
19
+ private _add;
20
+ field(field: any): SelectExpression<T>;
21
+ }
@@ -1,4 +1,4 @@
1
- import type { QueryCustomType } from './builder';
1
+ import type { QueryCustomType } from '../builder';
2
2
  export interface Renderable {
3
3
  render({ aliases, escape, prefix, }: {
4
4
  aliases?: QueryCustomType[];
@@ -8,13 +8,18 @@ export interface Renderable {
8
8
  toString(): string;
9
9
  toJSON(): any;
10
10
  }
11
- export declare type Funcs<T> = (x: ODataSyntax<T>) => Function<T> | Operator<T> | Grouping<T>;
12
11
  export declare class Field<T extends object> implements ProxyHandler<T> {
13
12
  name: string;
14
13
  constructor(name?: string);
15
14
  static factory<T extends object>(): T;
16
15
  get(target: T, p: string | symbol): any;
17
16
  }
17
+ export declare function render(value: any, { aliases, normalize, escape, prefix, }?: {
18
+ aliases?: QueryCustomType[];
19
+ normalize?: boolean;
20
+ escape?: boolean;
21
+ prefix?: string;
22
+ }): string | number | boolean | null;
18
23
  export declare class Function<T> implements Renderable {
19
24
  protected name: string;
20
25
  protected values: any[];
@@ -134,9 +139,6 @@ export declare class Grouping<T> implements Renderable {
134
139
  prefix?: string;
135
140
  }): string;
136
141
  }
137
- export declare class GroupingOperators<T> {
138
- grouping(value: any): Grouping<unknown>;
139
- }
140
142
  export declare class Lambda<T> implements Renderable {
141
143
  protected op: string;
142
144
  protected values: any[];
@@ -160,7 +162,7 @@ export declare class LambdaOperators<T> {
160
162
  }
161
163
  export declare class ODataOperators<T> {
162
164
  }
163
- export interface ODataOperators<T> extends LogicalOperators<T>, ArithmeticOperators<T>, GroupingOperators<T>, LambdaOperators<T> {
165
+ export interface ODataOperators<T> extends LogicalOperators<T>, ArithmeticOperators<T>, LambdaOperators<T> {
164
166
  }
165
167
  export declare const operators: ODataOperators<any>;
166
168
  export declare class ODataFunctions<T> {
@@ -1,8 +1,9 @@
1
1
  import { QueryOptionNames } from '../../types';
2
2
  import { Expand, Filter, OrderBy, Select, Transform } from './builder';
3
- import { Connector, Expression } from './expressions';
3
+ import { ComputeExpression, FilterConnector, FilterExpression, OrderByExpression, SearchConnector, SearchExpression, ODataFunctions, ODataOperators } from './expressions';
4
+ import { ExpandExpression } from './expressions/expand';
5
+ import { SelectExpression } from './expressions/select';
4
6
  import type { ODataQueryArguments, ODataQueryOptions } from './options';
5
- import { ODataFunctions, ODataOperators } from './syntax';
6
7
  export declare class ODataQueryOptionHandler<T> {
7
8
  private o;
8
9
  private n;
@@ -38,16 +39,27 @@ export declare class ODataQueryOptionsHandler<T> {
38
39
  * @returns The alias
39
40
  */
40
41
  alias(value: any, name?: string): import("./builder").QueryCustomType;
42
+ select(opts: (e: {
43
+ s: T;
44
+ e: () => SelectExpression<T>;
45
+ }) => SelectExpression<T>): SelectExpression<T>;
41
46
  select(opts: Select<T>): ODataQueryOptionHandler<T>;
42
47
  select(): ODataQueryOptionHandler<T>;
48
+ expand(opts: (e: {
49
+ s: T;
50
+ e: () => ExpandExpression<T>;
51
+ }) => ExpandExpression<T>): ExpandExpression<T>;
43
52
  expand(opts: Expand<T>): ODataQueryOptionHandler<T>;
44
53
  expand(): ODataQueryOptionHandler<T>;
45
54
  /**
46
55
  * @link https://docs.oasis-open.org/odata/odata/v4.01/odata-v4.01-part2-url-conventions.html#sec_SystemQueryOptioncompute
47
56
  */
48
57
  compute(opts: (e: {
49
- e: Expression<T>;
50
- }) => Expression<T>): Expression<T>;
58
+ s: T;
59
+ e: () => ComputeExpression<T>;
60
+ o: ODataOperators<T>;
61
+ f: ODataFunctions<T>;
62
+ }) => ComputeExpression<T>): ComputeExpression<T>;
51
63
  compute(opts: string): ODataQueryOptionHandler<T>;
52
64
  compute(): ODataQueryOptionHandler<T>;
53
65
  /**
@@ -57,20 +69,23 @@ export declare class ODataQueryOptionsHandler<T> {
57
69
  format(): ODataQueryOptionHandler<T>;
58
70
  transform(opts: Transform<T>): ODataQueryOptionHandler<T>;
59
71
  transform(): ODataQueryOptionHandler<T>;
72
+ search(opts: (e: {
73
+ e: (connector: SearchConnector) => SearchExpression<T>;
74
+ }) => SearchExpression<T>): SearchExpression<T>;
60
75
  search(opts: string): ODataQueryOptionHandler<T>;
61
76
  search(): ODataQueryOptionHandler<T>;
62
77
  filter(opts: (e: {
63
78
  s: T;
64
- e: (connector?: Connector) => Expression<T>;
79
+ e: (connector?: FilterConnector) => FilterExpression<T>;
65
80
  o: ODataOperators<T>;
66
81
  f: ODataFunctions<T>;
67
- }) => Expression<T>): Expression<T>;
82
+ }) => FilterExpression<T>): FilterExpression<T>;
68
83
  filter(opts: Filter<T>): ODataQueryOptionHandler<T>;
69
84
  filter(): ODataQueryOptionHandler<T>;
70
85
  orderBy(opts: (e: {
71
- e: () => Expression<T>;
72
- not: (e: Expression<T>) => Expression<T>;
73
- }) => Expression<T>): Expression<T>;
86
+ s: T;
87
+ e: () => OrderByExpression<T>;
88
+ }) => OrderByExpression<T>): OrderByExpression<T>;
74
89
  orderBy(opts: OrderBy<T>): ODataQueryOptionHandler<T>;
75
90
  orderBy(): ODataQueryOptionHandler<T>;
76
91
  top(opts: number): ODataQueryOptionHandler<T>;
@@ -25,6 +25,15 @@ export declare class ODataBatchResource extends ODataResource<any> {
25
25
  private _requests;
26
26
  requests(): ODataRequest<any>[];
27
27
  static factory(api: ODataApi): ODataBatchResource;
28
+ private storeRequester;
29
+ private restoreRequester;
30
+ /**
31
+ * Add to batch request
32
+ * @param ctx The context for the request
33
+ * @returns The result of execute the context
34
+ */
35
+ add<R>(ctx: (batch: this) => Observable<R>): Observable<R>;
36
+ send(options?: ODataOptions): void;
28
37
  /**
29
38
  * Execute the batch request
30
39
  * @param ctx The context for the request
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-odata",
3
- "version": "0.95.0",
3
+ "version": "0.99.0",
4
4
  "license": "MIT",
5
5
  "description": "Client side OData typescript library for Angular",
6
6
  "repository": {
@@ -1,207 +0,0 @@
1
- import { Field, functions, operators, } from './syntax';
2
- import { syntax } from './syntax';
3
- export class Expression {
4
- constructor({ children, connector, negated, } = {}) {
5
- this._children = children || [];
6
- this._connector = connector || 'and';
7
- this._negated = negated || false;
8
- }
9
- get [Symbol.toStringTag]() {
10
- return 'Expression';
11
- }
12
- static s() {
13
- return Field.factory();
14
- }
15
- static e(connector = 'and') {
16
- return new Expression({ connector });
17
- }
18
- static o() {
19
- return operators;
20
- }
21
- static f() {
22
- return functions;
23
- }
24
- static filter(opts) {
25
- return opts({
26
- s: Expression.s(),
27
- e: Expression.e,
28
- o: Expression.o(),
29
- f: Expression.f(),
30
- });
31
- }
32
- toJSON() {
33
- return {
34
- children: this._children.map((c) => c.toJSON()),
35
- connector: this._connector,
36
- negated: this._negated,
37
- };
38
- }
39
- children() {
40
- return this._children;
41
- }
42
- connector() {
43
- return this._connector;
44
- }
45
- negated() {
46
- return this._negated;
47
- }
48
- length() {
49
- return this._children.length;
50
- }
51
- render({ aliases, escape, prefix, } = {}) {
52
- let content = this._children
53
- .map((n) => n.render({ aliases, escape, prefix }))
54
- .join(` ${this._connector} `);
55
- if (this._negated) {
56
- content = `not (${content})`;
57
- }
58
- return content;
59
- }
60
- _add(node, connector) {
61
- if (connector !== undefined && this._connector !== connector) {
62
- let children = [];
63
- if (this._children.length > 0) {
64
- if (this._children.length === 1) {
65
- children = [...this._children];
66
- }
67
- else {
68
- let exp = new Expression({
69
- children: this._children,
70
- connector: this._connector,
71
- negated: this._negated,
72
- });
73
- if (exp.length() > 1) {
74
- children.push(syntax.grouping(exp));
75
- }
76
- else {
77
- children.push(exp);
78
- }
79
- }
80
- }
81
- if (node instanceof Expression &&
82
- (node.connector() === connector || node.length() === 1)) {
83
- children = [...children, ...node.children()];
84
- }
85
- else {
86
- children.push(syntax.grouping(node));
87
- }
88
- this._connector = connector;
89
- this._children = children;
90
- }
91
- else if (node instanceof Expression &&
92
- !node.negated() &&
93
- (node.connector() === connector || node.length() === 1)) {
94
- this._children = [...this._children, ...node.children()];
95
- }
96
- else {
97
- this._children.push(node instanceof Expression && !node.negated()
98
- ? syntax.grouping(node)
99
- : node);
100
- }
101
- return this;
102
- }
103
- or(exp) {
104
- return this._add(exp, 'or');
105
- }
106
- and(exp) {
107
- return this._add(exp, 'and');
108
- }
109
- not(exp) {
110
- const notExp = new Expression({
111
- children: exp.children(),
112
- connector: exp.connector(),
113
- negated: true,
114
- });
115
- return this._add(notExp, this._connector);
116
- }
117
- eq(left, right, normalize) {
118
- return this._add(operators.eq(left, right, normalize));
119
- }
120
- ne(left, right, normalize) {
121
- return this._add(operators.ne(left, right, normalize));
122
- }
123
- gt(left, right, normalize) {
124
- return this._add(operators.gt(left, right, normalize));
125
- }
126
- ge(left, right, normalize) {
127
- return this._add(operators.ge(left, right, normalize));
128
- }
129
- lt(left, right, normalize) {
130
- return this._add(operators.lt(left, right, normalize));
131
- }
132
- le(left, right, normalize) {
133
- return this._add(operators.le(left, right, normalize));
134
- }
135
- has(left, right, normalize) {
136
- return this._add(operators.has(left, right, normalize));
137
- }
138
- in(left, right, normalize) {
139
- return this._add(operators.in(left, right, normalize));
140
- }
141
- contains(left, right, normalize) {
142
- return this._add(functions.contains(left, right, normalize));
143
- }
144
- startsWith(left, right, normalize) {
145
- return this._add(functions.startsWith(left, right, normalize));
146
- }
147
- endsWith(left, right, normalize) {
148
- return this._add(functions.endsWith(left, right, normalize));
149
- }
150
- any(left, opts, alias) {
151
- const exp = opts({
152
- s: Field.factory(),
153
- e: Expression.e,
154
- });
155
- return this._add(syntax.any(left, exp, alias));
156
- }
157
- all(left, opts, alias) {
158
- const exp = opts({
159
- s: Field.factory(),
160
- e: Expression.e,
161
- });
162
- return this._add(syntax.all(left, exp, alias));
163
- }
164
- isof(left, type) {
165
- return this._add(syntax.isof(left, type));
166
- }
167
- }
168
- /*
169
- export class FilterExpression<T> extends Expression<T> {
170
- constructor({
171
- children,
172
- connector,
173
- negated,
174
- }: {
175
- children?: Renderable[];
176
- connector?: Connector;
177
- negated?: boolean;
178
- } = {}) {
179
- super({ children, connector, negated });
180
- }
181
-
182
- get [Symbol.toStringTag]() {
183
- return 'FilterExpression';
184
- }
185
-
186
- static e<T>() {
187
- return new FilterExpression<T>({ connector: Connector.AND });
188
- }
189
-
190
- static and<T>() {
191
- return new FilterExpression<T>({ connector: Connector.AND });
192
- }
193
-
194
- static or<T>() {
195
- return new FilterExpression<T>({ connector: Connector.OR });
196
- }
197
-
198
- static not<T>(exp: FilterExpression<T>) {
199
- return new FilterExpression<T>({
200
- children: exp.children(),
201
- connector: exp.connector(),
202
- negated: true,
203
- });
204
- }
205
- }
206
- */
207
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwcmVzc2lvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLW9kYXRhL3NyYy9saWIvcmVzb3VyY2VzL3F1ZXJ5L2V4cHJlc3Npb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFDTCxLQUFLLEVBQ0wsU0FBUyxFQUdULFNBQVMsR0FFVixNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBSWxDLE1BQU0sT0FBTyxVQUFVO0lBSXJCLFlBQVksRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULE9BQU8sTUFLTCxFQUFFO1FBQ0osSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3RCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNLENBQUMsQ0FBQztRQUNOLE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBSyxDQUFDO0lBQzVCLENBQUM7SUFFRCxNQUFNLENBQUMsQ0FBQyxDQUFJLFlBQXVCLEtBQUs7UUFDdEMsT0FBTyxJQUFJLFVBQVUsQ0FBSSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFDO1FBQ04sT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sQ0FBQyxDQUFDO1FBQ04sT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQ1gsSUFLbUI7UUFFbkIsT0FBTyxJQUFJLENBQUM7WUFDVixDQUFDLEVBQUUsVUFBVSxDQUFD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Q0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsRUFBRSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsU0FBbUI7UUFDM0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxFQUFFLENBQUMsSUFBUyxFQUFFLEtBQVUsRUFBRSxTQUFtQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELEVBQUUsQ0FBQyxJQUFTLEVBQUUsS0FBVSxFQUFFLFNBQW1CO1FBQzNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsRUFBRSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsU0FBbUI7UUFDM0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxFQUFFLENBQUMsSUFBUyxFQUFFLEtBQVUsRUFBRSxTQUFtQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELEVBQUUsQ0FBQyxJQUFTLEVBQUUsS0FBVSxFQUFFLFNBQW1CO1FBQzNDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsU0FBbUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxFQUFFLENBQUMsSUFBUyxFQUFFLEtBQVUsRUFBRSxTQUFtQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFTLEVBQUUsS0FBVSxFQUFFLFNBQW1CO1FBQ2pELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVMsRUFBRSxLQUFVLEVBQUUsU0FBbUI7UUFDbkQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBUyxFQUFFLEtBQVUsRUFBRSxTQUFtQjtRQUNqRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELEdBQUcsQ0FDRCxJQUFTLEVBQ1QsSUFHbUIsRUFDbkIsS0FBYztRQUVkLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQztZQUNmLENBQUMsRUFBRSxLQUFLLENBQUMsT0FBTyxFQUFLO1lBQ3JCLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNoQixDQUFrQixDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsR0FBRyxDQUNELElBQVMsRUFDVCxJQUdtQixFQUNuQixLQUFjO1FBRWQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ2YsQ0FBQyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUs7WUFDckIsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1NBQ2hCLENBQWtCLENBQUM7UUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFJRCxJQUFJLENBQUMsSUFBUyxFQUFFLElBQWE7UUFDM0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBc0NFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBRdWVyeUN1c3RvbVR5cGUgfSBmcm9tICcuL2J1aWxkZXInO1xuaW1wb3J0IHtcbiAgRmllbGQsXG4gIGZ1bmN0aW9ucyxcbiAgT0RhdGFGdW5jdGlvbnMsXG4gIE9EYXRhT3BlcmF0b3JzLFxuICBvcGVyYXRvcnMsXG4gIFJlbmRlcmFibGUsXG59IGZyb20gJy4vc3ludGF4JztcbmltcG9ydCB7IHN5bnRheCB9IGZyb20gJy4vc3ludGF4JztcblxuZXhwb3J0IHR5cGUgQ29ubmVjdG9yID0gJ2FuZCcgfCAnb3InO1xuXG5leHBvcnQgY2xhc3MgRXhwcmVzc2lvbjxUPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBwcml2YXRlIF9jb25uZWN0b3I6IENvbm5lY3RvcjtcbiAgcHJpdmF0ZSBfbmVnYXRlZDogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfY2hpbGRyZW46IFJlbmRlcmFibGVbXTtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGNoaWxkcmVuLFxuICAgIGNvbm5lY3RvcixcbiAgICBuZWdhdGVkLFxuICB9OiB7XG4gICAgY2hpbGRyZW4/OiBSZW5kZXJhYmxlW107XG4gICAgY29ubmVjdG9yPzogQ29ubmVjdG9yO1xuICAgIG5lZ2F0ZWQ/OiBib29sZWFuO1xuICB9ID0ge30pIHtcbiAgICB0aGlzLl9jaGlsZHJlbiA9IGNoaWxkcmVuIHx8IFtdO1xuICAgIHRoaXMuX2Nvbm5lY3RvciA9IGNvbm5lY3RvciB8fCAnYW5kJztcbiAgICB0aGlzLl9uZWdhdGVkID0gbmVnYXRlZCB8fCBmYWxzZTtcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0V4cHJlc3Npb24nO1xuICB9XG5cbiAgc3RhdGljIHM8VCBleHRlbmRzIG9iamVjdD4oKTogVCB7XG4gICAgcmV0dXJuIEZpZWxkLmZhY3Rvcnk8VD4oKTtcbiAgfVxuXG4gIHN0YXRpYyBlPFQ+KGNvbm5lY3RvcjogQ29ubmVjdG9yID0gJ2FuZCcpIHtcbiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb248VD4oeyBjb25uZWN0b3IgfSk7XG4gIH1cblxuICBzdGF0aWMgbzxUPigpOiBPRGF0YU9wZXJhdG9yczxUPiB7XG4gICAgcmV0dXJuIG9wZXJhdG9ycztcbiAgfVxuXG4gIHN0YXRpYyBmPFQ+KCk6IE9EYXRhRnVuY3Rpb25zPFQ+IHtcbiAgICByZXR1cm4gZnVuY3Rpb25zO1xuICB9XG5cbiAgc3RhdGljIGZpbHRlcjxUIGV4dGVuZHMgb2JqZWN0PihcbiAgICBvcHRzOiAoZToge1xuICAgICAgczogVDtcbiAgICAgIGU6IChjb25uZWN0b3I/OiBDb25uZWN0b3IpID0+IEV4cHJlc3Npb248VD47XG4gICAgICBvOiBPRGF0YU9wZXJhdG9yczxUPjtcbiAgICAgIGY6IE9EYXRhRnVuY3Rpb25zPFQ+O1xuICAgIH0pID0+IEV4cHJlc3Npb248VD5cbiAgKTogRXhwcmVzc2lvbjxUPiB7XG4gICAgcmV0dXJuIG9wdHMoe1xuICAgICAgczogRXhwcmVzc2lvbi5zPFQ+KCksXG4gICAgICBlOiBFeHByZXNzaW9uLmUsXG4gICAgICBvOiBFeHByZXNzaW9uLm88VD4oKSxcbiAgICAgIGY6IEV4cHJlc3Npb24uZjxUPigpLFxuICAgIH0pIGFzIEV4cHJlc3Npb248VD47XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuOiB0aGlzLl9jaGlsZHJlbi5tYXAoKGMpID0+IGMudG9KU09OKCkpLFxuICAgICAgY29ubmVjdG9yOiB0aGlzLl9jb25uZWN0b3IsXG4gICAgICBuZWdhdGVkOiB0aGlzLl9uZWdhdGVkLFxuICAgIH07XG4gIH1cblxuICBjaGlsZHJlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XG4gIH1cblxuICBjb25uZWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3RvcjtcbiAgfVxuXG4gIG5lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25lZ2F0ZWQ7XG4gIH1cblxuICBsZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuLmxlbmd0aDtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9ID0ge30pOiBzdHJpbmcge1xuICAgIGxldCBjb250ZW50ID0gdGhpcy5fY2hpbGRyZW5cbiAgICAgIC5tYXAoKG4pID0+IG4ucmVuZGVyKHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSkpXG4gICAgICAuam9pbihgICR7dGhpcy5fY29ubmVjdG9yfSBgKTtcbiAgICBpZiAodGhpcy5fbmVnYXRlZCkge1xuICAgICAgY29udGVudCA9IGBub3QgKCR7Y29udGVudH0pYDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBwcml2YXRlIF9hZGQobm9kZTogUmVuZGVyYWJsZSwgY29ubmVjdG9yPzogQ29ubmVjdG9yKTogRXhwcmVzc2lvbjxUPiB7XG4gICAgaWYgKGNvbm5lY3RvciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2Nvbm5lY3RvciAhPT0gY29ubmVjdG9yKSB7XG4gICAgICBsZXQgY2hpbGRyZW46IFJlbmRlcmFibGVbXSA9IFtdO1xuICAgICAgaWYgKHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNoaWxkcmVuID0gWy4uLnRoaXMuX2NoaWxkcmVuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgZXhwID0gbmV3IEV4cHJlc3Npb248VD4oe1xuICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuX2NoaWxkcmVuLFxuICAgICAgICAgICAgY29ubmVjdG9yOiB0aGlzLl9jb25uZWN0b3IsXG4gICAgICAgICAgICBuZWdhdGVkOiB0aGlzLl9uZWdhdGVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChleHAubGVuZ3RoKCkgPiAxKSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKHN5bnRheC5ncm91cGluZyhleHApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChleHApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBub2RlIGluc3RhbmNlb2YgRXhwcmVzc2lvbiAmJlxuICAgICAgICAobm9kZS5jb25uZWN0b3IoKSA9PT0gY29ubmVjdG9yIHx8IG5vZGUubGVuZ3RoKCkgPT09IDEpXG4gICAgICApIHtcbiAgICAgICAgY2hpbGRyZW4gPSBbLi4uY2hpbGRyZW4sIC4uLm5vZGUuY2hpbGRyZW4oKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKHN5bnRheC5ncm91cGluZyhub2RlKSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jb25uZWN0b3IgPSBjb25uZWN0b3I7XG4gICAgICB0aGlzLl9jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBub2RlIGluc3RhbmNlb2YgRXhwcmVzc2lvbiAmJlxuICAgICAgIW5vZGUubmVnYXRlZCgpICYmXG4gICAgICAobm9kZS5jb25uZWN0b3IoKSA9PT0gY29ubmVjdG9yIHx8IG5vZGUubGVuZ3RoKCkgPT09IDEpXG4gICAgKSB7XG4gICAgICB0aGlzLl9jaGlsZHJlbiA9IFsuLi50aGlzLl9jaGlsZHJlbiwgLi4ubm9kZS5jaGlsZHJlbigpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChcbiAgICAgICAgbm9kZSBpbnN0YW5jZW9mIEV4cHJlc3Npb24gJiYgIW5vZGUubmVnYXRlZCgpXG4gICAgICAgICAgPyBzeW50YXguZ3JvdXBpbmcobm9kZSlcbiAgICAgICAgICA6IG5vZGVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgb3IoZXhwOiBFeHByZXNzaW9uPFQ+KTogRXhwcmVzc2lvbjxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChleHAsICdvcicpO1xuICB9XG5cbiAgYW5kKGV4cDogRXhwcmVzc2lvbjxUPik6IEV4cHJlc3Npb248VD4ge1xuICAgIHJldHVybiB0aGlzLl9hZGQoZXhwLCAnYW5kJyk7XG4gIH1cblxuICBub3QoZXhwOiBFeHByZXNzaW9uPFQ+KTogRXhwcmVzc2lvbjxUPiB7XG4gICAgY29uc3Qgbm90RXhwID0gbmV3IEV4cHJlc3Npb248VD4oe1xuICAgICAgY2hpbGRyZW46IGV4cC5jaGlsZHJlbigpLFxuICAgICAgY29ubmVjdG9yOiBleHAuY29ubmVjdG9yKCksXG4gICAgICBuZWdhdGVkOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuX2FkZChub3RFeHAsIHRoaXMuX2Nvbm5lY3Rvcik7XG4gIH1cblxuICBlcShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKG9wZXJhdG9ycy5lcShsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBuZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKG9wZXJhdG9ycy5uZShsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBndChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKG9wZXJhdG9ycy5ndChsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBnZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKG9wZXJhdG9ycy5nZShsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBsdChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKG9wZXJhdG9ycy5sdChsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBsZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKG9wZXJhdG9ycy5sZShsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBoYXMobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChvcGVyYXRvcnMuaGFzKGxlZnQsIHJpZ2h0LCBub3JtYWxpemUpKTtcbiAgfVxuXG4gIGluKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiB0aGlzLl9hZGQob3BlcmF0b3JzLmluKGxlZnQsIHJpZ2h0LCBub3JtYWxpemUpKTtcbiAgfVxuXG4gIGNvbnRhaW5zKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiB0aGlzLl9hZGQoZnVuY3Rpb25zLmNvbnRhaW5zKGxlZnQsIHJpZ2h0LCBub3JtYWxpemUpKTtcbiAgfVxuXG4gIHN0YXJ0c1dpdGgobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChmdW5jdGlvbnMuc3RhcnRzV2l0aChsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBlbmRzV2l0aChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKGZ1bmN0aW9ucy5lbmRzV2l0aChsZWZ0LCByaWdodCwgbm9ybWFsaXplKSk7XG4gIH1cblxuICBhbnk8TiBleHRlbmRzIG9iamVjdD4oXG4gICAgbGVmdDogTltdLFxuICAgIG9wdHM6IChlOiB7XG4gICAgICBzOiBOO1xuICAgICAgZTogKGNvbm5lY3Rvcj86IENvbm5lY3RvcikgPT4gRXhwcmVzc2lvbjxOPjtcbiAgICB9KSA9PiBFeHByZXNzaW9uPE4+LFxuICAgIGFsaWFzPzogc3RyaW5nXG4gICk6IEV4cHJlc3Npb248VD4ge1xuICAgIGNvbnN0IGV4cCA9IG9wdHMoe1xuICAgICAgczogRmllbGQuZmFjdG9yeTxOPigpLFxuICAgICAgZTogRXhwcmVzc2lvbi5lLFxuICAgIH0pIGFzIEV4cHJlc3Npb248Tj47XG4gICAgcmV0dXJuIHRoaXMuX2FkZChzeW50YXguYW55KGxlZnQsIGV4cCwgYWxpYXMpKTtcbiAgfVxuXG4gIGFsbDxOIGV4dGVuZHMgb2JqZWN0PihcbiAgICBsZWZ0OiBOW10sXG4gICAgb3B0czogKGU6IHtcbiAgICAgIHM6IE47XG4gICAgICBlOiAoY29ubmVjdG9yPzogQ29ubmVjdG9yKSA9PiBFeHByZXNzaW9uPE4+O1xuICAgIH0pID0+IEV4cHJlc3Npb248Tj4sXG4gICAgYWxpYXM/OiBzdHJpbmdcbiAgKTogRXhwcmVzc2lvbjxUPiB7XG4gICAgY29uc3QgZXhwID0gb3B0cyh7XG4gICAgICBzOiBGaWVsZC5mYWN0b3J5PE4+KCksXG4gICAgICBlOiBFeHByZXNzaW9uLmUsXG4gICAgfSkgYXMgRXhwcmVzc2lvbjxOPjtcbiAgICByZXR1cm4gdGhpcy5fYWRkKHN5bnRheC5hbGwobGVmdCwgZXhwLCBhbGlhcykpO1xuICB9XG5cbiAgaXNvZih0eXBlOiBzdHJpbmcpOiBFeHByZXNzaW9uPFQ+O1xuICBpc29mKGxlZnQ6IFQsIHR5cGU6IHN0cmluZyk6IEV4cHJlc3Npb248VD47XG4gIGlzb2YobGVmdDogYW55LCB0eXBlPzogc3RyaW5nKTogRXhwcmVzc2lvbjxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChzeW50YXguaXNvZihsZWZ0LCB0eXBlKSk7XG4gIH1cbn1cblxuLypcbmV4cG9ydCBjbGFzcyBGaWx0ZXJFeHByZXNzaW9uPFQ+IGV4dGVuZHMgRXhwcmVzc2lvbjxUPiB7XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBjaGlsZHJlbixcbiAgICBjb25uZWN0b3IsXG4gICAgbmVnYXRlZCxcbiAgfToge1xuICAgIGNoaWxkcmVuPzogUmVuZGVyYWJsZVtdO1xuICAgIGNvbm5lY3Rvcj86IENvbm5lY3RvcjtcbiAgICBuZWdhdGVkPzogYm9vbGVhbjtcbiAgfSA9IHt9KSB7XG4gICAgc3VwZXIoeyBjaGlsZHJlbiwgY29ubmVjdG9yLCBuZWdhdGVkIH0pO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnRmlsdGVyRXhwcmVzc2lvbic7XG4gIH1cblxuICBzdGF0aWMgZTxUPigpIHtcbiAgICByZXR1cm4gbmV3IEZpbHRlckV4cHJlc3Npb248VD4oeyBjb25uZWN0b3I6IENvbm5lY3Rvci5BTkQgfSk7XG4gIH1cblxuICBzdGF0aWMgYW5kPFQ+KCkge1xuICAgIHJldHVybiBuZXcgRmlsdGVyRXhwcmVzc2lvbjxUPih7IGNvbm5lY3RvcjogQ29ubmVjdG9yLkFORCB9KTtcbiAgfVxuXG4gIHN0YXRpYyBvcjxUPigpIHtcbiAgICByZXR1cm4gbmV3IEZpbHRlckV4cHJlc3Npb248VD4oeyBjb25uZWN0b3I6IENvbm5lY3Rvci5PUiB9KTtcbiAgfVxuXG4gIHN0YXRpYyBub3Q8VD4oZXhwOiBGaWx0ZXJFeHByZXNzaW9uPFQ+KSB7XG4gICAgcmV0dXJuIG5ldyBGaWx0ZXJFeHByZXNzaW9uPFQ+KHtcbiAgICAgIGNoaWxkcmVuOiBleHAuY2hpbGRyZW4oKSxcbiAgICAgIGNvbm5lY3RvcjogZXhwLmNvbm5lY3RvcigpLFxuICAgICAgbmVnYXRlZDogdHJ1ZSxcbiAgICB9KTtcbiAgfVxufVxuKi9cbiJdfQ==