tedious 20.3.3 → 20.3.4

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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License
2
2
 
3
- Copyright (c) 2010-2018 Mike D Pilsbury
3
+ Copyright (c) 2010-2026 Mike D Pilsbury
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -2,26 +2,21 @@
2
2
  [![NPM version](https://badge.fury.io/js/tedious.svg)](http://badge.fury.io/js/tedious) [![Build Status](https://ci.appveyor.com/api/projects/status/ike3p58hljpyffrl?svg=true)](https://ci.appveyor.com/project/tediousjs/tedious) [![Code Coverage](https://codecov.io/gh/tediousjs/tedious/badge.svg)](https://codecov.io/gh/tediousjs/tedious)
3
3
 
4
4
 
5
- Tedious is a pure-Javascript implementation of the [TDS protocol](http://msdn.microsoft.com/en-us/library/dd304523.aspx),
5
+ Tedious is a pure-Javascript implementation of the [TDS protocol](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-tds/b46a581a-39de-4745-b076-ec4dbb7d13ec),
6
6
  which is used to interact with instances of Microsoft's SQL Server. It is intended to be a fairly slim implementation of the protocol, with not too much additional functionality.
7
7
 
8
- **NOTE: New columns are nullable by default as of version 1.11.0**
9
-
10
- Previous behavior can be restored using `config.options.enableAnsiNullDefault = false`. See [pull request 230](https://github.com/tediousjs/tedious/pull/230).
11
-
12
- **NOTE: Default login behavior has changed slightly as of version 1.2**
13
-
14
8
  See the [changelog](https://github.com/tediousjs/tedious/releases) for version history.
15
9
 
16
-
17
10
  ### Supported TDS versions
18
11
 
19
- - TDS 7.4 (SQL Server 2012/2014/2016/2017/2019/2022)
12
+ - TDS 7.4 (SQL Server 2012/2014/2016/2017/2019/2022/2025)
20
13
  - TDS 7.3.B (SQL Server 2008 R2)
21
14
  - TDS 7.3.A (SQL Server 2008)
22
15
  - TDS 7.2 (SQL Server 2005)
23
16
  - TDS 7.1 (SQL Server 2000) - *deprecated, support will be removed in a future version*
24
17
 
18
+ TDS 8.0 (SQL Server 2022 and later) is supported by setting `options.encrypt` to `'strict'`.
19
+
25
20
  ## Installation
26
21
 
27
22
  Node.js is a prerequisite for installing tedious. Once you have installed [Node.js](https://nodejs.org/), installing tedious is simple:
@@ -29,11 +24,12 @@ Node.js is a prerequisite for installing tedious. Once you have installed [Node.
29
24
  npm install tedious
30
25
 
31
26
  ## Getting Started
32
- - [Node.js + macOS](https://www.microsoft.com/en-us/sql-server/developer-get-started/node/mac/)
33
- - [Node.js + Red Hat Enterprise Linux](https://www.microsoft.com/en-us/sql-server/developer-get-started/node/rhel/)
34
- - [Node.js + SUSE Linux Enterprise Server](https://www.microsoft.com/en-us/sql-server/developer-get-started/node/sles/)
35
- - [Node.js + Ubuntu](https://www.microsoft.com/en-us/sql-server/developer-get-started/node/ubuntu/)
36
- - [Node.js + Windows](https://www.microsoft.com/en-us/sql-server/developer-get-started/node/windows/)
27
+ - [Node.js SQL Server Guide](https://learn.microsoft.com/en-us/sql/connect/node-js/node-js-driver-for-sql-server)
28
+ - [Node.js + macOS](https://learn.microsoft.com/en-us/sql/connect/node-js/step-1-configure-development-environment-for-node-js-development#macos)
29
+ - [Node.js + Red Hat Enterprise Linux](https://learn.microsoft.com/en-us/sql/linux/install-upgrade/quickstart-install-red-hat)
30
+ - [Node.js + SUSE Linux Enterprise Server](https://learn.microsoft.com/en-us/sql/linux/install-upgrade/quickstart-install-suse)
31
+ - [Node.js + Ubuntu](https://learn.microsoft.com/en-us/sql/connect/node-js/step-1-configure-development-environment-for-node-js-development#ubuntu-linux)
32
+ - [Node.js + Windows](https://learn.microsoft.com/en-us/sql/connect/node-js/step-1-configure-development-environment-for-node-js-development#windows)
37
33
 
38
34
  <a name="documentation"></a>
39
35
  ## Documentation
@@ -43,12 +39,6 @@ More documentation and code samples are available at [tediousjs.github.io/tediou
43
39
  ## Name
44
40
  _Tedious_ is simply derived from a fast, slightly garbled, pronunciation of the letters T, D and S.
45
41
 
46
- ## Developer Survey
47
-
48
- We'd like to learn more about how you use tedious:
49
-
50
- <a href="https://aka.ms/mssqltedioussurvey"><img style="float: right;" height="67" width="156" src="https://sqlchoice.blob.core.windows.net/sqlchoice/static/images/survey.png"></a>
51
-
52
42
  <a name="contributing"></a>
53
43
  ## Contributing
54
44
  We welcome contributions from the community. Feel free to checkout the code and submit pull requests.
@@ -59,7 +49,7 @@ Please report security vulnerabilities privately. See our [security policy](SECU
59
49
  <a name="license"></a>
60
50
  ## License
61
51
 
62
- Copyright (c) 2010-2021 Mike D Pilsbury
52
+ Copyright (c) 2010-2026 Mike D Pilsbury
63
53
 
64
54
  The MIT License
65
55
 
@@ -16,4 +16,4 @@ export declare function writePlpValue(buffer: WritableTrackingBuffer, bytes: Buf
16
16
  * the terminator. Yields whenever the buffer holds a chunk's worth, as the
17
17
  * rest of a `DataType.writeValue` promises.
18
18
  */
19
- export declare function writePlpStream(buffer: WritableTrackingBuffer, source: AsyncIterable<unknown>, encode: (chunk: unknown) => Buffer): AsyncGenerator<void, void>;
19
+ export declare function writePlpStream<T>(buffer: WritableTrackingBuffer, source: AsyncIterable<T>, encode: (chunk: T) => Buffer, flush?: () => Buffer | undefined): AsyncGenerator<void, void>;
@@ -39,21 +39,24 @@ function writePlpValue(buffer, bytes) {
39
39
  * the terminator. Yields whenever the buffer holds a chunk's worth, as the
40
40
  * rest of a `DataType.writeValue` promises.
41
41
  */
42
- async function* writePlpStream(buffer, source, encode) {
42
+ async function* writePlpStream(buffer, source, encode, flush) {
43
43
  buffer.writeBuffer(UNKNOWN_PLP_LEN);
44
- for await (const chunk of source) {
45
- const bytes = encode(chunk);
46
-
47
- // A zero-length PLP chunk would be read as the terminator.
48
- if (bytes.length === 0) {
49
- continue;
44
+ const writeChunk = bytes => {
45
+ if (!bytes || bytes.length === 0) {
46
+ return false;
50
47
  }
51
48
  buffer.writeUInt32LE(bytes.length);
52
49
  buffer.writeBuffer(bytes);
53
- if (buffer.length >= _writableTrackingBuffer.default.CHUNK_SIZE) {
50
+ return buffer.length >= _writableTrackingBuffer.default.CHUNK_SIZE;
51
+ };
52
+ for await (const chunk of source) {
53
+ if (writeChunk(encode(chunk))) {
54
54
  yield;
55
55
  }
56
56
  }
57
+ if (writeChunk(flush?.())) {
58
+ yield;
59
+ }
57
60
  buffer.writeBuffer(PLP_TERMINATOR);
58
61
  }
59
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiVU5LTk9XTl9QTFBfTEVOIiwiQnVmZmVyIiwiZnJvbSIsIlBMUF9URVJNSU5BVE9SIiwiaXNBc3luY0l0ZXJhYmxlIiwidmFsdWUiLCJTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwid3JpdGVQbHBWYWx1ZSIsImJ1ZmZlciIsImJ5dGVzIiwid3JpdGVCdWZmZXIiLCJsZW5ndGgiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVQbHBTdHJlYW0iLCJzb3VyY2UiLCJlbmNvZGUiLCJjaHVuayIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJDSFVOS19TSVpFIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGEtdHlwZXMvcGxwLXN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgV3JpdGFibGVUcmFja2luZ0J1ZmZlciBmcm9tICcuLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcblxuY29uc3QgVU5LTk9XTl9QTFBfTEVOID0gQnVmZmVyLmZyb20oWzB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZdKTtcbmNvbnN0IFBMUF9URVJNSU5BVE9SID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTtcblxuLyoqXG4gKiBBIHZhbHVlIHRoYXQgaXMgcmVhZCB3aGlsZSB0aGUgcmVxdWVzdCBpcyB3cml0dGVuLCByYXRoZXIgdGhhbiBiZWluZyBmdWxseVxuICogaW4gbWVtb3J5OiB0aGUgYG1heGAgdGV4dCBhbmQgYmluYXJ5IHR5cGVzIGFjY2VwdCBhbiBhc3luYyBpdGVyYWJsZSBvZlxuICogY2h1bmtzIChzdHJpbmdzIG9yIGJ1ZmZlcnMpIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBBc3luY0l0ZXJhYmxlPHVua25vd24+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mICh2YWx1ZSBhcyB7IFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0/OiB1bmtub3duIH0pW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBXcml0ZXMgYW4gaW4tbWVtb3J5IFBMUCB2YWx1ZSBpbnRvIGBidWZmZXJgOiB0aGUgdW5rbm93bi1sZW5ndGggbWFya2VyLFxuICogdGhlIGJ5dGVzIGFzIG9uZSBjaHVuayBpZiB0aGVyZSBhcmUgYW55LCB0aGVuIHRoZSB0ZXJtaW5hdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVQbHBWYWx1ZShidWZmZXI6IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIsIGJ5dGVzOiBCdWZmZXIpIHtcbiAgYnVmZmVyLndyaXRlQnVmZmVyKFVOS05PV05fUExQX0xFTik7XG4gIGlmIChieXRlcy5sZW5ndGggPiAwKSB7XG4gICAgYnVmZmVyLndyaXRlVUludDMyTEUoYnl0ZXMubGVuZ3RoKTtcbiAgICBidWZmZXIud3JpdGVCdWZmZXIoYnl0ZXMpO1xuICB9XG4gIGJ1ZmZlci53cml0ZUJ1ZmZlcihQTFBfVEVSTUlOQVRPUik7XG59XG5cbi8qKlxuICogV3JpdGVzIGEgUExQIHZhbHVlIHJlYWQgZnJvbSBgc291cmNlYCBpbnRvIGBidWZmZXJgOiB0aGUgdW5rbm93bi1sZW5ndGhcbiAqIG1hcmtlciwgdGhlbiBvbmUgbGVuZ3RoLXByZWZpeGVkIGNodW5rIHBlciBub24tZW1wdHkgZW5jb2RlZCBwaWVjZSwgdGhlblxuICogdGhlIHRlcm1pbmF0b3IuIFlpZWxkcyB3aGVuZXZlciB0aGUgYnVmZmVyIGhvbGRzIGEgY2h1bmsncyB3b3J0aCwgYXMgdGhlXG4gKiByZXN0IG9mIGEgYERhdGFUeXBlLndyaXRlVmFsdWVgIHByb21pc2VzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gKiB3cml0ZVBscFN0cmVhbShidWZmZXI6IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIsIHNvdXJjZTogQXN5bmNJdGVyYWJsZTx1bmtub3duPiwgZW5jb2RlOiAoY2h1bms6IHVua25vd24pID0+IEJ1ZmZlcik6IEFzeW5jR2VuZXJhdG9yPHZvaWQsIHZvaWQ+IHtcbiAgYnVmZmVyLndyaXRlQnVmZmVyKFVOS05PV05fUExQX0xFTik7XG5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzb3VyY2UpIHtcbiAgICBjb25zdCBieXRlcyA9IGVuY29kZShjaHVuayk7XG5cbiAgICAvLyBBIHplcm8tbGVuZ3RoIFBMUCBjaHVuayB3b3VsZCBiZSByZWFkIGFzIHRoZSB0ZXJtaW5hdG9yLlxuICAgIGlmIChieXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGJ1ZmZlci53cml0ZVVJbnQzMkxFKGJ5dGVzLmxlbmd0aCk7XG4gICAgYnVmZmVyLndyaXRlQnVmZmVyKGJ5dGVzKTtcblxuICAgIGlmIChidWZmZXIubGVuZ3RoID49IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIuQ0hVTktfU0laRSkge1xuICAgICAgeWllbGQ7XG4gICAgfVxuICB9XG5cbiAgYnVmZmVyLndyaXRlQnVmZmVyKFBMUF9URVJNSU5BVE9SKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQSxJQUFBQSx1QkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQWlGLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRWpGLE1BQU1HLGVBQWUsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDckYsTUFBTUMsY0FBYyxHQUFHRixNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDOztBQUU1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0UsZUFBZUEsQ0FBQ0MsS0FBYyxFQUFtQztFQUMvRSxPQUFPQSxLQUFLLElBQUksSUFBSSxJQUFJLE9BQVFBLEtBQUssQ0FBMENDLE1BQU0sQ0FBQ0MsYUFBYSxDQUFDLEtBQUssVUFBVTtBQUNySDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLGFBQWFBLENBQUNDLE1BQThCLEVBQUVDLEtBQWEsRUFBRTtFQUMzRUQsTUFBTSxDQUFDRSxXQUFXLENBQUNYLGVBQWUsQ0FBQztFQUNuQyxJQUFJVSxLQUFLLENBQUNFLE1BQU0sR0FBRyxDQUFDLEVBQUU7SUFDcEJILE1BQU0sQ0FBQ0ksYUFBYSxDQUFDSCxLQUFLLENBQUNFLE1BQU0sQ0FBQztJQUNsQ0gsTUFBTSxDQUFDRSxXQUFXLENBQUNELEtBQUssQ0FBQztFQUMzQjtFQUNBRCxNQUFNLENBQUNFLFdBQVcsQ0FBQ1IsY0FBYyxDQUFDO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLGdCQUFpQlcsY0FBY0EsQ0FBQ0wsTUFBOEIsRUFBRU0sTUFBOEIsRUFBRUMsTUFBa0MsRUFBOEI7RUFDcktQLE1BQU0sQ0FBQ0UsV0FBVyxDQUFDWCxlQUFlLENBQUM7RUFFbkMsV0FBVyxNQUFNaUIsS0FBSyxJQUFJRixNQUFNLEVBQUU7SUFDaEMsTUFBTUwsS0FBSyxHQUFHTSxNQUFNLENBQUNDLEtBQUssQ0FBQzs7SUFFM0I7SUFDQSxJQUFJUCxLQUFLLENBQUNFLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDdEI7SUFDRjtJQUVBSCxNQUFNLENBQUNJLGFBQWEsQ0FBQ0gsS0FBSyxDQUFDRSxNQUFNLENBQUM7SUFDbENILE1BQU0sQ0FBQ0UsV0FBVyxDQUFDRCxLQUFLLENBQUM7SUFFekIsSUFBSUQsTUFBTSxDQUFDRyxNQUFNLElBQUlNLCtCQUFzQixDQUFDQyxVQUFVLEVBQUU7TUFDdEQsS0FBSztJQUNQO0VBQ0Y7RUFFQVYsTUFBTSxDQUFDRSxXQUFXLENBQUNSLGNBQWMsQ0FBQztBQUNwQyIsImlnbm9yZUxpc3QiOltdfQ==
62
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiVU5LTk9XTl9QTFBfTEVOIiwiQnVmZmVyIiwiZnJvbSIsIlBMUF9URVJNSU5BVE9SIiwiaXNBc3luY0l0ZXJhYmxlIiwidmFsdWUiLCJTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwid3JpdGVQbHBWYWx1ZSIsImJ1ZmZlciIsImJ5dGVzIiwid3JpdGVCdWZmZXIiLCJsZW5ndGgiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVQbHBTdHJlYW0iLCJzb3VyY2UiLCJlbmNvZGUiLCJmbHVzaCIsIndyaXRlQ2h1bmsiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwiQ0hVTktfU0laRSIsImNodW5rIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGEtdHlwZXMvcGxwLXN0cmVhbS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgV3JpdGFibGVUcmFja2luZ0J1ZmZlciBmcm9tICcuLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcblxuY29uc3QgVU5LTk9XTl9QTFBfTEVOID0gQnVmZmVyLmZyb20oWzB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZdKTtcbmNvbnN0IFBMUF9URVJNSU5BVE9SID0gQnVmZmVyLmZyb20oWzB4MDAsIDB4MDAsIDB4MDAsIDB4MDBdKTtcblxuLyoqXG4gKiBBIHZhbHVlIHRoYXQgaXMgcmVhZCB3aGlsZSB0aGUgcmVxdWVzdCBpcyB3cml0dGVuLCByYXRoZXIgdGhhbiBiZWluZyBmdWxseVxuICogaW4gbWVtb3J5OiB0aGUgYG1heGAgdGV4dCBhbmQgYmluYXJ5IHR5cGVzIGFjY2VwdCBhbiBhc3luYyBpdGVyYWJsZSBvZlxuICogY2h1bmtzIChzdHJpbmdzIG9yIGJ1ZmZlcnMpIGhlcmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBBc3luY0l0ZXJhYmxlPHVua25vd24+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mICh2YWx1ZSBhcyB7IFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0/OiB1bmtub3duIH0pW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBXcml0ZXMgYW4gaW4tbWVtb3J5IFBMUCB2YWx1ZSBpbnRvIGBidWZmZXJgOiB0aGUgdW5rbm93bi1sZW5ndGggbWFya2VyLFxuICogdGhlIGJ5dGVzIGFzIG9uZSBjaHVuayBpZiB0aGVyZSBhcmUgYW55LCB0aGVuIHRoZSB0ZXJtaW5hdG9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVQbHBWYWx1ZShidWZmZXI6IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIsIGJ5dGVzOiBCdWZmZXIpIHtcbiAgYnVmZmVyLndyaXRlQnVmZmVyKFVOS05PV05fUExQX0xFTik7XG4gIGlmIChieXRlcy5sZW5ndGggPiAwKSB7XG4gICAgYnVmZmVyLndyaXRlVUludDMyTEUoYnl0ZXMubGVuZ3RoKTtcbiAgICBidWZmZXIud3JpdGVCdWZmZXIoYnl0ZXMpO1xuICB9XG4gIGJ1ZmZlci53cml0ZUJ1ZmZlcihQTFBfVEVSTUlOQVRPUik7XG59XG5cbi8qKlxuICogV3JpdGVzIGEgUExQIHZhbHVlIHJlYWQgZnJvbSBgc291cmNlYCBpbnRvIGBidWZmZXJgOiB0aGUgdW5rbm93bi1sZW5ndGhcbiAqIG1hcmtlciwgdGhlbiBvbmUgbGVuZ3RoLXByZWZpeGVkIGNodW5rIHBlciBub24tZW1wdHkgZW5jb2RlZCBwaWVjZSwgdGhlblxuICogdGhlIHRlcm1pbmF0b3IuIFlpZWxkcyB3aGVuZXZlciB0aGUgYnVmZmVyIGhvbGRzIGEgY2h1bmsncyB3b3J0aCwgYXMgdGhlXG4gKiByZXN0IG9mIGEgYERhdGFUeXBlLndyaXRlVmFsdWVgIHByb21pc2VzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gKiB3cml0ZVBscFN0cmVhbTxUPihcbiAgYnVmZmVyOiBXcml0YWJsZVRyYWNraW5nQnVmZmVyLFxuICBzb3VyY2U6IEFzeW5jSXRlcmFibGU8VD4sXG4gIGVuY29kZTogKGNodW5rOiBUKSA9PiBCdWZmZXIsXG4gIGZsdXNoPzogKCkgPT4gQnVmZmVyIHwgdW5kZWZpbmVkXG4pOiBBc3luY0dlbmVyYXRvcjx2b2lkLCB2b2lkPiB7XG4gIGJ1ZmZlci53cml0ZUJ1ZmZlcihVTktOT1dOX1BMUF9MRU4pO1xuXG4gIGNvbnN0IHdyaXRlQ2h1bmsgPSAoYnl0ZXM6IEJ1ZmZlciB8IHVuZGVmaW5lZCkgPT4ge1xuICAgIGlmICghYnl0ZXMgfHwgYnl0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgYnVmZmVyLndyaXRlVUludDMyTEUoYnl0ZXMubGVuZ3RoKTtcbiAgICBidWZmZXIud3JpdGVCdWZmZXIoYnl0ZXMpO1xuICAgIHJldHVybiBidWZmZXIubGVuZ3RoID49IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIuQ0hVTktfU0laRTtcbiAgfTtcblxuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHNvdXJjZSkge1xuICAgIGlmICh3cml0ZUNodW5rKGVuY29kZShjaHVuaykpKSB7XG4gICAgICB5aWVsZDtcbiAgICB9XG4gIH1cblxuICBpZiAod3JpdGVDaHVuayhmbHVzaD8uKCkpKSB7XG4gICAgeWllbGQ7XG4gIH1cblxuICBidWZmZXIud3JpdGVCdWZmZXIoUExQX1RFUk1JTkFUT1IpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUFBLHVCQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBaUYsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFakYsTUFBTUcsZUFBZSxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyRixNQUFNQyxjQUFjLEdBQUdGLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7O0FBRTVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxTQUFTRSxlQUFlQSxDQUFDQyxLQUFjLEVBQW1DO0VBQy9FLE9BQU9BLEtBQUssSUFBSSxJQUFJLElBQUksT0FBUUEsS0FBSyxDQUEwQ0MsTUFBTSxDQUFDQyxhQUFhLENBQUMsS0FBSyxVQUFVO0FBQ3JIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sU0FBU0MsYUFBYUEsQ0FBQ0MsTUFBOEIsRUFBRUMsS0FBYSxFQUFFO0VBQzNFRCxNQUFNLENBQUNFLFdBQVcsQ0FBQ1gsZUFBZSxDQUFDO0VBQ25DLElBQUlVLEtBQUssQ0FBQ0UsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUNwQkgsTUFBTSxDQUFDSSxhQUFhLENBQUNILEtBQUssQ0FBQ0UsTUFBTSxDQUFDO0lBQ2xDSCxNQUFNLENBQUNFLFdBQVcsQ0FBQ0QsS0FBSyxDQUFDO0VBQzNCO0VBQ0FELE1BQU0sQ0FBQ0UsV0FBVyxDQUFDUixjQUFjLENBQUM7QUFDcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sZ0JBQWlCVyxjQUFjQSxDQUNwQ0wsTUFBOEIsRUFDOUJNLE1BQXdCLEVBQ3hCQyxNQUE0QixFQUM1QkMsS0FBZ0MsRUFDSjtFQUM1QlIsTUFBTSxDQUFDRSxXQUFXLENBQUNYLGVBQWUsQ0FBQztFQUVuQyxNQUFNa0IsVUFBVSxHQUFJUixLQUF5QixJQUFLO0lBQ2hELElBQUksQ0FBQ0EsS0FBSyxJQUFJQSxLQUFLLENBQUNFLE1BQU0sS0FBSyxDQUFDLEVBQUU7TUFDaEMsT0FBTyxLQUFLO0lBQ2Q7SUFFQUgsTUFBTSxDQUFDSSxhQUFhLENBQUNILEtBQUssQ0FBQ0UsTUFBTSxDQUFDO0lBQ2xDSCxNQUFNLENBQUNFLFdBQVcsQ0FBQ0QsS0FBSyxDQUFDO0lBQ3pCLE9BQU9ELE1BQU0sQ0FBQ0csTUFBTSxJQUFJTywrQkFBc0IsQ0FBQ0MsVUFBVTtFQUMzRCxDQUFDO0VBRUQsV0FBVyxNQUFNQyxLQUFLLElBQUlOLE1BQU0sRUFBRTtJQUNoQyxJQUFJRyxVQUFVLENBQUNGLE1BQU0sQ0FBQ0ssS0FBSyxDQUFDLENBQUMsRUFBRTtNQUM3QixLQUFLO0lBQ1A7RUFDRjtFQUVBLElBQUlILFVBQVUsQ0FBQ0QsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO0lBQ3pCLEtBQUs7RUFDUDtFQUVBUixNQUFNLENBQUNFLFdBQVcsQ0FBQ1IsY0FBYyxDQUFDO0FBQ3BDIiwiaWdub3JlTGlzdCI6W119
@@ -1 +1 @@
1
- {"version":3,"file":"plp-stream.js","names":["_writableTrackingBuffer","_interopRequireDefault","require","e","__esModule","default","UNKNOWN_PLP_LEN","Buffer","from","PLP_TERMINATOR","isAsyncIterable","value","Symbol","asyncIterator","writePlpValue","buffer","bytes","writeBuffer","length","writeUInt32LE","writePlpStream","source","encode","chunk","WritableTrackingBuffer","CHUNK_SIZE"],"sources":["../../src/data-types/plp-stream.ts"],"sourcesContent":["import WritableTrackingBuffer from '../tracking-buffer/writable-tracking-buffer';\n\nconst UNKNOWN_PLP_LEN = Buffer.from([0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]);\nconst PLP_TERMINATOR = Buffer.from([0x00, 0x00, 0x00, 0x00]);\n\n/**\n * A value that is read while the request is written, rather than being fully\n * in memory: the `max` text and binary types accept an async iterable of\n * chunks (strings or buffers) here.\n */\nexport function isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return value != null && typeof (value as { [Symbol.asyncIterator]?: unknown })[Symbol.asyncIterator] === 'function';\n}\n\n/**\n * Writes an in-memory PLP value into `buffer`: the unknown-length marker,\n * the bytes as one chunk if there are any, then the terminator.\n */\nexport function writePlpValue(buffer: WritableTrackingBuffer, bytes: Buffer) {\n buffer.writeBuffer(UNKNOWN_PLP_LEN);\n if (bytes.length > 0) {\n buffer.writeUInt32LE(bytes.length);\n buffer.writeBuffer(bytes);\n }\n buffer.writeBuffer(PLP_TERMINATOR);\n}\n\n/**\n * Writes a PLP value read from `source` into `buffer`: the unknown-length\n * marker, then one length-prefixed chunk per non-empty encoded piece, then\n * the terminator. Yields whenever the buffer holds a chunk's worth, as the\n * rest of a `DataType.writeValue` promises.\n */\nexport async function * writePlpStream(buffer: WritableTrackingBuffer, source: AsyncIterable<unknown>, encode: (chunk: unknown) => Buffer): AsyncGenerator<void, void> {\n buffer.writeBuffer(UNKNOWN_PLP_LEN);\n\n for await (const chunk of source) {\n const bytes = encode(chunk);\n\n // A zero-length PLP chunk would be read as the terminator.\n if (bytes.length === 0) {\n continue;\n }\n\n buffer.writeUInt32LE(bytes.length);\n buffer.writeBuffer(bytes);\n\n if (buffer.length >= WritableTrackingBuffer.CHUNK_SIZE) {\n yield;\n }\n }\n\n buffer.writeBuffer(PLP_TERMINATOR);\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAiF,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEjF,MAAMG,eAAe,GAAGC,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACrF,MAAMC,cAAc,GAAGF,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;;AAE5D;AACA;AACA;AACA;AACA;AACO,SAASE,eAAeA,CAACC,KAAc,EAAmC;EAC/E,OAAOA,KAAK,IAAI,IAAI,IAAI,OAAQA,KAAK,CAA0CC,MAAM,CAACC,aAAa,CAAC,KAAK,UAAU;AACrH;;AAEA;AACA;AACA;AACA;AACO,SAASC,aAAaA,CAACC,MAA8B,EAAEC,KAAa,EAAE;EAC3ED,MAAM,CAACE,WAAW,CAACX,eAAe,CAAC;EACnC,IAAIU,KAAK,CAACE,MAAM,GAAG,CAAC,EAAE;IACpBH,MAAM,CAACI,aAAa,CAACH,KAAK,CAACE,MAAM,CAAC;IAClCH,MAAM,CAACE,WAAW,CAACD,KAAK,CAAC;EAC3B;EACAD,MAAM,CAACE,WAAW,CAACR,cAAc,CAAC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,gBAAiBW,cAAcA,CAACL,MAA8B,EAAEM,MAA8B,EAAEC,MAAkC,EAA8B;EACrKP,MAAM,CAACE,WAAW,CAACX,eAAe,CAAC;EAEnC,WAAW,MAAMiB,KAAK,IAAIF,MAAM,EAAE;IAChC,MAAML,KAAK,GAAGM,MAAM,CAACC,KAAK,CAAC;;IAE3B;IACA,IAAIP,KAAK,CAACE,MAAM,KAAK,CAAC,EAAE;MACtB;IACF;IAEAH,MAAM,CAACI,aAAa,CAACH,KAAK,CAACE,MAAM,CAAC;IAClCH,MAAM,CAACE,WAAW,CAACD,KAAK,CAAC;IAEzB,IAAID,MAAM,CAACG,MAAM,IAAIM,+BAAsB,CAACC,UAAU,EAAE;MACtD,KAAK;IACP;EACF;EAEAV,MAAM,CAACE,WAAW,CAACR,cAAc,CAAC;AACpC","ignoreList":[]}
1
+ {"version":3,"file":"plp-stream.js","names":["_writableTrackingBuffer","_interopRequireDefault","require","e","__esModule","default","UNKNOWN_PLP_LEN","Buffer","from","PLP_TERMINATOR","isAsyncIterable","value","Symbol","asyncIterator","writePlpValue","buffer","bytes","writeBuffer","length","writeUInt32LE","writePlpStream","source","encode","flush","writeChunk","WritableTrackingBuffer","CHUNK_SIZE","chunk"],"sources":["../../src/data-types/plp-stream.ts"],"sourcesContent":["import WritableTrackingBuffer from '../tracking-buffer/writable-tracking-buffer';\n\nconst UNKNOWN_PLP_LEN = Buffer.from([0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff]);\nconst PLP_TERMINATOR = Buffer.from([0x00, 0x00, 0x00, 0x00]);\n\n/**\n * A value that is read while the request is written, rather than being fully\n * in memory: the `max` text and binary types accept an async iterable of\n * chunks (strings or buffers) here.\n */\nexport function isAsyncIterable(value: unknown): value is AsyncIterable<unknown> {\n return value != null && typeof (value as { [Symbol.asyncIterator]?: unknown })[Symbol.asyncIterator] === 'function';\n}\n\n/**\n * Writes an in-memory PLP value into `buffer`: the unknown-length marker,\n * the bytes as one chunk if there are any, then the terminator.\n */\nexport function writePlpValue(buffer: WritableTrackingBuffer, bytes: Buffer) {\n buffer.writeBuffer(UNKNOWN_PLP_LEN);\n if (bytes.length > 0) {\n buffer.writeUInt32LE(bytes.length);\n buffer.writeBuffer(bytes);\n }\n buffer.writeBuffer(PLP_TERMINATOR);\n}\n\n/**\n * Writes a PLP value read from `source` into `buffer`: the unknown-length\n * marker, then one length-prefixed chunk per non-empty encoded piece, then\n * the terminator. Yields whenever the buffer holds a chunk's worth, as the\n * rest of a `DataType.writeValue` promises.\n */\nexport async function * writePlpStream<T>(\n buffer: WritableTrackingBuffer,\n source: AsyncIterable<T>,\n encode: (chunk: T) => Buffer,\n flush?: () => Buffer | undefined\n): AsyncGenerator<void, void> {\n buffer.writeBuffer(UNKNOWN_PLP_LEN);\n\n const writeChunk = (bytes: Buffer | undefined) => {\n if (!bytes || bytes.length === 0) {\n return false;\n }\n\n buffer.writeUInt32LE(bytes.length);\n buffer.writeBuffer(bytes);\n return buffer.length >= WritableTrackingBuffer.CHUNK_SIZE;\n };\n\n for await (const chunk of source) {\n if (writeChunk(encode(chunk))) {\n yield;\n }\n }\n\n if (writeChunk(flush?.())) {\n yield;\n }\n\n buffer.writeBuffer(PLP_TERMINATOR);\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAiF,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEjF,MAAMG,eAAe,GAAGC,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACrF,MAAMC,cAAc,GAAGF,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;;AAE5D;AACA;AACA;AACA;AACA;AACO,SAASE,eAAeA,CAACC,KAAc,EAAmC;EAC/E,OAAOA,KAAK,IAAI,IAAI,IAAI,OAAQA,KAAK,CAA0CC,MAAM,CAACC,aAAa,CAAC,KAAK,UAAU;AACrH;;AAEA;AACA;AACA;AACA;AACO,SAASC,aAAaA,CAACC,MAA8B,EAAEC,KAAa,EAAE;EAC3ED,MAAM,CAACE,WAAW,CAACX,eAAe,CAAC;EACnC,IAAIU,KAAK,CAACE,MAAM,GAAG,CAAC,EAAE;IACpBH,MAAM,CAACI,aAAa,CAACH,KAAK,CAACE,MAAM,CAAC;IAClCH,MAAM,CAACE,WAAW,CAACD,KAAK,CAAC;EAC3B;EACAD,MAAM,CAACE,WAAW,CAACR,cAAc,CAAC;AACpC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,gBAAiBW,cAAcA,CACpCL,MAA8B,EAC9BM,MAAwB,EACxBC,MAA4B,EAC5BC,KAAgC,EACJ;EAC5BR,MAAM,CAACE,WAAW,CAACX,eAAe,CAAC;EAEnC,MAAMkB,UAAU,GAAIR,KAAyB,IAAK;IAChD,IAAI,CAACA,KAAK,IAAIA,KAAK,CAACE,MAAM,KAAK,CAAC,EAAE;MAChC,OAAO,KAAK;IACd;IAEAH,MAAM,CAACI,aAAa,CAACH,KAAK,CAACE,MAAM,CAAC;IAClCH,MAAM,CAACE,WAAW,CAACD,KAAK,CAAC;IACzB,OAAOD,MAAM,CAACG,MAAM,IAAIO,+BAAsB,CAACC,UAAU;EAC3D,CAAC;EAED,WAAW,MAAMC,KAAK,IAAIN,MAAM,EAAE;IAChC,IAAIG,UAAU,CAACF,MAAM,CAACK,KAAK,CAAC,CAAC,EAAE;MAC7B,KAAK;IACP;EACF;EAEA,IAAIH,UAAU,CAACD,KAAK,GAAG,CAAC,CAAC,EAAE;IACzB,KAAK;EACP;EAEAR,MAAM,CAACE,WAAW,CAACR,cAAc,CAAC;AACpC","ignoreList":[]}
@@ -11,18 +11,6 @@ const MAX = (1 << 16) - 1;
11
11
  const NULL_LENGTH = Buffer.from([0xFF, 0xFF]);
12
12
  const MAX_NULL_LENGTH = Buffer.from([0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);
13
13
  const NO_COLLATION = Buffer.from([0x00, 0x00, 0x00, 0x00, 0x00]);
14
-
15
- // Each chunk is encoded on its own, as `Writable.prototype.write` would
16
- // encode it: a source must not split a UTF-16 surrogate pair across two
17
- // chunks (see `Request.addParameter`).
18
- function encoderFor(codepage) {
19
- return chunk => {
20
- if (typeof chunk !== 'string') {
21
- throw new TypeError('Invalid string.');
22
- }
23
- return _iconvLite.default.encode(chunk, codepage);
24
- };
25
- }
26
14
  const VarChar = {
27
15
  id: 0xA7,
28
16
  type: 'BIGVARCHR',
@@ -128,7 +116,14 @@ const VarChar = {
128
116
  // Read from its source while the request is written; `resolve` declared
129
117
  // it as `varchar(max)` and checked the collation.
130
118
  if ((0, _plpStream.isAsyncIterable)(parameter.value)) {
131
- return (0, _plpStream.writePlpStream)(buffer, parameter.value, encoderFor(parameter.collation.codepage));
119
+ const codepage = parameter.collation.codepage;
120
+ const encoder = _iconvLite.default.getEncoder(codepage);
121
+ return (0, _plpStream.writePlpStream)(buffer, parameter.value, chunk => {
122
+ if (typeof chunk !== 'string') {
123
+ throw new TypeError('Invalid string.');
124
+ }
125
+ return encoder.write(chunk);
126
+ }, () => encoder.end());
132
127
  }
133
128
 
134
129
  // `validate` encoded the value.
@@ -143,4 +138,4 @@ const VarChar = {
143
138
  };
144
139
  var _default = exports.default = VarChar;
145
140
  module.exports = VarChar;
146
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaWNvbnZMaXRlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGxwU3RyZWFtIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiTUFYIiwiTlVMTF9MRU5HVEgiLCJCdWZmZXIiLCJmcm9tIiwiTUFYX05VTExfTEVOR1RIIiwiTk9fQ09MTEFUSU9OIiwiZW5jb2RlckZvciIsImNvZGVwYWdlIiwiY2h1bmsiLCJUeXBlRXJyb3IiLCJpY29udiIsImVuY29kZSIsIlZhckNoYXIiLCJpZCIsInR5cGUiLCJuYW1lIiwibWF4aW11bUxlbmd0aCIsImRlY2xhcmF0aW9uIiwicGFyYW1ldGVyIiwidmFsdWUiLCJpc0FzeW5jSXRlcmFibGUiLCJsZW5ndGgiLCJvdXRwdXQiLCJyZXNvbHZlTGVuZ3RoIiwidmFsaWRhdGUiLCJjb2xsYXRpb24iLCJFcnJvciIsInJlc29sdmUiLCJkYXRhIiwid3JpdGVUeXBlSW5mbyIsImJ1ZmZlciIsIndyaXRlVUludDgiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVCdWZmZXIiLCJ0b0J1ZmZlciIsInN1YmFycmF5Iiwid3JpdGVWYWx1ZSIsIndyaXRlUGxwU3RyZWFtIiwid3JpdGVQbHBWYWx1ZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhLXR5cGVzL3ZhcmNoYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGljb252IGZyb20gJ2ljb252LWxpdGUnO1xuXG5pbXBvcnQgeyB0eXBlIERhdGFUeXBlLCB0eXBlIFBhcmFtZXRlckRhdGEgfSBmcm9tICcuLi9kYXRhLXR5cGUnO1xuaW1wb3J0IHsgaXNBc3luY0l0ZXJhYmxlLCB3cml0ZVBscFN0cmVhbSwgd3JpdGVQbHBWYWx1ZSB9IGZyb20gJy4vcGxwLXN0cmVhbSc7XG5cbmNvbnN0IE1BWCA9ICgxIDw8IDE2KSAtIDE7XG5cbmNvbnN0IE5VTExfTEVOR1RIID0gQnVmZmVyLmZyb20oWzB4RkYsIDB4RkZdKTtcbmNvbnN0IE1BWF9OVUxMX0xFTkdUSCA9IEJ1ZmZlci5mcm9tKFsweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGXSk7XG5jb25zdCBOT19DT0xMQVRJT04gPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pO1xuXG4vLyBFYWNoIGNodW5rIGlzIGVuY29kZWQgb24gaXRzIG93biwgYXMgYFdyaXRhYmxlLnByb3RvdHlwZS53cml0ZWAgd291bGRcbi8vIGVuY29kZSBpdDogYSBzb3VyY2UgbXVzdCBub3Qgc3BsaXQgYSBVVEYtMTYgc3Vycm9nYXRlIHBhaXIgYWNyb3NzIHR3b1xuLy8gY2h1bmtzIChzZWUgYFJlcXVlc3QuYWRkUGFyYW1ldGVyYCkuXG5mdW5jdGlvbiBlbmNvZGVyRm9yKGNvZGVwYWdlOiBzdHJpbmcpOiAoY2h1bms6IHVua25vd24pID0+IEJ1ZmZlciB7XG4gIHJldHVybiAoY2h1bmspID0+IHtcbiAgICBpZiAodHlwZW9mIGNodW5rICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzdHJpbmcuJyk7XG4gICAgfVxuICAgIHJldHVybiBpY29udi5lbmNvZGUoY2h1bmssIGNvZGVwYWdlKTtcbiAgfTtcbn1cblxuY29uc3QgVmFyQ2hhcjogeyBtYXhpbXVtTGVuZ3RoOiBudW1iZXIgfSAmIERhdGFUeXBlID0ge1xuICBpZDogMHhBNyxcbiAgdHlwZTogJ0JJR1ZBUkNIUicsXG4gIG5hbWU6ICdWYXJDaGFyJyxcbiAgbWF4aW11bUxlbmd0aDogODAwMCxcblxuICBkZWNsYXJhdGlvbjogZnVuY3Rpb24ocGFyYW1ldGVyKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbWV0ZXIudmFsdWUgYXMgQnVmZmVyIHwgbnVsbDtcblxuICAgIGlmIChpc0FzeW5jSXRlcmFibGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3ZhcmNoYXIobWF4KSc7XG4gICAgfVxuXG4gICAgbGV0IGxlbmd0aDtcbiAgICBpZiAocGFyYW1ldGVyLmxlbmd0aCkge1xuICAgICAgbGVuZ3RoID0gcGFyYW1ldGVyLmxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aCB8fCAxO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IG51bGwgJiYgIXBhcmFtZXRlci5vdXRwdXQpIHtcbiAgICAgIGxlbmd0aCA9IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRoaXMubWF4aW11bUxlbmd0aDtcbiAgICB9XG5cbiAgICBpZiAobGVuZ3RoIDw9IHRoaXMubWF4aW11bUxlbmd0aCkge1xuICAgICAgcmV0dXJuICd2YXJjaGFyKCcgKyBsZW5ndGggKyAnKSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAndmFyY2hhcihtYXgpJztcbiAgICB9XG4gIH0sXG5cbiAgcmVzb2x2ZUxlbmd0aDogZnVuY3Rpb24ocGFyYW1ldGVyKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbWV0ZXIudmFsdWUgYXMgQnVmZmVyIHwgbnVsbDtcblxuICAgIGlmIChwYXJhbWV0ZXIubGVuZ3RoICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXJhbWV0ZXIubGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aCB8fCAxO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXhpbXVtTGVuZ3RoO1xuICAgIH1cbiAgfSxcblxuICB2YWxpZGF0ZTogZnVuY3Rpb24odmFsdWUsIGNvbGxhdGlvbik6IEJ1ZmZlciB8IG51bGwge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzdHJpbmcuJyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb2xsYXRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gY29sbGF0aW9uIHdhcyBzZXQgYnkgdGhlIHNlcnZlciBmb3IgdGhlIGN1cnJlbnQgY29ubmVjdGlvbi4nKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbGxhdGlvbi5jb2RlcGFnZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgY29sbGF0aW9uIHNldCBieSB0aGUgc2VydmVyIGhhcyBubyBhc3NvY2lhdGVkIGVuY29kaW5nLicpO1xuICAgIH1cblxuICAgIHJldHVybiBpY29udi5lbmNvZGUodmFsdWUsIGNvbGxhdGlvbi5jb2RlcGFnZSk7XG4gIH0sXG5cbiAgcmVzb2x2ZShwYXJhbWV0ZXIsIGNvbGxhdGlvbikge1xuICAgIGlmIChpc0FzeW5jSXRlcmFibGUocGFyYW1ldGVyLnZhbHVlKSkge1xuICAgICAgLy8gUmVhZCBmcm9tIGl0cyBzb3VyY2Ugd2hpbGUgdGhlIHJlcXVlc3QgaXMgd3JpdHRlbiwgYW5kIHNlbnQgYXNcbiAgICAgIC8vIGB2YXJjaGFyKG1heClgIHNpbmNlIGl0cyBsZW5ndGggaXMgbm90IGtub3duIHVwIGZyb250LiBUaGUgY2h1bmtzXG4gICAgICAvLyBhcmUgZW5jb2RlZCBhcyB0aGV5IGFycml2ZSwgc28gdGhlIGNvbGxhdGlvbiBpcyBjaGVja2VkIGhlcmUsIGFzXG4gICAgICAvLyBgdmFsaWRhdGVgIGRvZXMgZm9yIGFuIGluLW1lbW9yeSB2YWx1ZSwgcmF0aGVyIHRoYW4gb25jZSB0aGVcbiAgICAgIC8vIHJlcXVlc3QgaXMgYWxyZWFkeSBiZWluZyB3cml0dGVuLlxuICAgICAgaWYgKCFjb2xsYXRpb24pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb2xsYXRpb24gd2FzIHNldCBieSB0aGUgc2VydmVyIGZvciB0aGUgY3VycmVudCBjb25uZWN0aW9uLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWNvbGxhdGlvbi5jb2RlcGFnZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjb2xsYXRpb24gc2V0IGJ5IHRoZSBzZXJ2ZXIgaGFzIG5vIGFzc29jaWF0ZWQgZW5jb2RpbmcuJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IHZhbHVlOiBwYXJhbWV0ZXIudmFsdWUsIGxlbmd0aDogTUFYLCBjb2xsYXRpb24gfTtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsaWRhdGUocGFyYW1ldGVyLnZhbHVlLCBjb2xsYXRpb24pO1xuICAgIGNvbnN0IGRhdGE6IFBhcmFtZXRlckRhdGEgPSB7IHZhbHVlIH07XG4gICAgZGF0YS5sZW5ndGggPSBwYXJhbWV0ZXIubGVuZ3RoICE9IG51bGwgPyBwYXJhbWV0ZXIubGVuZ3RoIDogdGhpcy5yZXNvbHZlTGVuZ3RoISh7IC4uLnBhcmFtZXRlciwgdmFsdWUgfSk7XG4gICAgaWYgKGNvbGxhdGlvbikge1xuICAgICAgZGF0YS5jb2xsYXRpb24gPSBjb2xsYXRpb247XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9LFxuXG4gIHdyaXRlVHlwZUluZm8oYnVmZmVyLCBwYXJhbWV0ZXIpIHtcbiAgICBidWZmZXIud3JpdGVVSW50OCh0aGlzLmlkKTtcblxuICAgIGlmIChwYXJhbWV0ZXIubGVuZ3RoISA8PSB0aGlzLm1heGltdW1MZW5ndGgpIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQxNkxFKHBhcmFtZXRlci5sZW5ndGghKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyLndyaXRlVUludDE2TEUoTUFYKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1ldGVyLmNvbGxhdGlvbikge1xuICAgICAgYnVmZmVyLndyaXRlQnVmZmVyKHBhcmFtZXRlci5jb2xsYXRpb24udG9CdWZmZXIoKS5zdWJhcnJheSgwLCA1KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZmZlci53cml0ZUJ1ZmZlcihOT19DT0xMQVRJT04pO1xuICAgIH1cbiAgfSxcblxuICB3cml0ZVZhbHVlKGJ1ZmZlciwgcGFyYW1ldGVyKSB7XG4gICAgaWYgKHBhcmFtZXRlci52YWx1ZSA9PSBudWxsKSB7XG4gICAgICBidWZmZXIud3JpdGVCdWZmZXIocGFyYW1ldGVyLmxlbmd0aCEgPD0gdGhpcy5tYXhpbXVtTGVuZ3RoID8gTlVMTF9MRU5HVEggOiBNQVhfTlVMTF9MRU5HVEgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlYWQgZnJvbSBpdHMgc291cmNlIHdoaWxlIHRoZSByZXF1ZXN0IGlzIHdyaXR0ZW47IGByZXNvbHZlYCBkZWNsYXJlZFxuICAgIC8vIGl0IGFzIGB2YXJjaGFyKG1heClgIGFuZCBjaGVja2VkIHRoZSBjb2xsYXRpb24uXG4gICAgaWYgKGlzQXN5bmNJdGVyYWJsZShwYXJhbWV0ZXIudmFsdWUpKSB7XG4gICAgICByZXR1cm4gd3JpdGVQbHBTdHJlYW0oYnVmZmVyLCBwYXJhbWV0ZXIudmFsdWUsIGVuY29kZXJGb3IocGFyYW1ldGVyLmNvbGxhdGlvbiEuY29kZXBhZ2UhKSk7XG4gICAgfVxuXG4gICAgLy8gYHZhbGlkYXRlYCBlbmNvZGVkIHRoZSB2YWx1ZS5cbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtZXRlci52YWx1ZSBhcyBCdWZmZXI7XG4gICAgaWYgKHBhcmFtZXRlci5sZW5ndGghIDw9IHRoaXMubWF4aW11bUxlbmd0aCkge1xuICAgICAgYnVmZmVyLndyaXRlVUludDE2TEUodmFsdWUubGVuZ3RoKTtcbiAgICAgIGJ1ZmZlci53cml0ZUJ1ZmZlcih2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdyaXRlUGxwVmFsdWUoYnVmZmVyLCB2YWx1ZSk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWYXJDaGFyO1xubW9kdWxlLmV4cG9ydHMgPSBWYXJDaGFyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBQyxVQUFBLEdBQUFE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
141
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaWNvbnZMaXRlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfcGxwU3RyZWFtIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiTUFYIiwiTlVMTF9MRU5HVEgiLCJCdWZmZXIiLCJmcm9tIiwiTUFYX05VTExfTEVOR1RIIiwiTk9fQ09MTEFUSU9OIiwiVmFyQ2hhciIsImlkIiwidHlwZSIsIm5hbWUiLCJtYXhpbXVtTGVuZ3RoIiwiZGVjbGFyYXRpb24iLCJwYXJhbWV0ZXIiLCJ2YWx1ZSIsImlzQXN5bmNJdGVyYWJsZSIsImxlbmd0aCIsIm91dHB1dCIsInJlc29sdmVMZW5ndGgiLCJ2YWxpZGF0ZSIsImNvbGxhdGlvbiIsIlR5cGVFcnJvciIsIkVycm9yIiwiY29kZXBhZ2UiLCJpY29udiIsImVuY29kZSIsInJlc29sdmUiLCJkYXRhIiwid3JpdGVUeXBlSW5mbyIsImJ1ZmZlciIsIndyaXRlVUludDgiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVCdWZmZXIiLCJ0b0J1ZmZlciIsInN1YmFycmF5Iiwid3JpdGVWYWx1ZSIsImVuY29kZXIiLCJnZXRFbmNvZGVyIiwid3JpdGVQbHBTdHJlYW0iLCJjaHVuayIsIndyaXRlIiwiZW5kIiwid3JpdGVQbHBWYWx1ZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhLXR5cGVzL3ZhcmNoYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGljb252IGZyb20gJ2ljb252LWxpdGUnO1xuXG5pbXBvcnQgeyB0eXBlIERhdGFUeXBlLCB0eXBlIFBhcmFtZXRlckRhdGEgfSBmcm9tICcuLi9kYXRhLXR5cGUnO1xuaW1wb3J0IHsgaXNBc3luY0l0ZXJhYmxlLCB3cml0ZVBscFN0cmVhbSwgd3JpdGVQbHBWYWx1ZSB9IGZyb20gJy4vcGxwLXN0cmVhbSc7XG5cbmNvbnN0IE1BWCA9ICgxIDw8IDE2KSAtIDE7XG5cbmNvbnN0IE5VTExfTEVOR1RIID0gQnVmZmVyLmZyb20oWzB4RkYsIDB4RkZdKTtcbmNvbnN0IE1BWF9OVUxMX0xFTkdUSCA9IEJ1ZmZlci5mcm9tKFsweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGXSk7XG5jb25zdCBOT19DT0xMQVRJT04gPSBCdWZmZXIuZnJvbShbMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMF0pO1xuXG5jb25zdCBWYXJDaGFyOiB7IG1heGltdW1MZW5ndGg6IG51bWJlciB9ICYgRGF0YVR5cGUgPSB7XG4gIGlkOiAweEE3LFxuICB0eXBlOiAnQklHVkFSQ0hSJyxcbiAgbmFtZTogJ1ZhckNoYXInLFxuICBtYXhpbXVtTGVuZ3RoOiA4MDAwLFxuXG4gIGRlY2xhcmF0aW9uOiBmdW5jdGlvbihwYXJhbWV0ZXIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtZXRlci52YWx1ZSBhcyBCdWZmZXIgfCBudWxsO1xuXG4gICAgaWYgKGlzQXN5bmNJdGVyYWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAndmFyY2hhcihtYXgpJztcbiAgICB9XG5cbiAgICBsZXQgbGVuZ3RoO1xuICAgIGlmIChwYXJhbWV0ZXIubGVuZ3RoKSB7XG4gICAgICBsZW5ndGggPSBwYXJhbWV0ZXIubGVuZ3RoO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoIHx8IDE7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCAmJiAhcGFyYW1ldGVyLm91dHB1dCkge1xuICAgICAgbGVuZ3RoID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGVuZ3RoID0gdGhpcy5tYXhpbXVtTGVuZ3RoO1xuICAgIH1cblxuICAgIGlmIChsZW5ndGggPD0gdGhpcy5tYXhpbXVtTGVuZ3RoKSB7XG4gICAgICByZXR1cm4gJ3ZhcmNoYXIoJyArIGxlbmd0aCArICcpJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICd2YXJjaGFyKG1heCknO1xuICAgIH1cbiAgfSxcblxuICByZXNvbHZlTGVuZ3RoOiBmdW5jdGlvbihwYXJhbWV0ZXIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtZXRlci52YWx1ZSBhcyBCdWZmZXIgfCBudWxsO1xuXG4gICAgaWYgKHBhcmFtZXRlci5sZW5ndGggIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHBhcmFtZXRlci5sZW5ndGg7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsdWUubGVuZ3RoIHx8IDE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLm1heGltdW1MZW5ndGg7XG4gICAgfVxuICB9LFxuXG4gIHZhbGlkYXRlOiBmdW5jdGlvbih2YWx1ZSwgY29sbGF0aW9uKTogQnVmZmVyIHwgbnVsbCB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHN0cmluZy4nKTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbGxhdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBjb2xsYXRpb24gd2FzIHNldCBieSB0aGUgc2VydmVyIGZvciB0aGUgY3VycmVudCBjb25uZWN0aW9uLicpO1xuICAgIH1cblxuICAgIGlmICghY29sbGF0aW9uLmNvZGVwYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBjb2xsYXRpb24gc2V0IGJ5IHRoZSBzZXJ2ZXIgaGFzIG5vIGFzc29jaWF0ZWQgZW5jb2RpbmcuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGljb252LmVuY29kZSh2YWx1ZSwgY29sbGF0aW9uLmNvZGVwYWdlKTtcbiAgfSxcblxuICByZXNvbHZlKHBhcmFtZXRlciwgY29sbGF0aW9uKSB7XG4gICAgaWYgKGlzQXN5bmNJdGVyYWJsZShwYXJhbWV0ZXIudmFsdWUpKSB7XG4gICAgICAvLyBSZWFkIGZyb20gaXRzIHNvdXJjZSB3aGlsZSB0aGUgcmVxdWVzdCBpcyB3cml0dGVuLCBhbmQgc2VudCBhc1xuICAgICAgLy8gYHZhcmNoYXIobWF4KWAgc2luY2UgaXRzIGxlbmd0aCBpcyBub3Qga25vd24gdXAgZnJvbnQuIFRoZSBjaHVua3NcbiAgICAgIC8vIGFyZSBlbmNvZGVkIGFzIHRoZXkgYXJyaXZlLCBzbyB0aGUgY29sbGF0aW9uIGlzIGNoZWNrZWQgaGVyZSwgYXNcbiAgICAgIC8vIGB2YWxpZGF0ZWAgZG9lcyBmb3IgYW4gaW4tbWVtb3J5IHZhbHVlLCByYXRoZXIgdGhhbiBvbmNlIHRoZVxuICAgICAgLy8gcmVxdWVzdCBpcyBhbHJlYWR5IGJlaW5nIHdyaXR0ZW4uXG4gICAgICBpZiAoIWNvbGxhdGlvbikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbGxhdGlvbiB3YXMgc2V0IGJ5IHRoZSBzZXJ2ZXIgZm9yIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghY29sbGF0aW9uLmNvZGVwYWdlKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGNvbGxhdGlvbiBzZXQgYnkgdGhlIHNlcnZlciBoYXMgbm8gYXNzb2NpYXRlZCBlbmNvZGluZy4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHsgdmFsdWU6IHBhcmFtZXRlci52YWx1ZSwgbGVuZ3RoOiBNQVgsIGNvbGxhdGlvbiB9O1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWxpZGF0ZShwYXJhbWV0ZXIudmFsdWUsIGNvbGxhdGlvbik7XG4gICAgY29uc3QgZGF0YTogUGFyYW1ldGVyRGF0YSA9IHsgdmFsdWUgfTtcbiAgICBkYXRhLmxlbmd0aCA9IHBhcmFtZXRlci5sZW5ndGggIT0gbnVsbCA/IHBhcmFtZXRlci5sZW5ndGggOiB0aGlzLnJlc29sdmVMZW5ndGghKHsgLi4ucGFyYW1ldGVyLCB2YWx1ZSB9KTtcbiAgICBpZiAoY29sbGF0aW9uKSB7XG4gICAgICBkYXRhLmNvbGxhdGlvbiA9IGNvbGxhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH0sXG5cbiAgd3JpdGVUeXBlSW5mbyhidWZmZXIsIHBhcmFtZXRlcikge1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KHRoaXMuaWQpO1xuXG4gICAgaWYgKHBhcmFtZXRlci5sZW5ndGghIDw9IHRoaXMubWF4aW11bUxlbmd0aCkge1xuICAgICAgYnVmZmVyLndyaXRlVUludDE2TEUocGFyYW1ldGVyLmxlbmd0aCEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50MTZMRShNQVgpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbWV0ZXIuY29sbGF0aW9uKSB7XG4gICAgICBidWZmZXIud3JpdGVCdWZmZXIocGFyYW1ldGVyLmNvbGxhdGlvbi50b0J1ZmZlcigpLnN1YmFycmF5KDAsIDUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmZmVyLndyaXRlQnVmZmVyKE5PX0NPTExBVElPTik7XG4gICAgfVxuICB9LFxuXG4gIHdyaXRlVmFsdWUoYnVmZmVyLCBwYXJhbWV0ZXIpIHtcbiAgICBpZiAocGFyYW1ldGVyLnZhbHVlID09IG51bGwpIHtcbiAgICAgIGJ1ZmZlci53cml0ZUJ1ZmZlcihwYXJhbWV0ZXIubGVuZ3RoISA8PSB0aGlzLm1heGltdW1MZW5ndGggPyBOVUxMX0xFTkdUSCA6IE1BWF9OVUxMX0xFTkdUSCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVhZCBmcm9tIGl0cyBzb3VyY2Ugd2hpbGUgdGhlIHJlcXVlc3QgaXMgd3JpdHRlbjsgYHJlc29sdmVgIGRlY2xhcmVkXG4gICAgLy8gaXQgYXMgYHZhcmNoYXIobWF4KWAgYW5kIGNoZWNrZWQgdGhlIGNvbGxhdGlvbi5cbiAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKHBhcmFtZXRlci52YWx1ZSkpIHtcbiAgICAgIGNvbnN0IGNvZGVwYWdlID0gcGFyYW1ldGVyLmNvbGxhdGlvbiEuY29kZXBhZ2UhO1xuICAgICAgY29uc3QgZW5jb2RlciA9IGljb252LmdldEVuY29kZXIoY29kZXBhZ2UpO1xuICAgICAgcmV0dXJuIHdyaXRlUGxwU3RyZWFtKFxuICAgICAgICBidWZmZXIsXG4gICAgICAgIHBhcmFtZXRlci52YWx1ZSxcbiAgICAgICAgKGNodW5rKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBjaHVuayAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc3RyaW5nLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBlbmNvZGVyLndyaXRlKGNodW5rKTtcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4gZW5jb2Rlci5lbmQoKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBgdmFsaWRhdGVgIGVuY29kZWQgdGhlIHZhbHVlLlxuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyLnZhbHVlIGFzIEJ1ZmZlcjtcbiAgICBpZiAocGFyYW1ldGVyLmxlbmd0aCEgPD0gdGhpcy5tYXhpbXVtTGVuZ3RoKSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50MTZMRSh2YWx1ZS5sZW5ndGgpO1xuICAgICAgYnVmZmVyLndyaXRlQnVmZmVyKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVQbHBWYWx1ZShidWZmZXIsIHZhbHVlKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFZhckNoYXI7XG5tb2R1bGUuZXhwb3J0cyA9IFZhckNoYXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUE4RSxTQUFBRCx1QkFBQUcsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtB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
@@ -1 +1 @@
1
- {"version":3,"file":"varchar.js","names":["_iconvLite","_interopRequireDefault","require","_plpStream","e","__esModule","default","MAX","NULL_LENGTH","Buffer","from","MAX_NULL_LENGTH","NO_COLLATION","encoderFor","codepage","chunk","TypeError","iconv","encode","VarChar","id","type","name","maximumLength","declaration","parameter","value","isAsyncIterable","length","output","resolveLength","validate","collation","Error","resolve","data","writeTypeInfo","buffer","writeUInt8","writeUInt16LE","writeBuffer","toBuffer","subarray","writeValue","writePlpStream","writePlpValue","_default","exports","module"],"sources":["../../src/data-types/varchar.ts"],"sourcesContent":["import iconv from 'iconv-lite';\n\nimport { type DataType, type ParameterData } from '../data-type';\nimport { isAsyncIterable, writePlpStream, writePlpValue } from './plp-stream';\n\nconst MAX = (1 << 16) - 1;\n\nconst NULL_LENGTH = Buffer.from([0xFF, 0xFF]);\nconst MAX_NULL_LENGTH = Buffer.from([0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);\nconst NO_COLLATION = Buffer.from([0x00, 0x00, 0x00, 0x00, 0x00]);\n\n// Each chunk is encoded on its own, as `Writable.prototype.write` would\n// encode it: a source must not split a UTF-16 surrogate pair across two\n// chunks (see `Request.addParameter`).\nfunction encoderFor(codepage: string): (chunk: unknown) => Buffer {\n return (chunk) => {\n if (typeof chunk !== 'string') {\n throw new TypeError('Invalid string.');\n }\n return iconv.encode(chunk, codepage);\n };\n}\n\nconst VarChar: { maximumLength: number } & DataType = {\n id: 0xA7,\n type: 'BIGVARCHR',\n name: 'VarChar',\n maximumLength: 8000,\n\n declaration: function(parameter) {\n const value = parameter.value as Buffer | null;\n\n if (isAsyncIterable(value)) {\n return 'varchar(max)';\n }\n\n let length;\n if (parameter.length) {\n length = parameter.length;\n } else if (value != null) {\n length = value.length || 1;\n } else if (value === null && !parameter.output) {\n length = 1;\n } else {\n length = this.maximumLength;\n }\n\n if (length <= this.maximumLength) {\n return 'varchar(' + length + ')';\n } else {\n return 'varchar(max)';\n }\n },\n\n resolveLength: function(parameter) {\n const value = parameter.value as Buffer | null;\n\n if (parameter.length != null) {\n return parameter.length;\n } else if (value != null) {\n return value.length || 1;\n } else {\n return this.maximumLength;\n }\n },\n\n validate: function(value, collation): Buffer | null {\n if (value == null) {\n return null;\n }\n\n if (typeof value !== 'string') {\n throw new TypeError('Invalid string.');\n }\n\n if (!collation) {\n throw new Error('No collation was set by the server for the current connection.');\n }\n\n if (!collation.codepage) {\n throw new Error('The collation set by the server has no associated encoding.');\n }\n\n return iconv.encode(value, collation.codepage);\n },\n\n resolve(parameter, collation) {\n if (isAsyncIterable(parameter.value)) {\n // Read from its source while the request is written, and sent as\n // `varchar(max)` since its length is not known up front. The chunks\n // are encoded as they arrive, so the collation is checked here, as\n // `validate` does for an in-memory value, rather than once the\n // request is already being written.\n if (!collation) {\n throw new Error('No collation was set by the server for the current connection.');\n }\n\n if (!collation.codepage) {\n throw new Error('The collation set by the server has no associated encoding.');\n }\n\n return { value: parameter.value, length: MAX, collation };\n }\n\n const value = this.validate(parameter.value, collation);\n const data: ParameterData = { value };\n data.length = parameter.length != null ? parameter.length : this.resolveLength!({ ...parameter, value });\n if (collation) {\n data.collation = collation;\n }\n return data;\n },\n\n writeTypeInfo(buffer, parameter) {\n buffer.writeUInt8(this.id);\n\n if (parameter.length! <= this.maximumLength) {\n buffer.writeUInt16LE(parameter.length!);\n } else {\n buffer.writeUInt16LE(MAX);\n }\n\n if (parameter.collation) {\n buffer.writeBuffer(parameter.collation.toBuffer().subarray(0, 5));\n } else {\n buffer.writeBuffer(NO_COLLATION);\n }\n },\n\n writeValue(buffer, parameter) {\n if (parameter.value == null) {\n buffer.writeBuffer(parameter.length! <= this.maximumLength ? NULL_LENGTH : MAX_NULL_LENGTH);\n return;\n }\n\n // Read from its source while the request is written; `resolve` declared\n // it as `varchar(max)` and checked the collation.\n if (isAsyncIterable(parameter.value)) {\n return writePlpStream(buffer, parameter.value, encoderFor(parameter.collation!.codepage!));\n }\n\n // `validate` encoded the value.\n const value = parameter.value as Buffer;\n if (parameter.length! <= this.maximumLength) {\n buffer.writeUInt16LE(value.length);\n buffer.writeBuffer(value);\n } else {\n writePlpValue(buffer, value);\n }\n }\n};\n\nexport default VarChar;\nmodule.exports = VarChar;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"varchar.js","names":["_iconvLite","_interopRequireDefault","require","_plpStream","e","__esModule","default","MAX","NULL_LENGTH","Buffer","from","MAX_NULL_LENGTH","NO_COLLATION","VarChar","id","type","name","maximumLength","declaration","parameter","value","isAsyncIterable","length","output","resolveLength","validate","collation","TypeError","Error","codepage","iconv","encode","resolve","data","writeTypeInfo","buffer","writeUInt8","writeUInt16LE","writeBuffer","toBuffer","subarray","writeValue","encoder","getEncoder","writePlpStream","chunk","write","end","writePlpValue","_default","exports","module"],"sources":["../../src/data-types/varchar.ts"],"sourcesContent":["import iconv from 'iconv-lite';\n\nimport { type DataType, type ParameterData } from '../data-type';\nimport { isAsyncIterable, writePlpStream, writePlpValue } from './plp-stream';\n\nconst MAX = (1 << 16) - 1;\n\nconst NULL_LENGTH = Buffer.from([0xFF, 0xFF]);\nconst MAX_NULL_LENGTH = Buffer.from([0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF]);\nconst NO_COLLATION = Buffer.from([0x00, 0x00, 0x00, 0x00, 0x00]);\n\nconst VarChar: { maximumLength: number } & DataType = {\n id: 0xA7,\n type: 'BIGVARCHR',\n name: 'VarChar',\n maximumLength: 8000,\n\n declaration: function(parameter) {\n const value = parameter.value as Buffer | null;\n\n if (isAsyncIterable(value)) {\n return 'varchar(max)';\n }\n\n let length;\n if (parameter.length) {\n length = parameter.length;\n } else if (value != null) {\n length = value.length || 1;\n } else if (value === null && !parameter.output) {\n length = 1;\n } else {\n length = this.maximumLength;\n }\n\n if (length <= this.maximumLength) {\n return 'varchar(' + length + ')';\n } else {\n return 'varchar(max)';\n }\n },\n\n resolveLength: function(parameter) {\n const value = parameter.value as Buffer | null;\n\n if (parameter.length != null) {\n return parameter.length;\n } else if (value != null) {\n return value.length || 1;\n } else {\n return this.maximumLength;\n }\n },\n\n validate: function(value, collation): Buffer | null {\n if (value == null) {\n return null;\n }\n\n if (typeof value !== 'string') {\n throw new TypeError('Invalid string.');\n }\n\n if (!collation) {\n throw new Error('No collation was set by the server for the current connection.');\n }\n\n if (!collation.codepage) {\n throw new Error('The collation set by the server has no associated encoding.');\n }\n\n return iconv.encode(value, collation.codepage);\n },\n\n resolve(parameter, collation) {\n if (isAsyncIterable(parameter.value)) {\n // Read from its source while the request is written, and sent as\n // `varchar(max)` since its length is not known up front. The chunks\n // are encoded as they arrive, so the collation is checked here, as\n // `validate` does for an in-memory value, rather than once the\n // request is already being written.\n if (!collation) {\n throw new Error('No collation was set by the server for the current connection.');\n }\n\n if (!collation.codepage) {\n throw new Error('The collation set by the server has no associated encoding.');\n }\n\n return { value: parameter.value, length: MAX, collation };\n }\n\n const value = this.validate(parameter.value, collation);\n const data: ParameterData = { value };\n data.length = parameter.length != null ? parameter.length : this.resolveLength!({ ...parameter, value });\n if (collation) {\n data.collation = collation;\n }\n return data;\n },\n\n writeTypeInfo(buffer, parameter) {\n buffer.writeUInt8(this.id);\n\n if (parameter.length! <= this.maximumLength) {\n buffer.writeUInt16LE(parameter.length!);\n } else {\n buffer.writeUInt16LE(MAX);\n }\n\n if (parameter.collation) {\n buffer.writeBuffer(parameter.collation.toBuffer().subarray(0, 5));\n } else {\n buffer.writeBuffer(NO_COLLATION);\n }\n },\n\n writeValue(buffer, parameter) {\n if (parameter.value == null) {\n buffer.writeBuffer(parameter.length! <= this.maximumLength ? NULL_LENGTH : MAX_NULL_LENGTH);\n return;\n }\n\n // Read from its source while the request is written; `resolve` declared\n // it as `varchar(max)` and checked the collation.\n if (isAsyncIterable(parameter.value)) {\n const codepage = parameter.collation!.codepage!;\n const encoder = iconv.getEncoder(codepage);\n return writePlpStream(\n buffer,\n parameter.value,\n (chunk) => {\n if (typeof chunk !== 'string') {\n throw new TypeError('Invalid string.');\n }\n\n return encoder.write(chunk);\n },\n () => encoder.end()\n );\n }\n\n // `validate` encoded the value.\n const value = parameter.value as Buffer;\n if (parameter.length! <= this.maximumLength) {\n buffer.writeUInt16LE(value.length);\n buffer.writeBuffer(value);\n } else {\n writePlpValue(buffer, value);\n }\n }\n};\n\nexport default VarChar;\nmodule.exports = VarChar;\n"],"mappings":"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","ignoreList":[]}
package/lib/request.d.ts CHANGED
@@ -360,11 +360,10 @@ declare class Request extends EventEmitter {
360
360
  * request is being sent, so it does not have to fit in memory, and a
361
361
  * request that carries one can be executed only once.
362
362
  *
363
- * Each chunk of a string source is encoded on its own, as `Writable.write`
364
- * would encode it, so a chunk must not end halfway through a UTF-16
365
- * surrogate pair. Text that Node.js decoded from UTF-8 (a `Readable` with
366
- * `encoding: 'utf8'`, `readline`, `TextDecoder`) never does; a string
367
- * sliced by index can. A `Buffer` chunk of 8 KB or more is sent by
363
+ * String chunks may split UTF-16 surrogate pairs; the pairs are preserved
364
+ * across chunk boundaries, including empty chunks. An unpaired surrogate
365
+ * is handled by the type's encoding as it is for an in-memory value.
366
+ * A `Buffer` chunk of 8 KB or more is sent by
368
367
  * reference, as `socket.write` would send it, so a source must not reuse
369
368
  * or modify a buffer it has yielded until the request has completed.
370
369
  *
package/lib/request.js CHANGED
@@ -290,11 +290,10 @@ class Request extends _events.EventEmitter {
290
290
  * request is being sent, so it does not have to fit in memory, and a
291
291
  * request that carries one can be executed only once.
292
292
  *
293
- * Each chunk of a string source is encoded on its own, as `Writable.write`
294
- * would encode it, so a chunk must not end halfway through a UTF-16
295
- * surrogate pair. Text that Node.js decoded from UTF-8 (a `Readable` with
296
- * `encoding: 'utf8'`, `readline`, `TextDecoder`) never does; a string
297
- * sliced by index can. A `Buffer` chunk of 8 KB or more is sent by
293
+ * String chunks may split UTF-16 surrogate pairs; the pairs are preserved
294
+ * across chunk boundaries, including empty chunks. An unpaired surrogate
295
+ * is handled by the type's encoding as it is for an in-memory value.
296
+ * A `Buffer` chunk of 8 KB or more is sent by
298
297
  * reference, as `socket.write` would send it, so a source must not reuse
299
298
  * or modify a buffer it has yielded until the request has completed.
300
299
  *
@@ -433,4 +432,4 @@ class Request extends _events.EventEmitter {
433
432
  }
434
433
  var _default = exports.default = Request;
435
434
  module.exports = Request;
436
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9kYXRhVHlwZSIsIl9lcnJvcnMiLCJfdHlwZXMiLCJSZXF1ZXN0IiwiRXZlbnRFbWl0dGVyIiwib24iLCJldmVudCIsImxpc3RlbmVyIiwiZW1pdCIsImFyZ3MiLCJjb25zdHJ1Y3RvciIsInNxbFRleHRPclByb2NlZHVyZSIsImNhbGxiYWNrIiwib3B0aW9ucyIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzQnlOYW1lIiwicHJlcGFyaW5nIiwiaGFuZGxlIiwidW5kZWZpbmVkIiwiY2FuY2VsZWQiLCJwYXVzZWQiLCJlcnJvciIsImNvbm5lY3Rpb24iLCJ0aW1lb3V0IiwidXNlckNhbGxiYWNrIiwic3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmciLCJTUUxTZXJ2ZXJTdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyIsIlVzZUNvbm5lY3Rpb25TZXR0aW5nIiwiY3J5cHRvTWV0YWRhdGFMb2FkZWQiLCJlcnIiLCJyb3dDb3VudCIsInJvd3MiLCJhZGRQYXJhbWV0ZXIiLCJuYW1lIiwidHlwZSIsInZhbHVlIiwib3V0cHV0IiwibGVuZ3RoIiwicHJlY2lzaW9uIiwic2NhbGUiLCJwYXJhbWV0ZXIiLCJwdXNoIiwiYWRkT3V0cHV0UGFyYW1ldGVyIiwibWFrZVBhcmFtc1BhcmFtZXRlciIsInBhcmFtc1BhcmFtZXRlciIsImkiLCJsZW4iLCJkZWNsYXJhdGlvbiIsInZhbGlkYXRlUGFyYW1ldGVycyIsImNvbGxhdGlvbiIsInJlc29sdmVkUGFyYW1ldGVycyIsInJlc29sdmVkIiwicmVzb2x2ZVBhcmFtZXRlciIsIlJlcXVlc3RFcnJvciIsIm1lc3NhZ2UiLCJjYXVzZSIsImRhdGEiLCJwYXVzZSIsInJlc3VtZSIsImNhbmNlbCIsInNldFRpbWVvdXQiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vc3JjL3JlcXVlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCB7IHR5cGUgUGFyYW1ldGVyLCB0eXBlIERhdGFUeXBlLCB0eXBlIFJlc29sdmVkUGFyYW1ldGVyLCByZXNvbHZlUGFyYW1ldGVyIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xuaW1wb3J0IHsgUmVxdWVzdEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQgQ29ubmVjdGlvbiwgeyB0eXBlIEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IHsgdHlwZSBNZXRhZGF0YSB9IGZyb20gJy4vbWV0YWRhdGEtcGFyc2VyJztcbmltcG9ydCB7IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nIH0gZnJvbSAnLi9hbHdheXMtZW5jcnlwdGVkL3R5cGVzJztcbmltcG9ydCB7IHR5cGUgQ29sdW1uTWV0YWRhdGEgfSBmcm9tICcuL3Rva2VuL2NvbG1ldGFkYXRhLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgeyB0eXBlIENvbHVtbkluZm8gfSBmcm9tICcuL3Rva2VuL3Rva2VuJztcbmltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4vY29sbGF0aW9uJztcblxuLyoqXG4gKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaGFzIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICogSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIHN0YXRlbWVudChzKSwgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAqXG4gKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyIHJlcXVlc3Qgc2hvdWxkIG5vdFxuICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICpcbiAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGJlZm9yZSBgcmVxdWVzdENvbXBsZXRlZGAgaXMgZW1pdHRlZC5cbiAqL1xudHlwZSBDb21wbGV0aW9uQ2FsbGJhY2sgPVxuICAvKipcbiAgICogQHBhcmFtIGVycm9yXG4gICAqICAgSWYgYW4gZXJyb3Igb2NjdXJyZWQsIGFuIGVycm9yIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHJvd0NvdW50XG4gICAqICAgVGhlIG51bWJlciBvZiByb3dzIGVtaXR0ZWQgYXMgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHJvd3NcbiAgICogICBSb3dzIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICogICBXaWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIFtbQ29ubmVjdGlvbk9wdGlvbnMucm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb25dXSBpcyBgdHJ1ZWAuXG4gICAqL1xuICAvLyBUT0RPOiBGaWd1cmUgb3V0IGhvdyB0byB0eXBlIHRoZSBgcm93c2AgcGFyYW1ldGVyIGhlcmUuXG4gIChlcnJvcjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCByb3dDb3VudD86IG51bWJlciwgcm93cz86IGFueSkgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJPcHRpb25zIHtcbiAgb3V0cHV0PzogYm9vbGVhbjtcbiAgbGVuZ3RoPzogbnVtYmVyO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVxdWVzdE9wdGlvbnMge1xuICBzdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZz86IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nO1xufVxuXG4vKipcbiAqIGBgYGpzXG4gKiBjb25zdCB7IFJlcXVlc3QgfSA9IHJlcXVpcmUoJ3RlZGlvdXMnKTtcbiAqIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChcInNlbGVjdCA0MiwgJ2hlbGxvIHdvcmxkJ1wiLCAoZXJyLCByb3dDb3VudCkgPT4ge1xuICogICAvLyBSZXF1ZXN0IGNvbXBsZXRpb24gY2FsbGJhY2suLi5cbiAqIH0pO1xuICogY29ubmVjdGlvbi5leGVjU3FsKHJlcXVlc3QpO1xuICogYGBgXG4gKi9cbmNsYXNzIFJlcXVlc3QgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgc3FsVGV4dE9yUHJvY2VkdXJlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHBhcmFtZXRlcnNCeU5hbWU6IHsgW2tleTogc3RyaW5nXTogUGFyYW1ldGVyIH07XG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVycyBhcyByZXNvbHZlZCBieSB0aGUgbGFzdCBjYWxsIHRvIGB2YWxpZGF0ZVBhcmFtZXRlcnNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByZXNvbHZlZFBhcmFtZXRlcnM6IFJlc29sdmVkUGFyYW1ldGVyW107XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBwcmVwYXJpbmc6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjYW5jZWxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHBhdXNlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHVzZXJDYWxsYmFjazogQ29tcGxldGlvbkNhbGxiYWNrO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgaGFuZGxlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dzPzogQXJyYXk8YW55PjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJzdD86IEFycmF5PGFueT47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY2FsbGJhY2s6IENvbXBsZXRpb25DYWxsYmFjaztcblxuXG4gIGRlY2xhcmUgc2hvdWxkSG9ub3JBRT86IGJvb2xlYW47XG4gIGRlY2xhcmUgc3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmc6IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nO1xuICBkZWNsYXJlIGNyeXB0b01ldGFkYXRhTG9hZGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50LCBkZXNjcmliaW5nIHJlc3VsdCBzZXQgY29sdW1ucywgd2lsbCBiZSBlbWl0dGVkIGJlZm9yZSByb3dcbiAgICogZXZlbnRzIGFyZSBlbWl0dGVkLiBUaGlzIGV2ZW50IG1heSBiZSBlbWl0dGVkIG11bHRpcGxlIHRpbWVzIHdoZW4gbW9yZVxuICAgKiB0aGFuIG9uZSByZWNvcmRzZXQgaXMgcHJvZHVjZWQgYnkgdGhlIHN0YXRlbWVudC5cbiAgICpcbiAgICogQW4gYXJyYXkgbGlrZSBvYmplY3QsIHdoZXJlIHRoZSBjb2x1bW5zIGNhbiBiZSBhY2Nlc3NlZCBlaXRoZXIgYnkgaW5kZXhcbiAgICogb3IgbmFtZS4gQ29sdW1ucyB3aXRoIGEgbmFtZSB0aGF0IGlzIGFuIGludGVnZXIgYXJlIG5vdCBhY2Nlc3NpYmxlIGJ5IG5hbWUsXG4gICAqIGFzIGl0IHdvdWxkIGJlIGludGVycHJldGVkIGFzIGFuIGFycmF5IGluZGV4LlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdjb2x1bW5NZXRhZGF0YScsXG4gICAgbGlzdGVuZXI6XG4gICAgKGNvbHVtbnM6IENvbHVtbk1ldGFkYXRhW10gfCB7IFtrZXk6IHN0cmluZ106IENvbHVtbk1ldGFkYXRhIH0pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBoYXMgYmVlbiBwcmVwYXJlZCBhbmQgY2FuIGJlIHVzZWQgaW4gc3Vic2VxdWVudCBjYWxscyB0byBleGVjdXRlIGFuZCB1bnByZXBhcmUuXG4gICAqL1xuICBvbihldmVudDogJ3ByZXBhcmVkJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoZSByZXF1ZXN0IGVuY291bnRlcmVkIGFuIGVycm9yIGFuZCBoYXMgbm90IGJlZW4gcHJlcGFyZWQuXG4gICAqL1xuICBvbihldmVudDogJ2Vycm9yJywgbGlzdGVuZXI6IChlcnI6IEVycm9yKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBBIHJvdyByZXN1bHRpbmcgZnJvbSBleGVjdXRpb24gb2YgdGhlIFNRTCBzdGF0ZW1lbnQuXG4gICAqL1xuICBvbihcbiAgICBldmVudDogJ3JvdycsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEFuIGFycmF5IG9yIG9iamVjdCAoZGVwZW5kcyBvbiBbW0Nvbm5lY3Rpb25PcHRpb25zLnVzZUNvbHVtbk5hbWVzXV0pLCB3aGVyZSB0aGUgY29sdW1ucyBjYW4gYmUgYWNjZXNzZWQgYnkgaW5kZXgvbmFtZS5cbiAgICAgICAqIEVhY2ggY29sdW1uIGhhcyB0d28gcHJvcGVydGllcywgYG1ldGFkYXRhYCBhbmQgYHZhbHVlYDpcbiAgICAgICAqXG4gICAgICAgKiAqIGBtZXRhZGF0YWBcbiAgICAgICAqXG4gICAgICAgKiAgICBUaGUgc2FtZSBkYXRhIHRoYXQgaXMgZXhwb3NlZCBpbiB0aGUgYGNvbHVtbk1ldGFkYXRhYCBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiAqIGB2YWx1ZWBcbiAgICAgICAqXG4gICAgICAgKiAgICBUaGUgY29sdW1uJ3MgdmFsdWUuIEl0IHdpbGwgYmUgYG51bGxgIGZvciBhIGBOVUxMYC5cbiAgICAgICAqICAgIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb2x1bW5zIHdpdGggdGhlIHNhbWUgbmFtZSwgdGhlbiB0aGlzIHdpbGwgYmUgYW4gYXJyYXkgb2YgdGhlIHZhbHVlcy5cbiAgICAgICAqL1xuICAgICAgKGNvbHVtbnM6IGFueSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIEFsbCByb3dzIGZyb20gYSByZXN1bHQgc2V0IGhhdmUgYmVlbiBwcm92aWRlZCAodGhyb3VnaCBgcm93YCBldmVudHMpLlxuICAgKlxuICAgKiBUaGlzIHRva2VuIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGNvbXBsZXRpb24gb2YgYSBTUUwgc3RhdGVtZW50LlxuICAgKiBBcyBtdWx0aXBsZSBTUUwgc3RhdGVtZW50cyBjYW4gYmUgc2VudCB0byB0aGUgc2VydmVyIGluIGEgc2luZ2xlIFNRTCBiYXRjaCwgbXVsdGlwbGUgYGRvbmVgIGNhbiBiZSBnZW5lcmF0ZWQuXG4gICAqIEFuIGBkb25lYCBldmVudCBpcyBlbWl0dGVkIGZvciBlYWNoIFNRTCBzdGF0ZW1lbnQgaW4gdGhlIFNRTCBiYXRjaCBleGNlcHQgdmFyaWFibGUgZGVjbGFyYXRpb25zLlxuICAgKiBGb3IgZXhlY3V0aW9uIG9mIFNRTCBzdGF0ZW1lbnRzIHdpdGhpbiBzdG9yZWQgcHJvY2VkdXJlcywgYGRvbmVQcm9jYCBhbmQgYGRvbmVJblByb2NgIGV2ZW50cyBhcmUgdXNlZCBpbiBwbGFjZSBvZiBgZG9uZWAuXG4gICAqXG4gICAqIElmIHlvdSBhcmUgdXNpbmcgW1tDb25uZWN0aW9uLmV4ZWNTcWxdXSB0aGVuIFNRTCBzZXJ2ZXIgbWF5IHRyZWF0IHRoZSBtdWx0aXBsZSBjYWxscyB3aXRoIHRoZSBzYW1lIHF1ZXJ5IGFzIGEgc3RvcmVkIHByb2NlZHVyZS5cbiAgICogV2hlbiB0aGlzIG9jY3VycywgdGhlIGBkb25lUHJvY2AgYW5kIGBkb25lSW5Qcm9jYCBldmVudHMgbWF5IGJlIGVtaXR0ZWQgaW5zdGVhZC4gWW91IG11c3QgaGFuZGxlIGJvdGggZXZlbnRzIHRvIGVuc3VyZSBjb21wbGV0ZSBjb3ZlcmFnZS5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnZG9uZScsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSByb3dDb3VudFxuICAgICAgICogICBUaGUgbnVtYmVyIG9mIHJlc3VsdCByb3dzLiBNYXkgYmUgYHVuZGVmaW5lZGAgaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gbW9yZVxuICAgICAgICogICBJZiB0aGVyZSBhcmUgbW9yZSByZXN1bHRzIHRvIGNvbWUgKHByb2JhYmx5IGJlY2F1c2UgbXVsdGlwbGUgc3RhdGVtZW50cyBhcmUgYmVpbmcgZXhlY3V0ZWQpLCB0aGVuIGB0cnVlYC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gcnN0XG4gICAgICAgKiAgIFJvd3MgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBTUUwgc3RhdGVtZW50LlxuICAgICAgICogICBXaWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIENvbm5lY3Rpb24ncyBbW0Nvbm5lY3Rpb25PcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmVdXSBpcyBgdHJ1ZWAuXG4gICAgICAgKi9cbiAgICAgIChyb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCByc3Q/OiBhbnlbXSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIGByZXF1ZXN0Lm9uKCdkb25lSW5Qcm9jJywgZnVuY3Rpb24gKHJvd0NvdW50LCBtb3JlLCByb3dzKSB7IH0pO2BcbiAgICpcbiAgICogSW5kaWNhdGVzIHRoZSBjb21wbGV0aW9uIHN0YXR1cyBvZiBhIFNRTCBzdGF0ZW1lbnQgd2l0aGluIGEgc3RvcmVkIHByb2NlZHVyZS4gQWxsIHJvd3MgZnJvbSBhIHN0YXRlbWVudFxuICAgKiBpbiBhIHN0b3JlZCBwcm9jZWR1cmUgaGF2ZSBiZWVuIHByb3ZpZGVkICh0aHJvdWdoIGByb3dgIGV2ZW50cykuXG4gICAqXG4gICAqIFRoaXMgZXZlbnQgbWF5IGFsc28gb2NjdXIgd2hlbiBleGVjdXRpbmcgbXVsdGlwbGUgY2FsbHMgd2l0aCB0aGUgc2FtZSBxdWVyeSB1c2luZyBbW2V4ZWNTcWxdXS5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnZG9uZUluUHJvYycsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSByb3dDb3VudFxuICAgICAgICogICBUaGUgbnVtYmVyIG9mIHJlc3VsdCByb3dzLiBNYXkgYmUgYHVuZGVmaW5lZGAgaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gbW9yZVxuICAgICAgICogICBJZiB0aGVyZSBhcmUgbW9yZSByZXN1bHRzIHRvIGNvbWUgKHByb2JhYmx5IGJlY2F1c2UgbXVsdGlwbGUgc3RhdGVtZW50cyBhcmUgYmVpbmcgZXhlY3V0ZWQpLCB0aGVuIGB0cnVlYC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gcnN0XG4gICAgICAgKiAgIFJvd3MgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBTUUwgc3RhdGVtZW50LlxuICAgICAgICogICBXaWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIENvbm5lY3Rpb24ncyBbW0Nvbm5lY3Rpb25PcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmVdXSBpcyBgdHJ1ZWAuXG4gICAgICAgKi9cbiAgICAgIChyb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCByc3Q/OiBhbnlbXSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY29tcGxldGlvbiBzdGF0dXMgb2YgYSBzdG9yZWQgcHJvY2VkdXJlLiBUaGlzIGlzIGFsc28gZ2VuZXJhdGVkIGZvciBzdG9yZWQgcHJvY2VkdXJlc1xuICAgKiBleGVjdXRlZCB0aHJvdWdoIFNRTCBzdGF0ZW1lbnRzLlxcXG4gICAqIFRoaXMgZXZlbnQgbWF5IGFsc28gb2NjdXIgd2hlbiBleGVjdXRpbmcgbXVsdGlwbGUgY2FsbHMgd2l0aCB0aGUgc2FtZSBxdWVyeSB1c2luZyBbW2V4ZWNTcWxdXS5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnZG9uZVByb2MnLFxuICAgIGxpc3RlbmVyOlxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0gcm93Q291bnRcbiAgICAgICAqICAgVGhlIG51bWJlciBvZiByZXN1bHQgcm93cy4gTWF5IGJlIGB1bmRlZmluZWRgIGlmIG5vdCBhdmFpbGFibGUuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIG1vcmVcbiAgICAgICAqICAgSWYgdGhlcmUgYXJlIG1vcmUgcmVzdWx0cyB0byBjb21lIChwcm9iYWJseSBiZWNhdXNlIG11bHRpcGxlIHN0YXRlbWVudHMgYXJlIGJlaW5nIGV4ZWN1dGVkKSwgdGhlbiBgdHJ1ZWAuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHJzdFxuICAgICAgICogICBSb3dzIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICAgICAqICAgV2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBDb25uZWN0aW9uJ3MgW1tDb25uZWN0aW9uT3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lXV0gaXMgYHRydWVgLlxuICAgICAgICovXG4gICAgICAocm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZCwgbW9yZTogYm9vbGVhbiwgcHJvY1JldHVyblN0YXR1c1ZhbHVlOiBudW1iZXIsIHJzdD86IGFueVtdKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogQSB2YWx1ZSBmb3IgYW4gb3V0cHV0IHBhcmFtZXRlciAodGhhdCB3YXMgYWRkZWQgdG8gdGhlIHJlcXVlc3Qgd2l0aCBbW2FkZE91dHB1dFBhcmFtZXRlcl1dKS5cbiAgICogU2VlIGFsc28gYFVzaW5nIFBhcmFtZXRlcnNgLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdyZXR1cm5WYWx1ZScsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJOYW1lXG4gICAgICAgKiAgIFRoZSBwYXJhbWV0ZXIgbmFtZS4gKERvZXMgbm90IHN0YXJ0IHdpdGggJ0AnLilcbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAqICAgVGhlIHBhcmFtZXRlcidzIG91dHB1dCB2YWx1ZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gbWV0YWRhdGFcbiAgICAgICAqICAgVGhlIHNhbWUgZGF0YSB0aGF0IGlzIGV4cG9zZWQgaW4gdGhlIGBjb2x1bW5NZXRhZGF0YWAgZXZlbnQuXG4gICAgICAgKi9cbiAgICAgIChwYXJhbWV0ZXJOYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBtZXRhZGF0YTogTWV0YWRhdGEpID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGdpdmVzIHRoZSBjb2x1bW5zIGJ5IHdoaWNoIGRhdGEgaXMgb3JkZXJlZCwgaWYgYE9SREVSIEJZYCBjbGF1c2UgaXMgZXhlY3V0ZWQgaW4gU1FMIFNlcnZlci5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnb3JkZXInLFxuICAgIGxpc3RlbmVyOlxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0gb3JkZXJDb2x1bW5zXG4gICAgICAgKiAgIEFuIGFycmF5IG9mIGNvbHVtbiBudW1iZXJzIGluIHRoZSByZXN1bHQgc2V0IGJ5IHdoaWNoIGRhdGEgaXMgb3JkZXJlZC5cbiAgICAgICAqL1xuICAgICAgKG9yZGVyQ29sdW1uczogbnVtYmVyW10pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGdpdmVzIHRoZSBuYW1lcyBvZiB0aGUgYmFzZSB0YWJsZXMgb2YgdGhlIHJlc3VsdCBzZXQsIGlmIHRoZSBxdWVyeSB3YXNcbiAgICogZXhlY3V0ZWQgaW4gYnJvd3NlIG1vZGUgKGUuZy4gd2l0aCBhIGBGT1IgQlJPV1NFYCBjbGF1c2Ugb3IgYFNFVCBOT19CUk9XU0VUQUJMRSBPTmApLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICd0YWJOYW1lJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHRhYmxlTmFtZXNcbiAgICAgICAqICAgVGhlIG5hbWVzIG9mIHRoZSBiYXNlIHRhYmxlcyByZWZlcmVuY2VkIGluIHRoZSBxdWVyeSwgaW4gdGhlIG9yZGVyIHRoZVxuICAgICAgICogICBgY29sSW5mb2AgZXZlbnQncyBgdGFibGVOdW1gIHZhbHVlcyByZWZlciB0byB0aGVtLiBFYWNoIG5hbWUgaXMgZ2l2ZW5cbiAgICAgICAqICAgYXMgaXRzIGluZGl2aWR1YWwgcGFydHMgKGUuZy4gYFsnZGJvJywgJ2VtcGxveWVlcyddYCkuXG4gICAgICAgKi9cbiAgICAgICh0YWJsZU5hbWVzOiBzdHJpbmdbXVtdKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogVGhpcyBldmVudCBkZXNjcmliZXMgaG93IHRoZSBjb2x1bW5zIG9mIHRoZSByZXN1bHQgc2V0IG1hcCBiYWNrIHRvIHRoZSBiYXNlIHRhYmxlc1xuICAgKiBnaXZlbiBpbiB0aGUgYHRhYk5hbWVgIGV2ZW50LCBpZiB0aGUgcXVlcnkgd2FzIGV4ZWN1dGVkIGluIGJyb3dzZSBtb2RlIChlLmcuIHdpdGggYVxuICAgKiBgRk9SIEJST1dTRWAgY2xhdXNlIG9yIGBTRVQgTk9fQlJPV1NFVEFCTEUgT05gKS5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnY29sSW5mbycsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSBjb2x1bW5zXG4gICAgICAgKiAgIE9uZSBlbnRyeSBmb3IgZWFjaCBjb2x1bW4gaW4gdGhlIHJlc3VsdCBzZXQsIGRlc2NyaWJpbmcgdGhlIGJhc2UgdGFibGVcbiAgICAgICAqICAgdGhlIGNvbHVtbiB3YXMgZGVyaXZlZCBmcm9tLlxuICAgICAgICovXG4gICAgICAoY29sdW1uczogQ29sdW1uSW5mb1tdKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICBvbihldmVudDogJ3JlcXVlc3RDb21wbGV0ZWQnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogJ2NhbmNlbCcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIG9uKGV2ZW50OiAncGF1c2UnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogJ3Jlc3VtZScsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIG9uKGV2ZW50OiBzdHJpbmcgfCBzeW1ib2wsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpIHtcbiAgICByZXR1cm4gc3VwZXIub24oZXZlbnQsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2NvbHVtbk1ldGFkYXRhJywgY29sdW1uczogQ29sdW1uTWV0YWRhdGFbXSB8IHsgW2tleTogc3RyaW5nXTogQ29sdW1uTWV0YWRhdGEgfSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncHJlcGFyZWQnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdlcnJvcicsIGVycjogRXJyb3IpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3JvdycsIGNvbHVtbnM6IGFueSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZG9uZScsIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHJzdD86IGFueVtdKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdkb25lSW5Qcm9jJywgcm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZCwgbW9yZTogYm9vbGVhbiwgcnN0PzogYW55W10pOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2RvbmVQcm9jJywgcm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZCwgbW9yZTogYm9vbGVhbiwgcHJvY1JldHVyblN0YXR1c1ZhbHVlOiBudW1iZXIsIHJzdD86IGFueVtdKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdyZXR1cm5WYWx1ZScsIHBhcmFtZXRlck5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24sIG1ldGFkYXRhOiBNZXRhZGF0YSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmVxdWVzdENvbXBsZXRlZCcpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2NhbmNlbCcpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3BhdXNlJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmVzdW1lJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnb3JkZXInLCBvcmRlckNvbHVtbnM6IG51bWJlcltdKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICd0YWJOYW1lJywgdGFibGVOYW1lczogc3RyaW5nW11bXSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnY29sSW5mbycsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IGJvb2xlYW5cbiAgZW1pdChldmVudDogc3RyaW5nIHwgc3ltYm9sLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBzdXBlci5lbWl0KGV2ZW50LCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gc3FsVGV4dE9yUHJvY2VkdXJlXG4gICAqICAgVGhlIFNRTCBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWRcbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqICAgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgcmVxdWVzdCBoYXMgYmVlbiBmdWxseSBjb21wbGV0ZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzcWxUZXh0T3JQcm9jZWR1cmU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2FsbGJhY2s6IENvbXBsZXRpb25DYWxsYmFjaywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3FsVGV4dE9yUHJvY2VkdXJlID0gc3FsVGV4dE9yUHJvY2VkdXJlO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IFtdO1xuICAgIHRoaXMucGFyYW1ldGVyc0J5TmFtZSA9IHt9O1xuICAgIHRoaXMucHJlcGFyaW5nID0gZmFsc2U7XG4gICAgdGhpcy5oYW5kbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudXNlckNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5zdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyA9IChvcHRpb25zICYmIG9wdGlvbnMuc3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmcpIHx8IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nLlVzZUNvbm5lY3Rpb25TZXR0aW5nO1xuICAgIHRoaXMuY3J5cHRvTWV0YWRhdGFMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZXJyOiBFcnJvciB8IHVuZGVmaW5lZCB8IG51bGwsIHJvd0NvdW50PzogbnVtYmVyLCByb3dzPzogYW55KSB7XG4gICAgICAvLyBBIGNhbmNlbGxhdGlvbiBvbmx5IGFwcGxpZXMgdG8gdGhlIGV4ZWN1dGlvbiBpdCB3YXMgbWFkZSBmb3IsIHNvIGl0XG4gICAgICAvLyBtdXN0IG5vdCBmYWlsIGxhdGVyIGV4ZWN1dGlvbnMgb2YgdGhlIHJlcXVlc3QgLSBpbmNsdWRpbmcgb25lcyB0aGF0XG4gICAgICAvLyBhcmUgc3RhcnRlZCBmcm9tIHRoZSBjYWxsYmFjayBvciBldmVudCBsaXN0ZW5lcnMgYmVsb3cuXG4gICAgICB0aGlzLmNhbmNlbGVkID0gZmFsc2U7XG5cbiAgICAgIGlmICh0aGlzLnByZXBhcmluZykge1xuICAgICAgICB0aGlzLnByZXBhcmluZyA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbWl0KCdwcmVwYXJlZCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVzZXJDYWxsYmFjayhlcnIsIHJvd0NvdW50LCByb3dzKTtcbiAgICAgICAgdGhpcy5lbWl0KCdyZXF1ZXN0Q29tcGxldGVkJyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZVxuICAgKiAgIFRoZSBwYXJhbWV0ZXIgbmFtZS4gVGhpcyBzaG91bGQgY29ycmVzcG9uZCB0byBhIHBhcmFtZXRlciBpbiB0aGUgU1FMLFxuICAgKiAgIG9yIGEgcGFyYW1ldGVyIHRoYXQgYSBjYWxsZWQgcHJvY2VkdXJlIGV4cGVjdHMuIFRoZSBuYW1lIHNob3VsZCBub3Qgc3RhcnQgd2l0aCBgQGAuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqICAgT25lIG9mIHRoZSBzdXBwb3J0ZWQgZGF0YSB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqICAgVGhlIHZhbHVlIHRoYXQgdGhlIHBhcmFtZXRlciBpcyB0byBiZSBnaXZlbi4gVGhlIEphdmFzY3JpcHQgdHlwZSBvZiB0aGVcbiAgICogICBhcmd1bWVudCBzaG91bGQgbWF0Y2ggdGhhdCBkb2N1bWVudGVkIGZvciBkYXRhIHR5cGVzLlxuICAgKlxuICAgKiAgIEEgYHZhcmNoYXIobWF4KWAsIGBudmFyY2hhcihtYXgpYCBvciBgdmFyYmluYXJ5KG1heClgIHZhbHVlLCBvciB0aGUgcm93c1xuICAgKiAgIG9mIGEgdGFibGUtdmFsdWVkIHBhcmFtZXRlciwgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgYW4gYXN5bmMgaXRlcmFibGVcbiAgICogICAoZS5nLiBhIGBSZWFkYWJsZWApIG9mIGNodW5rcywgb3Igb2Ygcm93cy4gVGhlIHNvdXJjZSBpcyByZWFkIHdoaWxlIHRoZVxuICAgKiAgIHJlcXVlc3QgaXMgYmVpbmcgc2VudCwgc28gaXQgZG9lcyBub3QgaGF2ZSB0byBmaXQgaW4gbWVtb3J5LCBhbmQgYVxuICAgKiAgIHJlcXVlc3QgdGhhdCBjYXJyaWVzIG9uZSBjYW4gYmUgZXhlY3V0ZWQgb25seSBvbmNlLlxuICAgKlxuICAgKiAgIEVhY2ggY2h1bmsgb2YgYSBzdHJpbmcgc291cmNlIGlzIGVuY29kZWQgb24gaXRzIG93biwgYXMgYFdyaXRhYmxlLndyaXRlYFxuICAgKiAgIHdvdWxkIGVuY29kZSBpdCwgc28gYSBjaHVuayBtdXN0IG5vdCBlbmQgaGFsZndheSB0aHJvdWdoIGEgVVRGLTE2XG4gICAqICAgc3Vycm9nYXRlIHBhaXIuIFRleHQgdGhhdCBOb2RlLmpzIGRlY29kZWQgZnJvbSBVVEYtOCAoYSBgUmVhZGFibGVgIHdpdGhcbiAgICogICBgZW5jb2Rpbmc6ICd1dGY4J2AsIGByZWFkbGluZWAsIGBUZXh0RGVjb2RlcmApIG5ldmVyIGRvZXM7IGEgc3RyaW5nXG4gICAqICAgc2xpY2VkIGJ5IGluZGV4IGNhbi4gQSBgQnVmZmVyYCBjaHVuayBvZiA4IEtCIG9yIG1vcmUgaXMgc2VudCBieVxuICAgKiAgIHJlZmVyZW5jZSwgYXMgYHNvY2tldC53cml0ZWAgd291bGQgc2VuZCBpdCwgc28gYSBzb3VyY2UgbXVzdCBub3QgcmV1c2VcbiAgICogICBvciBtb2RpZnkgYSBidWZmZXIgaXQgaGFzIHlpZWxkZWQgdW50aWwgdGhlIHJlcXVlc3QgaGFzIGNvbXBsZXRlZC5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogICBBZGRpdGlvbmFsIHR5cGUgb3B0aW9ucy4gT3B0aW9uYWwuXG4gICAqL1xuICAvLyBUT0RPOiBgdHlwZWAgbXVzdCBiZSBhIHZhbGlkIFREUyB2YWx1ZSB0eXBlXG4gIGFkZFBhcmFtZXRlcihuYW1lOiBzdHJpbmcsIHR5cGU6IERhdGFUeXBlLCB2YWx1ZT86IHVua25vd24sIG9wdGlvbnM/OiBSZWFkb25seTxQYXJhbWV0ZXJPcHRpb25zPiB8IG51bGwpIHtcbiAgICBjb25zdCB7IG91dHB1dCA9IGZhbHNlLCBsZW5ndGgsIHByZWNpc2lvbiwgc2NhbGUgfSA9IG9wdGlvbnMgPz8ge307XG5cbiAgICBjb25zdCBwYXJhbWV0ZXI6IFBhcmFtZXRlciA9IHtcbiAgICAgIHR5cGU6IHR5cGUsXG4gICAgICBuYW1lOiBuYW1lLFxuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgb3V0cHV0OiBvdXRwdXQsXG4gICAgICBsZW5ndGg6IGxlbmd0aCxcbiAgICAgIHByZWNpc2lvbjogcHJlY2lzaW9uLFxuICAgICAgc2NhbGU6IHNjYWxlXG4gICAgfTtcblxuICAgIHRoaXMucGFyYW1ldGVycy5wdXNoKHBhcmFtZXRlcik7XG4gICAgdGhpcy5wYXJhbWV0ZXJzQnlOYW1lW25hbWVdID0gcGFyYW1ldGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBuYW1lXG4gICAqICAgVGhlIHBhcmFtZXRlciBuYW1lLiBUaGlzIHNob3VsZCBjb3JyZXNwb25kIHRvIGEgcGFyYW1ldGVyIGluIHRoZSBTUUwsXG4gICAqICAgb3IgYSBwYXJhbWV0ZXIgdGhhdCBhIGNhbGxlZCBwcm9jZWR1cmUgZXhwZWN0cy5cbiAgICpcbiAgICogQHBhcmFtIHR5cGVcbiAgICogICBPbmUgb2YgdGhlIHN1cHBvcnRlZCBkYXRhIHR5cGVzLlxuICAgKlxuICAgKiBAcGFyYW0gdmFsdWVcbiAgICogICBUaGUgdmFsdWUgdGhhdCB0aGUgcGFyYW1ldGVyIGlzIHRvIGJlIGdpdmVuLiBUaGUgSmF2YXNjcmlwdCB0eXBlIG9mIHRoZVxuICAgKiAgIGFyZ3VtZW50IHNob3VsZCBtYXRjaCB0aGF0IGRvY3VtZW50ZWQgZm9yIGRhdGEgdHlwZXNcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnNcbiAgICogICBBZGRpdGlvbmFsIHR5cGUgb3B0aW9ucy4gT3B0aW9uYWwuXG4gICAqL1xuICBhZGRPdXRwdXRQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSwgdmFsdWU/OiB1bmtub3duLCBvcHRpb25zPzogUmVhZG9ubHk8UGFyYW1ldGVyT3B0aW9ucz4gfCBudWxsKSB7XG4gICAgdGhpcy5hZGRQYXJhbWV0ZXIobmFtZSwgdHlwZSwgdmFsdWUsIHsgLi4ub3B0aW9ucywgb3V0cHV0OiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBtYWtlUGFyYW1zUGFyYW1ldGVyKHBhcmFtZXRlcnM6IFBhcmFtZXRlcltdKSB7XG4gICAgbGV0IHBhcmFtc1BhcmFtZXRlciA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXJhbWV0ZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW2ldO1xuICAgICAgaWYgKHBhcmFtc1BhcmFtZXRlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHBhcmFtc1BhcmFtZXRlciArPSAnLCAnO1xuICAgICAgfVxuICAgICAgcGFyYW1zUGFyYW1ldGVyICs9ICdAJyArIHBhcmFtZXRlci5uYW1lICsgJyAnO1xuICAgICAgcGFyYW1zUGFyYW1ldGVyICs9IHBhcmFtZXRlci50eXBlLmRlY2xhcmF0aW9uKHBhcmFtZXRlcik7XG4gICAgICBpZiAocGFyYW1ldGVyLm91dHB1dCkge1xuICAgICAgICBwYXJhbXNQYXJhbWV0ZXIgKz0gJyBPVVRQVVQnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zUGFyYW1ldGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YWxpZGF0ZVBhcmFtZXRlcnMoY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQsIG9wdGlvbnM6IEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMpIHtcbiAgICBjb25zdCByZXNvbHZlZFBhcmFtZXRlcnM6IFJlc29sdmVkUGFyYW1ldGVyW10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLnBhcmFtZXRlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlciA9IHRoaXMucGFyYW1ldGVyc1tpXTtcblxuICAgICAgbGV0IHJlc29sdmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzb2x2ZWQgPSByZXNvbHZlUGFyYW1ldGVyKHBhcmFtZXRlciwgY29sbGF0aW9uLCBvcHRpb25zKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcignVmFsaWRhdGlvbiBmYWlsZWQgZm9yIHBhcmFtZXRlciBcXCcnICsgcGFyYW1ldGVyLm5hbWUgKyAnXFwnLiAnICsgZXJyb3IubWVzc2FnZSwgJ0VQQVJBTScsIHsgY2F1c2U6IGVycm9yIH0pO1xuICAgICAgfVxuXG4gICAgICBwYXJhbWV0ZXIudmFsdWUgPSByZXNvbHZlZC5kYXRhLnZhbHVlO1xuICAgICAgcmVzb2x2ZWRQYXJhbWV0ZXJzLnB1c2gocmVzb2x2ZWQpO1xuICAgIH1cblxuICAgIHRoaXMucmVzb2x2ZWRQYXJhbWV0ZXJzID0gcmVzb2x2ZWRQYXJhbWV0ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRlbXBvcmFyaWx5IHN1c3BlbmRzIHRoZSBmbG93IG9mIGRhdGEgZnJvbSB0aGUgZGF0YWJhc2UuIE5vIG1vcmUgYHJvd2AgZXZlbnRzIHdpbGwgYmUgZW1pdHRlZCB1bnRpbCBbW3Jlc3VtZV1dIGlzIGNhbGxlZC5cbiAgICogSWYgdGhpcyByZXF1ZXN0IGlzIGFscmVhZHkgaW4gYSBwYXVzZWQgc3RhdGUsIGNhbGxpbmcgW1twYXVzZV1dIGhhcyBubyBlZmZlY3QuXG4gICAqL1xuICBwYXVzZSgpIHtcbiAgICBpZiAodGhpcy5wYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbWl0KCdwYXVzZScpO1xuICAgIHRoaXMucGF1c2VkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN1bWVzIHRoZSBmbG93IG9mIGRhdGEgZnJvbSB0aGUgZGF0YWJhc2UuXG4gICAqIElmIHRoaXMgcmVxdWVzdCBpcyBub3QgaW4gYSBwYXVzZWQgc3RhdGUsIGNhbGxpbmcgW1tyZXN1bWVdXSBoYXMgbm8gZWZmZWN0LlxuICAgKi9cbiAgcmVzdW1lKCkge1xuICAgIGlmICghdGhpcy5wYXVzZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVtaXQoJ3Jlc3VtZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbmNlbHMgYSByZXF1ZXN0IHdoaWxlIHdhaXRpbmcgZm9yIGEgc2VydmVyIHJlc3BvbnNlLlxuICAgKi9cbiAgY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLmNhbmNlbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jYW5jZWxlZCA9IHRydWU7XG4gICAgdGhpcy5lbWl0KCdjYW5jZWwnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIGEgdGltZW91dCBmb3IgdGhpcyByZXF1ZXN0LlxuICAgKlxuICAgKiBAcGFyYW0gdGltZW91dFxuICAgKiAgIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgcmVxdWVzdCBpcyBjb25zaWRlcmVkIGZhaWxlZCxcbiAgICogICBvciBgMGAgZm9yIG5vIHRpbWVvdXQuIFdoZW4gbm8gdGltZW91dCBpcyBzZXQgZm9yIHRoZSByZXF1ZXN0LFxuICAgKiAgIHRoZSBbW0Nvbm5lY3Rpb25PcHRpb25zLnJlcXVlc3RUaW1lb3V0XV0gb2YgdGhlIFtbQ29ubmVjdGlvbl1dIGlzIHVzZWQuXG4gICAqL1xuICBzZXRUaW1lb3V0KHRpbWVvdXQ/OiBudW1iZXIpIHtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJlcXVlc3Q7XG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3Q7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUlBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUEyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTUksT0FBTyxTQUFTQyxvQkFBWSxDQUFDO0VBQ2pDO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFHRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFHRTtBQUNGO0FBQ0E7O0VBUUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQU9FO0FBQ0Y7QUFDQTs7RUFHRTtBQUNGO0FBQ0E7O0VBR0U7QUFDRjtBQUNBOztFQW9CRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQWtCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQWtCRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztFQWtCRTtBQUNGO0FBQ0E7QUFDQTs7RUFpQkU7QUFDRjtBQUNBOztFQVdFO0FBQ0Y7QUFDQTtBQUNBOztFQWFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0VBb0JFQyxFQUFFQSxDQUFDQyxLQUFzQixFQUFFQyxRQUFrQyxFQUFFO0lBQzdELE9BQU8sS0FBSyxDQUFDRixFQUFFLENBQUNDLEtBQUssRUFBRUMsUUFBUSxDQUFDO0VBQ2xDOztFQUVBO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNBOztFQUVFO0FBQ0Y7QUFDQTs7RUFFRTtBQUNGO0FBQ0E7O0VBRUU7QUFDRjtBQUNB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
435
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl9kYXRhVHlwZSIsIl9lcnJvcnMiLCJfdHlwZXMiLCJSZXF1ZXN0IiwiRXZlbnRFbWl0dGVyIiwib24iLCJldmVudCIsImxpc3RlbmVyIiwiZW1pdCIsImFyZ3MiLCJjb25zdHJ1Y3RvciIsInNxbFRleHRPclByb2NlZHVyZSIsImNhbGxiYWNrIiwib3B0aW9ucyIsInBhcmFtZXRlcnMiLCJwYXJhbWV0ZXJzQnlOYW1lIiwicHJlcGFyaW5nIiwiaGFuZGxlIiwidW5kZWZpbmVkIiwiY2FuY2VsZWQiLCJwYXVzZWQiLCJlcnJvciIsImNvbm5lY3Rpb24iLCJ0aW1lb3V0IiwidXNlckNhbGxiYWNrIiwic3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmciLCJTUUxTZXJ2ZXJTdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyIsIlVzZUNvbm5lY3Rpb25TZXR0aW5nIiwiY3J5cHRvTWV0YWRhdGFMb2FkZWQiLCJlcnIiLCJyb3dDb3VudCIsInJvd3MiLCJhZGRQYXJhbWV0ZXIiLCJuYW1lIiwidHlwZSIsInZhbHVlIiwib3V0cHV0IiwibGVuZ3RoIiwicHJlY2lzaW9uIiwic2NhbGUiLCJwYXJhbWV0ZXIiLCJwdXNoIiwiYWRkT3V0cHV0UGFyYW1ldGVyIiwibWFrZVBhcmFtc1BhcmFtZXRlciIsInBhcmFtc1BhcmFtZXRlciIsImkiLCJsZW4iLCJkZWNsYXJhdGlvbiIsInZhbGlkYXRlUGFyYW1ldGVycyIsImNvbGxhdGlvbiIsInJlc29sdmVkUGFyYW1ldGVycyIsInJlc29sdmVkIiwicmVzb2x2ZVBhcmFtZXRlciIsIlJlcXVlc3RFcnJvciIsIm1lc3NhZ2UiLCJjYXVzZSIsImRhdGEiLCJwYXVzZSIsInJlc3VtZSIsImNhbmNlbCIsInNldFRpbWVvdXQiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vc3JjL3JlcXVlc3QudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnZXZlbnRzJztcbmltcG9ydCB7IHR5cGUgUGFyYW1ldGVyLCB0eXBlIERhdGFUeXBlLCB0eXBlIFJlc29sdmVkUGFyYW1ldGVyLCByZXNvbHZlUGFyYW1ldGVyIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xuaW1wb3J0IHsgUmVxdWVzdEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG5pbXBvcnQgQ29ubmVjdGlvbiwgeyB0eXBlIEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IHsgdHlwZSBNZXRhZGF0YSB9IGZyb20gJy4vbWV0YWRhdGEtcGFyc2VyJztcbmltcG9ydCB7IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nIH0gZnJvbSAnLi9hbHdheXMtZW5jcnlwdGVkL3R5cGVzJztcbmltcG9ydCB7IHR5cGUgQ29sdW1uTWV0YWRhdGEgfSBmcm9tICcuL3Rva2VuL2NvbG1ldGFkYXRhLXRva2VuLXBhcnNlcic7XG5pbXBvcnQgeyB0eXBlIENvbHVtbkluZm8gfSBmcm9tICcuL3Rva2VuL3Rva2VuJztcbmltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4vY29sbGF0aW9uJztcblxuLyoqXG4gKiBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHJlcXVlc3QgaGFzIGNvbXBsZXRlZCwgZWl0aGVyIHN1Y2Nlc3NmdWxseSBvciB3aXRoIGFuIGVycm9yLlxuICogSWYgYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBleGVjdXRpb24gb2YgdGhlIHN0YXRlbWVudChzKSwgdGhlbiBgZXJyYCB3aWxsIGRlc2NyaWJlIHRoZSBlcnJvci5cbiAqXG4gKiBBcyBvbmx5IG9uZSByZXF1ZXN0IGF0IGEgdGltZSBtYXkgYmUgZXhlY3V0ZWQgb24gYSBjb25uZWN0aW9uLCBhbm90aGVyIHJlcXVlc3Qgc2hvdWxkIG5vdFxuICogYmUgaW5pdGlhdGVkIHVudGlsIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkLlxuICpcbiAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIGJlZm9yZSBgcmVxdWVzdENvbXBsZXRlZGAgaXMgZW1pdHRlZC5cbiAqL1xudHlwZSBDb21wbGV0aW9uQ2FsbGJhY2sgPVxuICAvKipcbiAgICogQHBhcmFtIGVycm9yXG4gICAqICAgSWYgYW4gZXJyb3Igb2NjdXJyZWQsIGFuIGVycm9yIG9iamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHJvd0NvdW50XG4gICAqICAgVGhlIG51bWJlciBvZiByb3dzIGVtaXR0ZWQgYXMgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICpcbiAgICogQHBhcmFtIHJvd3NcbiAgICogICBSb3dzIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICogICBXaWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIFtbQ29ubmVjdGlvbk9wdGlvbnMucm93Q29sbGVjdGlvbk9uUmVxdWVzdENvbXBsZXRpb25dXSBpcyBgdHJ1ZWAuXG4gICAqL1xuICAvLyBUT0RPOiBGaWd1cmUgb3V0IGhvdyB0byB0eXBlIHRoZSBgcm93c2AgcGFyYW1ldGVyIGhlcmUuXG4gIChlcnJvcjogRXJyb3IgfCBudWxsIHwgdW5kZWZpbmVkLCByb3dDb3VudD86IG51bWJlciwgcm93cz86IGFueSkgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBQYXJhbWV0ZXJPcHRpb25zIHtcbiAgb3V0cHV0PzogYm9vbGVhbjtcbiAgbGVuZ3RoPzogbnVtYmVyO1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG4gIHNjYWxlPzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVxdWVzdE9wdGlvbnMge1xuICBzdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZz86IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nO1xufVxuXG4vKipcbiAqIGBgYGpzXG4gKiBjb25zdCB7IFJlcXVlc3QgfSA9IHJlcXVpcmUoJ3RlZGlvdXMnKTtcbiAqIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChcInNlbGVjdCA0MiwgJ2hlbGxvIHdvcmxkJ1wiLCAoZXJyLCByb3dDb3VudCkgPT4ge1xuICogICAvLyBSZXF1ZXN0IGNvbXBsZXRpb24gY2FsbGJhY2suLi5cbiAqIH0pO1xuICogY29ubmVjdGlvbi5leGVjU3FsKHJlcXVlc3QpO1xuICogYGBgXG4gKi9cbmNsYXNzIFJlcXVlc3QgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgc3FsVGV4dE9yUHJvY2VkdXJlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHBhcmFtZXRlcnNCeU5hbWU6IHsgW2tleTogc3RyaW5nXTogUGFyYW1ldGVyIH07XG4gIC8qKlxuICAgKiBUaGUgcGFyYW1ldGVycyBhcyByZXNvbHZlZCBieSB0aGUgbGFzdCBjYWxsIHRvIGB2YWxpZGF0ZVBhcmFtZXRlcnNgLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByZXNvbHZlZFBhcmFtZXRlcnM6IFJlc29sdmVkUGFyYW1ldGVyW107XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBwcmVwYXJpbmc6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjYW5jZWxlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHBhdXNlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHVzZXJDYWxsYmFjazogQ29tcGxldGlvbkNhbGxiYWNrO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgaGFuZGxlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBlcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dzPzogQXJyYXk8YW55PjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJzdD86IEFycmF5PGFueT47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY2FsbGJhY2s6IENvbXBsZXRpb25DYWxsYmFjaztcblxuXG4gIGRlY2xhcmUgc2hvdWxkSG9ub3JBRT86IGJvb2xlYW47XG4gIGRlY2xhcmUgc3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmc6IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nO1xuICBkZWNsYXJlIGNyeXB0b01ldGFkYXRhTG9hZGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50LCBkZXNjcmliaW5nIHJlc3VsdCBzZXQgY29sdW1ucywgd2lsbCBiZSBlbWl0dGVkIGJlZm9yZSByb3dcbiAgICogZXZlbnRzIGFyZSBlbWl0dGVkLiBUaGlzIGV2ZW50IG1heSBiZSBlbWl0dGVkIG11bHRpcGxlIHRpbWVzIHdoZW4gbW9yZVxuICAgKiB0aGFuIG9uZSByZWNvcmRzZXQgaXMgcHJvZHVjZWQgYnkgdGhlIHN0YXRlbWVudC5cbiAgICpcbiAgICogQW4gYXJyYXkgbGlrZSBvYmplY3QsIHdoZXJlIHRoZSBjb2x1bW5zIGNhbiBiZSBhY2Nlc3NlZCBlaXRoZXIgYnkgaW5kZXhcbiAgICogb3IgbmFtZS4gQ29sdW1ucyB3aXRoIGEgbmFtZSB0aGF0IGlzIGFuIGludGVnZXIgYXJlIG5vdCBhY2Nlc3NpYmxlIGJ5IG5hbWUsXG4gICAqIGFzIGl0IHdvdWxkIGJlIGludGVycHJldGVkIGFzIGFuIGFycmF5IGluZGV4LlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdjb2x1bW5NZXRhZGF0YScsXG4gICAgbGlzdGVuZXI6XG4gICAgKGNvbHVtbnM6IENvbHVtbk1ldGFkYXRhW10gfCB7IFtrZXk6IHN0cmluZ106IENvbHVtbk1ldGFkYXRhIH0pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGUgcmVxdWVzdCBoYXMgYmVlbiBwcmVwYXJlZCBhbmQgY2FuIGJlIHVzZWQgaW4gc3Vic2VxdWVudCBjYWxscyB0byBleGVjdXRlIGFuZCB1bnByZXBhcmUuXG4gICAqL1xuICBvbihldmVudDogJ3ByZXBhcmVkJywgbGlzdGVuZXI6ICgpID0+IHZvaWQpOiB0aGlzXG5cbiAgLyoqXG4gICAqIFRoZSByZXF1ZXN0IGVuY291bnRlcmVkIGFuIGVycm9yIGFuZCBoYXMgbm90IGJlZW4gcHJlcGFyZWQuXG4gICAqL1xuICBvbihldmVudDogJ2Vycm9yJywgbGlzdGVuZXI6IChlcnI6IEVycm9yKSA9PiB2b2lkKTogdGhpc1xuXG4gIC8qKlxuICAgKiBBIHJvdyByZXN1bHRpbmcgZnJvbSBleGVjdXRpb24gb2YgdGhlIFNRTCBzdGF0ZW1lbnQuXG4gICAqL1xuICBvbihcbiAgICBldmVudDogJ3JvdycsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEFuIGFycmF5IG9yIG9iamVjdCAoZGVwZW5kcyBvbiBbW0Nvbm5lY3Rpb25PcHRpb25zLnVzZUNvbHVtbk5hbWVzXV0pLCB3aGVyZSB0aGUgY29sdW1ucyBjYW4gYmUgYWNjZXNzZWQgYnkgaW5kZXgvbmFtZS5cbiAgICAgICAqIEVhY2ggY29sdW1uIGhhcyB0d28gcHJvcGVydGllcywgYG1ldGFkYXRhYCBhbmQgYHZhbHVlYDpcbiAgICAgICAqXG4gICAgICAgKiAqIGBtZXRhZGF0YWBcbiAgICAgICAqXG4gICAgICAgKiAgICBUaGUgc2FtZSBkYXRhIHRoYXQgaXMgZXhwb3NlZCBpbiB0aGUgYGNvbHVtbk1ldGFkYXRhYCBldmVudC5cbiAgICAgICAqXG4gICAgICAgKiAqIGB2YWx1ZWBcbiAgICAgICAqXG4gICAgICAgKiAgICBUaGUgY29sdW1uJ3MgdmFsdWUuIEl0IHdpbGwgYmUgYG51bGxgIGZvciBhIGBOVUxMYC5cbiAgICAgICAqICAgIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb2x1bW5zIHdpdGggdGhlIHNhbWUgbmFtZSwgdGhlbiB0aGlzIHdpbGwgYmUgYW4gYXJyYXkgb2YgdGhlIHZhbHVlcy5cbiAgICAgICAqL1xuICAgICAgKGNvbHVtbnM6IGFueSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIEFsbCByb3dzIGZyb20gYSByZXN1bHQgc2V0IGhhdmUgYmVlbiBwcm92aWRlZCAodGhyb3VnaCBgcm93YCBldmVudHMpLlxuICAgKlxuICAgKiBUaGlzIHRva2VuIGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhlIGNvbXBsZXRpb24gb2YgYSBTUUwgc3RhdGVtZW50LlxuICAgKiBBcyBtdWx0aXBsZSBTUUwgc3RhdGVtZW50cyBjYW4gYmUgc2VudCB0byB0aGUgc2VydmVyIGluIGEgc2luZ2xlIFNRTCBiYXRjaCwgbXVsdGlwbGUgYGRvbmVgIGNhbiBiZSBnZW5lcmF0ZWQuXG4gICAqIEFuIGBkb25lYCBldmVudCBpcyBlbWl0dGVkIGZvciBlYWNoIFNRTCBzdGF0ZW1lbnQgaW4gdGhlIFNRTCBiYXRjaCBleGNlcHQgdmFyaWFibGUgZGVjbGFyYXRpb25zLlxuICAgKiBGb3IgZXhlY3V0aW9uIG9mIFNRTCBzdGF0ZW1lbnRzIHdpdGhpbiBzdG9yZWQgcHJvY2VkdXJlcywgYGRvbmVQcm9jYCBhbmQgYGRvbmVJblByb2NgIGV2ZW50cyBhcmUgdXNlZCBpbiBwbGFjZSBvZiBgZG9uZWAuXG4gICAqXG4gICAqIElmIHlvdSBhcmUgdXNpbmcgW1tDb25uZWN0aW9uLmV4ZWNTcWxdXSB0aGVuIFNRTCBzZXJ2ZXIgbWF5IHRyZWF0IHRoZSBtdWx0aXBsZSBjYWxscyB3aXRoIHRoZSBzYW1lIHF1ZXJ5IGFzIGEgc3RvcmVkIHByb2NlZHVyZS5cbiAgICogV2hlbiB0aGlzIG9jY3VycywgdGhlIGBkb25lUHJvY2AgYW5kIGBkb25lSW5Qcm9jYCBldmVudHMgbWF5IGJlIGVtaXR0ZWQgaW5zdGVhZC4gWW91IG11c3QgaGFuZGxlIGJvdGggZXZlbnRzIHRvIGVuc3VyZSBjb21wbGV0ZSBjb3ZlcmFnZS5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnZG9uZScsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSByb3dDb3VudFxuICAgICAgICogICBUaGUgbnVtYmVyIG9mIHJlc3VsdCByb3dzLiBNYXkgYmUgYHVuZGVmaW5lZGAgaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gbW9yZVxuICAgICAgICogICBJZiB0aGVyZSBhcmUgbW9yZSByZXN1bHRzIHRvIGNvbWUgKHByb2JhYmx5IGJlY2F1c2UgbXVsdGlwbGUgc3RhdGVtZW50cyBhcmUgYmVpbmcgZXhlY3V0ZWQpLCB0aGVuIGB0cnVlYC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gcnN0XG4gICAgICAgKiAgIFJvd3MgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBTUUwgc3RhdGVtZW50LlxuICAgICAgICogICBXaWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIENvbm5lY3Rpb24ncyBbW0Nvbm5lY3Rpb25PcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmVdXSBpcyBgdHJ1ZWAuXG4gICAgICAgKi9cbiAgICAgIChyb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCByc3Q/OiBhbnlbXSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIGByZXF1ZXN0Lm9uKCdkb25lSW5Qcm9jJywgZnVuY3Rpb24gKHJvd0NvdW50LCBtb3JlLCByb3dzKSB7IH0pO2BcbiAgICpcbiAgICogSW5kaWNhdGVzIHRoZSBjb21wbGV0aW9uIHN0YXR1cyBvZiBhIFNRTCBzdGF0ZW1lbnQgd2l0aGluIGEgc3RvcmVkIHByb2NlZHVyZS4gQWxsIHJvd3MgZnJvbSBhIHN0YXRlbWVudFxuICAgKiBpbiBhIHN0b3JlZCBwcm9jZWR1cmUgaGF2ZSBiZWVuIHByb3ZpZGVkICh0aHJvdWdoIGByb3dgIGV2ZW50cykuXG4gICAqXG4gICAqIFRoaXMgZXZlbnQgbWF5IGFsc28gb2NjdXIgd2hlbiBleGVjdXRpbmcgbXVsdGlwbGUgY2FsbHMgd2l0aCB0aGUgc2FtZSBxdWVyeSB1c2luZyBbW2V4ZWNTcWxdXS5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnZG9uZUluUHJvYycsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSByb3dDb3VudFxuICAgICAgICogICBUaGUgbnVtYmVyIG9mIHJlc3VsdCByb3dzLiBNYXkgYmUgYHVuZGVmaW5lZGAgaWYgbm90IGF2YWlsYWJsZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gbW9yZVxuICAgICAgICogICBJZiB0aGVyZSBhcmUgbW9yZSByZXN1bHRzIHRvIGNvbWUgKHByb2JhYmx5IGJlY2F1c2UgbXVsdGlwbGUgc3RhdGVtZW50cyBhcmUgYmVpbmcgZXhlY3V0ZWQpLCB0aGVuIGB0cnVlYC5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gcnN0XG4gICAgICAgKiAgIFJvd3MgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBTUUwgc3RhdGVtZW50LlxuICAgICAgICogICBXaWxsIG9ubHkgYmUgYXZhaWxhYmxlIGlmIENvbm5lY3Rpb24ncyBbW0Nvbm5lY3Rpb25PcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmVdXSBpcyBgdHJ1ZWAuXG4gICAgICAgKi9cbiAgICAgIChyb3dDb3VudDogbnVtYmVyIHwgdW5kZWZpbmVkLCBtb3JlOiBib29sZWFuLCByc3Q/OiBhbnlbXSkgPT4gdm9pZFxuICApOiB0aGlzXG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY29tcGxldGlvbiBzdGF0dXMgb2YgYSBzdG9yZWQgcHJvY2VkdXJlLiBUaGlzIGlzIGFsc28gZ2VuZXJhdGVkIGZvciBzdG9yZWQgcHJvY2VkdXJlc1xuICAgKiBleGVjdXRlZCB0aHJvdWdoIFNRTCBzdGF0ZW1lbnRzLlxcXG4gICAqIFRoaXMgZXZlbnQgbWF5IGFsc28gb2NjdXIgd2hlbiBleGVjdXRpbmcgbXVsdGlwbGUgY2FsbHMgd2l0aCB0aGUgc2FtZSBxdWVyeSB1c2luZyBbW2V4ZWNTcWxdXS5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnZG9uZVByb2MnLFxuICAgIGxpc3RlbmVyOlxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0gcm93Q291bnRcbiAgICAgICAqICAgVGhlIG51bWJlciBvZiByZXN1bHQgcm93cy4gTWF5IGJlIGB1bmRlZmluZWRgIGlmIG5vdCBhdmFpbGFibGUuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIG1vcmVcbiAgICAgICAqICAgSWYgdGhlcmUgYXJlIG1vcmUgcmVzdWx0cyB0byBjb21lIChwcm9iYWJseSBiZWNhdXNlIG11bHRpcGxlIHN0YXRlbWVudHMgYXJlIGJlaW5nIGV4ZWN1dGVkKSwgdGhlbiBgdHJ1ZWAuXG4gICAgICAgKlxuICAgICAgICogQHBhcmFtIHJzdFxuICAgICAgICogICBSb3dzIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgU1FMIHN0YXRlbWVudC5cbiAgICAgICAqICAgV2lsbCBvbmx5IGJlIGF2YWlsYWJsZSBpZiBDb25uZWN0aW9uJ3MgW1tDb25uZWN0aW9uT3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lXV0gaXMgYHRydWVgLlxuICAgICAgICovXG4gICAgICAocm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZCwgbW9yZTogYm9vbGVhbiwgcHJvY1JldHVyblN0YXR1c1ZhbHVlOiBudW1iZXIsIHJzdD86IGFueVtdKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogQSB2YWx1ZSBmb3IgYW4gb3V0cHV0IHBhcmFtZXRlciAodGhhdCB3YXMgYWRkZWQgdG8gdGhlIHJlcXVlc3Qgd2l0aCBbW2FkZE91dHB1dFBhcmFtZXRlcl1dKS5cbiAgICogU2VlIGFsc28gYFVzaW5nIFBhcmFtZXRlcnNgLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICdyZXR1cm5WYWx1ZScsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJOYW1lXG4gICAgICAgKiAgIFRoZSBwYXJhbWV0ZXIgbmFtZS4gKERvZXMgbm90IHN0YXJ0IHdpdGggJ0AnLilcbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gdmFsdWVcbiAgICAgICAqICAgVGhlIHBhcmFtZXRlcidzIG91dHB1dCB2YWx1ZS5cbiAgICAgICAqXG4gICAgICAgKiBAcGFyYW0gbWV0YWRhdGFcbiAgICAgICAqICAgVGhlIHNhbWUgZGF0YSB0aGF0IGlzIGV4cG9zZWQgaW4gdGhlIGBjb2x1bW5NZXRhZGF0YWAgZXZlbnQuXG4gICAgICAgKi9cbiAgICAgIChwYXJhbWV0ZXJOYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCBtZXRhZGF0YTogTWV0YWRhdGEpID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGdpdmVzIHRoZSBjb2x1bW5zIGJ5IHdoaWNoIGRhdGEgaXMgb3JkZXJlZCwgaWYgYE9SREVSIEJZYCBjbGF1c2UgaXMgZXhlY3V0ZWQgaW4gU1FMIFNlcnZlci5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnb3JkZXInLFxuICAgIGxpc3RlbmVyOlxuICAgICAgLyoqXG4gICAgICAgKiBAcGFyYW0gb3JkZXJDb2x1bW5zXG4gICAgICAgKiAgIEFuIGFycmF5IG9mIGNvbHVtbiBudW1iZXJzIGluIHRoZSByZXN1bHQgc2V0IGJ5IHdoaWNoIGRhdGEgaXMgb3JkZXJlZC5cbiAgICAgICAqL1xuICAgICAgKG9yZGVyQ29sdW1uczogbnVtYmVyW10pID0+IHZvaWRcbiAgKTogdGhpc1xuXG4gIC8qKlxuICAgKiBUaGlzIGV2ZW50IGdpdmVzIHRoZSBuYW1lcyBvZiB0aGUgYmFzZSB0YWJsZXMgb2YgdGhlIHJlc3VsdCBzZXQsIGlmIHRoZSBxdWVyeSB3YXNcbiAgICogZXhlY3V0ZWQgaW4gYnJvd3NlIG1vZGUgKGUuZy4gd2l0aCBhIGBGT1IgQlJPV1NFYCBjbGF1c2Ugb3IgYFNFVCBOT19CUk9XU0VUQUJMRSBPTmApLlxuICAgKi9cbiAgb24oXG4gICAgZXZlbnQ6ICd0YWJOYW1lJyxcbiAgICBsaXN0ZW5lcjpcbiAgICAgIC8qKlxuICAgICAgICogQHBhcmFtIHRhYmxlTmFtZXNcbiAgICAgICAqICAgVGhlIG5hbWVzIG9mIHRoZSBiYXNlIHRhYmxlcyByZWZlcmVuY2VkIGluIHRoZSBxdWVyeSwgaW4gdGhlIG9yZGVyIHRoZVxuICAgICAgICogICBgY29sSW5mb2AgZXZlbnQncyBgdGFibGVOdW1gIHZhbHVlcyByZWZlciB0byB0aGVtLiBFYWNoIG5hbWUgaXMgZ2l2ZW5cbiAgICAgICAqICAgYXMgaXRzIGluZGl2aWR1YWwgcGFydHMgKGUuZy4gYFsnZGJvJywgJ2VtcGxveWVlcyddYCkuXG4gICAgICAgKi9cbiAgICAgICh0YWJsZU5hbWVzOiBzdHJpbmdbXVtdKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICAvKipcbiAgICogVGhpcyBldmVudCBkZXNjcmliZXMgaG93IHRoZSBjb2x1bW5zIG9mIHRoZSByZXN1bHQgc2V0IG1hcCBiYWNrIHRvIHRoZSBiYXNlIHRhYmxlc1xuICAgKiBnaXZlbiBpbiB0aGUgYHRhYk5hbWVgIGV2ZW50LCBpZiB0aGUgcXVlcnkgd2FzIGV4ZWN1dGVkIGluIGJyb3dzZSBtb2RlIChlLmcuIHdpdGggYVxuICAgKiBgRk9SIEJST1dTRWAgY2xhdXNlIG9yIGBTRVQgTk9fQlJPV1NFVEFCTEUgT05gKS5cbiAgICovXG4gIG9uKFxuICAgIGV2ZW50OiAnY29sSW5mbycsXG4gICAgbGlzdGVuZXI6XG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSBjb2x1bW5zXG4gICAgICAgKiAgIE9uZSBlbnRyeSBmb3IgZWFjaCBjb2x1bW4gaW4gdGhlIHJlc3VsdCBzZXQsIGRlc2NyaWJpbmcgdGhlIGJhc2UgdGFibGVcbiAgICAgICAqICAgdGhlIGNvbHVtbiB3YXMgZGVyaXZlZCBmcm9tLlxuICAgICAgICovXG4gICAgICAoY29sdW1uczogQ29sdW1uSW5mb1tdKSA9PiB2b2lkXG4gICk6IHRoaXNcblxuICBvbihldmVudDogJ3JlcXVlc3RDb21wbGV0ZWQnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogJ2NhbmNlbCcsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIG9uKGV2ZW50OiAncGF1c2UnLCBsaXN0ZW5lcjogKCkgPT4gdm9pZCk6IHRoaXNcblxuICBvbihldmVudDogJ3Jlc3VtZScsIGxpc3RlbmVyOiAoKSA9PiB2b2lkKTogdGhpc1xuXG4gIG9uKGV2ZW50OiBzdHJpbmcgfCBzeW1ib2wsIGxpc3RlbmVyOiAoLi4uYXJnczogYW55W10pID0+IHZvaWQpIHtcbiAgICByZXR1cm4gc3VwZXIub24oZXZlbnQsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2NvbHVtbk1ldGFkYXRhJywgY29sdW1uczogQ29sdW1uTWV0YWRhdGFbXSB8IHsgW2tleTogc3RyaW5nXTogQ29sdW1uTWV0YWRhdGEgfSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncHJlcGFyZWQnKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdlcnJvcicsIGVycjogRXJyb3IpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3JvdycsIGNvbHVtbnM6IGFueSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnZG9uZScsIHJvd0NvdW50OiBudW1iZXIgfCB1bmRlZmluZWQsIG1vcmU6IGJvb2xlYW4sIHJzdD86IGFueVtdKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdkb25lSW5Qcm9jJywgcm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZCwgbW9yZTogYm9vbGVhbiwgcnN0PzogYW55W10pOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2RvbmVQcm9jJywgcm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZCwgbW9yZTogYm9vbGVhbiwgcHJvY1JldHVyblN0YXR1c1ZhbHVlOiBudW1iZXIsIHJzdD86IGFueVtdKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICdyZXR1cm5WYWx1ZScsIHBhcmFtZXRlck5hbWU6IHN0cmluZywgdmFsdWU6IHVua25vd24sIG1ldGFkYXRhOiBNZXRhZGF0YSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmVxdWVzdENvbXBsZXRlZCcpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ2NhbmNlbCcpOiBib29sZWFuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZW1pdChldmVudDogJ3BhdXNlJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAncmVzdW1lJyk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnb3JkZXInLCBvcmRlckNvbHVtbnM6IG51bWJlcltdKTogYm9vbGVhblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGVtaXQoZXZlbnQ6ICd0YWJOYW1lJywgdGFibGVOYW1lczogc3RyaW5nW11bXSk6IGJvb2xlYW5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBlbWl0KGV2ZW50OiAnY29sSW5mbycsIGNvbHVtbnM6IENvbHVtbkluZm9bXSk6IGJvb2xlYW5cbiAgZW1pdChldmVudDogc3RyaW5nIHwgc3ltYm9sLCAuLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBzdXBlci5lbWl0KGV2ZW50LCAuLi5hcmdzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gc3FsVGV4dE9yUHJvY2VkdXJlXG4gICAqICAgVGhlIFNRTCBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWRcbiAgICpcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqICAgVGhlIGNhbGxiYWNrIHRvIGV4ZWN1dGUgb25jZSB0aGUgcmVxdWVzdCBoYXMgYmVlbiBmdWxseSBjb21wbGV0ZWQuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzcWxUZXh0T3JQcm9jZWR1cmU6IHN0cmluZyB8IHVuZGVmaW5lZCwgY2FsbGJhY2s6IENvbXBsZXRpb25DYWxsYmFjaywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuc3FsVGV4dE9yUHJvY2VkdXJlID0gc3FsVGV4dE9yUHJvY2VkdXJlO1xuICAgIHRoaXMucGFyYW1ldGVycyA9IFtdO1xuICAgIHRoaXMucGFyYW1ldGVyc0J5TmFtZSA9IHt9O1xuICAgIHRoaXMucHJlcGFyaW5nID0gZmFsc2U7XG4gICAgdGhpcy5oYW5kbGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jYW5jZWxlZCA9IGZhbHNlO1xuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy50aW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudXNlckNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5zdGF0ZW1lbnRDb2x1bW5FbmNyeXB0aW9uU2V0dGluZyA9IChvcHRpb25zICYmIG9wdGlvbnMuc3RhdGVtZW50Q29sdW1uRW5jcnlwdGlvblNldHRpbmcpIHx8IFNRTFNlcnZlclN0YXRlbWVudENvbHVtbkVuY3J5cHRpb25TZXR0aW5nLlVzZUNvbm5lY3Rpb25TZXR0aW5nO1xuICAgIHRoaXMuY3J5cHRvTWV0YWRhdGFMb2FkZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNhbGxiYWNrID0gZnVuY3Rpb24oZXJyOiBFcnJvciB8IHVuZGVmaW5lZCB8IG51bGwsIHJvd0NvdW50PzogbnVtYmVyLCByb3dzPzogYW55KSB7XG4gICAgICAvLyBBIGNhbmNlbGxhdGlvbiBvbmx5IGFwcGxpZXMgdG8gdGhlIGV4ZWN1dGlvbiBpdCB3YXMgbWFkZSBmb3IsIHNvIGl0XG4gICAgICAvLyBtdXN0IG5vdCBmYWlsIGxhdGVyIGV4ZWN1dGlvbnMgb2YgdGhlIHJlcXVlc3QgLSBpbmNsdWRpbmcgb25lcyB0aGF0XG4gICAgICAvLyBhcmUgc3RhcnRlZCBmcm9tIHRoZSBjYWxsYmFjayBvciBldmVudCBsaXN0ZW5lcnMgYmVsb3cuXG4gICAgICB0aGlzLmNhbmNlbGVkID0gZmFsc2U7XG5cbiAgICAgIGlmICh0aGlzLnByZXBhcmluZykge1xuICAgICAgICB0aGlzLnByZXBhcmluZyA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lbWl0KCdwcmVwYXJlZCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnVzZXJDYWxsYmFjayhlcnIsIHJvd0NvdW50LCByb3dzKTtcbiAgICAgICAgdGhpcy5lbWl0KCdyZXF1ZXN0Q29tcGxldGVkJyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZVxuICAgKiAgIFRoZSBwYXJhbWV0ZXIgbmFtZS4gVGhpcyBzaG91bGQgY29ycmVzcG9uZCB0byBhIHBhcmFtZXRlciBpbiB0aGUgU1FMLFxuICAgKiAgIG9yIGEgcGFyYW1ldGVyIHRoYXQgYSBjYWxsZWQgcHJvY2VkdXJlIGV4cGVjdHMuIFRoZSBuYW1lIHNob3VsZCBub3Qgc3RhcnQgd2l0aCBgQGAuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqICAgT25lIG9mIHRoZSBzdXBwb3J0ZWQgZGF0YSB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqICAgVGhlIHZhbHVlIHRoYXQgdGhlIHBhcmFtZXRlciBpcyB0byBiZSBnaXZlbi4gVGhlIEphdmFzY3JpcHQgdHlwZSBvZiB0aGVcbiAgICogICBhcmd1bWVudCBzaG91bGQgbWF0Y2ggdGhhdCBkb2N1bWVudGVkIGZvciBkYXRhIHR5cGVzLlxuICAgKlxuICAgKiAgIEEgYHZhcmNoYXIobWF4KWAsIGBudmFyY2hhcihtYXgpYCBvciBgdmFyYmluYXJ5KG1heClgIHZhbHVlLCBvciB0aGUgcm93c1xuICAgKiAgIG9mIGEgdGFibGUtdmFsdWVkIHBhcmFtZXRlciwgY2FuIGFsc28gYmUgZ2l2ZW4gYXMgYW4gYXN5bmMgaXRlcmFibGVcbiAgICogICAoZS5nLiBhIGBSZWFkYWJsZWApIG9mIGNodW5rcywgb3Igb2Ygcm93cy4gVGhlIHNvdXJjZSBpcyByZWFkIHdoaWxlIHRoZVxuICAgKiAgIHJlcXVlc3QgaXMgYmVpbmcgc2VudCwgc28gaXQgZG9lcyBub3QgaGF2ZSB0byBmaXQgaW4gbWVtb3J5LCBhbmQgYVxuICAgKiAgIHJlcXVlc3QgdGhhdCBjYXJyaWVzIG9uZSBjYW4gYmUgZXhlY3V0ZWQgb25seSBvbmNlLlxuICAgKlxuICAgKiAgIFN0cmluZyBjaHVua3MgbWF5IHNwbGl0IFVURi0xNiBzdXJyb2dhdGUgcGFpcnM7IHRoZSBwYWlycyBhcmUgcHJlc2VydmVkXG4gICAqICAgYWNyb3NzIGNodW5rIGJvdW5kYXJpZXMsIGluY2x1ZGluZyBlbXB0eSBjaHVua3MuIEFuIHVucGFpcmVkIHN1cnJvZ2F0ZVxuICAgKiAgIGlzIGhhbmRsZWQgYnkgdGhlIHR5cGUncyBlbmNvZGluZyBhcyBpdCBpcyBmb3IgYW4gaW4tbWVtb3J5IHZhbHVlLlxuICAgKiAgIEEgYEJ1ZmZlcmAgY2h1bmsgb2YgOCBLQiBvciBtb3JlIGlzIHNlbnQgYnlcbiAgICogICByZWZlcmVuY2UsIGFzIGBzb2NrZXQud3JpdGVgIHdvdWxkIHNlbmQgaXQsIHNvIGEgc291cmNlIG11c3Qgbm90IHJldXNlXG4gICAqICAgb3IgbW9kaWZ5IGEgYnVmZmVyIGl0IGhhcyB5aWVsZGVkIHVudGlsIHRoZSByZXF1ZXN0IGhhcyBjb21wbGV0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqICAgQWRkaXRpb25hbCB0eXBlIG9wdGlvbnMuIE9wdGlvbmFsLlxuICAgKi9cbiAgLy8gVE9ETzogYHR5cGVgIG11c3QgYmUgYSB2YWxpZCBURFMgdmFsdWUgdHlwZVxuICBhZGRQYXJhbWV0ZXIobmFtZTogc3RyaW5nLCB0eXBlOiBEYXRhVHlwZSwgdmFsdWU/OiB1bmtub3duLCBvcHRpb25zPzogUmVhZG9ubHk8UGFyYW1ldGVyT3B0aW9ucz4gfCBudWxsKSB7XG4gICAgY29uc3QgeyBvdXRwdXQgPSBmYWxzZSwgbGVuZ3RoLCBwcmVjaXNpb24sIHNjYWxlIH0gPSBvcHRpb25zID8/IHt9O1xuXG4gICAgY29uc3QgcGFyYW1ldGVyOiBQYXJhbWV0ZXIgPSB7XG4gICAgICB0eXBlOiB0eXBlLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIG91dHB1dDogb3V0cHV0LFxuICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvbixcbiAgICAgIHNjYWxlOiBzY2FsZVxuICAgIH07XG5cbiAgICB0aGlzLnBhcmFtZXRlcnMucHVzaChwYXJhbWV0ZXIpO1xuICAgIHRoaXMucGFyYW1ldGVyc0J5TmFtZVtuYW1lXSA9IHBhcmFtZXRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gbmFtZVxuICAgKiAgIFRoZSBwYXJhbWV0ZXIgbmFtZS4gVGhpcyBzaG91bGQgY29ycmVzcG9uZCB0byBhIHBhcmFtZXRlciBpbiB0aGUgU1FMLFxuICAgKiAgIG9yIGEgcGFyYW1ldGVyIHRoYXQgYSBjYWxsZWQgcHJvY2VkdXJlIGV4cGVjdHMuXG4gICAqXG4gICAqIEBwYXJhbSB0eXBlXG4gICAqICAgT25lIG9mIHRoZSBzdXBwb3J0ZWQgZGF0YSB0eXBlcy5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlXG4gICAqICAgVGhlIHZhbHVlIHRoYXQgdGhlIHBhcmFtZXRlciBpcyB0byBiZSBnaXZlbi4gVGhlIEphdmFzY3JpcHQgdHlwZSBvZiB0aGVcbiAgICogICBhcmd1bWVudCBzaG91bGQgbWF0Y2ggdGhhdCBkb2N1bWVudGVkIGZvciBkYXRhIHR5cGVzXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zXG4gICAqICAgQWRkaXRpb25hbCB0eXBlIG9wdGlvbnMuIE9wdGlvbmFsLlxuICAgKi9cbiAgYWRkT3V0cHV0UGFyYW1ldGVyKG5hbWU6IHN0cmluZywgdHlwZTogRGF0YVR5cGUsIHZhbHVlPzogdW5rbm93biwgb3B0aW9ucz86IFJlYWRvbmx5PFBhcmFtZXRlck9wdGlvbnM+IHwgbnVsbCkge1xuICAgIHRoaXMuYWRkUGFyYW1ldGVyKG5hbWUsIHR5cGUsIHZhbHVlLCB7IC4uLm9wdGlvbnMsIG91dHB1dDogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWFrZVBhcmFtc1BhcmFtZXRlcihwYXJhbWV0ZXJzOiBQYXJhbWV0ZXJbXSkge1xuICAgIGxldCBwYXJhbXNQYXJhbWV0ZXIgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcGFyYW1ldGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgcGFyYW1ldGVyID0gcGFyYW1ldGVyc1tpXTtcbiAgICAgIGlmIChwYXJhbXNQYXJhbWV0ZXIubGVuZ3RoID4gMCkge1xuICAgICAgICBwYXJhbXNQYXJhbWV0ZXIgKz0gJywgJztcbiAgICAgIH1cbiAgICAgIHBhcmFtc1BhcmFtZXRlciArPSAnQCcgKyBwYXJhbWV0ZXIubmFtZSArICcgJztcbiAgICAgIHBhcmFtc1BhcmFtZXRlciArPSBwYXJhbWV0ZXIudHlwZS5kZWNsYXJhdGlvbihwYXJhbWV0ZXIpO1xuICAgICAgaWYgKHBhcmFtZXRlci5vdXRwdXQpIHtcbiAgICAgICAgcGFyYW1zUGFyYW1ldGVyICs9ICcgT1VUUFVUJztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHBhcmFtc1BhcmFtZXRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdmFsaWRhdGVQYXJhbWV0ZXJzKGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkLCBvcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zKSB7XG4gICAgY29uc3QgcmVzb2x2ZWRQYXJhbWV0ZXJzOiBSZXNvbHZlZFBhcmFtZXRlcltdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gdGhpcy5wYXJhbWV0ZXJzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSB0aGlzLnBhcmFtZXRlcnNbaV07XG5cbiAgICAgIGxldCByZXNvbHZlZDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc29sdmVkID0gcmVzb2x2ZVBhcmFtZXRlcihwYXJhbWV0ZXIsIGNvbGxhdGlvbiwgb3B0aW9ucyk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoJ1ZhbGlkYXRpb24gZmFpbGVkIGZvciBwYXJhbWV0ZXIgXFwnJyArIHBhcmFtZXRlci5uYW1lICsgJ1xcJy4gJyArIGVycm9yLm1lc3NhZ2UsICdFUEFSQU0nLCB7IGNhdXNlOiBlcnJvciB9KTtcbiAgICAgIH1cblxuICAgICAgcGFyYW1ldGVyLnZhbHVlID0gcmVzb2x2ZWQuZGF0YS52YWx1ZTtcbiAgICAgIHJlc29sdmVkUGFyYW1ldGVycy5wdXNoKHJlc29sdmVkKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc29sdmVkUGFyYW1ldGVycyA9IHJlc29sdmVkUGFyYW1ldGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBUZW1wb3JhcmlseSBzdXNwZW5kcyB0aGUgZmxvdyBvZiBkYXRhIGZyb20gdGhlIGRhdGFiYXNlLiBObyBtb3JlIGByb3dgIGV2ZW50cyB3aWxsIGJlIGVtaXR0ZWQgdW50aWwgW1tyZXN1bWVdXSBpcyBjYWxsZWQuXG4gICAqIElmIHRoaXMgcmVxdWVzdCBpcyBhbHJlYWR5IGluIGEgcGF1c2VkIHN0YXRlLCBjYWxsaW5nIFtbcGF1c2VdXSBoYXMgbm8gZWZmZWN0LlxuICAgKi9cbiAgcGF1c2UoKSB7XG4gICAgaWYgKHRoaXMucGF1c2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZW1pdCgncGF1c2UnKTtcbiAgICB0aGlzLnBhdXNlZCA9IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogUmVzdW1lcyB0aGUgZmxvdyBvZiBkYXRhIGZyb20gdGhlIGRhdGFiYXNlLlxuICAgKiBJZiB0aGlzIHJlcXVlc3QgaXMgbm90IGluIGEgcGF1c2VkIHN0YXRlLCBjYWxsaW5nIFtbcmVzdW1lXV0gaGFzIG5vIGVmZmVjdC5cbiAgICovXG4gIHJlc3VtZSgpIHtcbiAgICBpZiAoIXRoaXMucGF1c2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGF1c2VkID0gZmFsc2U7XG4gICAgdGhpcy5lbWl0KCdyZXN1bWUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWxzIGEgcmVxdWVzdCB3aGlsZSB3YWl0aW5nIGZvciBhIHNlcnZlciByZXNwb25zZS5cbiAgICovXG4gIGNhbmNlbCgpIHtcbiAgICBpZiAodGhpcy5jYW5jZWxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuY2FuY2VsZWQgPSB0cnVlO1xuICAgIHRoaXMuZW1pdCgnY2FuY2VsJyk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIHRpbWVvdXQgZm9yIHRoaXMgcmVxdWVzdC5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVvdXRcbiAgICogICBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIHJlcXVlc3QgaXMgY29uc2lkZXJlZCBmYWlsZWQsXG4gICAqICAgb3IgYDBgIGZvciBubyB0aW1lb3V0LiBXaGVuIG5vIHRpbWVvdXQgaXMgc2V0IGZvciB0aGUgcmVxdWVzdCxcbiAgICogICB0aGUgW1tDb25uZWN0aW9uT3B0aW9ucy5yZXF1ZXN0VGltZW91dF1dIG9mIHRoZSBbW0Nvbm5lY3Rpb25dXSBpcyB1c2VkLlxuICAgKi9cbiAgc2V0VGltZW91dCh0aW1lb3V0PzogbnVtYmVyKSB7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFJQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBMkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","names":["_events","require","_dataType","_errors","_types","Request","EventEmitter","on","event","listener","emit","args","constructor","sqlTextOrProcedure","callback","options","parameters","parametersByName","preparing","handle","undefined","canceled","paused","error","connection","timeout","userCallback","statementColumnEncryptionSetting","SQLServerStatementColumnEncryptionSetting","UseConnectionSetting","cryptoMetadataLoaded","err","rowCount","rows","addParameter","name","type","value","output","length","precision","scale","parameter","push","addOutputParameter","makeParamsParameter","paramsParameter","i","len","declaration","validateParameters","collation","resolvedParameters","resolved","resolveParameter","RequestError","message","cause","data","pause","resume","cancel","setTimeout","_default","exports","default","module"],"sources":["../src/request.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { type Parameter, type DataType, type ResolvedParameter, resolveParameter } from './data-type';\nimport { RequestError } from './errors';\n\nimport Connection, { type InternalConnectionOptions } from './connection';\nimport { type Metadata } from './metadata-parser';\nimport { SQLServerStatementColumnEncryptionSetting } from './always-encrypted/types';\nimport { type ColumnMetadata } from './token/colmetadata-token-parser';\nimport { type ColumnInfo } from './token/token';\nimport { Collation } from './collation';\n\n/**\n * The callback is called when the request has completed, either successfully or with an error.\n * If an error occurs during execution of the statement(s), then `err` will describe the error.\n *\n * As only one request at a time may be executed on a connection, another request should not\n * be initiated until this callback is called.\n *\n * This callback is called before `requestCompleted` is emitted.\n */\ntype CompletionCallback =\n /**\n * @param error\n * If an error occurred, an error object.\n *\n * @param rowCount\n * The number of rows emitted as result of executing the SQL statement.\n *\n * @param rows\n * Rows as a result of executing the SQL statement.\n * Will only be available if [[ConnectionOptions.rowCollectionOnRequestCompletion]] is `true`.\n */\n // TODO: Figure out how to type the `rows` parameter here.\n (error: Error | null | undefined, rowCount?: number, rows?: any) => void;\n\nexport interface ParameterOptions {\n output?: boolean;\n length?: number;\n precision?: number;\n scale?: number;\n}\n\ninterface RequestOptions {\n statementColumnEncryptionSetting?: SQLServerStatementColumnEncryptionSetting;\n}\n\n/**\n * ```js\n * const { Request } = require('tedious');\n * const request = new Request(\"select 42, 'hello world'\", (err, rowCount) => {\n * // Request completion callback...\n * });\n * connection.execSql(request);\n * ```\n */\nclass Request extends EventEmitter {\n /**\n * @private\n */\n declare sqlTextOrProcedure: string | undefined;\n /**\n * @private\n */\n declare parameters: Parameter[];\n /**\n * @private\n */\n declare parametersByName: { [key: string]: Parameter };\n /**\n * The parameters as resolved by the last call to `validateParameters`.\n *\n * @private\n */\n declare resolvedParameters: ResolvedParameter[];\n /**\n * @private\n */\n declare preparing: boolean;\n /**\n * @private\n */\n declare canceled: boolean;\n /**\n * @private\n */\n declare paused: boolean;\n /**\n * @private\n */\n declare userCallback: CompletionCallback;\n /**\n * @private\n */\n declare handle: number | undefined;\n /**\n * @private\n */\n declare error: Error | undefined;\n /**\n * @private\n */\n declare connection: Connection | undefined;\n /**\n * @private\n */\n declare timeout: number | undefined;\n\n /**\n * @private\n */\n declare rows?: Array<any>;\n /**\n * @private\n */\n declare rst?: Array<any>;\n /**\n * @private\n */\n declare rowCount?: number;\n\n /**\n * @private\n */\n declare callback: CompletionCallback;\n\n\n declare shouldHonorAE?: boolean;\n declare statementColumnEncryptionSetting: SQLServerStatementColumnEncryptionSetting;\n declare cryptoMetadataLoaded: boolean;\n\n /**\n * This event, describing result set columns, will be emitted before row\n * events are emitted. This event may be emitted multiple times when more\n * than one recordset is produced by the statement.\n *\n * An array like object, where the columns can be accessed either by index\n * or name. Columns with a name that is an integer are not accessible by name,\n * as it would be interpreted as an array index.\n */\n on(\n event: 'columnMetadata',\n listener:\n (columns: ColumnMetadata[] | { [key: string]: ColumnMetadata }) => void\n ): this\n\n /**\n * The request has been prepared and can be used in subsequent calls to execute and unprepare.\n */\n on(event: 'prepared', listener: () => void): this\n\n /**\n * The request encountered an error and has not been prepared.\n */\n on(event: 'error', listener: (err: Error) => void): this\n\n /**\n * A row resulting from execution of the SQL statement.\n */\n on(\n event: 'row',\n listener:\n /**\n * An array or object (depends on [[ConnectionOptions.useColumnNames]]), where the columns can be accessed by index/name.\n * Each column has two properties, `metadata` and `value`:\n *\n * * `metadata`\n *\n * The same data that is exposed in the `columnMetadata` event.\n *\n * * `value`\n *\n * The column's value. It will be `null` for a `NULL`.\n * If there are multiple columns with the same name, then this will be an array of the values.\n */\n (columns: any) => void\n ): this\n\n /**\n * All rows from a result set have been provided (through `row` events).\n *\n * This token is used to indicate the completion of a SQL statement.\n * As multiple SQL statements can be sent to the server in a single SQL batch, multiple `done` can be generated.\n * An `done` event is emitted for each SQL statement in the SQL batch except variable declarations.\n * For execution of SQL statements within stored procedures, `doneProc` and `doneInProc` events are used in place of `done`.\n *\n * If you are using [[Connection.execSql]] then SQL server may treat the multiple calls with the same query as a stored procedure.\n * When this occurs, the `doneProc` and `doneInProc` events may be emitted instead. You must handle both events to ensure complete coverage.\n */\n on(\n event: 'done',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be available if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, rst?: any[]) => void\n ): this\n\n /**\n * `request.on('doneInProc', function (rowCount, more, rows) { });`\n *\n * Indicates the completion status of a SQL statement within a stored procedure. All rows from a statement\n * in a stored procedure have been provided (through `row` events).\n *\n * This event may also occur when executing multiple calls with the same query using [[execSql]].\n */\n on(\n event: 'doneInProc',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be available if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, rst?: any[]) => void\n ): this\n\n /**\n * Indicates the completion status of a stored procedure. This is also generated for stored procedures\n * executed through SQL statements.\\\n * This event may also occur when executing multiple calls with the same query using [[execSql]].\n */\n on(\n event: 'doneProc',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be available if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, procReturnStatusValue: number, rst?: any[]) => void\n ): this\n\n /**\n * A value for an output parameter (that was added to the request with [[addOutputParameter]]).\n * See also `Using Parameters`.\n */\n on(\n event: 'returnValue',\n listener:\n /**\n * @param parameterName\n * The parameter name. (Does not start with '@'.)\n *\n * @param value\n * The parameter's output value.\n *\n * @param metadata\n * The same data that is exposed in the `columnMetadata` event.\n */\n (parameterName: string, value: unknown, metadata: Metadata) => void\n ): this\n\n /**\n * This event gives the columns by which data is ordered, if `ORDER BY` clause is executed in SQL Server.\n */\n on(\n event: 'order',\n listener:\n /**\n * @param orderColumns\n * An array of column numbers in the result set by which data is ordered.\n */\n (orderColumns: number[]) => void\n ): this\n\n /**\n * This event gives the names of the base tables of the result set, if the query was\n * executed in browse mode (e.g. with a `FOR BROWSE` clause or `SET NO_BROWSETABLE ON`).\n */\n on(\n event: 'tabName',\n listener:\n /**\n * @param tableNames\n * The names of the base tables referenced in the query, in the order the\n * `colInfo` event's `tableNum` values refer to them. Each name is given\n * as its individual parts (e.g. `['dbo', 'employees']`).\n */\n (tableNames: string[][]) => void\n ): this\n\n /**\n * This event describes how the columns of the result set map back to the base tables\n * given in the `tabName` event, if the query was executed in browse mode (e.g. with a\n * `FOR BROWSE` clause or `SET NO_BROWSETABLE ON`).\n */\n on(\n event: 'colInfo',\n listener:\n /**\n * @param columns\n * One entry for each column in the result set, describing the base table\n * the column was derived from.\n */\n (columns: ColumnInfo[]) => void\n ): this\n\n on(event: 'requestCompleted', listener: () => void): this\n\n on(event: 'cancel', listener: () => void): this\n\n on(event: 'pause', listener: () => void): this\n\n on(event: 'resume', listener: () => void): this\n\n on(event: string | symbol, listener: (...args: any[]) => void) {\n return super.on(event, listener);\n }\n\n /**\n * @private\n */\n emit(event: 'columnMetadata', columns: ColumnMetadata[] | { [key: string]: ColumnMetadata }): boolean\n /**\n * @private\n */\n emit(event: 'prepared'): boolean\n /**\n * @private\n */\n emit(event: 'error', err: Error): boolean\n /**\n * @private\n */\n emit(event: 'row', columns: any): boolean\n /**\n * @private\n */\n emit(event: 'done', rowCount: number | undefined, more: boolean, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'doneInProc', rowCount: number | undefined, more: boolean, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'doneProc', rowCount: number | undefined, more: boolean, procReturnStatusValue: number, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'returnValue', parameterName: string, value: unknown, metadata: Metadata): boolean\n /**\n * @private\n */\n emit(event: 'requestCompleted'): boolean\n /**\n * @private\n */\n emit(event: 'cancel'): boolean\n /**\n * @private\n */\n emit(event: 'pause'): boolean\n /**\n * @private\n */\n emit(event: 'resume'): boolean\n /**\n * @private\n */\n emit(event: 'order', orderColumns: number[]): boolean\n /**\n * @private\n */\n emit(event: 'tabName', tableNames: string[][]): boolean\n /**\n * @private\n */\n emit(event: 'colInfo', columns: ColumnInfo[]): boolean\n emit(event: string | symbol, ...args: any[]) {\n return super.emit(event, ...args);\n }\n\n /**\n * @param sqlTextOrProcedure\n * The SQL statement to be executed\n *\n * @param callback\n * The callback to execute once the request has been fully completed.\n */\n constructor(sqlTextOrProcedure: string | undefined, callback: CompletionCallback, options?: RequestOptions) {\n super();\n\n this.sqlTextOrProcedure = sqlTextOrProcedure;\n this.parameters = [];\n this.parametersByName = {};\n this.preparing = false;\n this.handle = undefined;\n this.canceled = false;\n this.paused = false;\n this.error = undefined;\n this.connection = undefined;\n this.timeout = undefined;\n this.userCallback = callback;\n this.statementColumnEncryptionSetting = (options && options.statementColumnEncryptionSetting) || SQLServerStatementColumnEncryptionSetting.UseConnectionSetting;\n this.cryptoMetadataLoaded = false;\n this.callback = function(err: Error | undefined | null, rowCount?: number, rows?: any) {\n // A cancellation only applies to the execution it was made for, so it\n // must not fail later executions of the request - including ones that\n // are started from the callback or event listeners below.\n this.canceled = false;\n\n if (this.preparing) {\n this.preparing = false;\n if (err) {\n this.emit('error', err);\n } else {\n this.emit('prepared');\n }\n } else {\n this.userCallback(err, rowCount, rows);\n this.emit('requestCompleted');\n }\n };\n }\n\n /**\n * @param name\n * The parameter name. This should correspond to a parameter in the SQL,\n * or a parameter that a called procedure expects. The name should not start with `@`.\n *\n * @param type\n * One of the supported data types.\n *\n * @param value\n * The value that the parameter is to be given. The Javascript type of the\n * argument should match that documented for data types.\n *\n * A `varchar(max)`, `nvarchar(max)` or `varbinary(max)` value, or the rows\n * of a table-valued parameter, can also be given as an async iterable\n * (e.g. a `Readable`) of chunks, or of rows. The source is read while the\n * request is being sent, so it does not have to fit in memory, and a\n * request that carries one can be executed only once.\n *\n * Each chunk of a string source is encoded on its own, as `Writable.write`\n * would encode it, so a chunk must not end halfway through a UTF-16\n * surrogate pair. Text that Node.js decoded from UTF-8 (a `Readable` with\n * `encoding: 'utf8'`, `readline`, `TextDecoder`) never does; a string\n * sliced by index can. A `Buffer` chunk of 8 KB or more is sent by\n * reference, as `socket.write` would send it, so a source must not reuse\n * or modify a buffer it has yielded until the request has completed.\n *\n * @param options\n * Additional type options. Optional.\n */\n // TODO: `type` must be a valid TDS value type\n addParameter(name: string, type: DataType, value?: unknown, options?: Readonly<ParameterOptions> | null) {\n const { output = false, length, precision, scale } = options ?? {};\n\n const parameter: Parameter = {\n type: type,\n name: name,\n value: value,\n output: output,\n length: length,\n precision: precision,\n scale: scale\n };\n\n this.parameters.push(parameter);\n this.parametersByName[name] = parameter;\n }\n\n /**\n * @param name\n * The parameter name. This should correspond to a parameter in the SQL,\n * or a parameter that a called procedure expects.\n *\n * @param type\n * One of the supported data types.\n *\n * @param value\n * The value that the parameter is to be given. The Javascript type of the\n * argument should match that documented for data types\n *\n * @param options\n * Additional type options. Optional.\n */\n addOutputParameter(name: string, type: DataType, value?: unknown, options?: Readonly<ParameterOptions> | null) {\n this.addParameter(name, type, value, { ...options, output: true });\n }\n\n /**\n * @private\n */\n makeParamsParameter(parameters: Parameter[]) {\n let paramsParameter = '';\n for (let i = 0, len = parameters.length; i < len; i++) {\n const parameter = parameters[i];\n if (paramsParameter.length > 0) {\n paramsParameter += ', ';\n }\n paramsParameter += '@' + parameter.name + ' ';\n paramsParameter += parameter.type.declaration(parameter);\n if (parameter.output) {\n paramsParameter += ' OUTPUT';\n }\n }\n return paramsParameter;\n }\n\n /**\n * @private\n */\n validateParameters(collation: Collation | undefined, options: InternalConnectionOptions) {\n const resolvedParameters: ResolvedParameter[] = [];\n\n for (let i = 0, len = this.parameters.length; i < len; i++) {\n const parameter = this.parameters[i];\n\n let resolved;\n try {\n resolved = resolveParameter(parameter, collation, options);\n } catch (error: any) {\n throw new RequestError('Validation failed for parameter \\'' + parameter.name + '\\'. ' + error.message, 'EPARAM', { cause: error });\n }\n\n parameter.value = resolved.data.value;\n resolvedParameters.push(resolved);\n }\n\n this.resolvedParameters = resolvedParameters;\n }\n\n /**\n * Temporarily suspends the flow of data from the database. No more `row` events will be emitted until [[resume]] is called.\n * If this request is already in a paused state, calling [[pause]] has no effect.\n */\n pause() {\n if (this.paused) {\n return;\n }\n this.emit('pause');\n this.paused = true;\n }\n\n /**\n * Resumes the flow of data from the database.\n * If this request is not in a paused state, calling [[resume]] has no effect.\n */\n resume() {\n if (!this.paused) {\n return;\n }\n this.paused = false;\n this.emit('resume');\n }\n\n /**\n * Cancels a request while waiting for a server response.\n */\n cancel() {\n if (this.canceled) {\n return;\n }\n\n this.canceled = true;\n this.emit('cancel');\n }\n\n /**\n * Sets a timeout for this request.\n *\n * @param timeout\n * The number of milliseconds before the request is considered failed,\n * or `0` for no timeout. When no timeout is set for the request,\n * the [[ConnectionOptions.requestTimeout]] of the [[Connection]] is used.\n */\n setTimeout(timeout?: number) {\n this.timeout = timeout;\n }\n}\n\nexport default Request;\nmodule.exports = Request;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAIA,IAAAG,MAAA,GAAAH,OAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMI,OAAO,SAASC,oBAAY,CAAC;EACjC;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;AACA;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAQE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAOE;AACF;AACA;;EAGE;AACF;AACA;;EAGE;AACF;AACA;;EAoBE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;;EAiBE;AACF;AACA;;EAWE;AACF;AACA;AACA;;EAaE;AACF;AACA;AACA;AACA;;EAoBEC,EAAEA,CAACC,KAAsB,EAAEC,QAAkC,EAAE;IAC7D,OAAO,KAAK,CAACF,EAAE,CAACC,KAAK,EAAEC,QAAQ,CAAC;EAClC;;EAEA;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEEC,IAAIA,CAACF,KAAsB,EAAE,GAAGG,IAAW,EAAE;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","ignoreList":[]}
1
+ {"version":3,"file":"request.js","names":["_events","require","_dataType","_errors","_types","Request","EventEmitter","on","event","listener","emit","args","constructor","sqlTextOrProcedure","callback","options","parameters","parametersByName","preparing","handle","undefined","canceled","paused","error","connection","timeout","userCallback","statementColumnEncryptionSetting","SQLServerStatementColumnEncryptionSetting","UseConnectionSetting","cryptoMetadataLoaded","err","rowCount","rows","addParameter","name","type","value","output","length","precision","scale","parameter","push","addOutputParameter","makeParamsParameter","paramsParameter","i","len","declaration","validateParameters","collation","resolvedParameters","resolved","resolveParameter","RequestError","message","cause","data","pause","resume","cancel","setTimeout","_default","exports","default","module"],"sources":["../src/request.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport { type Parameter, type DataType, type ResolvedParameter, resolveParameter } from './data-type';\nimport { RequestError } from './errors';\n\nimport Connection, { type InternalConnectionOptions } from './connection';\nimport { type Metadata } from './metadata-parser';\nimport { SQLServerStatementColumnEncryptionSetting } from './always-encrypted/types';\nimport { type ColumnMetadata } from './token/colmetadata-token-parser';\nimport { type ColumnInfo } from './token/token';\nimport { Collation } from './collation';\n\n/**\n * The callback is called when the request has completed, either successfully or with an error.\n * If an error occurs during execution of the statement(s), then `err` will describe the error.\n *\n * As only one request at a time may be executed on a connection, another request should not\n * be initiated until this callback is called.\n *\n * This callback is called before `requestCompleted` is emitted.\n */\ntype CompletionCallback =\n /**\n * @param error\n * If an error occurred, an error object.\n *\n * @param rowCount\n * The number of rows emitted as result of executing the SQL statement.\n *\n * @param rows\n * Rows as a result of executing the SQL statement.\n * Will only be available if [[ConnectionOptions.rowCollectionOnRequestCompletion]] is `true`.\n */\n // TODO: Figure out how to type the `rows` parameter here.\n (error: Error | null | undefined, rowCount?: number, rows?: any) => void;\n\nexport interface ParameterOptions {\n output?: boolean;\n length?: number;\n precision?: number;\n scale?: number;\n}\n\ninterface RequestOptions {\n statementColumnEncryptionSetting?: SQLServerStatementColumnEncryptionSetting;\n}\n\n/**\n * ```js\n * const { Request } = require('tedious');\n * const request = new Request(\"select 42, 'hello world'\", (err, rowCount) => {\n * // Request completion callback...\n * });\n * connection.execSql(request);\n * ```\n */\nclass Request extends EventEmitter {\n /**\n * @private\n */\n declare sqlTextOrProcedure: string | undefined;\n /**\n * @private\n */\n declare parameters: Parameter[];\n /**\n * @private\n */\n declare parametersByName: { [key: string]: Parameter };\n /**\n * The parameters as resolved by the last call to `validateParameters`.\n *\n * @private\n */\n declare resolvedParameters: ResolvedParameter[];\n /**\n * @private\n */\n declare preparing: boolean;\n /**\n * @private\n */\n declare canceled: boolean;\n /**\n * @private\n */\n declare paused: boolean;\n /**\n * @private\n */\n declare userCallback: CompletionCallback;\n /**\n * @private\n */\n declare handle: number | undefined;\n /**\n * @private\n */\n declare error: Error | undefined;\n /**\n * @private\n */\n declare connection: Connection | undefined;\n /**\n * @private\n */\n declare timeout: number | undefined;\n\n /**\n * @private\n */\n declare rows?: Array<any>;\n /**\n * @private\n */\n declare rst?: Array<any>;\n /**\n * @private\n */\n declare rowCount?: number;\n\n /**\n * @private\n */\n declare callback: CompletionCallback;\n\n\n declare shouldHonorAE?: boolean;\n declare statementColumnEncryptionSetting: SQLServerStatementColumnEncryptionSetting;\n declare cryptoMetadataLoaded: boolean;\n\n /**\n * This event, describing result set columns, will be emitted before row\n * events are emitted. This event may be emitted multiple times when more\n * than one recordset is produced by the statement.\n *\n * An array like object, where the columns can be accessed either by index\n * or name. Columns with a name that is an integer are not accessible by name,\n * as it would be interpreted as an array index.\n */\n on(\n event: 'columnMetadata',\n listener:\n (columns: ColumnMetadata[] | { [key: string]: ColumnMetadata }) => void\n ): this\n\n /**\n * The request has been prepared and can be used in subsequent calls to execute and unprepare.\n */\n on(event: 'prepared', listener: () => void): this\n\n /**\n * The request encountered an error and has not been prepared.\n */\n on(event: 'error', listener: (err: Error) => void): this\n\n /**\n * A row resulting from execution of the SQL statement.\n */\n on(\n event: 'row',\n listener:\n /**\n * An array or object (depends on [[ConnectionOptions.useColumnNames]]), where the columns can be accessed by index/name.\n * Each column has two properties, `metadata` and `value`:\n *\n * * `metadata`\n *\n * The same data that is exposed in the `columnMetadata` event.\n *\n * * `value`\n *\n * The column's value. It will be `null` for a `NULL`.\n * If there are multiple columns with the same name, then this will be an array of the values.\n */\n (columns: any) => void\n ): this\n\n /**\n * All rows from a result set have been provided (through `row` events).\n *\n * This token is used to indicate the completion of a SQL statement.\n * As multiple SQL statements can be sent to the server in a single SQL batch, multiple `done` can be generated.\n * An `done` event is emitted for each SQL statement in the SQL batch except variable declarations.\n * For execution of SQL statements within stored procedures, `doneProc` and `doneInProc` events are used in place of `done`.\n *\n * If you are using [[Connection.execSql]] then SQL server may treat the multiple calls with the same query as a stored procedure.\n * When this occurs, the `doneProc` and `doneInProc` events may be emitted instead. You must handle both events to ensure complete coverage.\n */\n on(\n event: 'done',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be available if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, rst?: any[]) => void\n ): this\n\n /**\n * `request.on('doneInProc', function (rowCount, more, rows) { });`\n *\n * Indicates the completion status of a SQL statement within a stored procedure. All rows from a statement\n * in a stored procedure have been provided (through `row` events).\n *\n * This event may also occur when executing multiple calls with the same query using [[execSql]].\n */\n on(\n event: 'doneInProc',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be available if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, rst?: any[]) => void\n ): this\n\n /**\n * Indicates the completion status of a stored procedure. This is also generated for stored procedures\n * executed through SQL statements.\\\n * This event may also occur when executing multiple calls with the same query using [[execSql]].\n */\n on(\n event: 'doneProc',\n listener:\n /**\n * @param rowCount\n * The number of result rows. May be `undefined` if not available.\n *\n * @param more\n * If there are more results to come (probably because multiple statements are being executed), then `true`.\n *\n * @param rst\n * Rows as a result of executing the SQL statement.\n * Will only be available if Connection's [[ConnectionOptions.rowCollectionOnDone]] is `true`.\n */\n (rowCount: number | undefined, more: boolean, procReturnStatusValue: number, rst?: any[]) => void\n ): this\n\n /**\n * A value for an output parameter (that was added to the request with [[addOutputParameter]]).\n * See also `Using Parameters`.\n */\n on(\n event: 'returnValue',\n listener:\n /**\n * @param parameterName\n * The parameter name. (Does not start with '@'.)\n *\n * @param value\n * The parameter's output value.\n *\n * @param metadata\n * The same data that is exposed in the `columnMetadata` event.\n */\n (parameterName: string, value: unknown, metadata: Metadata) => void\n ): this\n\n /**\n * This event gives the columns by which data is ordered, if `ORDER BY` clause is executed in SQL Server.\n */\n on(\n event: 'order',\n listener:\n /**\n * @param orderColumns\n * An array of column numbers in the result set by which data is ordered.\n */\n (orderColumns: number[]) => void\n ): this\n\n /**\n * This event gives the names of the base tables of the result set, if the query was\n * executed in browse mode (e.g. with a `FOR BROWSE` clause or `SET NO_BROWSETABLE ON`).\n */\n on(\n event: 'tabName',\n listener:\n /**\n * @param tableNames\n * The names of the base tables referenced in the query, in the order the\n * `colInfo` event's `tableNum` values refer to them. Each name is given\n * as its individual parts (e.g. `['dbo', 'employees']`).\n */\n (tableNames: string[][]) => void\n ): this\n\n /**\n * This event describes how the columns of the result set map back to the base tables\n * given in the `tabName` event, if the query was executed in browse mode (e.g. with a\n * `FOR BROWSE` clause or `SET NO_BROWSETABLE ON`).\n */\n on(\n event: 'colInfo',\n listener:\n /**\n * @param columns\n * One entry for each column in the result set, describing the base table\n * the column was derived from.\n */\n (columns: ColumnInfo[]) => void\n ): this\n\n on(event: 'requestCompleted', listener: () => void): this\n\n on(event: 'cancel', listener: () => void): this\n\n on(event: 'pause', listener: () => void): this\n\n on(event: 'resume', listener: () => void): this\n\n on(event: string | symbol, listener: (...args: any[]) => void) {\n return super.on(event, listener);\n }\n\n /**\n * @private\n */\n emit(event: 'columnMetadata', columns: ColumnMetadata[] | { [key: string]: ColumnMetadata }): boolean\n /**\n * @private\n */\n emit(event: 'prepared'): boolean\n /**\n * @private\n */\n emit(event: 'error', err: Error): boolean\n /**\n * @private\n */\n emit(event: 'row', columns: any): boolean\n /**\n * @private\n */\n emit(event: 'done', rowCount: number | undefined, more: boolean, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'doneInProc', rowCount: number | undefined, more: boolean, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'doneProc', rowCount: number | undefined, more: boolean, procReturnStatusValue: number, rst?: any[]): boolean\n /**\n * @private\n */\n emit(event: 'returnValue', parameterName: string, value: unknown, metadata: Metadata): boolean\n /**\n * @private\n */\n emit(event: 'requestCompleted'): boolean\n /**\n * @private\n */\n emit(event: 'cancel'): boolean\n /**\n * @private\n */\n emit(event: 'pause'): boolean\n /**\n * @private\n */\n emit(event: 'resume'): boolean\n /**\n * @private\n */\n emit(event: 'order', orderColumns: number[]): boolean\n /**\n * @private\n */\n emit(event: 'tabName', tableNames: string[][]): boolean\n /**\n * @private\n */\n emit(event: 'colInfo', columns: ColumnInfo[]): boolean\n emit(event: string | symbol, ...args: any[]) {\n return super.emit(event, ...args);\n }\n\n /**\n * @param sqlTextOrProcedure\n * The SQL statement to be executed\n *\n * @param callback\n * The callback to execute once the request has been fully completed.\n */\n constructor(sqlTextOrProcedure: string | undefined, callback: CompletionCallback, options?: RequestOptions) {\n super();\n\n this.sqlTextOrProcedure = sqlTextOrProcedure;\n this.parameters = [];\n this.parametersByName = {};\n this.preparing = false;\n this.handle = undefined;\n this.canceled = false;\n this.paused = false;\n this.error = undefined;\n this.connection = undefined;\n this.timeout = undefined;\n this.userCallback = callback;\n this.statementColumnEncryptionSetting = (options && options.statementColumnEncryptionSetting) || SQLServerStatementColumnEncryptionSetting.UseConnectionSetting;\n this.cryptoMetadataLoaded = false;\n this.callback = function(err: Error | undefined | null, rowCount?: number, rows?: any) {\n // A cancellation only applies to the execution it was made for, so it\n // must not fail later executions of the request - including ones that\n // are started from the callback or event listeners below.\n this.canceled = false;\n\n if (this.preparing) {\n this.preparing = false;\n if (err) {\n this.emit('error', err);\n } else {\n this.emit('prepared');\n }\n } else {\n this.userCallback(err, rowCount, rows);\n this.emit('requestCompleted');\n }\n };\n }\n\n /**\n * @param name\n * The parameter name. This should correspond to a parameter in the SQL,\n * or a parameter that a called procedure expects. The name should not start with `@`.\n *\n * @param type\n * One of the supported data types.\n *\n * @param value\n * The value that the parameter is to be given. The Javascript type of the\n * argument should match that documented for data types.\n *\n * A `varchar(max)`, `nvarchar(max)` or `varbinary(max)` value, or the rows\n * of a table-valued parameter, can also be given as an async iterable\n * (e.g. a `Readable`) of chunks, or of rows. The source is read while the\n * request is being sent, so it does not have to fit in memory, and a\n * request that carries one can be executed only once.\n *\n * String chunks may split UTF-16 surrogate pairs; the pairs are preserved\n * across chunk boundaries, including empty chunks. An unpaired surrogate\n * is handled by the type's encoding as it is for an in-memory value.\n * A `Buffer` chunk of 8 KB or more is sent by\n * reference, as `socket.write` would send it, so a source must not reuse\n * or modify a buffer it has yielded until the request has completed.\n *\n * @param options\n * Additional type options. Optional.\n */\n // TODO: `type` must be a valid TDS value type\n addParameter(name: string, type: DataType, value?: unknown, options?: Readonly<ParameterOptions> | null) {\n const { output = false, length, precision, scale } = options ?? {};\n\n const parameter: Parameter = {\n type: type,\n name: name,\n value: value,\n output: output,\n length: length,\n precision: precision,\n scale: scale\n };\n\n this.parameters.push(parameter);\n this.parametersByName[name] = parameter;\n }\n\n /**\n * @param name\n * The parameter name. This should correspond to a parameter in the SQL,\n * or a parameter that a called procedure expects.\n *\n * @param type\n * One of the supported data types.\n *\n * @param value\n * The value that the parameter is to be given. The Javascript type of the\n * argument should match that documented for data types\n *\n * @param options\n * Additional type options. Optional.\n */\n addOutputParameter(name: string, type: DataType, value?: unknown, options?: Readonly<ParameterOptions> | null) {\n this.addParameter(name, type, value, { ...options, output: true });\n }\n\n /**\n * @private\n */\n makeParamsParameter(parameters: Parameter[]) {\n let paramsParameter = '';\n for (let i = 0, len = parameters.length; i < len; i++) {\n const parameter = parameters[i];\n if (paramsParameter.length > 0) {\n paramsParameter += ', ';\n }\n paramsParameter += '@' + parameter.name + ' ';\n paramsParameter += parameter.type.declaration(parameter);\n if (parameter.output) {\n paramsParameter += ' OUTPUT';\n }\n }\n return paramsParameter;\n }\n\n /**\n * @private\n */\n validateParameters(collation: Collation | undefined, options: InternalConnectionOptions) {\n const resolvedParameters: ResolvedParameter[] = [];\n\n for (let i = 0, len = this.parameters.length; i < len; i++) {\n const parameter = this.parameters[i];\n\n let resolved;\n try {\n resolved = resolveParameter(parameter, collation, options);\n } catch (error: any) {\n throw new RequestError('Validation failed for parameter \\'' + parameter.name + '\\'. ' + error.message, 'EPARAM', { cause: error });\n }\n\n parameter.value = resolved.data.value;\n resolvedParameters.push(resolved);\n }\n\n this.resolvedParameters = resolvedParameters;\n }\n\n /**\n * Temporarily suspends the flow of data from the database. No more `row` events will be emitted until [[resume]] is called.\n * If this request is already in a paused state, calling [[pause]] has no effect.\n */\n pause() {\n if (this.paused) {\n return;\n }\n this.emit('pause');\n this.paused = true;\n }\n\n /**\n * Resumes the flow of data from the database.\n * If this request is not in a paused state, calling [[resume]] has no effect.\n */\n resume() {\n if (!this.paused) {\n return;\n }\n this.paused = false;\n this.emit('resume');\n }\n\n /**\n * Cancels a request while waiting for a server response.\n */\n cancel() {\n if (this.canceled) {\n return;\n }\n\n this.canceled = true;\n this.emit('cancel');\n }\n\n /**\n * Sets a timeout for this request.\n *\n * @param timeout\n * The number of milliseconds before the request is considered failed,\n * or `0` for no timeout. When no timeout is set for the request,\n * the [[ConnectionOptions.requestTimeout]] of the [[Connection]] is used.\n */\n setTimeout(timeout?: number) {\n this.timeout = timeout;\n }\n}\n\nexport default Request;\nmodule.exports = Request;\n"],"mappings":";;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AAIA,IAAAG,MAAA,GAAAH,OAAA;AAKA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AA2BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMI,OAAO,SAASC,oBAAY,CAAC;EACjC;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;AACA;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAGE;AACF;AACA;;EAQE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAOE;AACF;AACA;;EAGE;AACF;AACA;;EAGE;AACF;AACA;;EAoBE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;AACA;;EAkBE;AACF;AACA;AACA;;EAiBE;AACF;AACA;;EAWE;AACF;AACA;AACA;;EAaE;AACF;AACA;AACA;AACA;;EAoBEC,EAAEA,CAACC,KAAsB,EAAEC,QAAkC,EAAE;IAC7D,OAAO,KAAK,CAACF,EAAE,CAACC,KAAK,EAAEC,QAAQ,CAAC;EAClC;;EAEA;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEE;AACF;AACA;;EAEEC,IAAIA,CAACF,KAAsB,EAAE,GAAGG,IAAW,EAAE;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","ignoreList":[]}
package/package.json CHANGED
@@ -27,7 +27,7 @@
27
27
  "homepage": "https://github.com/tediousjs/tedious",
28
28
  "bugs": "https://github.com/tediousjs/tedious/issues",
29
29
  "license": "MIT",
30
- "version": "20.3.3",
30
+ "version": "20.3.4",
31
31
  "main": "./lib/tedious.js",
32
32
  "types": "./lib/tedious.d.ts",
33
33
  "repository": {