@fgv/ts-utils 1.5.2 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fgv/ts-utils",
3
- "version": "1.5.2",
3
+ "version": "1.6.1",
4
4
  "description": "Assorted Typescript Utilities",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -20,6 +20,9 @@
20
20
  "type": "git",
21
21
  "url": "git+https://github.com/DidjaRedo/ts-utils.git"
22
22
  },
23
+ "publishConfig": {
24
+ "registry": "https://registry.npmjs.org"
25
+ },
23
26
  "keywords": [
24
27
  "typescript",
25
28
  "json"
@@ -32,15 +35,15 @@
32
35
  "homepage": "https://github.com/DidjaRedo/ts-utils#readme",
33
36
  "devDependencies": {
34
37
  "@jest/expect-utils": "^29.3.1",
35
- "@microsoft/api-documenter": "^7.16.0",
38
+ "@microsoft/api-documenter": "^7.19.27",
36
39
  "@microsoft/api-extractor": "^7.19.5",
37
40
  "@types/jest": "^29.2.4",
38
41
  "@types/luxon": "^3.1.0",
39
42
  "@types/mustache": "^4.1.2",
40
- "@types/node": "^18.11.12",
41
- "@typescript-eslint/eslint-plugin": "^5.15.0",
42
- "@typescript-eslint/parser": "^5.15.0",
43
- "eslint": "^8.11.0",
43
+ "@types/node": "^18.11.17",
44
+ "@typescript-eslint/eslint-plugin": "^5.47.0",
45
+ "@typescript-eslint/parser": "^5.47.0",
46
+ "eslint": "^8.30.0",
44
47
  "eslint-config-standard": "^17.0.0-1",
45
48
  "eslint-plugin-import": "^2.24.2",
46
49
  "eslint-plugin-node": "^11.1.0",
@@ -0,0 +1,33 @@
1
+ import { Result } from './result';
2
+ /**
3
+ * Represents a single record in a JAR file
4
+ * @public
5
+ */
6
+ export type JarRecord = Record<string, string | string[]>;
7
+ export type JarFieldPicker<T extends JarRecord = JarRecord> = (record: T) => (keyof T)[];
8
+ /**
9
+ * Options for a JAR record parser.
10
+ * @public
11
+ */
12
+ export interface JarRecordParserOptions {
13
+ readonly arrayFields?: string[] | JarFieldPicker;
14
+ }
15
+ /**
16
+ * Reads a record-jar from an array of strings, each of which represents one
17
+ * line in the source file.
18
+ * @param lines - the array of strings to be parsed
19
+ * @param options - Optional parser configuration
20
+ * @returns a corresponding array of `Record<string, string>`
21
+ * @public
22
+ */
23
+ export declare function parseRecordJarLines(lines: string[], options?: JarRecordParserOptions): Result<JarRecord[]>;
24
+ /**
25
+ * Reads a record-jar file from a supplied path.
26
+ * @param srcPath - Source path from which the file is read.
27
+ * @param options - Optional parser configuration
28
+ * @returns The contents of the file as an array of `Record<string, string>`
29
+ * @see https://datatracker.ietf.org/doc/html/draft-phillips-record-jar-01
30
+ * @public
31
+ */
32
+ export declare function readRecordJarFileSync(srcPath: string, options?: JarRecordParserOptions): Result<JarRecord[]>;
33
+ //# sourceMappingURL=recordJarHelpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recordJarHelpers.d.ts","sourceRoot":"","sources":["../src/recordJarHelpers.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,MAAM,EAAgC,MAAM,UAAU,CAAC;AAQhE;;;GAGG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;AAE1D,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;AAEzF;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;CACpD;AAoLD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,CAE1G;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,CAO5G"}
@@ -0,0 +1,243 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2022 Erik Fortune
4
+ *
5
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ * of this software and associated documentation files (the "Software"), to deal
7
+ * in the Software without restriction, including without limitation the rights
8
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ * copies of the Software, and to permit persons to whom the Software is
10
+ * furnished to do so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be included in all
13
+ * copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ * SOFTWARE.
22
+ */
23
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
24
+ if (k2 === undefined) k2 = k;
25
+ var desc = Object.getOwnPropertyDescriptor(m, k);
26
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
27
+ desc = { enumerable: true, get: function() { return m[k]; } };
28
+ }
29
+ Object.defineProperty(o, k2, desc);
30
+ }) : (function(o, m, k, k2) {
31
+ if (k2 === undefined) k2 = k;
32
+ o[k2] = m[k];
33
+ }));
34
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
35
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
36
+ }) : function(o, v) {
37
+ o["default"] = v;
38
+ });
39
+ var __importStar = (this && this.__importStar) || function (mod) {
40
+ if (mod && mod.__esModule) return mod;
41
+ var result = {};
42
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
43
+ __setModuleDefault(result, mod);
44
+ return result;
45
+ };
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.readRecordJarFileSync = exports.parseRecordJarLines = void 0;
48
+ const fs = __importStar(require("fs"));
49
+ const path = __importStar(require("path"));
50
+ const result_1 = require("./result");
51
+ const utils_1 = require("./utils");
52
+ class RecordParser {
53
+ // eslint-disable-next-line @typescript-eslint/no-empty-function
54
+ constructor(options) {
55
+ this.records = [];
56
+ this._fields = {};
57
+ this._name = undefined;
58
+ this._body = undefined;
59
+ this.options = options !== null && options !== void 0 ? options : {};
60
+ }
61
+ static parse(lines, options) {
62
+ return new RecordParser(options)._parse(lines);
63
+ }
64
+ static _parseRecordBody(from, oldBody) {
65
+ let body = `${oldBody !== null && oldBody !== void 0 ? oldBody : ''}${from.trim()}`;
66
+ const isContinuation = body.endsWith('\\');
67
+ if (isContinuation) {
68
+ body = body.slice(0, body.length - 1);
69
+ }
70
+ if (this._hasEscapes(body)) {
71
+ const result = this._replaceEscapes(body);
72
+ if (result.isFailure()) {
73
+ return (0, result_1.fail)(result.message);
74
+ }
75
+ body = result.value;
76
+ }
77
+ return (0, result_1.succeed)({ body, isContinuation });
78
+ }
79
+ static _hasEscapes(from) {
80
+ return from.includes('\\') || from.includes('&');
81
+ }
82
+ static _replaceEscapes(body) {
83
+ const invalid = [];
84
+ const escaped = body.replace(/(\\.)|(&#x[a-fA-F0-9]{2,6};)/g, (match) => {
85
+ switch (match) {
86
+ case '\\\\': return '\\';
87
+ case '\\&': return '&';
88
+ case '\\r': return '\r';
89
+ case '\\n': return '\n';
90
+ case '\\t': return '\t';
91
+ }
92
+ if (match.startsWith('&')) {
93
+ const hexCode = `0x${match.slice(3, match.length - 1)}`;
94
+ const charCode = Number.parseInt(hexCode, 16);
95
+ return String.fromCharCode(charCode);
96
+ }
97
+ invalid.push(match);
98
+ return '\\';
99
+ });
100
+ if (invalid.length > 0) {
101
+ return (0, result_1.fail)(`unrecognized escape "${invalid.join(', ')}" in record-jar body`);
102
+ }
103
+ return (0, result_1.succeed)(escaped);
104
+ }
105
+ static _applyOptions(record, options) {
106
+ if (options.arrayFields) {
107
+ record = { ...record }; // don't edit incoming values
108
+ const arrayFields = Array.isArray(options.arrayFields)
109
+ ? options.arrayFields
110
+ : options.arrayFields(record);
111
+ for (const field of arrayFields) {
112
+ if ((0, utils_1.isKeyOf)(field, record) && typeof record[field] === 'string') {
113
+ const current = record[field];
114
+ record[field] = [current];
115
+ }
116
+ }
117
+ }
118
+ return record;
119
+ }
120
+ _parse(lines) {
121
+ var _a, _b;
122
+ for (let n = 0; n < lines.length; n++) {
123
+ const line = lines[n];
124
+ if (line.startsWith('%%') && !((_a = this._body) === null || _a === void 0 ? void 0 : _a.isContinuation)) {
125
+ const result = this._writePendingRecord();
126
+ if (result.isFailure()) {
127
+ return (0, result_1.fail)(`${n}: ${result.message}`);
128
+ }
129
+ }
130
+ else if (/^\s*$/.test(line)) {
131
+ // ignore blank lines but cancel continuation
132
+ if (this._body) {
133
+ this._body.isContinuation = false;
134
+ }
135
+ continue;
136
+ }
137
+ else if (((_b = this._body) === null || _b === void 0 ? void 0 : _b.isContinuation) || /^\s+/.test(line)) {
138
+ // explicit continuation on previous line or implicit starts with whitespace
139
+ if (this._body === undefined) {
140
+ return (0, result_1.fail)(`${n}: continuation ("${line}") without prior value.`);
141
+ }
142
+ const result = RecordParser._parseRecordBody(line, this._body.body);
143
+ if (result.isFailure()) {
144
+ return (0, result_1.fail)(`${n}: ${result.message}`);
145
+ }
146
+ this._body = result.value;
147
+ }
148
+ else {
149
+ const result = this._parseField(line);
150
+ if (result.isFailure()) {
151
+ return (0, result_1.fail)(`${n}: ${result.message}`);
152
+ }
153
+ }
154
+ }
155
+ const result = this._writePendingRecord();
156
+ if (result.isFailure()) {
157
+ return (0, result_1.fail)(`${lines.length}: ${result.message}`);
158
+ }
159
+ return (0, result_1.succeed)(this.records);
160
+ }
161
+ _parseField(line) {
162
+ const separatorIndex = line.indexOf(':');
163
+ if (separatorIndex < 1) {
164
+ return (0, result_1.fail)(`malformed line ("${line}") in record-jar.`);
165
+ }
166
+ const parts = [
167
+ line.slice(0, separatorIndex),
168
+ line.slice(separatorIndex + 1),
169
+ ];
170
+ return this._writePendingField().onSuccess(() => {
171
+ this._name = parts[0].trimEnd();
172
+ return RecordParser._parseRecordBody(parts[1]).onSuccess((body) => {
173
+ this._body = body;
174
+ return (0, result_1.succeed)(true);
175
+ });
176
+ });
177
+ }
178
+ _havePendingRecord() {
179
+ return Object.keys(this._fields).length > 0;
180
+ }
181
+ _writePendingRecord() {
182
+ return this._writePendingField().onSuccess(() => {
183
+ let record = this._havePendingRecord() ? this._fields : undefined;
184
+ if (record !== undefined) {
185
+ record = RecordParser._applyOptions(record, this.options);
186
+ this.records.push(record);
187
+ this._fields = {};
188
+ }
189
+ return (0, result_1.succeed)(undefined);
190
+ });
191
+ }
192
+ _writePendingField() {
193
+ if (this._name !== undefined) {
194
+ if (this._body.body.length < 1) {
195
+ return (0, result_1.fail)('empty body value not allowed');
196
+ }
197
+ if (!(0, utils_1.isKeyOf)(this._name, this._fields)) {
198
+ this._fields[this._name] = this._body.body;
199
+ }
200
+ else if (typeof this._fields[this._name] === 'string') {
201
+ const current = this._fields[this._name];
202
+ this._fields[this._name] = [current, this._body.body];
203
+ }
204
+ else {
205
+ const current = this._fields[this._name];
206
+ current.push(this._body.body);
207
+ }
208
+ this._name = undefined;
209
+ this._body = undefined;
210
+ }
211
+ return (0, result_1.succeed)(true);
212
+ }
213
+ }
214
+ /**
215
+ * Reads a record-jar from an array of strings, each of which represents one
216
+ * line in the source file.
217
+ * @param lines - the array of strings to be parsed
218
+ * @param options - Optional parser configuration
219
+ * @returns a corresponding array of `Record<string, string>`
220
+ * @public
221
+ */
222
+ function parseRecordJarLines(lines, options) {
223
+ return RecordParser.parse(lines, options);
224
+ }
225
+ exports.parseRecordJarLines = parseRecordJarLines;
226
+ /**
227
+ * Reads a record-jar file from a supplied path.
228
+ * @param srcPath - Source path from which the file is read.
229
+ * @param options - Optional parser configuration
230
+ * @returns The contents of the file as an array of `Record<string, string>`
231
+ * @see https://datatracker.ietf.org/doc/html/draft-phillips-record-jar-01
232
+ * @public
233
+ */
234
+ function readRecordJarFileSync(srcPath, options) {
235
+ return (0, result_1.captureResult)(() => {
236
+ const fullPath = path.resolve(srcPath);
237
+ return fs.readFileSync(fullPath, 'utf8').toString().split(/\r?\n/);
238
+ }).onSuccess((lines) => {
239
+ return parseRecordJarLines(lines, options);
240
+ });
241
+ }
242
+ exports.readRecordJarFileSync = readRecordJarFileSync;
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkSmFySGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWNvcmRKYXJIZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUgsdUNBQXlCO0FBQ3pCLDJDQUE2QjtBQUU3QixxQ0FBZ0U7QUFDaEUsbUNBQWtDO0FBdUJsQyxNQUFNLFlBQVk7SUFRZCxnRUFBZ0U7SUFDaEUsWUFBb0IsT0FBZ0M7UUFScEMsWUFBTyxHQUFnQixFQUFFLENBQUM7UUFHaEMsWUFBTyxHQUFjLEVBQUUsQ0FBQztRQUN4QixVQUFLLEdBQXVCLFNBQVMsQ0FBQztRQUN0QyxVQUFLLEdBQTJCLFNBQVMsQ0FBQztRQUloRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sYUFBUCxPQUFPLGNBQVAsT0FBTyxHQUFJLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFlLEVBQUUsT0FBZ0M7UUFDakUsT0FBTyxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVTLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsT0FBZ0I7UUFDNUQsSUFBSSxJQUFJLEdBQUcsR0FBRyxPQUFPLGFBQVAsT0FBTyxjQUFQLE9BQU8sR0FBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDNUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQyxJQUFJLGNBQWMsRUFBRTtZQUNoQixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN6QztRQUNELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFDLElBQUksTUFBTSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUNwQixPQUFPLElBQUEsYUFBSSxFQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMvQjtZQUNELElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxJQUFBLGdCQUFPLEVBQUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRVMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFZO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFUyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQVk7UUFDekMsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO1FBQzdCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsK0JBQStCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNwRSxRQUFRLEtBQUssRUFBRTtnQkFDWCxLQUFLLE1BQU0sQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDO2dCQUN6QixLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sR0FBRyxDQUFDO2dCQUN2QixLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDO2dCQUN4QixLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDO2dCQUN4QixLQUFLLEtBQUssQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDO2FBQzNCO1lBQ0QsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN2QixNQUFNLE9BQU8sR0FBRyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzlDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUN4QztZQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sSUFBQSxhQUFJLEVBQUMsd0JBQXdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7U0FDakY7UUFDRCxPQUFPLElBQUEsZ0JBQU8sRUFBQyxPQUFPLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRVMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFpQixFQUFFLE9BQStCO1FBQzdFLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUNyQixNQUFNLEdBQUcsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUMsNkJBQTZCO1lBQ3JELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztnQkFDbEQsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXO2dCQUNyQixDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVsQyxLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVcsRUFBRTtnQkFDN0IsSUFBSSxJQUFBLGVBQU8sRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLElBQUksT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssUUFBUSxFQUFFO29CQUM3RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFXLENBQUM7b0JBQ3hDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUM3QjthQUNKO1NBQ0o7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRVMsTUFBTSxDQUFDLEtBQWU7O1FBQzVCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25DLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsY0FBYyxDQUFBLEVBQUU7Z0JBQ3RELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDcEIsT0FBTyxJQUFBLGFBQUksRUFBQyxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztpQkFDMUM7YUFDSjtpQkFDSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3pCLDZDQUE2QztnQkFDN0MsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO29CQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztpQkFDckM7Z0JBQ0QsU0FBUzthQUNaO2lCQUNJLElBQUksQ0FBQSxNQUFBLElBQUksQ0FBQyxLQUFLLDBDQUFFLGNBQWMsS0FBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN0RCw0RUFBNEU7Z0JBQzVFLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxTQUFTLEVBQUU7b0JBQzFCLE9BQU8sSUFBQSxhQUFJLEVBQUMsR0FBRyxDQUFDLG9CQUFvQixJQUFJLHlCQUF5QixDQUFDLENBQUM7aUJBQ3RFO2dCQUNELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDcEUsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUU7b0JBQ3BCLE9BQU8sSUFBQSxhQUFJLEVBQUMsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7aUJBQzFDO2dCQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzthQUM3QjtpQkFDSTtnQkFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRTtvQkFDcEIsT0FBTyxJQUFBLGFBQUksRUFBQyxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztpQkFDMUM7YUFDSjtTQUNKO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDMUMsSUFBSSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDcEIsT0FBTyxJQUFBLGFBQUksRUFBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7U0FDckQ7UUFDRCxPQUFPLElBQUEsZ0JBQU8sRUFBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVTLFdBQVcsQ0FBQyxJQUFZO1FBQzlCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekMsSUFBSSxjQUFjLEdBQUcsQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sSUFBQSxhQUFJLEVBQUMsb0JBQW9CLElBQUksbUJBQW1CLENBQUMsQ0FBQztTQUM1RDtRQUNELE1BQU0sS0FBSyxHQUFHO1lBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDO1lBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztTQUNqQyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzVDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLE9BQU8sWUFBWSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUM5RCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDbEIsT0FBTyxJQUFBLGdCQUFPLEVBQUMsSUFBSSxDQUFDLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUyxrQkFBa0I7UUFDeEIsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFUyxtQkFBbUI7UUFDekIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzVDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7WUFDbEUsSUFBSSxNQUFNLEtBQUssU0FBUyxFQUFFO2dCQUN0QixNQUFNLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7YUFDckI7WUFDRCxPQUFPLElBQUEsZ0JBQU8sRUFBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFUyxrQkFBa0I7UUFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUMxQixJQUFJLElBQUksQ0FBQyxLQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQzdCLE9BQU8sSUFBQSxhQUFJLEVBQUMsOEJBQThCLENBQUMsQ0FBQzthQUMvQztZQUNELElBQUksQ0FBQyxJQUFBLGVBQU8sRUFBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQU0sQ0FBQyxJQUFJLENBQUM7YUFDL0M7aUJBQ0ksSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDbkQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFXLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDMUQ7aUJBQ0k7Z0JBQ0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFhLENBQUM7Z0JBQ3JELE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNsQztZQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxJQUFBLGdCQUFPLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztDQUNKO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLEtBQWUsRUFBRSxPQUFnQztJQUNqRixPQUFPLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzlDLENBQUM7QUFGRCxrREFFQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixxQkFBcUIsQ0FBQyxPQUFlLEVBQUUsT0FBZ0M7SUFDbkYsT0FBTyxJQUFBLHNCQUFhLEVBQUMsR0FBRyxFQUFFO1FBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkMsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDbkIsT0FBTyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBUEQsc0RBT0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDIyIEVyaWsgRm9ydHVuZVxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiAqIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGxcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRVxuICogU09GVFdBUkUuXG4gKi9cblxuaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHsgUmVzdWx0LCBjYXB0dXJlUmVzdWx0LCBmYWlsLCBzdWNjZWVkIH0gZnJvbSAnLi9yZXN1bHQnO1xuaW1wb3J0IHsgaXNLZXlPZiB9IGZyb20gJy4vdXRpbHMnO1xuXG5pbnRlcmZhY2UgUmVjb3JkQm9keSB7XG4gICAgYm9keTogc3RyaW5nO1xuICAgIGlzQ29udGludWF0aW9uOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgcmVjb3JkIGluIGEgSkFSIGZpbGVcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgSmFyUmVjb3JkID0gUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+O1xuXG5leHBvcnQgdHlwZSBKYXJGaWVsZFBpY2tlcjxUIGV4dGVuZHMgSmFyUmVjb3JkID0gSmFyUmVjb3JkPiA9IChyZWNvcmQ6IFQpID0+IChrZXlvZiBUKVtdO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGEgSkFSIHJlY29yZCBwYXJzZXIuXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSmFyUmVjb3JkUGFyc2VyT3B0aW9ucyB7XG4gICAgcmVhZG9ubHkgYXJyYXlGaWVsZHM/OiBzdHJpbmdbXSB8IEphckZpZWxkUGlja2VyO1xufVxuXG5jbGFzcyBSZWNvcmRQYXJzZXIge1xuICAgIHB1YmxpYyByZWFkb25seSByZWNvcmRzOiBKYXJSZWNvcmRbXSA9IFtdO1xuICAgIHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBKYXJSZWNvcmRQYXJzZXJPcHRpb25zO1xuXG4gICAgcHJvdGVjdGVkIF9maWVsZHM6IEphclJlY29yZCA9IHt9O1xuICAgIHByb3RlY3RlZCBfbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIHByb3RlY3RlZCBfYm9keTogUmVjb3JkQm9keSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiBKYXJSZWNvcmRQYXJzZXJPcHRpb25zKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgPz8ge307XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBwYXJzZShsaW5lczogc3RyaW5nW10sIG9wdGlvbnM/OiBKYXJSZWNvcmRQYXJzZXJPcHRpb25zKTogUmVzdWx0PEphclJlY29yZFtdPiB7XG4gICAgICAgIHJldHVybiBuZXcgUmVjb3JkUGFyc2VyKG9wdGlvbnMpLl9wYXJzZShsaW5lcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHN0YXRpYyBfcGFyc2VSZWNvcmRCb2R5KGZyb206IHN0cmluZywgb2xkQm9keT86IHN0cmluZyk6IFJlc3VsdDxSZWNvcmRCb2R5PiB7XG4gICAgICAgIGxldCBib2R5ID0gYCR7b2xkQm9keSA/PyAnJ30ke2Zyb20udHJpbSgpfWA7XG4gICAgICAgIGNvbnN0IGlzQ29udGludWF0aW9uID0gYm9keS5lbmRzV2l0aCgnXFxcXCcpO1xuICAgICAgICBpZiAoaXNDb250aW51YXRpb24pIHtcbiAgICAgICAgICAgIGJvZHkgPSBib2R5LnNsaWNlKDAsIGJvZHkubGVuZ3RoIC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2hhc0VzY2FwZXMoYm9keSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3JlcGxhY2VFc2NhcGVzKGJvZHkpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc0ZhaWx1cmUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJvZHkgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1Y2NlZWQoeyBib2R5LCBpc0NvbnRpbnVhdGlvbiB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc3RhdGljIF9oYXNFc2NhcGVzKGZyb206IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gZnJvbS5pbmNsdWRlcygnXFxcXCcpIHx8IGZyb20uaW5jbHVkZXMoJyYnKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc3RhdGljIF9yZXBsYWNlRXNjYXBlcyhib2R5OiBzdHJpbmcpOiBSZXN1bHQ8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IGludmFsaWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGNvbnN0IGVzY2FwZWQgPSBib2R5LnJlcGxhY2UoLyhcXFxcLil8KCYjeFthLWZBLUYwLTldezIsNn07KS9nLCAobWF0Y2gpID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdcXFxcXFxcXCc6IHJldHVybiAnXFxcXCc7XG4gICAgICAgICAgICAgICAgY2FzZSAnXFxcXCYnOiByZXR1cm4gJyYnO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1xcXFxyJzogcmV0dXJuICdcXHInO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1xcXFxuJzogcmV0dXJuICdcXG4nO1xuICAgICAgICAgICAgICAgIGNhc2UgJ1xcXFx0JzogcmV0dXJuICdcXHQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoLnN0YXJ0c1dpdGgoJyYnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhleENvZGUgPSBgMHgke21hdGNoLnNsaWNlKDMsIG1hdGNoLmxlbmd0aCAtIDEpfWA7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhckNvZGUgPSBOdW1iZXIucGFyc2VJbnQoaGV4Q29kZSwgMTYpO1xuICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGludmFsaWQucHVzaChtYXRjaCk7XG4gICAgICAgICAgICByZXR1cm4gJ1xcXFwnO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGludmFsaWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhaWwoYHVucmVjb2duaXplZCBlc2NhcGUgXCIke2ludmFsaWQuam9pbignLCAnKX1cIiBpbiByZWNvcmQtamFyIGJvZHlgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VlZChlc2NhcGVkKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc3RhdGljIF9hcHBseU9wdGlvbnMocmVjb3JkOiBKYXJSZWNvcmQsIG9wdGlvbnM6IEphclJlY29yZFBhcnNlck9wdGlvbnMpOiBKYXJSZWNvcmQge1xuICAgICAgICBpZiAob3B0aW9ucy5hcnJheUZpZWxkcykge1xuICAgICAgICAgICAgcmVjb3JkID0geyAuLi5yZWNvcmQgfTsgLy8gZG9uJ3QgZWRpdCBpbmNvbWluZyB2YWx1ZXNcbiAgICAgICAgICAgIGNvbnN0IGFycmF5RmllbGRzID0gQXJyYXkuaXNBcnJheShvcHRpb25zLmFycmF5RmllbGRzKVxuICAgICAgICAgICAgICAgID8gb3B0aW9ucy5hcnJheUZpZWxkc1xuICAgICAgICAgICAgICAgIDogb3B0aW9ucy5hcnJheUZpZWxkcyhyZWNvcmQpO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGFycmF5RmllbGRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzS2V5T2YoZmllbGQsIHJlY29yZCkgJiYgdHlwZW9mIHJlY29yZFtmaWVsZF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSByZWNvcmRbZmllbGRdIGFzIHN0cmluZztcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkW2ZpZWxkXSA9IFtjdXJyZW50XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlY29yZDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3BhcnNlKGxpbmVzOiBzdHJpbmdbXSk6IFJlc3VsdDxKYXJSZWNvcmRbXT4ge1xuICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGxpbmVzLmxlbmd0aDsgbisrKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lID0gbGluZXNbbl07XG4gICAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKCclJScpICYmICF0aGlzLl9ib2R5Py5pc0NvbnRpbnVhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3dyaXRlUGVuZGluZ1JlY29yZCgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNGYWlsdXJlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoYCR7bn06ICR7cmVzdWx0Lm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoL15cXHMqJC8udGVzdChsaW5lKSkge1xuICAgICAgICAgICAgICAgIC8vIGlnbm9yZSBibGFuayBsaW5lcyBidXQgY2FuY2VsIGNvbnRpbnVhdGlvblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9ib2R5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2JvZHkuaXNDb250aW51YXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9ib2R5Py5pc0NvbnRpbnVhdGlvbiB8fCAvXlxccysvLnRlc3QobGluZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBleHBsaWNpdCBjb250aW51YXRpb24gb24gcHJldmlvdXMgbGluZSBvciBpbXBsaWNpdCBzdGFydHMgd2l0aCB3aGl0ZXNwYWNlXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2JvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFpbChgJHtufTogY29udGludWF0aW9uIChcIiR7bGluZX1cIikgd2l0aG91dCBwcmlvciB2YWx1ZS5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gUmVjb3JkUGFyc2VyLl9wYXJzZVJlY29yZEJvZHkobGluZSwgdGhpcy5fYm9keS5ib2R5KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzRmFpbHVyZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKGAke259OiAke3Jlc3VsdC5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9ib2R5ID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fcGFyc2VGaWVsZChsaW5lKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzRmFpbHVyZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKGAke259OiAke3Jlc3VsdC5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3dyaXRlUGVuZGluZ1JlY29yZCgpO1xuICAgICAgICBpZiAocmVzdWx0LmlzRmFpbHVyZSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFpbChgJHtsaW5lcy5sZW5ndGh9OiAke3Jlc3VsdC5tZXNzYWdlfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWNjZWVkKHRoaXMucmVjb3Jkcyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9wYXJzZUZpZWxkKGxpbmU6IHN0cmluZyk6IFJlc3VsdDxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvckluZGV4ID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAgICAgIGlmIChzZXBhcmF0b3JJbmRleCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWlsKGBtYWxmb3JtZWQgbGluZSAoXCIke2xpbmV9XCIpIGluIHJlY29yZC1qYXIuYCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFydHMgPSBbXG4gICAgICAgICAgICBsaW5lLnNsaWNlKDAsIHNlcGFyYXRvckluZGV4KSxcbiAgICAgICAgICAgIGxpbmUuc2xpY2Uoc2VwYXJhdG9ySW5kZXggKyAxKSxcbiAgICAgICAgXTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fd3JpdGVQZW5kaW5nRmllbGQoKS5vblN1Y2Nlc3MoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IHBhcnRzWzBdLnRyaW1FbmQoKTtcbiAgICAgICAgICAgIHJldHVybiBSZWNvcmRQYXJzZXIuX3BhcnNlUmVjb3JkQm9keShwYXJ0c1sxXSkub25TdWNjZXNzKChib2R5KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYm9keSA9IGJvZHk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWQodHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF9oYXZlUGVuZGluZ1JlY29yZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX2ZpZWxkcykubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgX3dyaXRlUGVuZGluZ1JlY29yZCgpOiBSZXN1bHQ8SmFyUmVjb3JkIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl93cml0ZVBlbmRpbmdGaWVsZCgpLm9uU3VjY2VzcygoKSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVjb3JkID0gdGhpcy5faGF2ZVBlbmRpbmdSZWNvcmQoKSA/IHRoaXMuX2ZpZWxkcyA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChyZWNvcmQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJlY29yZCA9IFJlY29yZFBhcnNlci5fYXBwbHlPcHRpb25zKHJlY29yZCwgdGhpcy5vcHRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29yZHMucHVzaChyZWNvcmQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2ZpZWxkcyA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN1Y2NlZWQodW5kZWZpbmVkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIF93cml0ZVBlbmRpbmdGaWVsZCgpOiBSZXN1bHQ8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAodGhpcy5fbmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fYm9keSEuYm9keS5sZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoJ2VtcHR5IGJvZHkgdmFsdWUgbm90IGFsbG93ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNLZXlPZih0aGlzLl9uYW1lLCB0aGlzLl9maWVsZHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmllbGRzW3RoaXMuX25hbWVdID0gdGhpcy5fYm9keSEuYm9keTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9maWVsZHNbdGhpcy5fbmFtZV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuX2ZpZWxkc1t0aGlzLl9uYW1lXSBhcyBzdHJpbmc7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmllbGRzW3RoaXMuX25hbWVdID0gW2N1cnJlbnQsIHRoaXMuX2JvZHkhLmJvZHldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuX2ZpZWxkc1t0aGlzLl9uYW1lXSBhcyBzdHJpbmdbXTtcbiAgICAgICAgICAgICAgICBjdXJyZW50LnB1c2godGhpcy5fYm9keSEuYm9keSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9uYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5fYm9keSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VjY2VlZCh0cnVlKTtcbiAgICB9XG59XG5cbi8qKlxuICogUmVhZHMgYSByZWNvcmQtamFyIGZyb20gYW4gYXJyYXkgb2Ygc3RyaW5ncywgZWFjaCBvZiB3aGljaCByZXByZXNlbnRzIG9uZVxuICogbGluZSBpbiB0aGUgc291cmNlIGZpbGUuXG4gKiBAcGFyYW0gbGluZXMgLSB0aGUgYXJyYXkgb2Ygc3RyaW5ncyB0byBiZSBwYXJzZWRcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9uYWwgcGFyc2VyIGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIGEgY29ycmVzcG9uZGluZyBhcnJheSBvZiBgUmVjb3JkPHN0cmluZywgc3RyaW5nPmBcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVjb3JkSmFyTGluZXMobGluZXM6IHN0cmluZ1tdLCBvcHRpb25zPzogSmFyUmVjb3JkUGFyc2VyT3B0aW9ucyk6IFJlc3VsdDxKYXJSZWNvcmRbXT4ge1xuICAgIHJldHVybiBSZWNvcmRQYXJzZXIucGFyc2UobGluZXMsIG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgcmVjb3JkLWphciBmaWxlIGZyb20gYSBzdXBwbGllZCBwYXRoLlxuICogQHBhcmFtIHNyY1BhdGggLSBTb3VyY2UgcGF0aCBmcm9tIHdoaWNoIHRoZSBmaWxlIGlzIHJlYWQuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIHBhcnNlciBjb25maWd1cmF0aW9uXG4gKiBAcmV0dXJucyBUaGUgY29udGVudHMgb2YgdGhlIGZpbGUgYXMgYW4gYXJyYXkgb2YgYFJlY29yZDxzdHJpbmcsIHN0cmluZz5gXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtcGhpbGxpcHMtcmVjb3JkLWphci0wMVxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZFJlY29yZEphckZpbGVTeW5jKHNyY1BhdGg6IHN0cmluZywgb3B0aW9ucz86IEphclJlY29yZFBhcnNlck9wdGlvbnMpOiBSZXN1bHQ8SmFyUmVjb3JkW10+IHtcbiAgICByZXR1cm4gY2FwdHVyZVJlc3VsdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKHNyY1BhdGgpO1xuICAgICAgICByZXR1cm4gZnMucmVhZEZpbGVTeW5jKGZ1bGxQYXRoLCAndXRmOCcpLnRvU3RyaW5nKCkuc3BsaXQoL1xccj9cXG4vKTtcbiAgICB9KS5vblN1Y2Nlc3MoKGxpbmVzKSA9PiB7XG4gICAgICAgIHJldHVybiBwYXJzZVJlY29yZEphckxpbmVzKGxpbmVzLCBvcHRpb25zKTtcbiAgICB9KTtcbn1cbiJdfQ==
package/utils.d.ts CHANGED
@@ -17,6 +17,7 @@ export declare function isKeyOf<T extends object>(key: string | number | symbol,
17
17
  * is not present (default `undefined`).
18
18
  * @returns The value of the requested property, or the default value if the
19
19
  * requested property does not exist.
20
+ * @public
20
21
  */
21
22
  export declare function getValueOfPropertyOrDefault<T extends object>(key: string | number | symbol, item: T, defaultValue?: unknown): unknown | undefined;
22
23
  /**
@@ -28,6 +29,7 @@ export declare function getValueOfPropertyOrDefault<T extends object>(key: strin
28
29
  * @example
29
30
  * Returns `'undefined'` (a string) if the property exists but has the value
30
31
  * undefined but `undefined` (the literal) if the property does not exist.
32
+ * @public
31
33
  */
32
34
  export declare function getTypeOfProperty<T extends object>(key: string | number | symbol, item: T): 'string' | 'number' | 'bigint' | 'boolean' | 'symbol' | 'undefined' | 'undefined' | 'object' | 'function' | undefined;
33
35
  /**
package/utils.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/utils.js CHANGED
@@ -45,6 +45,7 @@ exports.isKeyOf = isKeyOf;
45
45
  * is not present (default `undefined`).
46
46
  * @returns The value of the requested property, or the default value if the
47
47
  * requested property does not exist.
48
+ * @public
48
49
  */
49
50
  function getValueOfPropertyOrDefault(key, item, defaultValue) {
50
51
  return isKeyOf(key, item) ? item[key] : defaultValue;
@@ -59,6 +60,7 @@ exports.getValueOfPropertyOrDefault = getValueOfPropertyOrDefault;
59
60
  * @example
60
61
  * Returns `'undefined'` (a string) if the property exists but has the value
61
62
  * undefined but `undefined` (the literal) if the property does not exist.
63
+ * @public
62
64
  */
63
65
  function getTypeOfProperty(key, item) {
64
66
  return isKeyOf(key, item) ? typeof item[key] : undefined;
@@ -160,4 +162,4 @@ function optionalMapToPossiblyEmptyRecord(src, factory) {
160
162
  return (src === undefined) ? (0, result_1.succeed)({}) : mapToRecord(src, factory);
161
163
  }
162
164
  exports.optionalMapToPossiblyEmptyRecord = optionalMapToPossiblyEmptyRecord;
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBRUgscUNBQWlEO0FBRWpEOzs7Ozs7O0dBT0c7QUFDSCx3REFBd0Q7QUFDeEQsU0FBZ0IsT0FBTyxDQUFtQixHQUF5QixFQUFFLElBQU87SUFDeEUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFGRCwwQkFFQztBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLDJCQUEyQixDQUN2QyxHQUF5QixFQUN6QixJQUFPLEVBQ1AsWUFBc0I7SUFFdEIsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztBQUN6RCxDQUFDO0FBTkQsa0VBTUM7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFnQixpQkFBaUIsQ0FDN0IsR0FBeUIsRUFDekIsSUFBTztJQUNQLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUM3RCxDQUFDO0FBSkQsOENBSUM7QUFRRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsV0FBVyxDQUFxQyxHQUFtQixFQUFFLE9BQXNDO0lBQ3ZILE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFDOUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUU7UUFDbkIsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQ3hCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxVQUFVLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3hCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNsQztpQkFDSTtnQkFDRCxPQUFPLElBQUEsYUFBSSxFQUFDLEdBQUcsR0FBRyxLQUFLLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ2hEO1NBQ0o7S0FDSjtJQUNELE9BQU8sSUFBQSxnQkFBTyxFQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLENBQUM7QUFkRCxrQ0FjQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBcUMsR0FBNkIsRUFBRSxPQUFzQztJQUN6SSxPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLGdCQUFPLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUZELGtEQUVDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGdDQUFnQyxDQUFxQyxHQUE2QixFQUFFLE9BQXNDO0lBQ3RKLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsZ0JBQU8sRUFBQyxJQUFJLEdBQUcsRUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEYsQ0FBQztBQUZELDRFQUVDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLFdBQVcsQ0FBcUMsR0FBZ0IsRUFBRSxPQUFzQztJQUNwSCxNQUFNLE1BQU0sR0FBbUIsRUFBb0IsQ0FBQztJQUNwRCxLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRTtRQUNuQixJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDdEIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDckM7aUJBQ0k7Z0JBQ0QsT0FBTyxJQUFBLGFBQUksRUFBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQzthQUNuRDtTQUNKO0tBQ0o7SUFDRCxPQUFPLElBQUEsZ0JBQU8sRUFBQyxNQUFNLENBQUMsQ0FBQztBQUMzQixDQUFDO0FBZEQsa0NBY0M7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQXFDLEdBQTBCLEVBQUUsT0FBc0M7SUFDdEksT0FBTyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBQSxnQkFBTyxFQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2hGLENBQUM7QUFGRCxrREFFQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixnQ0FBZ0MsQ0FBcUMsR0FBMEIsRUFBRSxPQUFzQztJQUNuSixPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLGdCQUFPLEVBQUMsRUFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQzNGLENBQUM7QUFGRCw0RUFFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoYykgMjAyMCBFcmlrIEZvcnR1bmVcclxuICpcclxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxyXG4gKiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSBcIlNvZnR3YXJlXCIpLCB0byBkZWFsXHJcbiAqIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcclxuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxyXG4gKiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXNcclxuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcclxuICpcclxuICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsXHJcbiAqIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXHJcbiAqXHJcbiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1JcclxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXHJcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxyXG4gKiBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSXHJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXHJcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXHJcbiAqIFNPRlRXQVJFLlxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFJlc3VsdCwgZmFpbCwgc3VjY2VlZCB9IGZyb20gJy4vcmVzdWx0JztcclxuXHJcbi8qKlxyXG4gKiBIZWxwZXIgdHlwZS1ndWFyZCBmdW5jdGlvbiB0byByZXBvcnQgd2hldGhlciBhIHNwZWNpZmllZCBrZXkgaXMgcHJlc2VudCBpblxyXG4gKiBhIHN1cHBsaWVkIG9iamVjdC5cclxuICogQHBhcmFtIGtleSAtIFRoZSBrZXkgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBvYmplY3QgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcmV0dXJucyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUga2V5IGlzIHByZXNlbnQsIGBmYWxzZWAgb3RoZXJ3aXNlLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xyXG5leHBvcnQgZnVuY3Rpb24gaXNLZXlPZjxUIGV4dGVuZHMgb2JqZWN0PihrZXk6IHN0cmluZ3xudW1iZXJ8c3ltYm9sLCBpdGVtOiBUKToga2V5IGlzIGtleW9mIFQge1xyXG4gICAgcmV0dXJuIGl0ZW0uaGFzT3duUHJvcGVydHkoa2V5KTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIHZhbHVlIG9mIGEgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IGtleSBmcm9tIGFuIGFyYml0cmFyeSBvYmplY3QsXHJcbiAqIG9yIGEgZGVmYXVsdCB2YWx1ZSBpZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgZXhpc3QuXHJcbiAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHNwZWNpZnlpbmcgdGhlIHByb3BlcnR5IHRvIGJlIHJldHJpZXZlZC5cclxuICogQHBhcmFtIGl0ZW0gLSBUaGUgb2JqZWN0IGZyb20gd2hpY2ggdGhlIHByb3BlcnR5IGlzIHRvIGJlIHJldHJpZXZlZC5cclxuICogQHBhcmFtIGRlZmF1bHRWYWx1ZSAtIEFuIG9wdGlvbmFsIGRlZmF1bHQgdmFsdWUgdG8gYmUgcmV0dXJuZWQgaWYgdGhlIHByb3BlcnR5XHJcbiAqIGlzIG5vdCBwcmVzZW50IChkZWZhdWx0IGB1bmRlZmluZWRgKS5cclxuICogQHJldHVybnMgVGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0ZWQgcHJvcGVydHksIG9yIHRoZSBkZWZhdWx0IHZhbHVlIGlmIHRoZVxyXG4gKiByZXF1ZXN0ZWQgcHJvcGVydHkgZG9lcyBub3QgZXhpc3QuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWVPZlByb3BlcnR5T3JEZWZhdWx0PFQgZXh0ZW5kcyBvYmplY3Q+KFxyXG4gICAga2V5OiBzdHJpbmd8bnVtYmVyfHN5bWJvbCxcclxuICAgIGl0ZW06IFQsXHJcbiAgICBkZWZhdWx0VmFsdWU/OiB1bmtub3duXHJcbik6IHVua25vd24gfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIGlzS2V5T2Yoa2V5LCBpdGVtKSA/IGl0ZW1ba2V5XSA6IGRlZmF1bHRWYWx1ZTtcclxufVxyXG5cclxuLyoqXHJcbiAqIEdldHMgdGhlIHR5cGUgb2YgYSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkga2V5IGZyb20gYW4gYXJiaXRyYXJ5IG9iamVjdC5cclxuICogQHBhcmFtIGtleSAtIFRoZSBrZXkgc3BlY2lmeWluZyB0aGUgcHJvcGVydHkgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBvYmplY3QgZnJvbSB3aGljaCB0aGUgcHJvcGVydHkgaXMgdG8gYmUgdGVzdGVkLlxyXG4gKiBAcmV0dXJucyBUaGUgdHlwZSBvZiB0aGUgcmVxdWVzdGVkIHByb3BlcnR5LCBvciBgdW5kZWZpbmVkYCBpZiB0aGVcclxuICogcHJvcGVydHkgZG9lcyBub3QgZXhpc3QuXHJcbiAqIEBleGFtcGxlXHJcbiAqIFJldHVybnMgYCd1bmRlZmluZWQnYCAoYSBzdHJpbmcpIGlmIHRoZSBwcm9wZXJ0eSBleGlzdHMgYnV0IGhhcyB0aGUgdmFsdWVcclxuICogdW5kZWZpbmVkIGJ1dCBgdW5kZWZpbmVkYCAodGhlIGxpdGVyYWwpIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdC5cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlT2ZQcm9wZXJ0eTxUIGV4dGVuZHMgb2JqZWN0PihcclxuICAgIGtleTogc3RyaW5nfG51bWJlcnxzeW1ib2wsXHJcbiAgICBpdGVtOiBUKTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdiaWdpbnQnIHwgJ2Jvb2xlYW4nIHwgJ3N5bWJvbCcgfCAndW5kZWZpbmVkJyB8ICd1bmRlZmluZWQnIHwgJ29iamVjdCcgfCAnZnVuY3Rpb24nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBpc0tleU9mKGtleSwgaXRlbSkgPyB0eXBlb2YgaXRlbVtrZXldIDogdW5kZWZpbmVkO1xyXG59XHJcblxyXG4vKipcclxuICogVHlwZSBmb3IgZmFjdG9yeSBtZXRob2RzIHdoaWNoIGNvbnZlcnQgYSBrZXktdmFsdWUgcGFpciB0byBhIG5ldyB1bmlxdWUgdmFsdWUuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbnR5cGUgS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAoa2V5OiBUSywgdGhpbmc6IFRTKSA9PiBSZXN1bHQ8VEQ+O1xyXG5cclxuLyoqXHJcbiAqIEFwcGxpZXMgYSBmYWN0b3J5IG1ldGhvZCB0byBjb252ZXJ0IGEgYFJlY29yZDxUSywgVFM+YCBpbnRvIGEgYE1hcDxUSywgVEQ+YC5cclxuICogQHBhcmFtIHNyYyAtIFRoZSBgUmVjb3JkYCB0byBiZSBjb252ZXJ0ZWQuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyBtYXAgb24gc3VjY2Vzcywgb3Ige0BsaW5rIEZhaWx1cmV9IHdpdGggYVxyXG4gKiBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlY29yZFRvTWFwPFRTLCBURCwgVEsgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KHNyYzogUmVjb3JkPFRLLCBUUz4sIGZhY3Rvcnk6IEtleWVkVGhpbmdGYWN0b3J5PFRTLCBURCwgVEs+KTogUmVzdWx0PE1hcDxUSywgVEQ+PiB7XHJcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPFRLLCBURD4oKTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHNyYykge1xyXG4gICAgICAgIGlmIChzcmNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1SZXN1bHQgPSBmYWN0b3J5KGtleSwgc3JjW2tleV0pO1xyXG4gICAgICAgICAgICBpZiAoaXRlbVJlc3VsdC5pc1N1Y2Nlc3MoKSkge1xyXG4gICAgICAgICAgICAgICAgbWFwLnNldChrZXksIGl0ZW1SZXN1bHQudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoYCR7a2V5fTogJHtpdGVtUmVzdWx0Lm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VjY2VlZChtYXApO1xyXG59XHJcblxyXG4vKipcclxuICogQXBwbGllcyBhIGZhY3RvcnkgbWV0aG9kIHRvIGNvbnZlcnQgYW4gb3B0aW9uYWwgYFJlY29yZDxUSywgVFM+YCBpbnRvIGEgYE1hcDxUSywgVEQ+YCwgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBzcmMgLSBUaGUgYFJlY29yZGAgdG8gYmUgY29udmVydGVkLCBvciB1bmRlZmluZWQuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyBtYXAgaWYgY29udmVyc2lvbiBzdWNjZWVkcywgb3Ige0BsaW5rIFN1Y2Nlc3N9IHdpdGggYHVuZGVmaW5lZGBcclxuICogaWYgYHNyY2AgaXMgYHVuZGVmaW5lZGAuIFJldHVybnMge0BsaW5rIEZhaWx1cmV9IHdpdGggYSBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsUmVjb3JkVG9NYXA8VFMsIFRELCBUSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oc3JjOiBSZWNvcmQ8VEssIFRTPnx1bmRlZmluZWQsIGZhY3Rvcnk6IEtleWVkVGhpbmdGYWN0b3J5PFRTLCBURCwgVEs+KTogUmVzdWx0PE1hcDxUSywgVEQ+fHVuZGVmaW5lZD4ge1xyXG4gICAgcmV0dXJuIChzcmMgPT09IHVuZGVmaW5lZCkgPyBzdWNjZWVkKHVuZGVmaW5lZCkgOiByZWNvcmRUb01hcChzcmMsIGZhY3RvcnkpO1xyXG59XHJcblxyXG4vKipcclxuICogQXBwbGllcyBhIGZhY3RvcnkgbWV0aG9kIHRvIGNvbnZlcnQgYW4gb3B0aW9uYWwgYFJlY29yZDxUSywgVFM+YCBpbnRvIGEgYE1hcDxUSywgVEQ+YFxyXG4gKiBAcGFyYW0gc3JjIC0gVGhlIGBSZWNvcmRgIHRvIGJlIGNvbnZlcnRlZCwgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyBtYXAgKGVtcHR5IGlmIGBzcmNgIGlzIGB1bmRlZmluZWRgKSBpZiBjb252ZXJzaW9uIHN1Y2NlZWRzLlxyXG4gKiBSZXR1cm5zIHtAbGluayBGYWlsdXJlfSB3aXRoIGEgbWVzc2FnZSBpZiBhbiBlcnJvciBvY2N1cnMuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbFJlY29yZFRvUG9zc2libHlFbXB0eU1hcDxUUywgVEQsIFRLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihzcmM6IFJlY29yZDxUSywgVFM+fHVuZGVmaW5lZCwgZmFjdG9yeTogS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSz4pOiBSZXN1bHQ8TWFwPFRLLCBURD4+IHtcclxuICAgIHJldHVybiAoc3JjID09PSB1bmRlZmluZWQpID8gc3VjY2VlZChuZXcgTWFwPFRLLCBURD4oKSkgOiByZWNvcmRUb01hcChzcmMsIGZhY3RvcnkpO1xyXG59XHJcblxyXG4vKipcclxuICogQXBwbGllcyBhIGZhY3RvcnkgbWV0aG9kIHRvIGNvbnZlcnQgYSBgTWFwPFRLLCBUUz5gIGludG8gYSBgUmVjb3JkPFRLLCBURD5gLlxyXG4gKiBAcGFyYW0gc3JjIC0gVGhlIGBNYXBgIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyBgUmVjb3JkPFRLLCBURD5gIGlmIGNvbnZlcnNpb24gc3VjY2VlZHMsIG9yXHJcbiAqIHtAbGluayBGYWlsdXJlfSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJzLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9SZWNvcmQ8VFMsIFRELCBUSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oc3JjOiBNYXA8VEssIFRTPiwgZmFjdG9yeTogS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSz4pOiBSZXN1bHQ8UmVjb3JkPFRLLCBURD4+IHtcclxuICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPFRLLCBURD4gPSB7fSBhcyBSZWNvcmQ8VEssIFREPjtcclxuICAgIGZvciAoY29uc3Qga3ZwIG9mIHNyYykge1xyXG4gICAgICAgIGlmIChrdnBbMV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtUmVzdWx0ID0gZmFjdG9yeShrdnBbMF0sIGt2cFsxXSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtUmVzdWx0LmlzU3VjY2VzcygpKSB7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRba3ZwWzBdXSA9IGl0ZW1SZXN1bHQudmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFpbChgJHtrdnBbMF19OiAke2l0ZW1SZXN1bHQubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzdWNjZWVkKHJlY29yZCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBcHBsaWVzIGEgZmFjdG9yeSBtZXRob2QgdG8gY29udmVydCBhbiBvcHRpb25hbCBgTWFwPHN0cmluZywgVFM+YCBpbnRvIGEgYFJlY29yZDxzdHJpbmcsIFREPmAgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBzcmMgLSBUaGUgYE1hcGAgb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCwgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyByZWNvcmQgaWYgY29udmVyc2lvbiBzdWNjZWVkcywgb3Ige0BsaW5rIFN1Y2Nlc3N9IHdpdGggYHVuZGVmaW5lZGAgaWZcclxuICogYHNyY2AgaXMgYHVuZGVmaW5lZGAuIFJldHVybnMge0BsaW5rIEZhaWx1cmV9IHdpdGggYSBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsTWFwVG9SZWNvcmQ8VFMsIFRELCBUSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oc3JjOiBNYXA8VEssIFRTPnx1bmRlZmluZWQsIGZhY3Rvcnk6IEtleWVkVGhpbmdGYWN0b3J5PFRTLCBURCwgVEs+KTogUmVzdWx0PFJlY29yZDxUSywgVEQ+fHVuZGVmaW5lZD4ge1xyXG4gICAgcmV0dXJuIChzcmMgPT09IHVuZGVmaW5lZCkgPyBzdWNjZWVkKHVuZGVmaW5lZCkgOiBtYXBUb1JlY29yZChzcmMsIGZhY3RvcnkpO1xyXG59XHJcblxyXG4vKipcclxuICogQXBwbGllcyBhIGZhY3RvcnkgbWV0aG9kIHRvIGNvbnZlcnQgYW4gb3B0aW9uYWwgYE1hcDxzdHJpbmcsIFRTPmAgaW50byBhIGBSZWNvcmQ8c3RyaW5nLCBURD5gXHJcbiAqIEBwYXJhbSBzcmMgLSBUaGUgYE1hcGAgb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCwgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyByZWNvcmQgKGVtcHR5IGlmIGBzcmNgIGlzIGB1bmRlZmluZWRgKSBpZiBjb252ZXJzaW9uIHN1Y2NlZWRzLlxyXG4gKiBSZXR1cm5zIHtAbGluayBGYWlsdXJlfSB3aXRoIGEgbWVzc2FnZSBpZiBhbiBlcnJvciBvY2N1cnMuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbE1hcFRvUG9zc2libHlFbXB0eVJlY29yZDxUUywgVEQsIFRLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihzcmM6IE1hcDxUSywgVFM+fHVuZGVmaW5lZCwgZmFjdG9yeTogS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSz4pOiBSZXN1bHQ8UmVjb3JkPFRLLCBURD4+IHtcclxuICAgIHJldHVybiAoc3JjID09PSB1bmRlZmluZWQpID8gc3VjY2VlZCh7fSBhcyBSZWNvcmQ8VEssIFREPikgOiBtYXBUb1JlY29yZChzcmMsIGZhY3RvcnkpO1xyXG59XHJcbiJdfQ==
165
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRzs7O0FBRUgscUNBQWlEO0FBRWpEOzs7Ozs7O0dBT0c7QUFDSCx3REFBd0Q7QUFDeEQsU0FBZ0IsT0FBTyxDQUFtQixHQUF5QixFQUFFLElBQU87SUFDeEUsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFGRCwwQkFFQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxTQUFnQiwyQkFBMkIsQ0FDdkMsR0FBeUIsRUFDekIsSUFBTyxFQUNQLFlBQXNCO0lBRXRCLE9BQU8sT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7QUFDekQsQ0FBQztBQU5ELGtFQU1DO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILFNBQWdCLGlCQUFpQixDQUM3QixHQUF5QixFQUN6QixJQUFPO0lBQ1AsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0FBQzdELENBQUM7QUFKRCw4Q0FJQztBQVFEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixXQUFXLENBQXFDLEdBQW1CLEVBQUUsT0FBc0M7SUFDdkgsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM5QixLQUFLLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRTtRQUNuQixJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDeEIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUMxQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDeEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2xDO2lCQUNJO2dCQUNELE9BQU8sSUFBQSxhQUFJLEVBQUMsR0FBRyxHQUFHLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDaEQ7U0FDSjtLQUNKO0lBQ0QsT0FBTyxJQUFBLGdCQUFPLEVBQUMsR0FBRyxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQWRELGtDQWNDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLG1CQUFtQixDQUFxQyxHQUE2QixFQUFFLE9BQXNDO0lBQ3pJLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsZ0JBQU8sRUFBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNoRixDQUFDO0FBRkQsa0RBRUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsZ0NBQWdDLENBQXFDLEdBQTZCLEVBQUUsT0FBc0M7SUFDdEosT0FBTyxDQUFDLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBQSxnQkFBTyxFQUFDLElBQUksR0FBRyxFQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUN4RixDQUFDO0FBRkQsNEVBRUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBZ0IsV0FBVyxDQUFxQyxHQUFnQixFQUFFLE9BQXNDO0lBQ3BILE1BQU0sTUFBTSxHQUFtQixFQUFvQixDQUFDO0lBQ3BELEtBQUssTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFO1FBQ25CLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUN0QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNDLElBQUksVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUN4QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNyQztpQkFDSTtnQkFDRCxPQUFPLElBQUEsYUFBSSxFQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2FBQ25EO1NBQ0o7S0FDSjtJQUNELE9BQU8sSUFBQSxnQkFBTyxFQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFkRCxrQ0FjQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxTQUFnQixtQkFBbUIsQ0FBcUMsR0FBMEIsRUFBRSxPQUFzQztJQUN0SSxPQUFPLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFBLGdCQUFPLEVBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUZELGtEQUVDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGdDQUFnQyxDQUFxQyxHQUEwQixFQUFFLE9BQXNDO0lBQ25KLE9BQU8sQ0FBQyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUEsZ0JBQU8sRUFBQyxFQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDM0YsQ0FBQztBQUZELDRFQUVDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChjKSAyMDIwIEVyaWsgRm9ydHVuZVxyXG4gKlxyXG4gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XHJcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcclxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xyXG4gKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXHJcbiAqIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xyXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxyXG4gKlxyXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcclxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cclxuICpcclxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxyXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcclxuICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXHJcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcclxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcclxuICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcclxuICogU09GVFdBUkUuXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgUmVzdWx0LCBmYWlsLCBzdWNjZWVkIH0gZnJvbSAnLi9yZXN1bHQnO1xyXG5cclxuLyoqXHJcbiAqIEhlbHBlciB0eXBlLWd1YXJkIGZ1bmN0aW9uIHRvIHJlcG9ydCB3aGV0aGVyIGEgc3BlY2lmaWVkIGtleSBpcyBwcmVzZW50IGluXHJcbiAqIGEgc3VwcGxpZWQgb2JqZWN0LlxyXG4gKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBiZSB0ZXN0ZWQuXHJcbiAqIEBwYXJhbSBpdGVtIC0gVGhlIG9iamVjdCB0byBiZSB0ZXN0ZWQuXHJcbiAqIEByZXR1cm5zIFJldHVybnMgYHRydWVgIGlmIHRoZSBrZXkgaXMgcHJlc2VudCwgYGZhbHNlYCBvdGhlcndpc2UuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0tleU9mPFQgZXh0ZW5kcyBvYmplY3Q+KGtleTogc3RyaW5nfG51bWJlcnxzeW1ib2wsIGl0ZW06IFQpOiBrZXkgaXMga2V5b2YgVCB7XHJcbiAgICByZXR1cm4gaXRlbS5oYXNPd25Qcm9wZXJ0eShrZXkpO1xyXG59XHJcblxyXG4vKipcclxuICogR2V0cyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBzcGVjaWZpZWQgYnkga2V5IGZyb20gYW4gYXJiaXRyYXJ5IG9iamVjdCxcclxuICogb3IgYSBkZWZhdWx0IHZhbHVlIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdC5cclxuICogQHBhcmFtIGtleSAtIFRoZSBrZXkgc3BlY2lmeWluZyB0aGUgcHJvcGVydHkgdG8gYmUgcmV0cmlldmVkLlxyXG4gKiBAcGFyYW0gaXRlbSAtIFRoZSBvYmplY3QgZnJvbSB3aGljaCB0aGUgcHJvcGVydHkgaXMgdG8gYmUgcmV0cmlldmVkLlxyXG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gQW4gb3B0aW9uYWwgZGVmYXVsdCB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgcHJvcGVydHlcclxuICogaXMgbm90IHByZXNlbnQgKGRlZmF1bHQgYHVuZGVmaW5lZGApLlxyXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIHJlcXVlc3RlZCBwcm9wZXJ0eSwgb3IgdGhlIGRlZmF1bHQgdmFsdWUgaWYgdGhlXHJcbiAqIHJlcXVlc3RlZCBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdC5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlT2ZQcm9wZXJ0eU9yRGVmYXVsdDxUIGV4dGVuZHMgb2JqZWN0PihcclxuICAgIGtleTogc3RyaW5nfG51bWJlcnxzeW1ib2wsXHJcbiAgICBpdGVtOiBULFxyXG4gICAgZGVmYXVsdFZhbHVlPzogdW5rbm93blxyXG4pOiB1bmtub3duIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBpc0tleU9mKGtleSwgaXRlbSkgPyBpdGVtW2tleV0gOiBkZWZhdWx0VmFsdWU7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBHZXRzIHRoZSB0eXBlIG9mIGEgcHJvcGVydHkgc3BlY2lmaWVkIGJ5IGtleSBmcm9tIGFuIGFyYml0cmFyeSBvYmplY3QuXHJcbiAqIEBwYXJhbSBrZXkgLSBUaGUga2V5IHNwZWNpZnlpbmcgdGhlIHByb3BlcnR5IHRvIGJlIHRlc3RlZC5cclxuICogQHBhcmFtIGl0ZW0gLSBUaGUgb2JqZWN0IGZyb20gd2hpY2ggdGhlIHByb3BlcnR5IGlzIHRvIGJlIHRlc3RlZC5cclxuICogQHJldHVybnMgVGhlIHR5cGUgb2YgdGhlIHJlcXVlc3RlZCBwcm9wZXJ0eSwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlXHJcbiAqIHByb3BlcnR5IGRvZXMgbm90IGV4aXN0LlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBSZXR1cm5zIGAndW5kZWZpbmVkJ2AgKGEgc3RyaW5nKSBpZiB0aGUgcHJvcGVydHkgZXhpc3RzIGJ1dCBoYXMgdGhlIHZhbHVlXHJcbiAqIHVuZGVmaW5lZCBidXQgYHVuZGVmaW5lZGAgKHRoZSBsaXRlcmFsKSBpZiB0aGUgcHJvcGVydHkgZG9lcyBub3QgZXhpc3QuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlT2ZQcm9wZXJ0eTxUIGV4dGVuZHMgb2JqZWN0PihcclxuICAgIGtleTogc3RyaW5nfG51bWJlcnxzeW1ib2wsXHJcbiAgICBpdGVtOiBUKTogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdiaWdpbnQnIHwgJ2Jvb2xlYW4nIHwgJ3N5bWJvbCcgfCAndW5kZWZpbmVkJyB8ICd1bmRlZmluZWQnIHwgJ29iamVjdCcgfCAnZnVuY3Rpb24nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBpc0tleU9mKGtleSwgaXRlbSkgPyB0eXBlb2YgaXRlbVtrZXldIDogdW5kZWZpbmVkO1xyXG59XHJcblxyXG4vKipcclxuICogVHlwZSBmb3IgZmFjdG9yeSBtZXRob2RzIHdoaWNoIGNvbnZlcnQgYSBrZXktdmFsdWUgcGFpciB0byBhIG5ldyB1bmlxdWUgdmFsdWUuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbnR5cGUgS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4gPSAoa2V5OiBUSywgdGhpbmc6IFRTKSA9PiBSZXN1bHQ8VEQ+O1xyXG5cclxuLyoqXHJcbiAqIEFwcGxpZXMgYSBmYWN0b3J5IG1ldGhvZCB0byBjb252ZXJ0IGEgYFJlY29yZDxUSywgVFM+YCBpbnRvIGEgYE1hcDxUSywgVEQ+YC5cclxuICogQHBhcmFtIHNyYyAtIFRoZSBgUmVjb3JkYCB0byBiZSBjb252ZXJ0ZWQuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyBtYXAgb24gc3VjY2Vzcywgb3Ige0BsaW5rIEZhaWx1cmV9IHdpdGggYVxyXG4gKiBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHJlY29yZFRvTWFwPFRTLCBURCwgVEsgZXh0ZW5kcyBzdHJpbmcgPSBzdHJpbmc+KHNyYzogUmVjb3JkPFRLLCBUUz4sIGZhY3Rvcnk6IEtleWVkVGhpbmdGYWN0b3J5PFRTLCBURCwgVEs+KTogUmVzdWx0PE1hcDxUSywgVEQ+PiB7XHJcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPFRLLCBURD4oKTtcclxuICAgIGZvciAoY29uc3Qga2V5IGluIHNyYykge1xyXG4gICAgICAgIGlmIChzcmNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1SZXN1bHQgPSBmYWN0b3J5KGtleSwgc3JjW2tleV0pO1xyXG4gICAgICAgICAgICBpZiAoaXRlbVJlc3VsdC5pc1N1Y2Nlc3MoKSkge1xyXG4gICAgICAgICAgICAgICAgbWFwLnNldChrZXksIGl0ZW1SZXN1bHQudmFsdWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhaWwoYCR7a2V5fTogJHtpdGVtUmVzdWx0Lm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gc3VjY2VlZChtYXApO1xyXG59XHJcblxyXG4vKipcclxuICogQXBwbGllcyBhIGZhY3RvcnkgbWV0aG9kIHRvIGNvbnZlcnQgYW4gb3B0aW9uYWwgYFJlY29yZDxUSywgVFM+YCBpbnRvIGEgYE1hcDxUSywgVEQ+YCwgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBzcmMgLSBUaGUgYFJlY29yZGAgdG8gYmUgY29udmVydGVkLCBvciB1bmRlZmluZWQuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyBtYXAgaWYgY29udmVyc2lvbiBzdWNjZWVkcywgb3Ige0BsaW5rIFN1Y2Nlc3N9IHdpdGggYHVuZGVmaW5lZGBcclxuICogaWYgYHNyY2AgaXMgYHVuZGVmaW5lZGAuIFJldHVybnMge0BsaW5rIEZhaWx1cmV9IHdpdGggYSBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsUmVjb3JkVG9NYXA8VFMsIFRELCBUSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oc3JjOiBSZWNvcmQ8VEssIFRTPnx1bmRlZmluZWQsIGZhY3Rvcnk6IEtleWVkVGhpbmdGYWN0b3J5PFRTLCBURCwgVEs+KTogUmVzdWx0PE1hcDxUSywgVEQ+fHVuZGVmaW5lZD4ge1xyXG4gICAgcmV0dXJuIChzcmMgPT09IHVuZGVmaW5lZCkgPyBzdWNjZWVkKHVuZGVmaW5lZCkgOiByZWNvcmRUb01hcChzcmMsIGZhY3RvcnkpO1xyXG59XHJcblxyXG4vKipcclxuICogQXBwbGllcyBhIGZhY3RvcnkgbWV0aG9kIHRvIGNvbnZlcnQgYW4gb3B0aW9uYWwgYFJlY29yZDxUSywgVFM+YCBpbnRvIGEgYE1hcDxUSywgVEQ+YFxyXG4gKiBAcGFyYW0gc3JjIC0gVGhlIGBSZWNvcmRgIHRvIGJlIGNvbnZlcnRlZCwgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyBtYXAgKGVtcHR5IGlmIGBzcmNgIGlzIGB1bmRlZmluZWRgKSBpZiBjb252ZXJzaW9uIHN1Y2NlZWRzLlxyXG4gKiBSZXR1cm5zIHtAbGluayBGYWlsdXJlfSB3aXRoIGEgbWVzc2FnZSBpZiBhbiBlcnJvciBvY2N1cnMuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbFJlY29yZFRvUG9zc2libHlFbXB0eU1hcDxUUywgVEQsIFRLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihzcmM6IFJlY29yZDxUSywgVFM+fHVuZGVmaW5lZCwgZmFjdG9yeTogS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSz4pOiBSZXN1bHQ8TWFwPFRLLCBURD4+IHtcclxuICAgIHJldHVybiAoc3JjID09PSB1bmRlZmluZWQpID8gc3VjY2VlZChuZXcgTWFwPFRLLCBURD4oKSkgOiByZWNvcmRUb01hcChzcmMsIGZhY3RvcnkpO1xyXG59XHJcblxyXG4vKipcclxuICogQXBwbGllcyBhIGZhY3RvcnkgbWV0aG9kIHRvIGNvbnZlcnQgYSBgTWFwPFRLLCBUUz5gIGludG8gYSBgUmVjb3JkPFRLLCBURD5gLlxyXG4gKiBAcGFyYW0gc3JjIC0gVGhlIGBNYXBgIG9iamVjdCB0byBiZSBjb252ZXJ0ZWQuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyBgUmVjb3JkPFRLLCBURD5gIGlmIGNvbnZlcnNpb24gc3VjY2VlZHMsIG9yXHJcbiAqIHtAbGluayBGYWlsdXJlfSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgaWYgYW4gZXJyb3Igb2NjdXJzLlxyXG4gKiBAcHVibGljXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9SZWNvcmQ8VFMsIFRELCBUSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oc3JjOiBNYXA8VEssIFRTPiwgZmFjdG9yeTogS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSz4pOiBSZXN1bHQ8UmVjb3JkPFRLLCBURD4+IHtcclxuICAgIGNvbnN0IHJlY29yZDogUmVjb3JkPFRLLCBURD4gPSB7fSBhcyBSZWNvcmQ8VEssIFREPjtcclxuICAgIGZvciAoY29uc3Qga3ZwIG9mIHNyYykge1xyXG4gICAgICAgIGlmIChrdnBbMV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtUmVzdWx0ID0gZmFjdG9yeShrdnBbMF0sIGt2cFsxXSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtUmVzdWx0LmlzU3VjY2VzcygpKSB7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRba3ZwWzBdXSA9IGl0ZW1SZXN1bHQudmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFpbChgJHtrdnBbMF19OiAke2l0ZW1SZXN1bHQubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBzdWNjZWVkKHJlY29yZCk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBBcHBsaWVzIGEgZmFjdG9yeSBtZXRob2QgdG8gY29udmVydCBhbiBvcHRpb25hbCBgTWFwPHN0cmluZywgVFM+YCBpbnRvIGEgYFJlY29yZDxzdHJpbmcsIFREPmAgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBzcmMgLSBUaGUgYE1hcGAgb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCwgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyByZWNvcmQgaWYgY29udmVyc2lvbiBzdWNjZWVkcywgb3Ige0BsaW5rIFN1Y2Nlc3N9IHdpdGggYHVuZGVmaW5lZGAgaWZcclxuICogYHNyY2AgaXMgYHVuZGVmaW5lZGAuIFJldHVybnMge0BsaW5rIEZhaWx1cmV9IHdpdGggYSBtZXNzYWdlIGlmIGFuIGVycm9yIG9jY3Vycy5cclxuICogQHB1YmxpY1xyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsTWFwVG9SZWNvcmQ8VFMsIFRELCBUSyBleHRlbmRzIHN0cmluZyA9IHN0cmluZz4oc3JjOiBNYXA8VEssIFRTPnx1bmRlZmluZWQsIGZhY3Rvcnk6IEtleWVkVGhpbmdGYWN0b3J5PFRTLCBURCwgVEs+KTogUmVzdWx0PFJlY29yZDxUSywgVEQ+fHVuZGVmaW5lZD4ge1xyXG4gICAgcmV0dXJuIChzcmMgPT09IHVuZGVmaW5lZCkgPyBzdWNjZWVkKHVuZGVmaW5lZCkgOiBtYXBUb1JlY29yZChzcmMsIGZhY3RvcnkpO1xyXG59XHJcblxyXG4vKipcclxuICogQXBwbGllcyBhIGZhY3RvcnkgbWV0aG9kIHRvIGNvbnZlcnQgYW4gb3B0aW9uYWwgYE1hcDxzdHJpbmcsIFRTPmAgaW50byBhIGBSZWNvcmQ8c3RyaW5nLCBURD5gXHJcbiAqIEBwYXJhbSBzcmMgLSBUaGUgYE1hcGAgb2JqZWN0IHRvIGJlIGNvbnZlcnRlZCwgb3IgYHVuZGVmaW5lZGAuXHJcbiAqIEBwYXJhbSBmYWN0b3J5IC0gVGhlIGZhY3RvcnkgbWV0aG9kIHVzZWQgdG8gY29udmVydCBlbGVtZW50cy5cclxuICogQHJldHVybnMge0BsaW5rIFN1Y2Nlc3N9IHdpdGggdGhlIHJlc3VsdGluZyByZWNvcmQgKGVtcHR5IGlmIGBzcmNgIGlzIGB1bmRlZmluZWRgKSBpZiBjb252ZXJzaW9uIHN1Y2NlZWRzLlxyXG4gKiBSZXR1cm5zIHtAbGluayBGYWlsdXJlfSB3aXRoIGEgbWVzc2FnZSBpZiBhbiBlcnJvciBvY2N1cnMuXHJcbiAqIEBwdWJsaWNcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBvcHRpb25hbE1hcFRvUG9zc2libHlFbXB0eVJlY29yZDxUUywgVEQsIFRLIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihzcmM6IE1hcDxUSywgVFM+fHVuZGVmaW5lZCwgZmFjdG9yeTogS2V5ZWRUaGluZ0ZhY3Rvcnk8VFMsIFRELCBUSz4pOiBSZXN1bHQ8UmVjb3JkPFRLLCBURD4+IHtcclxuICAgIHJldHVybiAoc3JjID09PSB1bmRlZmluZWQpID8gc3VjY2VlZCh7fSBhcyBSZWNvcmQ8VEssIFREPikgOiBtYXBUb1JlY29yZChzcmMsIGZhY3RvcnkpO1xyXG59XHJcbiJdfQ==
@@ -0,0 +1,38 @@
1
+ import { Failure } from '../result';
2
+ import { Validator, ValidatorOptions } from './validator';
3
+ import { ValidatorBase, ValidatorBaseConstructorParams } from './validatorBase';
4
+ /**
5
+ * Parameters used to construct a {@link Validation.Classes.ArrayValidator | ArrayValidator}.
6
+ * @public
7
+ */
8
+ export interface ArrayValidatorConstructorParams<T, TC = unknown> extends ValidatorBaseConstructorParams<T[], TC> {
9
+ validateElement: Validator<T, TC>;
10
+ }
11
+ /**
12
+ * An in-place {@link Validation.Validator | Validator} for `number` values.
13
+ * @public
14
+ */
15
+ export declare class ArrayValidator<T, TC = unknown> extends ValidatorBase<T[], TC> {
16
+ /**
17
+ * {@link Validation.ValidatorOptions | Options} which apply to this
18
+ * validator.
19
+ */
20
+ readonly options: ValidatorOptions<TC>;
21
+ protected readonly _validateElement: Validator<T, TC>;
22
+ /**
23
+ * Constructs a new {@link Validation.Classes.ArrayValidator | ArrayValidator}.
24
+ * @param params - Optional {@link Validation.Classes.ArrayValidatorConstructorParams | init params} for the
25
+ * new {@link Validation.Classes.ArrayValidator | ArrayValidator}.
26
+ */
27
+ constructor(params: ArrayValidatorConstructorParams<T, TC>);
28
+ /**
29
+ * Static method which validates that a supplied `unknown` value is a `array`
30
+ * and that every element of the array can be validated by the supplied array
31
+ * validator.
32
+ * @param from - The `unknown` value to be tested.
33
+ * @returns Returns `true` if `from` is an `array` of valid elements, or
34
+ * {@link Failure} with an error message if not.
35
+ */
36
+ protected _validate<T>(from: unknown, context?: TC): boolean | Failure<T>;
37
+ }
38
+ //# sourceMappingURL=array.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.d.ts","sourceRoot":"","sources":["../../src/validation/array.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,OAAO,EAAQ,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAC;AAEhF;;;GAGG;AACH,MAAM,WAAW,+BAA+B,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAE,SAAQ,8BAA8B,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;IAC7G,eAAe,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;CACrC;AAED;;;GAGG;AACH,qBAAa,cAAc,CAAC,CAAC,EAAE,EAAE,GAAG,OAAO,CAAE,SAAQ,aAAa,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;IACvE;;;OAGG;IACH,SAAgB,OAAO,EAAE,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAE9C,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEtD;;;;OAIG;gBACgB,MAAM,EAAE,+BAA+B,CAAC,CAAC,EAAE,EAAE,CAAC;IAMjE;;;;;;;OAOG;IACH,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;CAY5E"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ /*
3
+ * Copyright (c) 2022 Erik Fortune
4
+ *
5
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ * of this software and associated documentation files (the "Software"), to deal
7
+ * in the Software without restriction, including without limitation the rights
8
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ * copies of the Software, and to permit persons to whom the Software is
10
+ * furnished to do so, subject to the following conditions:
11
+ *
12
+ * The above copyright notice and this permission notice shall be included in all
13
+ * copies or substantial portions of the Software.
14
+ *
15
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ * SOFTWARE.
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.ArrayValidator = void 0;
25
+ const result_1 = require("../result");
26
+ const validatorBase_1 = require("./validatorBase");
27
+ /**
28
+ * An in-place {@link Validation.Validator | Validator} for `number` values.
29
+ * @public
30
+ */
31
+ class ArrayValidator extends validatorBase_1.ValidatorBase {
32
+ /**
33
+ * Constructs a new {@link Validation.Classes.ArrayValidator | ArrayValidator}.
34
+ * @param params - Optional {@link Validation.Classes.ArrayValidatorConstructorParams | init params} for the
35
+ * new {@link Validation.Classes.ArrayValidator | ArrayValidator}.
36
+ */
37
+ constructor(params) {
38
+ var _a;
39
+ super(params);
40
+ this._validateElement = params.validateElement;
41
+ this.options = (_a = params.options) !== null && _a !== void 0 ? _a : {};
42
+ }
43
+ /**
44
+ * Static method which validates that a supplied `unknown` value is a `array`
45
+ * and that every element of the array can be validated by the supplied array
46
+ * validator.
47
+ * @param from - The `unknown` value to be tested.
48
+ * @returns Returns `true` if `from` is an `array` of valid elements, or
49
+ * {@link Failure} with an error message if not.
50
+ */
51
+ _validate(from, context) {
52
+ if (Array.isArray(from)) {
53
+ for (const elem of from) {
54
+ const result = this._validateElement.validate(elem, context);
55
+ if (!result.isSuccess()) {
56
+ return (0, result_1.fail)(result.message);
57
+ }
58
+ }
59
+ return true;
60
+ }
61
+ return (0, result_1.fail)(`"${from}": not an array`);
62
+ }
63
+ }
64
+ exports.ArrayValidator = ArrayValidator;
65
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmFsaWRhdGlvbi9hcnJheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0JHOzs7QUFFSCxzQ0FBMEM7QUFFMUMsbURBQWdGO0FBVWhGOzs7R0FHRztBQUNILE1BQWEsY0FBZ0MsU0FBUSw2QkFBc0I7SUFTdkU7Ozs7T0FJRztJQUNILFlBQW1CLE1BQThDOztRQUM3RCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQztRQUMvQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQUEsTUFBTSxDQUFDLE9BQU8sbUNBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ08sU0FBUyxDQUFJLElBQWEsRUFBRSxPQUFZO1FBQzlDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNyQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksRUFBRTtnQkFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQUU7b0JBQ3JCLE9BQU8sSUFBQSxhQUFJLEVBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lCQUMvQjthQUNKO1lBQ0QsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE9BQU8sSUFBQSxhQUFJLEVBQUksSUFBSSxJQUFJLGlCQUFpQixDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNKO0FBeENELHdDQXdDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjIgRXJpayBGb3J0dW5lXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0c1xuICogdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuICogY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSxcbiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gKiBTT0ZUV0FSRS5cbiAqL1xuXG5pbXBvcnQgeyBGYWlsdXJlLCBmYWlsIH0gZnJvbSAnLi4vcmVzdWx0JztcbmltcG9ydCB7IFZhbGlkYXRvciwgVmFsaWRhdG9yT3B0aW9ucyB9IGZyb20gJy4vdmFsaWRhdG9yJztcbmltcG9ydCB7IFZhbGlkYXRvckJhc2UsIFZhbGlkYXRvckJhc2VDb25zdHJ1Y3RvclBhcmFtcyB9IGZyb20gJy4vdmFsaWRhdG9yQmFzZSc7XG5cbi8qKlxuICogUGFyYW1ldGVycyB1c2VkIHRvIGNvbnN0cnVjdCBhIHtAbGluayBWYWxpZGF0aW9uLkNsYXNzZXMuQXJyYXlWYWxpZGF0b3IgfCBBcnJheVZhbGlkYXRvcn0uXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXJyYXlWYWxpZGF0b3JDb25zdHJ1Y3RvclBhcmFtczxULCBUQyA9IHVua25vd24+IGV4dGVuZHMgVmFsaWRhdG9yQmFzZUNvbnN0cnVjdG9yUGFyYW1zPFRbXSwgVEM+IHtcbiAgICB2YWxpZGF0ZUVsZW1lbnQ6IFZhbGlkYXRvcjxULCBUQz47XG59XG5cbi8qKlxuICogQW4gaW4tcGxhY2Uge0BsaW5rIFZhbGlkYXRpb24uVmFsaWRhdG9yIHwgVmFsaWRhdG9yfSBmb3IgYG51bWJlcmAgdmFsdWVzLlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgY2xhc3MgQXJyYXlWYWxpZGF0b3I8VCwgVEMgPSB1bmtub3duPiBleHRlbmRzIFZhbGlkYXRvckJhc2U8VFtdLCBUQz4ge1xuICAgIC8qKlxuICAgICAqIHtAbGluayBWYWxpZGF0aW9uLlZhbGlkYXRvck9wdGlvbnMgfCBPcHRpb25zfSB3aGljaCBhcHBseSB0byB0aGlzXG4gICAgICogdmFsaWRhdG9yLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBvcHRpb25zOiBWYWxpZGF0b3JPcHRpb25zPFRDPjtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBfdmFsaWRhdGVFbGVtZW50OiBWYWxpZGF0b3I8VCwgVEM+O1xuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBhIG5ldyB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLkFycmF5VmFsaWRhdG9yIHwgQXJyYXlWYWxpZGF0b3J9LlxuICAgICAqIEBwYXJhbSBwYXJhbXMgLSBPcHRpb25hbCB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLkFycmF5VmFsaWRhdG9yQ29uc3RydWN0b3JQYXJhbXMgfCBpbml0IHBhcmFtc30gZm9yIHRoZVxuICAgICAqIG5ldyB7QGxpbmsgVmFsaWRhdGlvbi5DbGFzc2VzLkFycmF5VmFsaWRhdG9yIHwgQXJyYXlWYWxpZGF0b3J9LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEFycmF5VmFsaWRhdG9yQ29uc3RydWN0b3JQYXJhbXM8VCwgVEM+KSB7XG4gICAgICAgIHN1cGVyKHBhcmFtcyk7XG4gICAgICAgIHRoaXMuX3ZhbGlkYXRlRWxlbWVudCA9IHBhcmFtcy52YWxpZGF0ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHBhcmFtcy5vcHRpb25zID8/IHt9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN0YXRpYyBtZXRob2Qgd2hpY2ggdmFsaWRhdGVzIHRoYXQgYSBzdXBwbGllZCBgdW5rbm93bmAgdmFsdWUgaXMgYSBgYXJyYXlgXG4gICAgICogYW5kIHRoYXQgZXZlcnkgZWxlbWVudCBvZiB0aGUgYXJyYXkgY2FuIGJlIHZhbGlkYXRlZCBieSB0aGUgc3VwcGxpZWQgYXJyYXlcbiAgICAgKiB2YWxpZGF0b3IuXG4gICAgICogQHBhcmFtIGZyb20gLSBUaGUgYHVua25vd25gIHZhbHVlIHRvIGJlIHRlc3RlZC5cbiAgICAgKiBAcmV0dXJucyBSZXR1cm5zIGB0cnVlYCBpZiBgZnJvbWAgaXMgYW4gYGFycmF5YCBvZiB2YWxpZCBlbGVtZW50cywgb3JcbiAgICAgKiB7QGxpbmsgRmFpbHVyZX0gd2l0aCBhbiBlcnJvciBtZXNzYWdlIGlmIG5vdC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgX3ZhbGlkYXRlPFQ+KGZyb206IHVua25vd24sIGNvbnRleHQ/OiBUQyk6IGJvb2xlYW4gfCBGYWlsdXJlPFQ+IHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZnJvbSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbSBvZiBmcm9tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fdmFsaWRhdGVFbGVtZW50LnZhbGlkYXRlKGVsZW0sIGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzU3VjY2VzcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsKHJlc3VsdC5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFpbDxUPihgXCIke2Zyb219XCI6IG5vdCBhbiBhcnJheWApO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,3 +1,4 @@
1
+ export { ArrayValidator, ArrayValidatorConstructorParams } from './array';
1
2
  export { StringValidator, StringValidatorConstructorParams } from './string';
2
3
  export { BooleanValidator, BooleanValidatorConstructorParams } from './boolean';
3
4
  export { NumberValidator, NumberValidatorConstructorParams } from './number';
@@ -1 +1 @@
1
- {"version":3,"file":"classes.d.ts","sourceRoot":"","sources":["../../src/validation/classes.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,eAAe,EAAE,gCAAgC,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,iCAAiC,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,gCAAgC,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"classes.d.ts","sourceRoot":"","sources":["../../src/validation/classes.ts"],"names":[],"mappings":"AAwBA,OAAO,EAAE,cAAc,EAAE,+BAA+B,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,gCAAgC,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,iCAAiC,EAAE,MAAM,WAAW,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,gCAAgC,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,gCAAgC,EAAE,sBAAsB,EAAE,MAAM,UAAU,CAAC"}