angular-odata 0.122.0 → 0.124.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 (163) hide show
  1. package/esm2022/lib/api.mjs +373 -0
  2. package/esm2022/lib/cache/cache.mjs +175 -0
  3. package/{esm2020 → esm2022}/lib/cache/storage.mjs +1 -1
  4. package/esm2022/lib/client.mjs +252 -0
  5. package/{esm2020 → esm2022}/lib/helper.mjs +1 -1
  6. package/{esm2020 → esm2022}/lib/loaders.mjs +1 -1
  7. package/esm2022/lib/models/collection.mjs +865 -0
  8. package/esm2022/lib/models/model.mjs +535 -0
  9. package/esm2022/lib/models/options.mjs +1117 -0
  10. package/{esm2020 → esm2022}/lib/module.mjs +5 -5
  11. package/esm2022/lib/resources/path/segments.mjs +124 -0
  12. package/esm2022/lib/resources/query/builder.mjs +624 -0
  13. package/esm2022/lib/resources/query/expressions/base.mjs +20 -0
  14. package/esm2022/lib/resources/query/expressions/compute.mjs +39 -0
  15. package/esm2022/lib/resources/query/expressions/count.mjs +99 -0
  16. package/esm2022/lib/resources/query/expressions/expand.mjs +125 -0
  17. package/esm2022/lib/resources/query/expressions/filter.mjs +161 -0
  18. package/esm2022/lib/resources/query/expressions/orderby.mjs +56 -0
  19. package/esm2022/lib/resources/query/expressions/search.mjs +122 -0
  20. package/esm2022/lib/resources/query/expressions/select.mjs +31 -0
  21. package/esm2022/lib/resources/query/expressions/syntax.mjs +444 -0
  22. package/{esm2020 → esm2022}/lib/resources/query/handlers.mjs +1 -1
  23. package/esm2022/lib/resources/query/options.mjs +115 -0
  24. package/{esm2020 → esm2022}/lib/resources/request.mjs +1 -1
  25. package/esm2022/lib/resources/resource.mjs +257 -0
  26. package/{esm2020 → esm2022}/lib/resources/responses/annotations.mjs +1 -1
  27. package/esm2022/lib/resources/responses/csdl/csdl-annotation.mjs +33 -0
  28. package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-entity-container.mjs +1 -1
  29. package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-entity-set.mjs +1 -1
  30. package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-enum-type.mjs +1 -1
  31. package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-function-action.mjs +1 -1
  32. package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-navigation-property-binding.mjs +1 -1
  33. package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-reference.mjs +1 -1
  34. package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-schema.mjs +1 -1
  35. package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-singleton.mjs +1 -1
  36. package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-structural-property.mjs +1 -1
  37. package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-structured-type.mjs +1 -1
  38. package/{esm2020 → esm2022}/lib/resources/responses/csdl/csdl-type-definition.mjs +1 -1
  39. package/esm2022/lib/resources/responses/metadata.mjs +547 -0
  40. package/{esm2020 → esm2022}/lib/resources/responses/response.mjs +1 -1
  41. package/{esm2020 → esm2022}/lib/resources/types/action.mjs +1 -1
  42. package/{esm2020 → esm2022}/lib/resources/types/batch.mjs +1 -1
  43. package/{esm2020 → esm2022}/lib/resources/types/count.mjs +1 -1
  44. package/{esm2020 → esm2022}/lib/resources/types/entity-set.mjs +1 -1
  45. package/{esm2020 → esm2022}/lib/resources/types/entity.mjs +1 -1
  46. package/{esm2020 → esm2022}/lib/resources/types/function.mjs +1 -1
  47. package/{esm2020 → esm2022}/lib/resources/types/media.mjs +1 -1
  48. package/{esm2020 → esm2022}/lib/resources/types/navigation-property.mjs +1 -1
  49. package/{esm2020 → esm2022}/lib/resources/types/property.mjs +1 -1
  50. package/{esm2020 → esm2022}/lib/resources/types/reference.mjs +1 -1
  51. package/{esm2020 → esm2022}/lib/resources/types/singleton.mjs +1 -1
  52. package/{esm2020 → esm2022}/lib/resources/types/value.mjs +1 -1
  53. package/{esm2020 → esm2022}/lib/schema/annotation.mjs +1 -1
  54. package/{esm2020 → esm2022}/lib/schema/callable.mjs +1 -1
  55. package/{esm2020 → esm2022}/lib/schema/element.mjs +1 -1
  56. package/{esm2020 → esm2022}/lib/schema/entity-container.mjs +1 -1
  57. package/{esm2020 → esm2022}/lib/schema/enum-type.mjs +1 -1
  58. package/{esm2020 → esm2022}/lib/schema/parsers/callable.mjs +1 -1
  59. package/esm2022/lib/schema/parsers/edm.mjs +99 -0
  60. package/{esm2020 → esm2022}/lib/schema/parsers/enum-type.mjs +2 -2
  61. package/esm2022/lib/schema/parsers/structured-type.mjs +502 -0
  62. package/{esm2020 → esm2022}/lib/schema/schema.mjs +1 -1
  63. package/esm2022/lib/schema/structured-type.mjs +207 -0
  64. package/esm2022/lib/services/base.mjs +29 -0
  65. package/{esm2020 → esm2022}/lib/services/entity-set.mjs +1 -1
  66. package/{esm2020 → esm2022}/lib/services/factory.mjs +4 -4
  67. package/{esm2020 → esm2022}/lib/services/singleton.mjs +1 -1
  68. package/{esm2020 → esm2022}/lib/settings.mjs +1 -1
  69. package/{esm2020 → esm2022}/lib/types.mjs +1 -1
  70. package/{esm2020 → esm2022}/lib/utils/arrays.mjs +1 -1
  71. package/{esm2020 → esm2022}/lib/utils/durations.mjs +1 -1
  72. package/esm2022/lib/utils/enums.mjs +61 -0
  73. package/{esm2020 → esm2022}/lib/utils/http.mjs +1 -1
  74. package/{esm2020 → esm2022}/lib/utils/objects.mjs +1 -1
  75. package/{esm2020 → esm2022}/lib/utils/odata.mjs +1 -1
  76. package/esm2022/lib/utils/types.mjs +136 -0
  77. package/{fesm2020 → fesm2022}/angular-odata.mjs +544 -373
  78. package/fesm2022/angular-odata.mjs.map +1 -0
  79. package/lib/helper.d.ts +1 -1
  80. package/lib/models/model.d.ts +4 -2
  81. package/lib/models/options.d.ts +7 -8
  82. package/lib/resources/path/segments.d.ts +15 -6
  83. package/lib/resources/query/builder.d.ts +21 -20
  84. package/lib/resources/query/expressions/base.d.ts +6 -4
  85. package/lib/resources/query/expressions/compute.d.ts +10 -8
  86. package/lib/resources/query/expressions/count.d.ts +14 -11
  87. package/lib/resources/query/expressions/expand.d.ts +23 -19
  88. package/lib/resources/query/expressions/filter.d.ts +22 -20
  89. package/lib/resources/query/expressions/orderby.d.ts +12 -9
  90. package/lib/resources/query/expressions/search.d.ts +12 -9
  91. package/lib/resources/query/expressions/select.d.ts +9 -7
  92. package/lib/resources/query/expressions/syntax.d.ts +75 -71
  93. package/lib/resources/query/handlers.d.ts +2 -2
  94. package/lib/resources/query/options.d.ts +15 -6
  95. package/lib/resources/resource.d.ts +2 -2
  96. package/lib/resources/responses/types.d.ts +3 -3
  97. package/lib/resources/types/options.d.ts +7 -7
  98. package/lib/schema/parsers/structured-type.d.ts +8 -5
  99. package/lib/schema/structured-type.d.ts +2 -1
  100. package/lib/types.d.ts +15 -15
  101. package/lib/utils/durations.d.ts +1 -1
  102. package/lib/utils/enums.d.ts +3 -0
  103. package/lib/utils/types.d.ts +1 -0
  104. package/package.json +9 -15
  105. package/esm2020/lib/api.mjs +0 -373
  106. package/esm2020/lib/cache/cache.mjs +0 -173
  107. package/esm2020/lib/client.mjs +0 -252
  108. package/esm2020/lib/models/collection.mjs +0 -861
  109. package/esm2020/lib/models/model.mjs +0 -507
  110. package/esm2020/lib/models/options.mjs +0 -1110
  111. package/esm2020/lib/resources/path/segments.mjs +0 -124
  112. package/esm2020/lib/resources/query/builder.mjs +0 -588
  113. package/esm2020/lib/resources/query/expressions/base.mjs +0 -20
  114. package/esm2020/lib/resources/query/expressions/compute.mjs +0 -39
  115. package/esm2020/lib/resources/query/expressions/count.mjs +0 -89
  116. package/esm2020/lib/resources/query/expressions/expand.mjs +0 -115
  117. package/esm2020/lib/resources/query/expressions/filter.mjs +0 -161
  118. package/esm2020/lib/resources/query/expressions/orderby.mjs +0 -56
  119. package/esm2020/lib/resources/query/expressions/search.mjs +0 -122
  120. package/esm2020/lib/resources/query/expressions/select.mjs +0 -31
  121. package/esm2020/lib/resources/query/expressions/syntax.mjs +0 -409
  122. package/esm2020/lib/resources/query/options.mjs +0 -115
  123. package/esm2020/lib/resources/resource.mjs +0 -251
  124. package/esm2020/lib/resources/responses/csdl/csdl-annotation.mjs +0 -33
  125. package/esm2020/lib/resources/responses/metadata.mjs +0 -547
  126. package/esm2020/lib/schema/parsers/edm.mjs +0 -104
  127. package/esm2020/lib/schema/parsers/structured-type.mjs +0 -490
  128. package/esm2020/lib/schema/structured-type.mjs +0 -202
  129. package/esm2020/lib/services/base.mjs +0 -29
  130. package/esm2020/lib/utils/enums.mjs +0 -45
  131. package/esm2020/lib/utils/types.mjs +0 -133
  132. package/fesm2015/angular-odata.mjs +0 -11811
  133. package/fesm2015/angular-odata.mjs.map +0 -1
  134. package/fesm2020/angular-odata.mjs.map +0 -1
  135. /package/{esm2020 → esm2022}/angular-odata.mjs +0 -0
  136. /package/{esm2020 → esm2022}/lib/cache/index.mjs +0 -0
  137. /package/{esm2020 → esm2022}/lib/cache/memory.mjs +0 -0
  138. /package/{esm2020 → esm2022}/lib/constants.mjs +0 -0
  139. /package/{esm2020 → esm2022}/lib/index.mjs +0 -0
  140. /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
  141. /package/{esm2020 → esm2022}/lib/options.mjs +0 -0
  142. /package/{esm2020 → esm2022}/lib/resources/index.mjs +0 -0
  143. /package/{esm2020 → esm2022}/lib/resources/path/handlers.mjs +0 -0
  144. /package/{esm2020 → esm2022}/lib/resources/path/index.mjs +0 -0
  145. /package/{esm2020 → esm2022}/lib/resources/query/expressions/index.mjs +0 -0
  146. /package/{esm2020 → esm2022}/lib/resources/query/index.mjs +0 -0
  147. /package/{esm2020 → esm2022}/lib/resources/responses/index.mjs +0 -0
  148. /package/{esm2020 → esm2022}/lib/resources/responses/options.mjs +0 -0
  149. /package/{esm2020 → esm2022}/lib/resources/responses/types.mjs +0 -0
  150. /package/{esm2020 → esm2022}/lib/resources/types/index.mjs +0 -0
  151. /package/{esm2020 → esm2022}/lib/resources/types/metadata.mjs +0 -0
  152. /package/{esm2020 → esm2022}/lib/resources/types/options.mjs +0 -0
  153. /package/{esm2020 → esm2022}/lib/schema/entity-set.mjs +0 -0
  154. /package/{esm2020 → esm2022}/lib/schema/index.mjs +0 -0
  155. /package/{esm2020 → esm2022}/lib/schema/parsers/index.mjs +0 -0
  156. /package/{esm2020 → esm2022}/lib/services/entity.mjs +0 -0
  157. /package/{esm2020 → esm2022}/lib/services/index.mjs +0 -0
  158. /package/{esm2020 → esm2022}/lib/utils/arraybuffers.mjs +0 -0
  159. /package/{esm2020 → esm2022}/lib/utils/dates.mjs +0 -0
  160. /package/{esm2020 → esm2022}/lib/utils/index.mjs +0 -0
  161. /package/{esm2020 → esm2022}/lib/utils/strings.mjs +0 -0
  162. /package/{esm2020 → esm2022}/lib/utils/urls.mjs +0 -0
  163. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -1,122 +0,0 @@
