athena-query-result-pager 0.1.8 → 0.2.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 (3) hide show
  1. package/README.md +47 -9
  2. package/lib/index.js +15 -2
  3. package/package.json +4 -4
package/README.md CHANGED
@@ -1,6 +1,19 @@
1
1
  # Athena Query Result Pager
2
2
 
3
- Paginate AWS Athena query results with the AWS SDK v3. Fetches results page by page and supports raw rows or custom row parsing via [athena-query-result-parser](https://www.npmjs.com/package/athena-query-result-parser).
3
+ ![npm](https://img.shields.io/npm/v/athena-query-result-pager)
4
+ ![license](https://img.shields.io/npm/l/athena-query-result-pager)
5
+
6
+ Paginate AWS Athena query results with AWS SDK v3. This package fetches results page by page and supports raw rows or custom row parsing via [athena-query-result-parser](https://www.npmjs.com/package/athena-query-result-parser).
7
+
8
+ ## Features
9
+
10
+ - Paginates Athena `GetQueryResults` responses with `nextToken`.
11
+ - Supports raw rows (`ParsedRow`) and custom typed row parsing.
12
+ - Provides async generators for page-by-page and row-by-row iteration.
13
+ - Includes fail-fast input validation:
14
+ - `maxResults` must be an integer in `1..1000`.
15
+ - `queryExecutionId` must be a non-empty string.
16
+ - Exposes a simple static utility: `AthenaQueryResultPager.hasNextPage(...)`.
4
17
 
5
18
  ## Installation
6
19
 
@@ -8,13 +21,15 @@ Paginate AWS Athena query results with the AWS SDK v3. Fetches results page by p
8
21
  npm install athena-query-result-pager
9
22
  ```
10
23
 
11
- **Peer dependencies:** `@aws-sdk/client-athena`, `athena-query-result-parser` (installed automatically if missing).
24
+ ```bash
25
+ yarn add athena-query-result-pager
26
+ ```
12
27
 
13
- **Requirements:** Node.js >= 20.
28
+ Dependencies: `@aws-sdk/client-athena`, `athena-query-result-parser`.
14
29
 
15
30
  ## Usage
16
31
 
17
- ### Create a pager
32
+ ### Create a pager instance
18
33
 
19
34
  ```ts
20
35
  import { AthenaClient } from '@aws-sdk/client-athena';
@@ -22,12 +37,12 @@ import { AthenaQueryResultPager } from 'athena-query-result-pager';
22
37
 
23
38
  const client = new AthenaClient({ region: 'us-east-1' });
24
39
  const pager = new AthenaQueryResultPager(client, {
25
- maxResults: 1000, // optional, default: 1000
26
- queryResultType: 'DATA_ROWS', // optional, default: 'DATA_ROWS'
40
+ maxResults: 1000,
41
+ queryResultType: 'DATA_ROWS',
27
42
  });
28
43
  ```
29
44
 
30
- ### Fetch a single page (raw rows)
45
+ ### Fetch one page (raw rows)
31
46
 
32
47
  ```ts
33
48
  const page = await pager.fetchPage('query-execution-id');
@@ -39,7 +54,7 @@ if (AthenaQueryResultPager.hasNextPage(page)) {
39
54
  }
40
55
  ```
41
56
 
42
- ### Fetch a single page with a custom row parser
57
+ ### Fetch one page with a custom row parser
43
58
 
44
59
  ```ts
45
60
  import type { RowParser } from 'athena-query-result-pager';
@@ -84,6 +99,24 @@ When processing a different query with the same pager instance, reset the parser
84
99
  pager.reset();
85
100
  ```
86
101
 
102
+ ## Options
103
+
104
+ ### `PagerOptions`
105
+
106
+ - `maxResults?: number`
107
+ - Default: `1000`
108
+ - Valid range: integer `1..1000` (Athena limit)
109
+ - Throws `RangeError` when invalid
110
+ - `queryResultType?: 'DATA_ROWS'`
111
+ - Default: `'DATA_ROWS'`
112
+
113
+ ### Method input validation
114
+
115
+ - `fetchPage(queryExecutionId, nextToken?)`
116
+ - `fetchPageWith(queryExecutionId, rowParser, nextToken?)`
117
+
118
+ Both methods throw an error if `queryExecutionId` is empty or whitespace only.
119
+
87
120
  ## API
88
121
 
89
122
  ### `AthenaQueryResultPager`
@@ -103,6 +136,11 @@ pager.reset();
103
136
  - **`PagerOptions`** — `{ maxResults?: number; queryResultType?: 'DATA_ROWS' }`
104
137
  - **`ParsedRow`**, **`RowParser<T>`** — re-exported from `athena-query-result-parser`.
105
138
 
139
+ ## Requirements
140
+
141
+ - Node.js `>= 20.0.0`
142
+ - AWS SDK v3 client: `@aws-sdk/client-athena`
143
+
106
144
  ## License
107
145
 
108
- This project is licensed under the Apache-2.0 License.
146
+ This project is licensed under the (Apache-2.0) License.
package/lib/index.js CHANGED
@@ -5,6 +5,9 @@ const client_athena_1 = require("@aws-sdk/client-athena");
5
5
  const athena_query_result_parser_1 = require("athena-query-result-parser");
6
6
  /** Default maximum number of rows per page. */
7
7
  const DEFAULT_MAX_RESULTS = 1000;
8
+ /** Minimum and maximum allowed by Athena GetQueryResults. */
9
+ const MIN_MAX_RESULTS = 1;
10
+ const MAX_MAX_RESULTS = 1000;
8
11
  /** Default query result type for GetQueryResults. */
9
12
  const DEFAULT_QUERY_RESULT_TYPE = 'DATA_ROWS';
10
13
  /**
@@ -20,9 +23,13 @@ class AthenaQueryResultPager {
20
23
  return pageResult.nextToken !== undefined;
21
24
  }
22
25
  constructor(client, options = {}) {
26
+ const maxResults = options.maxResults ?? DEFAULT_MAX_RESULTS;
27
+ if (!Number.isInteger(maxResults) || maxResults < MIN_MAX_RESULTS || maxResults > MAX_MAX_RESULTS) {
28
+ throw new RangeError(`options.maxResults must be an integer between ${MIN_MAX_RESULTS} and ${MAX_MAX_RESULTS}, got ${String(maxResults)}`);
29
+ }
23
30
  this.client = client;
24
31
  this.options = {
25
- maxResults: options.maxResults ?? DEFAULT_MAX_RESULTS,
32
+ maxResults,
26
33
  queryResultType: options.queryResultType ?? DEFAULT_QUERY_RESULT_TYPE,
27
34
  };
28
35
  this.parser = new athena_query_result_parser_1.AthenaQueryResultParser();
@@ -34,6 +41,9 @@ class AthenaQueryResultPager {
34
41
  * @returns Page result.
35
42
  */
36
43
  async fetchPage(queryExecutionId, nextToken) {
44
+ if (queryExecutionId.trim() === '') {
45
+ throw new Error('queryExecutionId must be a non-empty string');
46
+ }
37
47
  const input = {
38
48
  QueryExecutionId: queryExecutionId,
39
49
  NextToken: nextToken,
@@ -55,6 +65,9 @@ class AthenaQueryResultPager {
55
65
  * @returns Page result.
56
66
  */
57
67
  async fetchPageWith(queryExecutionId, rowParser, nextToken) {
68
+ if (queryExecutionId.trim() === '') {
69
+ throw new Error('queryExecutionId must be a non-empty string');
70
+ }
58
71
  const input = {
59
72
  QueryExecutionId: queryExecutionId,
60
73
  NextToken: nextToken,
@@ -113,4 +126,4 @@ class AthenaQueryResultPager {
113
126
  }
114
127
  }
115
128
  exports.AthenaQueryResultPager = AthenaQueryResultPager;
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMERBQWdIO0FBQ2hILDJFQUFxRztBQUVyRywrQ0FBK0M7QUFDL0MsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7QUFFakMscURBQXFEO0FBQ3JELE1BQU0seUJBQXlCLEdBQUcsV0FBb0IsQ0FBQztBQXdCdkQ7OztHQUdHO0FBQ0gsTUFBYSxzQkFBc0I7SUFFakM7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBSSxVQUF5QjtRQUM3QyxPQUFPLFVBQVUsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDO0lBQzVDLENBQUM7SUFNRCxZQUFZLE1BQW9CLEVBQUUsVUFBd0IsRUFBRTtRQUMxRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLElBQUksbUJBQW1CO1lBQ3JELGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZSxJQUFJLHlCQUF5QjtTQUN0RSxDQUFDO1FBQ0YsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLG9EQUF1QixFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLFNBQVMsQ0FDYixnQkFBd0IsRUFDeEIsU0FBa0I7UUFFbEIsTUFBTSxLQUFLLEdBQWdDO1lBQ3pDLGdCQUFnQixFQUFFLGdCQUFnQjtZQUNsQyxTQUFTLEVBQUUsU0FBUztZQUNwQixVQUFVLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVO1NBQ3BDLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksc0NBQXNCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUUzRSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFNUQsT0FBTztZQUNMLElBQUk7WUFDSixTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7WUFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLGFBQWEsQ0FDakIsZ0JBQXdCLEVBQ3hCLFNBQXVCLEVBQ3ZCLFNBQWtCO1FBRWxCLE1BQU0sS0FBSyxHQUFnQztZQUN6QyxnQkFBZ0IsRUFBRSxnQkFBZ0I7WUFDbEMsU0FBUyxFQUFFLFNBQVM7WUFDcEIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtTQUNwQyxDQUFDO1FBRUYsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLHNDQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFM0UsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTNFLE9BQU87WUFDTCxJQUFJO1lBQ0osU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTTtTQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxDQUFDLFlBQVksQ0FDakIsZ0JBQXdCO1FBRXhCLElBQUksU0FBNkIsQ0FBQztRQUVsQyxHQUFHLENBQUM7WUFDRixNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDL0QsTUFBTSxJQUFJLENBQUM7WUFDWCxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUM3QixDQUFDLFFBQVEsU0FBUyxFQUFFO0lBQ3RCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLENBQ3JCLGdCQUF3QixFQUN4QixTQUF1QjtRQUV2QixJQUFJLFNBQTZCLENBQUM7UUFFbEMsR0FBRyxDQUFDO1lBQ0YsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM5RSxNQUFNLElBQUksQ0FBQztZQUNYLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQzdCLENBQUMsUUFBUSxTQUFTLEVBQUU7SUFDdEIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsQ0FBQyxXQUFXLENBQ2hCLGdCQUF3QixFQUN4QixTQUF1QjtRQUV2QixJQUFJLEtBQUssRUFBRSxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUM1RSxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxHQUFHLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksb0RBQXVCLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0NBQ0Y7QUF2SUQsd0RBdUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXRoZW5hQ2xpZW50LCBHZXRRdWVyeVJlc3VsdHNDb21tYW5kLCB0eXBlIEdldFF1ZXJ5UmVzdWx0c0NvbW1hbmRJbnB1dCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1hdGhlbmEnO1xuaW1wb3J0IHsgQXRoZW5hUXVlcnlSZXN1bHRQYXJzZXIsIHR5cGUgUGFyc2VkUm93LCB0eXBlIFJvd1BhcnNlciB9IGZyb20gJ2F0aGVuYS1xdWVyeS1yZXN1bHQtcGFyc2VyJztcblxuLyoqIERlZmF1bHQgbWF4aW11bSBudW1iZXIgb2Ygcm93cyBwZXIgcGFnZS4gKi9cbmNvbnN0IERFRkFVTFRfTUFYX1JFU1VMVFMgPSAxMDAwO1xuXG4vKiogRGVmYXVsdCBxdWVyeSByZXN1bHQgdHlwZSBmb3IgR2V0UXVlcnlSZXN1bHRzLiAqL1xuY29uc3QgREVGQVVMVF9RVUVSWV9SRVNVTFRfVFlQRSA9ICdEQVRBX1JPV1MnIGFzIGNvbnN0O1xuXG4vKipcbiAqIFR5cGUgZm9yIGEgc2luZ2xlIHBhZ2Ugb2YgcXVlcnkgcmVzdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdlUmVzdWx0PFQ+IHtcbiAgLyoqIFBhcnNlZCByb3cgZGF0YS4gKi9cbiAgcm93czogVFtdO1xuICAvKiogVG9rZW4gZm9yIHRoZSBuZXh0IHBhZ2UgKHVuZGVmaW5lZCBpZiBubyBtb3JlIHBhZ2VzKS4gKi9cbiAgbmV4dFRva2VuPzogc3RyaW5nO1xuICAvKiogTnVtYmVyIG9mIHJvd3MgaW4gdGhpcyBwYWdlLiAqL1xuICByb3dDb3VudDogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBwYWdlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdlck9wdGlvbnMge1xuICAvKiogTWF4aW11bSBudW1iZXIgb2Ygcm93cyBwZXIgcGFnZSAoZGVmYXVsdDogMTAwMCkuICovXG4gIG1heFJlc3VsdHM/OiBudW1iZXI7XG4gIC8qKiBRdWVyeSByZXN1bHQgdHlwZSAoZGVmYXVsdDogJ0RBVEFfUk9XUycpLiAqL1xuICBxdWVyeVJlc3VsdFR5cGU/OiAnREFUQV9ST1dTJztcbn1cblxuLyoqXG4gKiBBdGhlbmFRdWVyeVJlc3VsdFBhZ2VyXG4gKiBGZXRjaGVzIEF0aGVuYSBxdWVyeSByZXN1bHRzIHBhZ2UgYnkgcGFnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEF0aGVuYVF1ZXJ5UmVzdWx0UGFnZXIge1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlcmUgaXMgYSBuZXh0IHBhZ2UuXG4gICAqIEBwYXJhbSBwYWdlUmVzdWx0IC0gUHJldmlvdXMgcGFnZSByZXN1bHQuXG4gICAqL1xuICBzdGF0aWMgaGFzTmV4dFBhZ2U8VD4ocGFnZVJlc3VsdDogUGFnZVJlc3VsdDxUPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwYWdlUmVzdWx0Lm5leHRUb2tlbiAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ6IEF0aGVuYUNsaWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBSZXF1aXJlZDxQYWdlck9wdGlvbnM+O1xuICBwcml2YXRlIHBhcnNlcjogQXRoZW5hUXVlcnlSZXN1bHRQYXJzZXI7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBBdGhlbmFDbGllbnQsIG9wdGlvbnM6IFBhZ2VyT3B0aW9ucyA9IHt9KSB7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgbWF4UmVzdWx0czogb3B0aW9ucy5tYXhSZXN1bHRzID8/IERFRkFVTFRfTUFYX1JFU1VMVFMsXG4gICAgICBxdWVyeVJlc3VsdFR5cGU6IG9wdGlvbnMucXVlcnlSZXN1bHRUeXBlID8/IERFRkFVTFRfUVVFUllfUkVTVUxUX1RZUEUsXG4gICAgfTtcbiAgICB0aGlzLnBhcnNlciA9IG5ldyBBdGhlbmFRdWVyeVJlc3VsdFBhcnNlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgb25lIHBhZ2Ugb2YgZGF0YSBhcyByYXcgUGFyc2VkUm93LlxuICAgKiBAcGFyYW0gcXVlcnlFeGVjdXRpb25JZCAtIFF1ZXJ5IGV4ZWN1dGlvbiBJRC5cbiAgICogQHBhcmFtIG5leHRUb2tlbiAtIFRva2VuIGZvciB0aGUgbmV4dCBwYWdlICh1bmRlZmluZWQgb24gZmlyc3QgY2FsbCkuXG4gICAqIEByZXR1cm5zIFBhZ2UgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgZmV0Y2hQYWdlKFxuICAgIHF1ZXJ5RXhlY3V0aW9uSWQ6IHN0cmluZyxcbiAgICBuZXh0VG9rZW4/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8UGFnZVJlc3VsdDxQYXJzZWRSb3c+PiB7XG4gICAgY29uc3QgaW5wdXQ6IEdldFF1ZXJ5UmVzdWx0c0NvbW1hbmRJbnB1dCA9IHtcbiAgICAgIFF1ZXJ5RXhlY3V0aW9uSWQ6IHF1ZXJ5RXhlY3V0aW9uSWQsXG4gICAgICBOZXh0VG9rZW46IG5leHRUb2tlbixcbiAgICAgIE1heFJlc3VsdHM6IHRoaXMub3B0aW9ucy5tYXhSZXN1bHRzLFxuICAgIH07XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnNlbmQobmV3IEdldFF1ZXJ5UmVzdWx0c0NvbW1hbmQoaW5wdXQpKTtcblxuICAgIGNvbnN0IHJvd3MgPSB0aGlzLnBhcnNlci5wYXJzZVJlc3VsdFNldChyZXNwb25zZS5SZXN1bHRTZXQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJvd3MsXG4gICAgICBuZXh0VG9rZW46IHJlc3BvbnNlLk5leHRUb2tlbixcbiAgICAgIHJvd0NvdW50OiByb3dzLmxlbmd0aCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgb25lIHBhZ2Ugb2YgZGF0YSBhbmQgdHJhbnNmb3JtcyBpdCB3aXRoIGEgY3VzdG9tIHJvdyBwYXJzZXIuXG4gICAqIEBwYXJhbSBxdWVyeUV4ZWN1dGlvbklkIC0gUXVlcnkgZXhlY3V0aW9uIElELlxuICAgKiBAcGFyYW0gcm93UGFyc2VyIC0gUm93IHBhcnNlci5cbiAgICogQHBhcmFtIG5leHRUb2tlbiAtIFRva2VuIGZvciB0aGUgbmV4dCBwYWdlICh1bmRlZmluZWQgb24gZmlyc3QgY2FsbCkuXG4gICAqIEByZXR1cm5zIFBhZ2UgcmVzdWx0LlxuICAgKi9cbiAgYXN5bmMgZmV0Y2hQYWdlV2l0aDxUPihcbiAgICBxdWVyeUV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gICAgcm93UGFyc2VyOiBSb3dQYXJzZXI8VD4sXG4gICAgbmV4dFRva2VuPzogc3RyaW5nLFxuICApOiBQcm9taXNlPFBhZ2VSZXN1bHQ8VD4+IHtcbiAgICBjb25zdCBpbnB1dDogR2V0UXVlcnlSZXN1bHRzQ29tbWFuZElucHV0ID0ge1xuICAgICAgUXVlcnlFeGVjdXRpb25JZDogcXVlcnlFeGVjdXRpb25JZCxcbiAgICAgIE5leHRUb2tlbjogbmV4dFRva2VuLFxuICAgICAgTWF4UmVzdWx0czogdGhpcy5vcHRpb25zLm1heFJlc3VsdHMsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuc2VuZChuZXcgR2V0UXVlcnlSZXN1bHRzQ29tbWFuZChpbnB1dCkpO1xuXG4gICAgY29uc3Qgcm93cyA9IHRoaXMucGFyc2VyLnBhcnNlUmVzdWx0U2V0V2l0aChyZXNwb25zZS5SZXN1bHRTZXQsIHJvd1BhcnNlcik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcm93cyxcbiAgICAgIG5leHRUb2tlbjogcmVzcG9uc2UuTmV4dFRva2VuLFxuICAgICAgcm93Q291bnQ6IHJvd3MubGVuZ3RoLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZXMgcGFnZSBieSBwYWdlIHZpYSBBc3luY0dlbmVyYXRvciAocmF3IFBhcnNlZFJvdykuXG4gICAqIEBwYXJhbSBxdWVyeUV4ZWN1dGlvbklkIC0gUXVlcnkgZXhlY3V0aW9uIElELlxuICAgKi9cbiAgYXN5bmMgKml0ZXJhdGVQYWdlcyhcbiAgICBxdWVyeUV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gICk6IEFzeW5jR2VuZXJhdG9yPFBhZ2VSZXN1bHQ8UGFyc2VkUm93Pj4ge1xuICAgIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGRvIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLmZldGNoUGFnZShxdWVyeUV4ZWN1dGlvbklkLCBuZXh0VG9rZW4pO1xuICAgICAgeWllbGQgcGFnZTtcbiAgICAgIG5leHRUb2tlbiA9IHBhZ2UubmV4dFRva2VuO1xuICAgIH0gd2hpbGUgKG5leHRUb2tlbik7XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZXMgcGFnZSBieSBwYWdlIHZpYSBBc3luY0dlbmVyYXRvciB3aXRoIGEgY3VzdG9tIHJvdyBwYXJzZXIuXG4gICAqIEBwYXJhbSBxdWVyeUV4ZWN1dGlvbklkIC0gUXVlcnkgZXhlY3V0aW9uIElELlxuICAgKiBAcGFyYW0gcm93UGFyc2VyIC0gUm93IHBhcnNlci5cbiAgICovXG4gIGFzeW5jICppdGVyYXRlUGFnZXNXaXRoPFQ+KFxuICAgIHF1ZXJ5RXhlY3V0aW9uSWQ6IHN0cmluZyxcbiAgICByb3dQYXJzZXI6IFJvd1BhcnNlcjxUPixcbiAgKTogQXN5bmNHZW5lcmF0b3I8UGFnZVJlc3VsdDxUPj4ge1xuICAgIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGRvIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLmZldGNoUGFnZVdpdGgocXVlcnlFeGVjdXRpb25JZCwgcm93UGFyc2VyLCBuZXh0VG9rZW4pO1xuICAgICAgeWllbGQgcGFnZTtcbiAgICAgIG5leHRUb2tlbiA9IHBhZ2UubmV4dFRva2VuO1xuICAgIH0gd2hpbGUgKG5leHRUb2tlbik7XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZXMgcm93IGJ5IHJvdyB2aWEgQXN5bmNHZW5lcmF0b3IgKG1lbW9yeS1lZmZpY2llbnQpLlxuICAgKiBAcGFyYW0gcXVlcnlFeGVjdXRpb25JZCAtIFF1ZXJ5IGV4ZWN1dGlvbiBJRC5cbiAgICogQHBhcmFtIHJvd1BhcnNlciAtIFJvdyBwYXJzZXIuXG4gICAqL1xuICBhc3luYyAqaXRlcmF0ZVJvd3M8VD4oXG4gICAgcXVlcnlFeGVjdXRpb25JZDogc3RyaW5nLFxuICAgIHJvd1BhcnNlcjogUm93UGFyc2VyPFQ+LFxuICApOiBBc3luY0dlbmVyYXRvcjxUPiB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBwYWdlIG9mIHRoaXMuaXRlcmF0ZVBhZ2VzV2l0aChxdWVyeUV4ZWN1dGlvbklkLCByb3dQYXJzZXIpKSB7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiBwYWdlLnJvd3MpIHtcbiAgICAgICAgeWllbGQgcm93O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIHBhcnNlciBzdGF0ZS4gQ2FsbCBiZWZvcmUgcHJvY2Vzc2luZyBhIG5ldyBxdWVyeS5cbiAgICovXG4gIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMucGFyc2VyID0gbmV3IEF0aGVuYVF1ZXJ5UmVzdWx0UGFyc2VyKCk7XG4gIH1cbn1cblxuLyoqIFJlLWV4cG9ydCBvZiB0eXBlcyBmcm9tIGF0aGVuYS1xdWVyeS1yZXN1bHQtcGFyc2VyLiAqL1xuZXhwb3J0IHR5cGUgeyBQYXJzZWRSb3csIFJvd1BhcnNlciB9OyJdfQ==
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMERBQWdIO0FBQ2hILDJFQUFxRztBQUVyRywrQ0FBK0M7QUFDL0MsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUM7QUFDakMsNkRBQTZEO0FBQzdELE1BQU0sZUFBZSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUM7QUFFN0IscURBQXFEO0FBQ3JELE1BQU0seUJBQXlCLEdBQUcsV0FBb0IsQ0FBQztBQXdCdkQ7OztHQUdHO0FBQ0gsTUFBYSxzQkFBc0I7SUFFakM7OztPQUdHO0lBQ0gsTUFBTSxDQUFDLFdBQVcsQ0FBSSxVQUF5QjtRQUM3QyxPQUFPLFVBQVUsQ0FBQyxTQUFTLEtBQUssU0FBUyxDQUFDO0lBQzVDLENBQUM7SUFNRCxZQUFZLE1BQW9CLEVBQUUsVUFBd0IsRUFBRTtRQUMxRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLG1CQUFtQixDQUFDO1FBQzdELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsR0FBRyxlQUFlLElBQUksVUFBVSxHQUFHLGVBQWUsRUFBRSxDQUFDO1lBQ2xHLE1BQU0sSUFBSSxVQUFVLENBQ2xCLGlEQUFpRCxlQUFlLFFBQVEsZUFBZSxTQUFTLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUNySCxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixVQUFVO1lBQ1YsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlLElBQUkseUJBQXlCO1NBQ3RFLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksb0RBQXVCLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7O09BS0c7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LENBQUM7WUFDNUUsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sR0FBRyxDQUFDO1lBQ1osQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLG9EQUF1QixFQUFFLENBQUM7SUFDOUMsQ0FBQztDQUNGO0FBdEpELHdEQXNKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEF0aGVuYUNsaWVudCwgR2V0UXVlcnlSZXN1bHRzQ29tbWFuZCwgdHlwZSBHZXRRdWVyeVJlc3VsdHNDb21tYW5kSW5wdXQgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtYXRoZW5hJztcbmltcG9ydCB7IEF0aGVuYVF1ZXJ5UmVzdWx0UGFyc2VyLCB0eXBlIFBhcnNlZFJvdywgdHlwZSBSb3dQYXJzZXIgfSBmcm9tICdhdGhlbmEtcXVlcnktcmVzdWx0LXBhcnNlcic7XG5cbi8qKiBEZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIHJvd3MgcGVyIHBhZ2UuICovXG5jb25zdCBERUZBVUxUX01BWF9SRVNVTFRTID0gMTAwMDtcbi8qKiBNaW5pbXVtIGFuZCBtYXhpbXVtIGFsbG93ZWQgYnkgQXRoZW5hIEdldFF1ZXJ5UmVzdWx0cy4gKi9cbmNvbnN0IE1JTl9NQVhfUkVTVUxUUyA9IDE7XG5jb25zdCBNQVhfTUFYX1JFU1VMVFMgPSAxMDAwO1xuXG4vKiogRGVmYXVsdCBxdWVyeSByZXN1bHQgdHlwZSBmb3IgR2V0UXVlcnlSZXN1bHRzLiAqL1xuY29uc3QgREVGQVVMVF9RVUVSWV9SRVNVTFRfVFlQRSA9ICdEQVRBX1JPV1MnIGFzIGNvbnN0O1xuXG4vKipcbiAqIFR5cGUgZm9yIGEgc2luZ2xlIHBhZ2Ugb2YgcXVlcnkgcmVzdWx0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdlUmVzdWx0PFQ+IHtcbiAgLyoqIFBhcnNlZCByb3cgZGF0YS4gKi9cbiAgcm93czogVFtdO1xuICAvKiogVG9rZW4gZm9yIHRoZSBuZXh0IHBhZ2UgKHVuZGVmaW5lZCBpZiBubyBtb3JlIHBhZ2VzKS4gKi9cbiAgbmV4dFRva2VuPzogc3RyaW5nO1xuICAvKiogTnVtYmVyIG9mIHJvd3MgaW4gdGhpcyBwYWdlLiAqL1xuICByb3dDb3VudDogbnVtYmVyO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBwYWdlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYWdlck9wdGlvbnMge1xuICAvKiogTWF4aW11bSBudW1iZXIgb2Ygcm93cyBwZXIgcGFnZSAoZGVmYXVsdDogMTAwMCkuICovXG4gIG1heFJlc3VsdHM/OiBudW1iZXI7XG4gIC8qKiBRdWVyeSByZXN1bHQgdHlwZSAoZGVmYXVsdDogJ0RBVEFfUk9XUycpLiAqL1xuICBxdWVyeVJlc3VsdFR5cGU/OiAnREFUQV9ST1dTJztcbn1cblxuLyoqXG4gKiBBdGhlbmFRdWVyeVJlc3VsdFBhZ2VyXG4gKiBGZXRjaGVzIEF0aGVuYSBxdWVyeSByZXN1bHRzIHBhZ2UgYnkgcGFnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEF0aGVuYVF1ZXJ5UmVzdWx0UGFnZXIge1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlcmUgaXMgYSBuZXh0IHBhZ2UuXG4gICAqIEBwYXJhbSBwYWdlUmVzdWx0IC0gUHJldmlvdXMgcGFnZSByZXN1bHQuXG4gICAqL1xuICBzdGF0aWMgaGFzTmV4dFBhZ2U8VD4ocGFnZVJlc3VsdDogUGFnZVJlc3VsdDxUPik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwYWdlUmVzdWx0Lm5leHRUb2tlbiAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnQ6IEF0aGVuYUNsaWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBSZXF1aXJlZDxQYWdlck9wdGlvbnM+O1xuICBwcml2YXRlIHBhcnNlcjogQXRoZW5hUXVlcnlSZXN1bHRQYXJzZXI7XG5cbiAgY29uc3RydWN0b3IoY2xpZW50OiBBdGhlbmFDbGllbnQsIG9wdGlvbnM6IFBhZ2VyT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgbWF4UmVzdWx0cyA9IG9wdGlvbnMubWF4UmVzdWx0cyA/PyBERUZBVUxUX01BWF9SRVNVTFRTO1xuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXN1bHRzKSB8fCBtYXhSZXN1bHRzIDwgTUlOX01BWF9SRVNVTFRTIHx8IG1heFJlc3VsdHMgPiBNQVhfTUFYX1JFU1VMVFMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFxuICAgICAgICBgb3B0aW9ucy5tYXhSZXN1bHRzIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuICR7TUlOX01BWF9SRVNVTFRTfSBhbmQgJHtNQVhfTUFYX1JFU1VMVFN9LCBnb3QgJHtTdHJpbmcobWF4UmVzdWx0cyl9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgbWF4UmVzdWx0cyxcbiAgICAgIHF1ZXJ5UmVzdWx0VHlwZTogb3B0aW9ucy5xdWVyeVJlc3VsdFR5cGUgPz8gREVGQVVMVF9RVUVSWV9SRVNVTFRfVFlQRSxcbiAgICB9O1xuICAgIHRoaXMucGFyc2VyID0gbmV3IEF0aGVuYVF1ZXJ5UmVzdWx0UGFyc2VyKCk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBvbmUgcGFnZSBvZiBkYXRhIGFzIHJhdyBQYXJzZWRSb3cuXG4gICAqIEBwYXJhbSBxdWVyeUV4ZWN1dGlvbklkIC0gUXVlcnkgZXhlY3V0aW9uIElELlxuICAgKiBAcGFyYW0gbmV4dFRva2VuIC0gVG9rZW4gZm9yIHRoZSBuZXh0IHBhZ2UgKHVuZGVmaW5lZCBvbiBmaXJzdCBjYWxsKS5cbiAgICogQHJldHVybnMgUGFnZSByZXN1bHQuXG4gICAqL1xuICBhc3luYyBmZXRjaFBhZ2UoXG4gICAgcXVlcnlFeGVjdXRpb25JZDogc3RyaW5nLFxuICAgIG5leHRUb2tlbj86IHN0cmluZyxcbiAgKTogUHJvbWlzZTxQYWdlUmVzdWx0PFBhcnNlZFJvdz4+IHtcbiAgICBpZiAocXVlcnlFeGVjdXRpb25JZC50cmltKCkgPT09ICcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3F1ZXJ5RXhlY3V0aW9uSWQgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dDogR2V0UXVlcnlSZXN1bHRzQ29tbWFuZElucHV0ID0ge1xuICAgICAgUXVlcnlFeGVjdXRpb25JZDogcXVlcnlFeGVjdXRpb25JZCxcbiAgICAgIE5leHRUb2tlbjogbmV4dFRva2VuLFxuICAgICAgTWF4UmVzdWx0czogdGhpcy5vcHRpb25zLm1heFJlc3VsdHMsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnQuc2VuZChuZXcgR2V0UXVlcnlSZXN1bHRzQ29tbWFuZChpbnB1dCkpO1xuXG4gICAgY29uc3Qgcm93cyA9IHRoaXMucGFyc2VyLnBhcnNlUmVzdWx0U2V0KHJlc3BvbnNlLlJlc3VsdFNldCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcm93cyxcbiAgICAgIG5leHRUb2tlbjogcmVzcG9uc2UuTmV4dFRva2VuLFxuICAgICAgcm93Q291bnQ6IHJvd3MubGVuZ3RoLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBvbmUgcGFnZSBvZiBkYXRhIGFuZCB0cmFuc2Zvcm1zIGl0IHdpdGggYSBjdXN0b20gcm93IHBhcnNlci5cbiAgICogQHBhcmFtIHF1ZXJ5RXhlY3V0aW9uSWQgLSBRdWVyeSBleGVjdXRpb24gSUQuXG4gICAqIEBwYXJhbSByb3dQYXJzZXIgLSBSb3cgcGFyc2VyLlxuICAgKiBAcGFyYW0gbmV4dFRva2VuIC0gVG9rZW4gZm9yIHRoZSBuZXh0IHBhZ2UgKHVuZGVmaW5lZCBvbiBmaXJzdCBjYWxsKS5cbiAgICogQHJldHVybnMgUGFnZSByZXN1bHQuXG4gICAqL1xuICBhc3luYyBmZXRjaFBhZ2VXaXRoPFQ+KFxuICAgIHF1ZXJ5RXhlY3V0aW9uSWQ6IHN0cmluZyxcbiAgICByb3dQYXJzZXI6IFJvd1BhcnNlcjxUPixcbiAgICBuZXh0VG9rZW4/OiBzdHJpbmcsXG4gICk6IFByb21pc2U8UGFnZVJlc3VsdDxUPj4ge1xuICAgIGlmIChxdWVyeUV4ZWN1dGlvbklkLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncXVlcnlFeGVjdXRpb25JZCBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0OiBHZXRRdWVyeVJlc3VsdHNDb21tYW5kSW5wdXQgPSB7XG4gICAgICBRdWVyeUV4ZWN1dGlvbklkOiBxdWVyeUV4ZWN1dGlvbklkLFxuICAgICAgTmV4dFRva2VuOiBuZXh0VG9rZW4sXG4gICAgICBNYXhSZXN1bHRzOiB0aGlzLm9wdGlvbnMubWF4UmVzdWx0cyxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5zZW5kKG5ldyBHZXRRdWVyeVJlc3VsdHNDb21tYW5kKGlucHV0KSk7XG5cbiAgICBjb25zdCByb3dzID0gdGhpcy5wYXJzZXIucGFyc2VSZXN1bHRTZXRXaXRoKHJlc3BvbnNlLlJlc3VsdFNldCwgcm93UGFyc2VyKTtcblxuICAgIHJldHVybiB7XG4gICAgICByb3dzLFxuICAgICAgbmV4dFRva2VuOiByZXNwb25zZS5OZXh0VG9rZW4sXG4gICAgICByb3dDb3VudDogcm93cy5sZW5ndGgsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBwYWdlIGJ5IHBhZ2UgdmlhIEFzeW5jR2VuZXJhdG9yIChyYXcgUGFyc2VkUm93KS5cbiAgICogQHBhcmFtIHF1ZXJ5RXhlY3V0aW9uSWQgLSBRdWVyeSBleGVjdXRpb24gSUQuXG4gICAqL1xuICBhc3luYyAqaXRlcmF0ZVBhZ2VzKFxuICAgIHF1ZXJ5RXhlY3V0aW9uSWQ6IHN0cmluZyxcbiAgKTogQXN5bmNHZW5lcmF0b3I8UGFnZVJlc3VsdDxQYXJzZWRSb3c+PiB7XG4gICAgbGV0IG5leHRUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHRoaXMuZmV0Y2hQYWdlKHF1ZXJ5RXhlY3V0aW9uSWQsIG5leHRUb2tlbik7XG4gICAgICB5aWVsZCBwYWdlO1xuICAgICAgbmV4dFRva2VuID0gcGFnZS5uZXh0VG9rZW47XG4gICAgfSB3aGlsZSAobmV4dFRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBwYWdlIGJ5IHBhZ2UgdmlhIEFzeW5jR2VuZXJhdG9yIHdpdGggYSBjdXN0b20gcm93IHBhcnNlci5cbiAgICogQHBhcmFtIHF1ZXJ5RXhlY3V0aW9uSWQgLSBRdWVyeSBleGVjdXRpb24gSUQuXG4gICAqIEBwYXJhbSByb3dQYXJzZXIgLSBSb3cgcGFyc2VyLlxuICAgKi9cbiAgYXN5bmMgKml0ZXJhdGVQYWdlc1dpdGg8VD4oXG4gICAgcXVlcnlFeGVjdXRpb25JZDogc3RyaW5nLFxuICAgIHJvd1BhcnNlcjogUm93UGFyc2VyPFQ+LFxuICApOiBBc3luY0dlbmVyYXRvcjxQYWdlUmVzdWx0PFQ+PiB7XG4gICAgbGV0IG5leHRUb2tlbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHRoaXMuZmV0Y2hQYWdlV2l0aChxdWVyeUV4ZWN1dGlvbklkLCByb3dQYXJzZXIsIG5leHRUb2tlbik7XG4gICAgICB5aWVsZCBwYWdlO1xuICAgICAgbmV4dFRva2VuID0gcGFnZS5uZXh0VG9rZW47XG4gICAgfSB3aGlsZSAobmV4dFRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyByb3cgYnkgcm93IHZpYSBBc3luY0dlbmVyYXRvciAobWVtb3J5LWVmZmljaWVudCkuXG4gICAqIEBwYXJhbSBxdWVyeUV4ZWN1dGlvbklkIC0gUXVlcnkgZXhlY3V0aW9uIElELlxuICAgKiBAcGFyYW0gcm93UGFyc2VyIC0gUm93IHBhcnNlci5cbiAgICovXG4gIGFzeW5jICppdGVyYXRlUm93czxUPihcbiAgICBxdWVyeUV4ZWN1dGlvbklkOiBzdHJpbmcsXG4gICAgcm93UGFyc2VyOiBSb3dQYXJzZXI8VD4sXG4gICk6IEFzeW5jR2VuZXJhdG9yPFQ+IHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IHBhZ2Ugb2YgdGhpcy5pdGVyYXRlUGFnZXNXaXRoKHF1ZXJ5RXhlY3V0aW9uSWQsIHJvd1BhcnNlcikpIHtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIHBhZ2Uucm93cykge1xuICAgICAgICB5aWVsZCByb3c7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgcGFyc2VyIHN0YXRlLiBDYWxsIGJlZm9yZSBwcm9jZXNzaW5nIGEgbmV3IHF1ZXJ5LlxuICAgKi9cbiAgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5wYXJzZXIgPSBuZXcgQXRoZW5hUXVlcnlSZXN1bHRQYXJzZXIoKTtcbiAgfVxufVxuXG4vKiogUmUtZXhwb3J0IG9mIHR5cGVzIGZyb20gYXRoZW5hLXF1ZXJ5LXJlc3VsdC1wYXJzZXIuICovXG5leHBvcnQgdHlwZSB7IFBhcnNlZFJvdywgUm93UGFyc2VyIH07Il19
package/package.json CHANGED
@@ -42,14 +42,14 @@
42
42
  "eslint-plugin-import": "^2.32.0",
43
43
  "jest": "^30.3.0",
44
44
  "jest-junit": "^16",
45
- "projen": "^0.99.20",
45
+ "projen": "^0.99.21",
46
46
  "ts-jest": "^29.4.6",
47
47
  "ts-node": "^10.9.2",
48
48
  "typescript": "5.9.x"
49
49
  },
50
50
  "dependencies": {
51
- "@aws-sdk/client-athena": "^3.983.0",
52
- "athena-query-result-parser": "^0.1.5"
51
+ "@aws-sdk/client-athena": "^3",
52
+ "athena-query-result-parser": "^0.2"
53
53
  },
54
54
  "engines": {
55
55
  "node": ">= 20.0.0"
@@ -59,7 +59,7 @@
59
59
  "publishConfig": {
60
60
  "access": "public"
61
61
  },
62
- "version": "0.1.8",
62
+ "version": "0.2.0",
63
63
  "jest": {
64
64
  "coverageProvider": "v8",
65
65
  "testMatch": [