1
- import { Types } from '../../../utils';
2
- import { Expression } from './base';
3
- import { render, Grouping } from './syntax';
4
- export class SearchTerm {
5
- constructor(value) {
6
- this.value = value;
7
- }
8
- get [Symbol.toStringTag]() {
9
- return 'SearchTerm';
10
- }
11
- toJSON() {
12
- return {
13
- $type: Types.rawType(this),
14
- value: this.value,
15
- };
16
- }
17
- render({ aliases, escape, prefix, }) {
18
- return `${render(this.value, { aliases, escape, prefix })}`;
19
- }
20
- clone() {
21
- return new SearchTerm(this.value);
22
- }
23
- }
24
- export class SearchExpression extends Expression {
25
- constructor({ children, connector, negated, } = {}) {
26
- super({ children });
27
- this._connector = connector || 'AND';
28
- this._negated = negated || false;
29
- }
30
- static search(opts, current) {
31
- return opts({
32
- e: (connector = 'AND') => new SearchExpression({ connector }),
33
- }, current);
34
- }
35
- _add(node, connector) {
36
- if (connector !== undefined && this._connector !== connector) {
37
- let children = [];
38
- if (this._children.length > 0) {
39
- if (this._children.length === 1) {
40
- children = [...this._children];
41
- }
42
- else {
43
- let exp = new SearchExpression({
44
- children: this._children,
45
- connector: this._connector,
46
- negated: this._negated,
47
- });
48
- if (exp.length() > 1) {
49
- children.push(new Grouping(exp));
50
- }
51
- else {
52
- children.push(exp);
53
- }
54
- }
55
- }
56
- if (node instanceof SearchExpression &&
57
- (node.connector() === connector || node.length() === 1)) {
58
- children = [...children, ...node.children()];
59
- }
60
- else {
61
- children.push(new Grouping(node));
62
- }
63
- this._connector = connector;
64
- this._children = children;
65
- }
66
- else if (node instanceof SearchExpression &&
67
- !node.negated() &&
68
- (node.connector() === connector || node.length() === 1)) {
69
- this._children = [...this._children, ...node.children()];
70
- }
71
- else {
72
- this._children.push(node instanceof SearchExpression && !node.negated()
73
- ? new Grouping(node)
74
- : node);
75
- }
76
- return this;
77
- }
78
- render({ aliases, escape, prefix, } = {}) {
79
- let content = this._children
80
- .map((n) => n.render({ aliases, escape, prefix }))
81
- .join(` ${this._connector} `);
82
- return content;
83
- }
84
- clone() {
85
- return new SearchExpression({
86
- children: this._children.map((c) => c.clone()),
87
- connector: this._connector,
88
- negated: this._negated,
89
- });
90
- }
91
- toJSON() {
92
- return {
93
- children: this._children.map((c) => c.toJSON()),
94
- connector: this._connector,
95
- negated: this._negated,
96
- };
97
- }
98
- connector() {
99
- return this._connector;
100
- }
101
- negated() {
102
- return this._negated;
103
- }
104
- or(exp) {
105
- return this._add(exp, 'OR');
106
- }
107
- and(exp) {
108
- return this._add(exp, 'AND');
109
- }
110
- not(exp) {
111
- const notExp = new SearchExpression({
112
- children: exp.children(),
113
- connector: exp.connector(),
114
- negated: true,
115
- });
116
- return this._add(notExp, this._connector);
117
- }
118
- term(value) {
119
- return this._add(new SearchTerm(value));
120
- }
121
- }
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9leHByZXNzaW9ucy9zZWFyY2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDcEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWMsTUFBTSxVQUFVLENBQUM7QUFJeEQsTUFBTSxPQUFPLFVBQVU7SUFDckIsWUFBc0IsS0FBYTtRQUFiLFVBQUssR0FBTCxLQUFLLENBQVE7SUFBRyxDQUFDO0lBRXZDLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBQ3RCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTztZQUNMLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztZQUMxQixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLE1BQU0sR0FLUDtRQUNDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzlELENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUNGO0FBS0QsTUFBTSxPQUFPLGdCQUFvQixTQUFRLFVBQWE7SUFHcEQsWUFBWSxFQUNWLFFBQVEsRUFDUixTQUFTLEVBQ1QsT0FBTyxNQUtMLEVBQUU7UUFDSixLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQ1gsSUFHd0IsRUFDeEIsT0FBNkI7UUFFN0IsT0FBTyxJQUFJLENBQ1Q7WUFDRSxDQUFDLEVBQUUsQ0FBQyxZQUE2QixLQUFLLEVBQUUsRUFBRSxDQUN4QyxJQUFJLGdCQUFnQixDQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7U0FDekMsRUFDRCxPQUFPLENBQ2UsQ0FBQztJQUMzQixDQUFDO0lBRU8sSUFBSSxDQUNWLElBQWdCLEVBQ2hCLFNBQTJCO1FBRTNCLElBQUksU0FBUyxLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUM1RCxJQUFJLFFBQVEsR0FBaUIsRUFBRSxDQUFDO1lBQ2hDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtvQkFDL0IsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ2hDO3FCQUFNO29CQUNMLElBQUksR0FBRyxHQUFHLElBQUksZ0JBQWdCLENBQUk7d0JBQ2hDLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUzt3QkFDeEIsU0FBUyxFQUFFLElBQUksQ0FBQyxVQUFVO3dCQUMxQixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7cUJBQ3ZCLENBQUMsQ0FBQztvQkFDSCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUU7d0JBQ3BCLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztxQkFDbEM7eUJBQU07d0JBQ0wsUUFBUSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDcEI7aUJBQ0Y7YUFDRjtZQUNELElBQ0UsSUFBSSxZQUFZLGdCQUFnQjtnQkFDaEMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFDdkQ7Z0JBQ0EsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQzthQUM5QztpQkFBTTtnQkFDTCxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDbkM7WUFDRCxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztZQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztTQUMzQjthQUFNLElBQ0wsSUFBSSxZQUFZLGdCQUFnQjtZQUNoQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDZixDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUN2RDtZQUNBLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUMxRDthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2pCLElBQUksWUFBWSxnQkFBZ0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2pELENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxJQUFJLENBQ1QsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQ0wsT0FBTyxFQUNQLE1BQU0sRUFDTixNQUFNLE1BS0osRUFBRTtRQUNKLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTO2FBQ3pCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQzthQUNqRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNoQyxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSztRQUNILE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQztZQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5QyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDMUIsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQ3ZCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUSxNQUFNO1FBQ2IsT0FBTztZQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9DLFNBQVMsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMxQixPQUFPLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxPQUFPO1FBQ0wsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxFQUFFLENBQUMsR0FBd0I7UUFDekIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsR0FBRyxDQUFDLEdBQXdCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVELEdBQUcsQ0FBQyxHQUF3QjtRQUMxQixNQUFNLE1BQU0sR0FBRyxJQUFJLGdCQUFnQixDQUFJO1lBQ3JDLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUSxFQUFFO1lBQ3hCLFNBQVMsRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFO1lBQzFCLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksQ0FBQyxLQUFVO1FBQ2IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHlwZXMgfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQgdHlwZSB7IFF1ZXJ5Q3VzdG9tVHlwZSB9IGZyb20gJy4uL2J1aWxkZXInO1xuaW1wb3J0IHsgRXhwcmVzc2lvbiB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyByZW5kZXIsIEdyb3VwaW5nLCBSZW5kZXJhYmxlIH0gZnJvbSAnLi9zeW50YXgnO1xuXG5leHBvcnQgdHlwZSBTZWFyY2hDb25uZWN0b3IgPSAnQU5EJyB8ICdPUic7XG5cbmV4cG9ydCBjbGFzcyBTZWFyY2hUZXJtIGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCB2YWx1ZTogc3RyaW5nKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ1NlYXJjaFRlcm0nO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdHlwZTogVHlwZXMucmF3VHlwZSh0aGlzKSxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgfSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3JlbmRlcih0aGlzLnZhbHVlLCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pfWA7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IFNlYXJjaFRlcm0odGhpcy52YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgU2VhcmNoRXhwcmVzc2lvbkJ1aWxkZXI8VD4gPSB7XG4gIGU6IChjb25uZWN0b3I/OiBTZWFyY2hDb25uZWN0b3IpID0+IFNlYXJjaEV4cHJlc3Npb248VD47XG59O1xuZXhwb3J0IGNsYXNzIFNlYXJjaEV4cHJlc3Npb248VD4gZXh0ZW5kcyBFeHByZXNzaW9uPFQ+IHtcbiAgcHJpdmF0ZSBfY29ubmVjdG9yOiBTZWFyY2hDb25uZWN0b3I7XG4gIHByaXZhdGUgX25lZ2F0ZWQ6IGJvb2xlYW47XG4gIGNvbnN0cnVjdG9yKHtcbiAgICBjaGlsZHJlbixcbiAgICBjb25uZWN0b3IsXG4gICAgbmVnYXRlZCxcbiAgfToge1xuICAgIGNoaWxkcmVuPzogUmVuZGVyYWJsZVtdO1xuICAgIGNvbm5lY3Rvcj86IFNlYXJjaENvbm5lY3RvcjtcbiAgICBuZWdhdGVkPzogYm9vbGVhbjtcbiAgfSA9IHt9KSB7XG4gICAgc3VwZXIoeyBjaGlsZHJlbiB9KTtcbiAgICB0aGlzLl9jb25uZWN0b3IgPSBjb25uZWN0b3IgfHwgJ0FORCc7XG4gICAgdGhpcy5fbmVnYXRlZCA9IG5lZ2F0ZWQgfHwgZmFsc2U7XG4gIH1cblxuICBzdGF0aWMgc2VhcmNoPFQgZXh0ZW5kcyBvYmplY3Q+KFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IFNlYXJjaEV4cHJlc3Npb25CdWlsZGVyPFQ+LFxuICAgICAgY3VycmVudD86IFNlYXJjaEV4cHJlc3Npb248VD5cbiAgICApID0+IFNlYXJjaEV4cHJlc3Npb248VD4sXG4gICAgY3VycmVudD86IFNlYXJjaEV4cHJlc3Npb248VD5cbiAgKTogU2VhcmNoRXhwcmVzc2lvbjxUPiB7XG4gICAgcmV0dXJuIG9wdHMoXG4gICAgICB7XG4gICAgICAgIGU6IChjb25uZWN0b3I6IFNlYXJjaENvbm5lY3RvciA9ICdBTkQnKSA9PlxuICAgICAgICAgIG5ldyBTZWFyY2hFeHByZXNzaW9uPFQ+KHsgY29ubmVjdG9yIH0pLFxuICAgICAgfSxcbiAgICAgIGN1cnJlbnRcbiAgICApIGFzIFNlYXJjaEV4cHJlc3Npb248VD47XG4gIH1cblxuICBwcml2YXRlIF9hZGQoXG4gICAgbm9kZTogUmVuZGVyYWJsZSxcbiAgICBjb25uZWN0b3I/OiBTZWFyY2hDb25uZWN0b3JcbiAgKTogU2VhcmNoRXhwcmVzc2lvbjxUPiB7XG4gICAgaWYgKGNvbm5lY3RvciAhPT0gdW5kZWZpbmVkICYmIHRoaXMuX2Nvbm5lY3RvciAhPT0gY29ubmVjdG9yKSB7XG4gICAgICBsZXQgY2hpbGRyZW46IFJlbmRlcmFibGVbXSA9IFtdO1xuICAgICAgaWYgKHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKHRoaXMuX2NoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNoaWxkcmVuID0gWy4uLnRoaXMuX2NoaWxkcmVuXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgZXhwID0gbmV3IFNlYXJjaEV4cHJlc3Npb248VD4oe1xuICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuX2NoaWxkcmVuLFxuICAgICAgICAgICAgY29ubmVjdG9yOiB0aGlzLl9jb25uZWN0b3IsXG4gICAgICAgICAgICBuZWdhdGVkOiB0aGlzLl9uZWdhdGVkLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChleHAubGVuZ3RoKCkgPiAxKSB7XG4gICAgICAgICAgICBjaGlsZHJlbi5wdXNoKG5ldyBHcm91cGluZyhleHApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChleHApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBub2RlIGluc3RhbmNlb2YgU2VhcmNoRXhwcmVzc2lvbiAmJlxuICAgICAgICAobm9kZS5jb25uZWN0b3IoKSA9PT0gY29ubmVjdG9yIHx8IG5vZGUubGVuZ3RoKCkgPT09IDEpXG4gICAgICApIHtcbiAgICAgICAgY2hpbGRyZW4gPSBbLi4uY2hpbGRyZW4sIC4uLm5vZGUuY2hpbGRyZW4oKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGlsZHJlbi5wdXNoKG5ldyBHcm91cGluZyhub2RlKSk7XG4gICAgICB9XG4gICAgICB0aGlzLl9jb25uZWN0b3IgPSBjb25uZWN0b3I7XG4gICAgICB0aGlzLl9jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBub2RlIGluc3RhbmNlb2YgU2VhcmNoRXhwcmVzc2lvbiAmJlxuICAgICAgIW5vZGUubmVnYXRlZCgpICYmXG4gICAgICAobm9kZS5jb25uZWN0b3IoKSA9PT0gY29ubmVjdG9yIHx8IG5vZGUubGVuZ3RoKCkgPT09IDEpXG4gICAgKSB7XG4gICAgICB0aGlzLl9jaGlsZHJlbiA9IFsuLi50aGlzLl9jaGlsZHJlbiwgLi4ubm9kZS5jaGlsZHJlbigpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hpbGRyZW4ucHVzaChcbiAgICAgICAgbm9kZSBpbnN0YW5jZW9mIFNlYXJjaEV4cHJlc3Npb24gJiYgIW5vZGUubmVnYXRlZCgpXG4gICAgICAgICAgPyBuZXcgR3JvdXBpbmcobm9kZSlcbiAgICAgICAgICA6IG5vZGVcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW10gfCB1bmRlZmluZWQ7XG4gICAgZXNjYXBlPzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICBwcmVmaXg/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIH0gPSB7fSk6IHN0cmluZyB7XG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLl9jaGlsZHJlblxuICAgICAgLm1hcCgobikgPT4gbi5yZW5kZXIoeyBhbGlhc2VzLCBlc2NhcGUsIHByZWZpeCB9KSlcbiAgICAgIC5qb2luKGAgJHt0aGlzLl9jb25uZWN0b3J9IGApO1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBTZWFyY2hFeHByZXNzaW9uKHtcbiAgICAgIGNoaWxkcmVuOiB0aGlzLl9jaGlsZHJlbi5tYXAoKGMpID0+IGMuY2xvbmUoKSksXG4gICAgICBjb25uZWN0b3I6IHRoaXMuX2Nvbm5lY3RvcixcbiAgICAgIG5lZ2F0ZWQ6IHRoaXMuX25lZ2F0ZWQsXG4gICAgfSk7XG4gIH1cblxuICBvdmVycmlkZSB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuOiB0aGlzLl9jaGlsZHJlbi5tYXAoKGMpID0+IGMudG9KU09OKCkpLFxuICAgICAgY29ubmVjdG9yOiB0aGlzLl9jb25uZWN0b3IsXG4gICAgICBuZWdhdGVkOiB0aGlzLl9uZWdhdGVkLFxuICAgIH07XG4gIH1cblxuICBjb25uZWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Nvbm5lY3RvcjtcbiAgfVxuXG4gIG5lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25lZ2F0ZWQ7XG4gIH1cblxuICBvcihleHA6IFNlYXJjaEV4cHJlc3Npb248VD4pOiBTZWFyY2hFeHByZXNzaW9uPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fYWRkKGV4cCwgJ09SJyk7XG4gIH1cblxuICBhbmQoZXhwOiBTZWFyY2hFeHByZXNzaW9uPFQ+KTogU2VhcmNoRXhwcmVzc2lvbjxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChleHAsICdBTkQnKTtcbiAgfVxuXG4gIG5vdChleHA6IFNlYXJjaEV4cHJlc3Npb248VD4pOiBTZWFyY2hFeHByZXNzaW9uPFQ+IHtcbiAgICBjb25zdCBub3RFeHAgPSBuZXcgU2VhcmNoRXhwcmVzc2lvbjxUPih7XG4gICAgICBjaGlsZHJlbjogZXhwLmNoaWxkcmVuKCksXG4gICAgICBjb25uZWN0b3I6IGV4cC5jb25uZWN0b3IoKSxcbiAgICAgIG5lZ2F0ZWQ6IHRydWUsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy5fYWRkKG5vdEV4cCwgdGhpcy5fY29ubmVjdG9yKTtcbiAgfVxuXG4gIHRlcm0odmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLl9hZGQobmV3IFNlYXJjaFRlcm0odmFsdWUpKTtcbiAgfVxufVxuIl19
@@ -1,31 +0,0 @@
1
- import { Expression } from './base';
2
- import { Field } from './syntax';
3
- export class SelectExpression extends Expression {
4
- constructor({ children, } = {}) {
5
- super({ children });
6
- }
7
- static select(opts, current) {
8
- return opts({
9
- t: Field.factory(),
10
- e: () => new SelectExpression(),
11
- }, current);
12
- }
13
- render({ aliases, escape, prefix, } = {}) {
14
- return this._children
15
- .map((n) => n.render({ aliases, escape, prefix }))
16
- .join(',');
17
- }
18
- clone() {
19
- return new SelectExpression({
20
- children: this._children.map((c) => c.clone()),
21
- });
22
- }
23
- _add(node) {
24
- this._children.push(node);
25
- return this;
26
- }
27
- field(field) {
28
- return this._add(field);
29
- }
30
- }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9leHByZXNzaW9ucy9zZWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsS0FBSyxFQUFjLE1BQU0sVUFBVSxDQUFDO0FBTTdDLE1BQU0sT0FBTyxnQkFBb0IsU0FBUSxVQUFhO0lBQ3BELFlBQVksRUFDVixRQUFRLE1BR04sRUFBRTtRQUNKLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQ1gsSUFHd0IsRUFDeEIsT0FBNkI7UUFFN0IsT0FBTyxJQUFJLENBQ1Q7WUFDRSxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBeUI7WUFDekMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksZ0JBQWdCLEVBQUs7U0FDbkMsRUFDRCxPQUFPLENBQ2UsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQ0wsT0FBTyxFQUNQLE1BQU0sRUFDTixNQUFNLE1BS0osRUFBRTtRQUNKLE9BQU8sSUFBSSxDQUFDLFNBQVM7YUFDbEIsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO2FBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLO1FBQ0gsT0FBTyxJQUFJLGdCQUFnQixDQUFDO1lBQzFCLFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQy9DLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxJQUFJLENBQUMsSUFBZ0I7UUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsS0FBSyxDQUFDLEtBQVU7UUFDZCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBRdWVyeUN1c3RvbVR5cGUgfSBmcm9tICcuLi9idWlsZGVyJztcbmltcG9ydCB7IEV4cHJlc3Npb24gfSBmcm9tICcuL2Jhc2UnO1xuaW1wb3J0IHsgRmllbGQsIFJlbmRlcmFibGUgfSBmcm9tICcuL3N5bnRheCc7XG5cbmV4cG9ydCB0eXBlIFNlbGVjdEV4cHJlc3Npb25CdWlsZGVyPFQ+ID0ge1xuICB0OiBSZWFkb25seTxSZXF1aXJlZDxUPj47XG4gIGU6ICgpID0+IFNlbGVjdEV4cHJlc3Npb248VD47XG59O1xuZXhwb3J0IGNsYXNzIFNlbGVjdEV4cHJlc3Npb248VD4gZXh0ZW5kcyBFeHByZXNzaW9uPFQ+IHtcbiAgY29uc3RydWN0b3Ioe1xuICAgIGNoaWxkcmVuLFxuICB9OiB7XG4gICAgY2hpbGRyZW4/OiBSZW5kZXJhYmxlW107XG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKHsgY2hpbGRyZW4gfSk7XG4gIH1cblxuICBzdGF0aWMgc2VsZWN0PFQgZXh0ZW5kcyBvYmplY3Q+KFxuICAgIG9wdHM6IChcbiAgICAgIGJ1aWxkZXI6IFNlbGVjdEV4cHJlc3Npb25CdWlsZGVyPFQ+LFxuICAgICAgY3VycmVudD86IFNlbGVjdEV4cHJlc3Npb248VD5cbiAgICApID0+IFNlbGVjdEV4cHJlc3Npb248VD4sXG4gICAgY3VycmVudD86IFNlbGVjdEV4cHJlc3Npb248VD5cbiAgKTogU2VsZWN0RXhwcmVzc2lvbjxUPiB7XG4gICAgcmV0dXJuIG9wdHMoXG4gICAgICB7XG4gICAgICAgIHQ6IEZpZWxkLmZhY3Rvcnk8UmVhZG9ubHk8UmVxdWlyZWQ8VD4+PigpLFxuICAgICAgICBlOiAoKSA9PiBuZXcgU2VsZWN0RXhwcmVzc2lvbjxUPigpLFxuICAgICAgfSxcbiAgICAgIGN1cnJlbnRcbiAgICApIGFzIFNlbGVjdEV4cHJlc3Npb248VD47XG4gIH1cblxuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXSB8IHVuZGVmaW5lZDtcbiAgICBlc2NhcGU/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIHByZWZpeD86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgfSA9IHt9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW5cbiAgICAgIC5tYXAoKG4pID0+IG4ucmVuZGVyKHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSkpXG4gICAgICAuam9pbignLCcpO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBTZWxlY3RFeHByZXNzaW9uKHtcbiAgICAgIGNoaWxkcmVuOiB0aGlzLl9jaGlsZHJlbi5tYXAoKGMpID0+IGMuY2xvbmUoKSksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9hZGQobm9kZTogUmVuZGVyYWJsZSk6IFNlbGVjdEV4cHJlc3Npb248VD4ge1xuICAgIHRoaXMuX2NoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBmaWVsZChmaWVsZDogYW55KTogU2VsZWN0RXhwcmVzc2lvbjxUPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FkZChmaWVsZCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,409 +0,0 @@
1
- import { Objects, Types } from '../../../utils';
2
- import { normalizeValue } from '../builder';
3
- export class Field {
4
- constructor(name = '') {
5
- this.name = name;
6
- }
7
- static factory(name = '') {
8
- return new Proxy({ _name: name }, new Field());
9
- }
10
- get(target, key) {
11
- let name = target['_name'];
12
- if (key === 'render') {
13
- return ({ prefix }) => prefix ? `${prefix}/${name}` : name;
14
- }
15
- else if (key === 'clone') {
16
- return () => Field.factory(name);
17
- }
18
- else if (key === Symbol.toStringTag) {
19
- return () => 'Field';
20
- }
21
- else if (key === 'toJSON') {
22
- return () => ({
23
- $type: Types.rawType(this),
24
- name: name,
25
- });
26
- }
27
- else {
28
- name = name ? `${name}/${key}` : key;
29
- return new Proxy({ _name: name }, this);
30
- }
31
- }
32
- has(target, key) {
33
- return ['toJSON', 'clone', 'render'].includes(key) || key in target;
34
- }
35
- }
36
- function applyMixins(derivedCtor, constructors) {
37
- constructors.forEach((baseCtor) => {
38
- Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
39
- Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||
40
- Object.create(null));
41
- });
42
- });
43
- }
44
- export function render(value, { aliases, normalize, escape, prefix, } = {}) {
45
- if (typeof value === 'function') {
46
- return render(value(syntax), { aliases, normalize, prefix });
47
- }
48
- if (typeof value === 'object' &&
49
- value !== null &&
50
- value.render !== undefined) {
51
- return render(value.render({ aliases, escape, prefix }), {
52
- aliases,
53
- normalize,
54
- escape,
55
- prefix,
56
- });
57
- }
58
- return normalize ? normalizeValue(value, { aliases, escape }) : value;
59
- }
60
- export class Function {
61
- constructor(name, values, normalize = true, escape = false) {
62
- this.name = name;
63
- this.values = values;
64
- this.normalize = normalize;
65
- this.escape = escape;
66
- }
67
- get [Symbol.toStringTag]() {
68
- return 'Function';
69
- }
70
- toJSON() {
71
- return {
72
- $type: Types.rawType(this),
73
- name: this.name,
74
- values: this.values,
75
- normalize: this.normalize,
76
- };
77
- }
78
- render({ aliases, escape, prefix, }) {
79
- let [field, ...values] = this.values;
80
- field = render(field, { aliases, escape, prefix });
81
- const params = [
82
- field,
83
- ...values.map((v) => render(v, { aliases, escape, prefix, normalize: this.normalize })),
84
- ];
85
- return `${this.name}(${params.join(', ')})`;
86
- }
87
- clone() {
88
- return new Function(this.name, this.values.map((v) => Objects.clone(v)), this.normalize, this.escape);
89
- }
90
- }
91
- export class StringAndCollectionFunctions {
92
- concat(field, value, normalize) {
93
- return new Function('concat', [field, value], normalize);
94
- }
95
- contains(field, value, normalize) {
96
- return new Function('contains', [field, value], normalize);
97
- }
98
- endsWith(field, value, normalize) {
99
- return new Function('endswith', [field, value], normalize);
100
- }
101
- indexOf(field, value, normalize) {
102
- return new Function('indexof', [field, value], normalize);
103
- }
104
- length(value, normalize) {
105
- return new Function('length', [value], normalize);
106
- }
107
- startsWith(field, value, normalize) {
108
- return new Function('startswith', [field, value], normalize);
109
- }
110
- subString(field, start, length) {
111
- let values = [field, start];
112
- if (length !== undefined) {
113
- values.push(length);
114
- }
115
- return new Function('substring', values);
116
- }
117
- }
118
- export class CollectionFunctions {
119
- hasSubset(s1, s2) {
120
- return new Function('hassubset', [s1, s2]);
121
- }
122
- hasSubsequence(s1, s2) {
123
- return new Function('hassubsequence', [s1, s2]);
124
- }
125
- }
126
- export class StringFunctions {
127
- matchesPattern(value, pattern) {
128
- return new Function('matchesPattern', [value, pattern]);
129
- }
130
- toLower(value) {
131
- return new Function('tolower', [value]);
132
- }
133
- toUpper(value) {
134
- return new Function('toupper', [value]);
135
- }
136
- trim(value) {
137
- return new Function('trim', [value]);
138
- }
139
- }
140
- export class DateAndTimeFunctions {
141
- date(value) {
142
- return new Function('date', [value]);
143
- }
144
- day(value) {
145
- return new Function('day', [value]);
146
- }
147
- fractionalseconds(value) {
148
- return new Function('fractionalseconds', [value]);
149
- }
150
- hour(value) {
151
- return new Function('hour', [value]);
152
- }
153
- maxdatetime(value) {
154
- return new Function('maxdatetime', [value]);
155
- }
156
- mindatetime(value) {
157
- return new Function('mindatetime', [value]);
158
- }
159
- minute(value) {
160
- return new Function('minute', [value]);
161
- }
162
- month(value) {
163
- return new Function('month', [value]);
164
- }
165
- now() {
166
- return new Function('now', []);
167
- }
168
- second(value) {
169
- return new Function('second', [value]);
170
- }
171
- time(value) {
172
- return new Function('time', [value]);
173
- }
174
- totaloffsetminutes(value) {
175
- return new Function('totaloffsetminutes', [value]);
176
- }
177
- totalseconds(value) {
178
- return new Function('totalseconds', [value]);
179
- }
180
- year(value) {
181
- return new Function('year', [value]);
182
- }
183
- }
184
- export class ArithmeticFunctions {
185
- ceiling(value) {
186
- return new Function('ceiling', [value]);
187
- }
188
- floor(value) {
189
- return new Function('floor', [value]);
190
- }
191
- round(value) {
192
- return new Function('round', [value]);
193
- }
194
- }
195
- export class TypeFunctions {
196
- cast(value, type) {
197
- return new Function('cast', [value, type]);
198
- }
199
- isof(value, type) {
200
- return new Function('isof', [value, type]);
201
- }
202
- }
203
- export class GeoFunctions {
204
- geoDistance(value, point, normalize) {
205
- return new Function('geo.distance', [value, point], normalize);
206
- }
207
- geoIntersects(value, polygon, normalize) {
208
- return new Function('geo.intersects', [value, polygon], normalize);
209
- }
210
- geoLength(line, normalize) {
211
- return new Function('geo.length', [line], normalize);
212
- }
213
- }
214
- export class ConditionalFunctions {
215
- case(condition, value) {
216
- return new Function('case', [condition, value]);
217
- }
218
- }
219
- export class Operator {
220
- constructor(op, values, normalize = true) {
221
- this.op = op;
222
- this.values = values;
223
- this.normalize = normalize;
224
- }
225
- get [Symbol.toStringTag]() {
226
- return 'Operator';
227
- }
228
- toJSON() {
229
- return {
230
- $type: Types.rawType(this),
231
- op: this.op,
232
- values: this.values,
233
- normalize: this.normalize,
234
- };
235
- }
236
- render({ aliases, escape, prefix, }) {
237
- let [left, right] = this.values;
238
- left = render(left, { aliases, escape, prefix });
239
- if (right !== undefined) {
240
- right = Array.isArray(right)
241
- ? `(${right
242
- .map((v) => render(v, {
243
- aliases,
244
- escape,
245
- prefix,
246
- normalize: this.normalize,
247
- }))
248
- .join(',')})`
249
- : render(right, {
250
- aliases,
251
- escape,
252
- prefix,
253
- normalize: this.normalize,
254
- });
255
- return `${left} ${this.op} ${right}`;
256
- }
257
- return `${this.op}(${left})`;
258
- }
259
- clone() {
260
- return new Operator(this.op, this.values.map((v) => Objects.clone(v)), this.normalize);
261
- }
262
- }
263
- export class LogicalOperators {
264
- eq(left, right, normalize) {
265
- return new Operator('eq', [left, right], normalize);
266
- }
267
- ne(left, right, normalize) {
268
- return new Operator('ne', [left, right], normalize);
269
- }
270
- gt(left, right, normalize) {
271
- return new Operator('gt', [left, right], normalize);
272
- }
273
- ge(left, right, normalize) {
274
- return new Operator('ge', [left, right], normalize);
275
- }
276
- lt(left, right, normalize) {
277
- return new Operator('lt', [left, right], normalize);
278
- }
279
- le(left, right, normalize) {
280
- return new Operator('le', [left, right], normalize);
281
- }
282
- /*
283
- and(left: any, right: any, normalize?: boolean) {
284
- return new Operator('and', [left, right], normalize);
285
- }
286
- or(left: any, right: any, normalize?: boolean) {
287
- return new Operator('or', [left, right], normalize);
288
- }
289
- */
290
- not(value, normalize) {
291
- return new Operator('not', [value], normalize);
292
- }
293
- has(left, right, normalize) {
294
- return new Operator('has', [left, right], normalize);
295
- }
296
- in(left, right, normalize) {
297
- return new Operator('in', [left, right], normalize);
298
- }
299
- }
300
- export class ArithmeticOperators {
301
- add(left, right, normalize) {
302
- return new Operator('add', [left, right], normalize);
303
- }
304
- sub(left, right, normalize) {
305
- return new Operator('sub', [left, right], normalize);
306
- }
307
- mul(left, right, normalize) {
308
- return new Operator('mul', [left, right], normalize);
309
- }
310
- div(left, right, normalize) {
311
- return new Operator('div', [left, right], normalize);
312
- }
313
- mod(left, right, normalize) {
314
- return new Operator('mod', [left, right], normalize);
315
- }
316
- neg(value, normalize) {
317
- return new Operator('-', [value], normalize);
318
- }
319
- }
320
- export class Grouping {
321
- constructor(group) {
322
- this.group = group;
323
- }
324
- get [Symbol.toStringTag]() {
325
- return 'Grouping';
326
- }
327
- toJSON() {
328
- return {
329
- $type: Types.rawType(this),
330
- group: this.group.toJSON(),
331
- };
332
- }
333
- render({ aliases, escape, prefix, }) {
334
- return `(${render(this.group, { aliases, escape, prefix })})`;
335
- }
336
- clone() {
337
- return new Grouping(Objects.clone(this.group));
338
- }
339
- }
340
- export class Lambda {
341
- constructor(op, values, alias) {
342
- this.op = op;
343
- this.values = values;
344
- this.alias = alias;
345
- }
346
- get [Symbol.toStringTag]() {
347
- return 'Lambda';
348
- }
349
- toJSON() {
350
- return {
351
- $type: Types.rawType(this),
352
- op: this.op,
353
- values: this.values,
354
- alias: this.alias,
355
- };
356
- }
357
- render({ aliases, escape, prefix, }) {
358
- let [left, right] = this.values;
359
- left = render(left, { aliases, escape, prefix });
360
- if (right) {
361
- let alias = this.alias || left.split('/').pop().toLowerCase()[0];
362
- return `${left}/${this.op}(${alias}:${render(right, {
363
- aliases,
364
- escape,
365
- prefix: alias,
366
- })})`;
367
- }
368
- else {
369
- return `${left}/${this.op}()`;
370
- }
371
- }
372
- clone() {
373
- return new Lambda(this.op, this.values.map((v) => Objects.clone(v)), this.alias);
374
- }
375
- }
376
- export class LambdaOperators {
377
- any(field, value, alias) {
378
- return new Lambda('any', [field, value], alias);
379
- }
380
- all(field, value, alias) {
381
- return new Lambda('all', [field, value], alias);
382
- }
383
- }
384
- export class ODataOperators {
385
- }
386
- applyMixins(ODataOperators, [
387
- LogicalOperators,
388
- ArithmeticOperators,
389
- LambdaOperators,
390
- ]);
391
- export const operators = new ODataOperators();
392
- export class ODataFunctions {
393
- }
394
- applyMixins(ODataFunctions, [
395
- StringAndCollectionFunctions,
396
- CollectionFunctions,
397
- StringFunctions,
398
- DateAndTimeFunctions,
399
- ArithmeticFunctions,
400
- TypeFunctions,
401
- GeoFunctions,
402
- ConditionalFunctions,
403
- ]);
404
- export const functions = new ODataFunctions();
405
- export class ODataSyntax {
406
- }
407
- applyMixins(ODataSyntax, [ODataOperators, ODataFunctions]);
408
- export const syntax = new ODataSyntax();
409
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ludGF4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy9xdWVyeS9leHByZXNzaW9ucy9zeW50YXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBaUI1QyxNQUFNLE9BQU8sS0FBSztJQUNoQixZQUFtQixPQUFlLEVBQUU7UUFBakIsU0FBSSxHQUFKLElBQUksQ0FBYTtJQUFHLENBQUM7SUFFeEMsTUFBTSxDQUFDLE9BQU8sQ0FBbUIsT0FBZSxFQUFFO1FBQ2hELE9BQU8sSUFBSSxLQUFLLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFPLEVBQUUsSUFBSSxLQUFLLEVBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxHQUFHLENBQUMsTUFBUyxFQUFFLEdBQW9CO1FBQ2pDLElBQUksSUFBSSxHQUFJLE1BQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxJQUFJLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDcEIsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUF1QixFQUFFLEVBQUUsQ0FDekMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQ3ZDO2FBQU0sSUFBSSxHQUFHLEtBQUssT0FBTyxFQUFFO1lBQzFCLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsQzthQUFNLElBQUksR0FBRyxLQUFLLE1BQU0sQ0FBQyxXQUFXLEVBQUU7WUFDckMsT0FBTyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUM7U0FDdEI7YUFBTSxJQUFJLEdB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S0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxHQUFHLENBQUMsS0FBUSxFQUFFLEtBQVUsRUFBRSxLQUFjO1FBQ3RDLE9BQU8sSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xELENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxjQUFjO0NBQU07QUFNakMsV0FBVyxDQUFDLGNBQWMsRUFBRTtJQUMxQixnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLGVBQWU7Q0FDaEIsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUF3QixJQUFJLGNBQWMsRUFBTyxDQUFDO0FBRXhFLE1BQU0sT0FBTyxjQUFjO0NBQU07QUFXakMsV0FBVyxDQUFDLGNBQWMsRUFBRTtJQUMxQiw0QkFBNEI7SUFDNUIsbUJBQW1CO0lBQ25CLGVBQWU7SUFDZixvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLGFBQWE7SUFDYixZQUFZO0lBQ1osb0JBQW9CO0NBQ3JCLENBQUMsQ0FBQztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBd0IsSUFBSSxjQUFjLEVBQU8sQ0FBQztBQUV4RSxNQUFNLE9BQU8sV0FBVztDQUFNO0FBRTlCLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQztBQUUzRCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQXFCLElBQUksV0FBVyxFQUFPLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYmplY3RzLCBUeXBlcyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUXVlcnlDdXN0b21UeXBlIH0gZnJvbSAnLi4vYnVpbGRlcic7XG5pbXBvcnQgeyBub3JtYWxpemVWYWx1ZSB9IGZyb20gJy4uL2J1aWxkZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlbmRlcmFibGUge1xuICByZW5kZXIoe1xuICAgIGFsaWFzZXMsXG4gICAgZXNjYXBlLFxuICAgIHByZWZpeCxcbiAgfToge1xuICAgIGFsaWFzZXM/OiBRdWVyeUN1c3RvbVR5cGVbXTtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgfSk6IHN0cmluZztcbiAgdG9TdHJpbmcoKTogc3RyaW5nO1xuICB0b0pTT04oKTogYW55O1xuICBjbG9uZSgpOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBGaWVsZDxUIGV4dGVuZHMgb2JqZWN0PiBpbXBsZW1lbnRzIFByb3h5SGFuZGxlcjxUPiB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcgPSAnJykge31cblxuICBzdGF0aWMgZmFjdG9yeTxUIGV4dGVuZHMgb2JqZWN0PihuYW1lOiBzdHJpbmcgPSAnJykge1xuICAgIHJldHVybiBuZXcgUHJveHkoeyBfbmFtZTogbmFtZSB9IGFzIFQsIG5ldyBGaWVsZDxUPigpKTtcbiAgfVxuXG4gIGdldCh0YXJnZXQ6IFQsIGtleTogc3RyaW5nIHwgc3ltYm9sKTogYW55IHtcbiAgICBsZXQgbmFtZSA9ICh0YXJnZXQgYXMgYW55KVsnX25hbWUnXTtcbiAgICBpZiAoa2V5ID09PSAncmVuZGVyJykge1xuICAgICAgcmV0dXJuICh7IHByZWZpeCB9OiB7IHByZWZpeD86IHN0cmluZyB9KSA9PlxuICAgICAgICBwcmVmaXggPyBgJHtwcmVmaXh9LyR7bmFtZX1gIDogbmFtZTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2Nsb25lJykge1xuICAgICAgcmV0dXJuICgpID0+IEZpZWxkLmZhY3RvcnkobmFtZSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09IFN5bWJvbC50b1N0cmluZ1RhZykge1xuICAgICAgcmV0dXJuICgpID0+ICdGaWVsZCc7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICd0b0pTT04nKSB7XG4gICAgICByZXR1cm4gKCkgPT4gKHtcbiAgICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZSA9IG5hbWUgPyBgJHtuYW1lfS8ke2tleSBhcyBzdHJpbmd9YCA6IGtleTtcbiAgICAgIHJldHVybiBuZXcgUHJveHkoeyBfbmFtZTogbmFtZSB9IGFzIGFueSwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgaGFzKHRhcmdldDogVCwga2V5OiBzdHJpbmcpOiBhbnkge1xuICAgIHJldHVybiBbJ3RvSlNPTicsICdjbG9uZScsICdyZW5kZXInXS5pbmNsdWRlcyhrZXkpIHx8IGtleSBpbiB0YXJnZXQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXBwbHlNaXhpbnMoZGVyaXZlZEN0b3I6IGFueSwgY29uc3RydWN0b3JzOiBhbnlbXSkge1xuICBjb25zdHJ1Y3RvcnMuZm9yRWFjaCgoYmFzZUN0b3IpID0+IHtcbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiYXNlQ3Rvci5wcm90b3R5cGUpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShcbiAgICAgICAgZGVyaXZlZEN0b3IucHJvdG90eXBlLFxuICAgICAgICBuYW1lLFxuICAgICAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGJhc2VDdG9yLnByb3RvdHlwZSwgbmFtZSkgfHxcbiAgICAgICAgICBPYmplY3QuY3JlYXRlKG51bGwpXG4gICAgICApO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcihcbiAgdmFsdWU6IGFueSxcbiAge1xuICAgIGFsaWFzZXMsXG4gICAgbm9ybWFsaXplLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgbm9ybWFsaXplPzogYm9vbGVhbjtcbiAgICBlc2NhcGU/OiBib29sZWFuO1xuICAgIHByZWZpeD86IHN0cmluZztcbiAgfSA9IHt9XG4pOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgbnVsbCB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gcmVuZGVyKHZhbHVlKHN5bnRheCksIHsgYWxpYXNlcywgbm9ybWFsaXplLCBwcmVmaXggfSk7XG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHZhbHVlLnJlbmRlciAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIHJldHVybiByZW5kZXIodmFsdWUucmVuZGVyKHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSksIHtcbiAgICAgIGFsaWFzZXMsXG4gICAgICBub3JtYWxpemUsXG4gICAgICBlc2NhcGUsXG4gICAgICBwcmVmaXgsXG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZSA/IG5vcm1hbGl6ZVZhbHVlKHZhbHVlLCB7IGFsaWFzZXMsIGVzY2FwZSB9KSA6IHZhbHVlO1xufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb248VD4gaW1wbGVtZW50cyBSZW5kZXJhYmxlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIG5hbWU6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmFsdWVzOiBhbnlbXSxcbiAgICBwcm90ZWN0ZWQgbm9ybWFsaXplOiBib29sZWFuID0gdHJ1ZSxcbiAgICBwcm90ZWN0ZWQgZXNjYXBlOiBib29sZWFuID0gZmFsc2VcbiAgKSB7fVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSgpIHtcbiAgICByZXR1cm4gJ0Z1bmN0aW9uJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICB2YWx1ZXM6IHRoaXMudmFsdWVzLFxuICAgICAgbm9ybWFsaXplOiB0aGlzLm5vcm1hbGl6ZSxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pOiBzdHJpbmcge1xuICAgIGxldCBbZmllbGQsIC4uLnZhbHVlc10gPSB0aGlzLnZhbHVlcztcblxuICAgIGZpZWxkID0gcmVuZGVyKGZpZWxkLCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pO1xuICAgIGNvbnN0IHBhcmFtcyA9IFtcbiAgICAgIGZpZWxkLFxuICAgICAgLi4udmFsdWVzLm1hcCgodikgPT5cbiAgICAgICAgcmVuZGVyKHYsIHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXgsIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUgfSlcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gYCR7dGhpcy5uYW1lfSgke3BhcmFtcy5qb2luKCcsICcpfSlgO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPihcbiAgICAgIHRoaXMubmFtZSxcbiAgICAgIHRoaXMudmFsdWVzLm1hcCgodikgPT4gT2JqZWN0cy5jbG9uZSh2KSksXG4gICAgICB0aGlzLm5vcm1hbGl6ZSxcbiAgICAgIHRoaXMuZXNjYXBlXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nQW5kQ29sbGVjdGlvbkZ1bmN0aW9uczxUPiB7XG4gIGNvbmNhdChmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY29uY2F0JywgW2ZpZWxkLCB2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cblxuICBjb250YWlucyhmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignY29udGFpbnMnLCBbZmllbGQsIHZhbHVlXSwgbm9ybWFsaXplKTtcbiAgfVxuXG4gIGVuZHNXaXRoKGZpZWxkOiBhbnksIHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdlbmRzd2l0aCcsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgaW5kZXhPZihmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaW5kZXhvZicsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgbGVuZ3RoKHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdsZW5ndGgnLCBbdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgc3RhcnRzV2l0aChmaWVsZDogYW55LCB2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignc3RhcnRzd2l0aCcsIFtmaWVsZCwgdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG5cbiAgc3ViU3RyaW5nKGZpZWxkOiBhbnksIHN0YXJ0OiBudW1iZXIsIGxlbmd0aD86IG51bWJlcikge1xuICAgIGxldCB2YWx1ZXMgPSBbZmllbGQsIHN0YXJ0XTtcbiAgICBpZiAobGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbHVlcy5wdXNoKGxlbmd0aCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3N1YnN0cmluZycsIHZhbHVlcyk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbGxlY3Rpb25GdW5jdGlvbnM8VD4ge1xuICBoYXNTdWJzZXQoczE6IFQsIHMyOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdoYXNzdWJzZXQnLCBbczEsIHMyXSk7XG4gIH1cbiAgaGFzU3Vic2VxdWVuY2UoczE6IFQsIHMyOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdoYXNzdWJzZXF1ZW5jZScsIFtzMSwgczJdKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU3RyaW5nRnVuY3Rpb25zPFQ+IHtcbiAgbWF0Y2hlc1BhdHRlcm4odmFsdWU6IFQgfCBzdHJpbmcsIHBhdHRlcm46IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21hdGNoZXNQYXR0ZXJuJywgW3ZhbHVlLCBwYXR0ZXJuXSk7XG4gIH1cbiAgdG9Mb3dlcih2YWx1ZTogVCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvbG93ZXInLCBbdmFsdWVdKTtcbiAgfVxuICB0b1VwcGVyKHZhbHVlOiBUKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG91cHBlcicsIFt2YWx1ZV0pO1xuICB9XG4gIHRyaW0odmFsdWU6IFQpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCd0cmltJywgW3ZhbHVlXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERhdGVBbmRUaW1lRnVuY3Rpb25zPFQ+IHtcbiAgZGF0ZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZGF0ZScsIFt2YWx1ZV0pO1xuICB9XG4gIGRheSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZGF5JywgW3ZhbHVlXSk7XG4gIH1cbiAgZnJhY3Rpb25hbHNlY29uZHModmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2ZyYWN0aW9uYWxzZWNvbmRzJywgW3ZhbHVlXSk7XG4gIH1cbiAgaG91cih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignaG91cicsIFt2YWx1ZV0pO1xuICB9XG4gIG1heGRhdGV0aW1lKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtYXhkYXRldGltZScsIFt2YWx1ZV0pO1xuICB9XG4gIG1pbmRhdGV0aW1lKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdtaW5kYXRldGltZScsIFt2YWx1ZV0pO1xuICB9XG4gIG1pbnV0ZSh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignbWludXRlJywgW3ZhbHVlXSk7XG4gIH1cbiAgbW9udGgodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ21vbnRoJywgW3ZhbHVlXSk7XG4gIH1cbiAgbm93KCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ25vdycsIFtdKTtcbiAgfVxuICBzZWNvbmQodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3NlY29uZCcsIFt2YWx1ZV0pO1xuICB9XG4gIHRpbWUodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RpbWUnLCBbdmFsdWVdKTtcbiAgfVxuICB0b3RhbG9mZnNldG1pbnV0ZXModmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ3RvdGFsb2Zmc2V0bWludXRlcycsIFt2YWx1ZV0pO1xuICB9XG4gIHRvdGFsc2Vjb25kcyh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigndG90YWxzZWNvbmRzJywgW3ZhbHVlXSk7XG4gIH1cbiAgeWVhcih2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPigneWVhcicsIFt2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBcml0aG1ldGljRnVuY3Rpb25zPFQ+IHtcbiAgY2VpbGluZyh2YWx1ZTogVCB8IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2NlaWxpbmcnLCBbdmFsdWVdKTtcbiAgfVxuICBmbG9vcih2YWx1ZTogVCB8IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2Zsb29yJywgW3ZhbHVlXSk7XG4gIH1cbiAgcm91bmQodmFsdWU6IFQgfCBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdyb3VuZCcsIFt2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUeXBlRnVuY3Rpb25zPFQ+IHtcbiAgY2FzdCh2YWx1ZTogVCB8IHN0cmluZywgdHlwZT86IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2Nhc3QnLCBbdmFsdWUsIHR5cGVdKTtcbiAgfVxuXG4gIGlzb2YodmFsdWU6IFQgfCBzdHJpbmcsIHR5cGU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uPFQ+KCdpc29mJywgW3ZhbHVlLCB0eXBlXSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdlb0Z1bmN0aW9uczxUPiB7XG4gIGdlb0Rpc3RhbmNlKHZhbHVlOiBULCBwb2ludDogc3RyaW5nLCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZ2VvLmRpc3RhbmNlJywgW3ZhbHVlLCBwb2ludF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgZ2VvSW50ZXJzZWN0cyh2YWx1ZTogVCwgcG9seWdvbjogc3RyaW5nLCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZ2VvLmludGVyc2VjdHMnLCBbdmFsdWUsIHBvbHlnb25dLCBub3JtYWxpemUpO1xuICB9XG4gIGdlb0xlbmd0aChsaW5lOiBULCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbjxUPignZ2VvLmxlbmd0aCcsIFtsaW5lXSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uZGl0aW9uYWxGdW5jdGlvbnM8VD4ge1xuICBjYXNlKGNvbmRpdGlvbjogVCB8IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb248VD4oJ2Nhc2UnLCBbY29uZGl0aW9uLCB2YWx1ZV0pO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPcGVyYXRvcjxUPiBpbXBsZW1lbnRzIFJlbmRlcmFibGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgb3A6IHN0cmluZyxcbiAgICBwcm90ZWN0ZWQgdmFsdWVzOiBhbnlbXSxcbiAgICBwcm90ZWN0ZWQgbm9ybWFsaXplOiBib29sZWFuID0gdHJ1ZVxuICApIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnT3BlcmF0b3InO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdHlwZTogVHlwZXMucmF3VHlwZSh0aGlzKSxcbiAgICAgIG9wOiB0aGlzLm9wLFxuICAgICAgdmFsdWVzOiB0aGlzLnZhbHVlcyxcbiAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICBsZXQgW2xlZnQsIHJpZ2h0XSA9IHRoaXMudmFsdWVzO1xuXG4gICAgbGVmdCA9IHJlbmRlcihsZWZ0LCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pO1xuICAgIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByaWdodCA9IEFycmF5LmlzQXJyYXkocmlnaHQpXG4gICAgICAgID8gYCgke3JpZ2h0XG4gICAgICAgICAgICAubWFwKCh2KSA9PlxuICAgICAgICAgICAgICByZW5kZXIodiwge1xuICAgICAgICAgICAgICAgIGFsaWFzZXMsXG4gICAgICAgICAgICAgICAgZXNjYXBlLFxuICAgICAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgICAgICBub3JtYWxpemU6IHRoaXMubm9ybWFsaXplLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmpvaW4oJywnKX0pYFxuICAgICAgICA6IHJlbmRlcihyaWdodCwge1xuICAgICAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgICAgIGVzY2FwZSxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIG5vcm1hbGl6ZTogdGhpcy5ub3JtYWxpemUsXG4gICAgICAgICAgfSk7XG4gICAgICByZXR1cm4gYCR7bGVmdH0gJHt0aGlzLm9wfSAke3JpZ2h0fWA7XG4gICAgfVxuICAgIHJldHVybiBgJHt0aGlzLm9wfSgke2xlZnR9KWA7XG4gIH1cblxuICBjbG9uZSgpIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKFxuICAgICAgdGhpcy5vcCxcbiAgICAgIHRoaXMudmFsdWVzLm1hcCgodikgPT4gT2JqZWN0cy5jbG9uZSh2KSksXG4gICAgICB0aGlzLm5vcm1hbGl6ZVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIExvZ2ljYWxPcGVyYXRvcnM8VD4ge1xuICBlcShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdlcScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbmUobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbmUnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGd0KGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2d0JywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBnZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdnZScsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgbHQobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignbHQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGxlKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2xlJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICAvKlxuICBhbmQobGVmdDogYW55LCByaWdodDogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignYW5kJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxuICBvcihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdvcicsIFtsZWZ0LCByaWdodF0sIG5vcm1hbGl6ZSk7XG4gIH1cbiAgKi9cbiAgbm90KHZhbHVlOiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yPFQ+KCdub3QnLCBbdmFsdWVdLCBub3JtYWxpemUpO1xuICB9XG4gIGhhcyhsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdoYXMnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGluKGxlZnQ6IGFueSwgcmlnaHQ6IGFueSwgbm9ybWFsaXplPzogYm9vbGVhbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3IoJ2luJywgW2xlZnQsIHJpZ2h0XSwgbm9ybWFsaXplKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXJpdGhtZXRpY09wZXJhdG9yczxUPiB7XG4gIGFkZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yPFQ+KCdhZGQnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIHN1YihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdzdWInLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG11bChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdtdWwnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIGRpdihsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdkaXYnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG1vZChsZWZ0OiBhbnksIHJpZ2h0OiBhbnksIG5vcm1hbGl6ZT86IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yKCdtb2QnLCBbbGVmdCwgcmlnaHRdLCBub3JtYWxpemUpO1xuICB9XG4gIG5lZyh2YWx1ZTogYW55LCBub3JtYWxpemU/OiBib29sZWFuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvcignLScsIFt2YWx1ZV0sIG5vcm1hbGl6ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEdyb3VwaW5nPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBncm91cDogUmVuZGVyYWJsZSkge31cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdHcm91cGluZyc7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICR0eXBlOiBUeXBlcy5yYXdUeXBlKHRoaXMpLFxuICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXAudG9KU09OKCksXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7XG4gICAgYWxpYXNlcyxcbiAgICBlc2NhcGUsXG4gICAgcHJlZml4LFxuICB9OiB7XG4gICAgYWxpYXNlcz86IFF1ZXJ5Q3VzdG9tVHlwZVtdO1xuICAgIGVzY2FwZT86IGJvb2xlYW47XG4gICAgcHJlZml4Pzogc3RyaW5nO1xuICB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCgke3JlbmRlcih0aGlzLmdyb3VwLCB7IGFsaWFzZXMsIGVzY2FwZSwgcHJlZml4IH0pfSlgO1xuICB9XG5cbiAgY2xvbmUoKSB7XG4gICAgcmV0dXJuIG5ldyBHcm91cGluZyhPYmplY3RzLmNsb25lKHRoaXMuZ3JvdXApKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhPFQ+IGltcGxlbWVudHMgUmVuZGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBvcDogc3RyaW5nLFxuICAgIHByb3RlY3RlZCB2YWx1ZXM6IGFueVtdLFxuICAgIHByb3RlY3RlZCBhbGlhcz86IHN0cmluZ1xuICApIHt9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnTGFtYmRhJztcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHR5cGU6IFR5cGVzLnJhd1R5cGUodGhpcyksXG4gICAgICBvcDogdGhpcy5vcCxcbiAgICAgIHZhbHVlczogdGhpcy52YWx1ZXMsXG4gICAgICBhbGlhczogdGhpcy5hbGlhcyxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHtcbiAgICBhbGlhc2VzLFxuICAgIGVzY2FwZSxcbiAgICBwcmVmaXgsXG4gIH06IHtcbiAgICBhbGlhc2VzPzogUXVlcnlDdXN0b21UeXBlW107XG4gICAgZXNjYXBlPzogYm9vbGVhbjtcbiAgICBwcmVmaXg/OiBzdHJpbmc7XG4gIH0pOiBzdHJpbmcge1xuICAgIGxldCBbbGVmdCwgcmlnaHRdID0gdGhpcy52YWx1ZXM7XG5cbiAgICBsZWZ0ID0gcmVuZGVyKGxlZnQsIHsgYWxpYXNlcywgZXNjYXBlLCBwcmVmaXggfSk7XG4gICAgaWYgKHJpZ2h0KSB7XG4gICAgICBsZXQgYWxpYXMgPSB0aGlzLmFsaWFzIHx8IGxlZnQuc3BsaXQoJy8nKS5wb3AoKS50b0xvd2VyQ2FzZSgpWzBdO1xuICAgICAgcmV0dXJuIGAke2xlZnR9LyR7dGhpcy5vcH0oJHthbGlhc306JHtyZW5kZXIocmlnaHQsIHtcbiAgICAgICAgYWxpYXNlcyxcbiAgICAgICAgZXNjYXBlLFxuICAgICAgICBwcmVmaXg6IGFsaWFzLFxuICAgICAgfSl9KWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBgJHtsZWZ0fS8ke3RoaXMub3B9KClgO1xuICAgIH1cbiAgfVxuXG4gIGNsb25lKCkge1xuICAgIHJldHVybiBuZXcgTGFtYmRhKFxuICAgICAgdGhpcy5vcCxcbiAgICAgIHRoaXMudmFsdWVzLm1hcCgodikgPT4gT2JqZWN0cy5jbG9uZSh2KSksXG4gICAgICB0aGlzLmFsaWFzXG4gICAgKTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTGFtYmRhT3BlcmF0b3JzPFQ+IHtcbiAgYW55KGZpZWxkOiBULCB2YWx1ZTogYW55LCBhbGlhcz86IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTGFtYmRhKCdhbnknLCBbZmllbGQsIHZhbHVlXSwgYWxpYXMpO1xuICB9XG5cbiAgYWxsKGZpZWxkOiBULCB2YWx1ZTogYW55LCBhbGlhcz86IHN0cmluZykge1xuICAgIHJldHVybiBuZXcgTGFtYmRhKCdhbGwnLCBbZmllbGQsIHZhbHVlXSwgYWxpYXMpO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBPRGF0YU9wZXJhdG9yczxUPiB7fVxuZXhwb3J0IGludGVyZmFjZSBPRGF0YU9wZXJhdG9yczxUPlxuICBleHRlbmRzIExvZ2ljYWxPcGVyYXRvcnM8VD4sXG4gICAgQXJpdGhtZXRpY09wZXJhdG9yczxUPixcbiAgICBMYW1iZGFPcGVyYXRvcnM8VD4ge31cblxuYXBwbHlNaXhpbnMoT0RhdGFPcGVyYXRvcnMsIFtcbiAgTG9naWNhbE9wZXJhdG9ycyxcbiAgQXJpdGhtZXRpY09wZXJhdG9ycyxcbiAgTGFtYmRhT3BlcmF0b3JzLFxuXSk7XG5leHBvcnQgY29uc3Qgb3BlcmF0b3JzOiBPRGF0YU9wZXJhdG9yczxhbnk+ID0gbmV3IE9EYXRhT3BlcmF0b3JzPGFueT4oKTtcblxuZXhwb3J0IGNsYXNzIE9EYXRhRnVuY3Rpb25zPFQ+IHt9XG5leHBvcnQgaW50ZXJmYWNlIE9EYXRhRnVuY3Rpb25zPFQ+XG4gIGV4dGVuZHMgU3RyaW5nQW5kQ29sbGVjdGlvbkZ1bmN0aW9uczxUPixcbiAgICBDb2xsZWN0aW9uRnVuY3Rpb25zPFQ+LFxuICAgIFN0cmluZ0Z1bmN0aW9uczxUPixcbiAgICBEYXRlQW5kVGltZUZ1bmN0aW9uczxUPixcbiAgICBBcml0aG1ldGljRnVuY3Rpb25zPFQ+LFxuICAgIFR5cGVGdW5jdGlvbnM8VD4sXG4gICAgR2VvRnVuY3Rpb25zPFQ+LFxuICAgIENvbmRpdGlvbmFsRnVuY3Rpb25zPFQ+IHt9XG5cbmFwcGx5TWl4aW5zKE9EYXRhRnVuY3Rpb25zLCBbXG4gIFN0cmluZ0FuZENvbGxlY3Rpb25GdW5jdGlvbnMsXG4gIENvbGxlY3Rpb25GdW5jdGlvbnMsXG4gIFN0cmluZ0Z1bmN0aW9ucyxcbiAgRGF0ZUFuZFRpbWVGdW5jdGlvbnMsXG4gIEFyaXRobWV0aWNGdW5jdGlvbnMsXG4gIFR5cGVGdW5jdGlvbnMsXG4gIEdlb0Z1bmN0aW9ucyxcbiAgQ29uZGl0aW9uYWxGdW5jdGlvbnMsXG5dKTtcbmV4cG9ydCBjb25zdCBmdW5jdGlvbnM6IE9EYXRhRnVuY3Rpb25zPGFueT4gPSBuZXcgT0RhdGFGdW5jdGlvbnM8YW55PigpO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFTeW50YXg8VD4ge31cbmV4cG9ydCBpbnRlcmZhY2UgT0RhdGFTeW50YXg8VD4gZXh0ZW5kcyBPRGF0YU9wZXJhdG9yczxUPiwgT0RhdGFGdW5jdGlvbnM8VD4ge31cbmFwcGx5TWl4aW5zKE9EYXRhU3ludGF4LCBbT0RhdGFPcGVyYXRvcnMsIE9EYXRhRnVuY3Rpb25zXSk7XG5cbmV4cG9ydCBjb25zdCBzeW50YXg6IE9EYXRhU3ludGF4PGFueT4gPSBuZXcgT0RhdGFTeW50YXg8YW55PigpO1xuIl19