tedious 16.1.0 → 16.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/lib/all-headers.js +1 -2
  2. package/lib/all-headers.js.map +1 -0
  3. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +9 -31
  4. package/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js.map +1 -0
  5. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +9 -24
  6. package/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js.map +1 -0
  7. package/lib/always-encrypted/cek-entry.js +8 -12
  8. package/lib/always-encrypted/cek-entry.js.map +1 -0
  9. package/lib/always-encrypted/get-parameter-encryption-metadata.js +2 -24
  10. package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -0
  11. package/lib/always-encrypted/key-crypto.js +5 -30
  12. package/lib/always-encrypted/key-crypto.js.map +1 -0
  13. package/lib/always-encrypted/keystore-provider-azure-key-vault.js +11 -72
  14. package/lib/always-encrypted/keystore-provider-azure-key-vault.js.map +1 -0
  15. package/lib/always-encrypted/symmetric-key-cache.js +2 -13
  16. package/lib/always-encrypted/symmetric-key-cache.js.map +1 -0
  17. package/lib/always-encrypted/symmetric-key.js +3 -8
  18. package/lib/always-encrypted/symmetric-key.js.map +1 -0
  19. package/lib/always-encrypted/types.js +19 -27
  20. package/lib/always-encrypted/types.js.map +1 -0
  21. package/lib/always-encrypted/utils.js +2 -6
  22. package/lib/always-encrypted/utils.js.map +1 -0
  23. package/lib/bulk-load-payload.js +7 -15
  24. package/lib/bulk-load-payload.js.map +1 -0
  25. package/lib/bulk-load.js +58 -131
  26. package/lib/bulk-load.js.map +1 -0
  27. package/lib/collation.js +7 -15
  28. package/lib/collation.js.map +1 -0
  29. package/lib/connection.js +297 -536
  30. package/lib/connection.js.map +1 -0
  31. package/lib/connector.js +6 -37
  32. package/lib/connector.js.map +1 -0
  33. package/lib/data-type.js +2 -43
  34. package/lib/data-type.js.map +1 -0
  35. package/lib/data-types/bigint.js +1 -15
  36. package/lib/data-types/bigint.js.map +1 -0
  37. package/lib/data-types/binary.js +1 -12
  38. package/lib/data-types/binary.js.map +1 -0
  39. package/lib/data-types/bit.js +1 -11
  40. package/lib/data-types/bit.js.map +1 -0
  41. package/lib/data-types/bitn.js +1 -7
  42. package/lib/data-types/bitn.js.map +1 -0
  43. package/lib/data-types/char.js +1 -20
  44. package/lib/data-types/char.js.map +1 -0
  45. package/lib/data-types/date.js +1 -15
  46. package/lib/data-types/date.js.map +1 -0
  47. package/lib/data-types/datetime.js +3 -20
  48. package/lib/data-types/datetime.js.map +1 -0
  49. package/lib/data-types/datetime2.js +1 -26
  50. package/lib/data-types/datetime2.js.map +1 -0
  51. package/lib/data-types/datetimen.js +1 -7
  52. package/lib/data-types/datetimen.js.map +1 -0
  53. package/lib/data-types/datetimeoffset.js +1 -23
  54. package/lib/data-types/datetimeoffset.js.map +1 -0
  55. package/lib/data-types/decimal.js +1 -18
  56. package/lib/data-types/decimal.js.map +1 -0
  57. package/lib/data-types/decimaln.js +1 -7
  58. package/lib/data-types/decimaln.js.map +1 -0
  59. package/lib/data-types/float.js +1 -13
  60. package/lib/data-types/float.js.map +1 -0
  61. package/lib/data-types/floatn.js +1 -7
  62. package/lib/data-types/floatn.js.map +1 -0
  63. package/lib/data-types/image.js +1 -10
  64. package/lib/data-types/image.js.map +1 -0
  65. package/lib/data-types/int.js +1 -14
  66. package/lib/data-types/int.js.map +1 -0
  67. package/lib/data-types/intn.js +1 -7
  68. package/lib/data-types/intn.js.map +1 -0
  69. package/lib/data-types/money.js +1 -12
  70. package/lib/data-types/money.js.map +1 -0
  71. package/lib/data-types/moneyn.js +1 -7
  72. package/lib/data-types/moneyn.js.map +1 -0
  73. package/lib/data-types/nchar.js +1 -14
  74. package/lib/data-types/nchar.js.map +1 -0
  75. package/lib/data-types/ntext.js +1 -10
  76. package/lib/data-types/ntext.js.map +1 -0
  77. package/lib/data-types/null.js +1 -7
  78. package/lib/data-types/null.js.map +1 -0
  79. package/lib/data-types/numeric.js +1 -18
  80. package/lib/data-types/numeric.js.map +1 -0
  81. package/lib/data-types/numericn.js +1 -7
  82. package/lib/data-types/numericn.js.map +1 -0
  83. package/lib/data-types/nvarchar.js +1 -22
  84. package/lib/data-types/nvarchar.js.map +1 -0
  85. package/lib/data-types/real.js +1 -13
  86. package/lib/data-types/real.js.map +1 -0
  87. package/lib/data-types/smalldatetime.js +1 -14
  88. package/lib/data-types/smalldatetime.js.map +1 -0
  89. package/lib/data-types/smallint.js +1 -14
  90. package/lib/data-types/smallint.js.map +1 -0
  91. package/lib/data-types/smallmoney.js +1 -13
  92. package/lib/data-types/smallmoney.js.map +1 -0
  93. package/lib/data-types/sql-variant.js +1 -6
  94. package/lib/data-types/sql-variant.js.map +1 -0
  95. package/lib/data-types/text.js +1 -18
  96. package/lib/data-types/text.js.map +1 -0
  97. package/lib/data-types/time.js +1 -22
  98. package/lib/data-types/time.js.map +1 -0
  99. package/lib/data-types/tinyint.js +1 -14
  100. package/lib/data-types/tinyint.js.map +1 -0
  101. package/lib/data-types/tvp.js +11 -27
  102. package/lib/data-types/tvp.js.map +1 -0
  103. package/lib/data-types/udt.js +1 -7
  104. package/lib/data-types/udt.js.map +1 -0
  105. package/lib/data-types/uniqueidentifier.js +1 -11
  106. package/lib/data-types/uniqueidentifier.js.map +1 -0
  107. package/lib/data-types/varbinary.js +1 -22
  108. package/lib/data-types/varbinary.js.map +1 -0
  109. package/lib/data-types/varchar.js +1 -23
  110. package/lib/data-types/varchar.js.map +1 -0
  111. package/lib/data-types/xml.js +1 -7
  112. package/lib/data-types/xml.js.map +1 -0
  113. package/lib/debug.js +4 -16
  114. package/lib/debug.js.map +1 -0
  115. package/lib/errors/abort-error.js +2 -5
  116. package/lib/errors/abort-error.js.map +1 -0
  117. package/lib/errors/timeout-error.js +2 -5
  118. package/lib/errors/timeout-error.js.map +1 -0
  119. package/lib/errors.js +10 -16
  120. package/lib/errors.js.map +1 -0
  121. package/lib/guid-parser.js +1 -7
  122. package/lib/guid-parser.js.map +1 -0
  123. package/lib/incoming-message-stream.js +9 -29
  124. package/lib/incoming-message-stream.js.map +1 -0
  125. package/lib/instance-lookup.js +3 -34
  126. package/lib/instance-lookup.js.map +1 -0
  127. package/lib/library.js +1 -1
  128. package/lib/library.js.map +1 -0
  129. package/lib/login7-payload.js +99 -100
  130. package/lib/login7-payload.js.map +1 -0
  131. package/lib/message-io.js +17 -45
  132. package/lib/message-io.js.map +1 -0
  133. package/lib/message.js +4 -8
  134. package/lib/message.js.map +1 -0
  135. package/lib/metadata-parser.js +1 -22
  136. package/lib/metadata-parser.js.map +1 -0
  137. package/lib/ntlm-payload.js +2 -22
  138. package/lib/ntlm-payload.js.map +1 -0
  139. package/lib/ntlm.js +1 -4
  140. package/lib/ntlm.js.map +1 -0
  141. package/lib/outgoing-message-stream.js +12 -21
  142. package/lib/outgoing-message-stream.js.map +1 -0
  143. package/lib/packet.js +2 -47
  144. package/lib/packet.js.map +1 -0
  145. package/lib/prelogin-payload.js +11 -54
  146. package/lib/prelogin-payload.js.map +1 -0
  147. package/lib/request.js +88 -66
  148. package/lib/request.js.map +1 -0
  149. package/lib/rpcrequest-payload.js +13 -34
  150. package/lib/rpcrequest-payload.js.map +1 -0
  151. package/lib/sender.js +1 -24
  152. package/lib/sender.js.map +1 -0
  153. package/lib/special-stored-procedure.js +1 -1
  154. package/lib/special-stored-procedure.js.map +1 -0
  155. package/lib/sqlbatch-payload.js +5 -18
  156. package/lib/sqlbatch-payload.js.map +1 -0
  157. package/lib/tds-versions.js +3 -3
  158. package/lib/tds-versions.js.map +1 -0
  159. package/lib/tedious.js +1 -12
  160. package/lib/tedious.js.map +1 -0
  161. package/lib/token/colmetadata-token-parser.js +1 -17
  162. package/lib/token/colmetadata-token-parser.js.map +1 -0
  163. package/lib/token/done-token-parser.js +2 -8
  164. package/lib/token/done-token-parser.js.map +1 -0
  165. package/lib/token/env-change-token-parser.js +7 -28
  166. package/lib/token/env-change-token-parser.js.map +1 -0
  167. package/lib/token/feature-ext-ack-parser.js +1 -10
  168. package/lib/token/feature-ext-ack-parser.js.map +1 -0
  169. package/lib/token/fedauth-info-parser.js +2 -10
  170. package/lib/token/fedauth-info-parser.js.map +1 -0
  171. package/lib/token/handler.js +39 -149
  172. package/lib/token/handler.js.map +1 -0
  173. package/lib/token/infoerror-token-parser.js +1 -5
  174. package/lib/token/infoerror-token-parser.js.map +1 -0
  175. package/lib/token/loginack-token-parser.js +1 -6
  176. package/lib/token/loginack-token-parser.js.map +1 -0
  177. package/lib/token/nbcrow-token-parser.js +2 -15
  178. package/lib/token/nbcrow-token-parser.js.map +1 -0
  179. package/lib/token/order-token-parser.js +2 -7
  180. package/lib/token/order-token-parser.js.map +1 -0
  181. package/lib/token/returnstatus-token-parser.js +2 -4
  182. package/lib/token/returnstatus-token-parser.js.map +1 -0
  183. package/lib/token/returnvalue-token-parser.js +4 -9
  184. package/lib/token/returnvalue-token-parser.js.map +1 -0
  185. package/lib/token/row-token-parser.js +2 -11
  186. package/lib/token/row-token-parser.js.map +1 -0
  187. package/lib/token/sspi-token-parser.js +1 -5
  188. package/lib/token/sspi-token-parser.js.map +1 -0
  189. package/lib/token/stream-parser.js +24 -86
  190. package/lib/token/stream-parser.js.map +1 -0
  191. package/lib/token/token-stream-parser.js +4 -13
  192. package/lib/token/token-stream-parser.js.map +1 -0
  193. package/lib/token/token.js +88 -168
  194. package/lib/token/token.js.map +1 -0
  195. package/lib/tracking-buffer/writable-tracking-buffer.js +20 -60
  196. package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -0
  197. package/lib/transaction.js +9 -33
  198. package/lib/transaction.js.map +1 -0
  199. package/lib/transient-error-lookup.js +1 -4
  200. package/lib/transient-error-lookup.js.map +1 -0
  201. package/lib/utils/with-timeout.js +1 -9
  202. package/lib/utils/with-timeout.js.map +1 -0
  203. package/lib/value-parser.js +1 -143
  204. package/lib/value-parser.js.map +1 -0
  205. package/package.json +27 -71
@@ -6,16 +6,13 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.Transaction = exports.OPERATION_TYPE = exports.ISOLATION_LEVEL = void 0;
7
7
  exports.assertValidIsolationLevel = assertValidIsolationLevel;
8
8
  exports.isolationLevelByValue = void 0;
9
-
10
9
  var _writableTrackingBuffer = _interopRequireDefault(require("./tracking-buffer/writable-tracking-buffer"));
11
-
12
10
  var _allHeaders = require("./all-headers");
13
-
14
11
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
12
  /*
17
13
  s2.2.6.8
18
14
  */
15
+
19
16
  const OPERATION_TYPE = {
20
17
  TM_GET_DTC_ADDRESS: 0x00,
21
18
  TM_PROPAGATE_XACT: 0x01,
@@ -37,36 +34,30 @@ const ISOLATION_LEVEL = {
37
34
  exports.ISOLATION_LEVEL = ISOLATION_LEVEL;
38
35
  const isolationLevelByValue = {};
39
36
  exports.isolationLevelByValue = isolationLevelByValue;
40
-
41
37
  for (const name in ISOLATION_LEVEL) {
42
38
  const value = ISOLATION_LEVEL[name];
43
39
  isolationLevelByValue[value] = name;
44
40
  }
45
-
46
41
  function assertValidIsolationLevel(isolationLevel, name) {
47
42
  if (typeof isolationLevel !== 'number') {
48
43
  throw new TypeError(`The "${name}" ${name.includes('.') ? 'property' : 'argument'} must be of type number. Received type ${typeof isolationLevel} (${isolationLevel})`);
49
44
  }
50
-
51
45
  if (!Number.isInteger(isolationLevel)) {
52
46
  throw new RangeError(`The value of "${name}" is out of range. It must be an integer. Received: ${isolationLevel}`);
53
47
  }
54
-
55
48
  if (!(isolationLevel >= 0 && isolationLevel <= 5)) {
56
49
  throw new RangeError(`The value of "${name}" is out of range. It must be >= 0 && <= 5. Received: ${isolationLevel}`);
57
50
  }
58
51
  }
59
-
60
52
  class Transaction {
53
+ name;
54
+ isolationLevel;
55
+ outstandingRequestCount;
61
56
  constructor(name, isolationLevel = ISOLATION_LEVEL.NO_CHANGE) {
62
- this.name = void 0;
63
- this.isolationLevel = void 0;
64
- this.outstandingRequestCount = void 0;
65
57
  this.name = name;
66
58
  this.isolationLevel = isolationLevel;
67
59
  this.outstandingRequestCount = 1;
68
60
  }
69
-
70
61
  beginPayload(txnDescriptor) {
71
62
  const buffer = new _writableTrackingBuffer.default(100, 'ucs2');
72
63
  (0, _allHeaders.writeToTrackingBuffer)(buffer, txnDescriptor, this.outstandingRequestCount);
@@ -78,51 +69,45 @@ class Transaction {
78
69
  *[Symbol.iterator]() {
79
70
  yield buffer.data;
80
71
  },
81
-
82
72
  toString: () => {
83
73
  return 'Begin Transaction: name=' + this.name + ', isolationLevel=' + isolationLevelByValue[this.isolationLevel];
84
74
  }
85
75
  };
86
76
  }
87
-
88
77
  commitPayload(txnDescriptor) {
89
78
  const buffer = new _writableTrackingBuffer.default(100, 'ascii');
90
79
  (0, _allHeaders.writeToTrackingBuffer)(buffer, txnDescriptor, this.outstandingRequestCount);
91
80
  buffer.writeUShort(OPERATION_TYPE.TM_COMMIT_XACT);
92
81
  buffer.writeUInt8(this.name.length * 2);
93
- buffer.writeString(this.name, 'ucs2'); // No fBeginXact flag, so no new transaction is started.
94
-
82
+ buffer.writeString(this.name, 'ucs2');
83
+ // No fBeginXact flag, so no new transaction is started.
95
84
  buffer.writeUInt8(0);
96
85
  return {
97
86
  *[Symbol.iterator]() {
98
87
  yield buffer.data;
99
88
  },
100
-
101
89
  toString: () => {
102
90
  return 'Commit Transaction: name=' + this.name;
103
91
  }
104
92
  };
105
93
  }
106
-
107
94
  rollbackPayload(txnDescriptor) {
108
95
  const buffer = new _writableTrackingBuffer.default(100, 'ascii');
109
96
  (0, _allHeaders.writeToTrackingBuffer)(buffer, txnDescriptor, this.outstandingRequestCount);
110
97
  buffer.writeUShort(OPERATION_TYPE.TM_ROLLBACK_XACT);
111
98
  buffer.writeUInt8(this.name.length * 2);
112
- buffer.writeString(this.name, 'ucs2'); // No fBeginXact flag, so no new transaction is started.
113
-
99
+ buffer.writeString(this.name, 'ucs2');
100
+ // No fBeginXact flag, so no new transaction is started.
114
101
  buffer.writeUInt8(0);
115
102
  return {
116
103
  *[Symbol.iterator]() {
117
104
  yield buffer.data;
118
105
  },
119
-
120
106
  toString: () => {
121
107
  return 'Rollback Transaction: name=' + this.name;
122
108
  }
123
109
  };
124
110
  }
125
-
126
111
  savePayload(txnDescriptor) {
127
112
  const buffer = new _writableTrackingBuffer.default(100, 'ascii');
128
113
  (0, _allHeaders.writeToTrackingBuffer)(buffer, txnDescriptor, this.outstandingRequestCount);
@@ -133,35 +118,26 @@ class Transaction {
133
118
  *[Symbol.iterator]() {
134
119
  yield buffer.data;
135
120
  },
136
-
137
121
  toString: () => {
138
122
  return 'Save Transaction: name=' + this.name;
139
123
  }
140
124
  };
141
125
  }
142
-
143
126
  isolationLevelToTSQL() {
144
127
  switch (this.isolationLevel) {
145
128
  case ISOLATION_LEVEL.READ_UNCOMMITTED:
146
129
  return 'READ UNCOMMITTED';
147
-
148
130
  case ISOLATION_LEVEL.READ_COMMITTED:
149
131
  return 'READ COMMITTED';
150
-
151
132
  case ISOLATION_LEVEL.REPEATABLE_READ:
152
133
  return 'REPEATABLE READ';
153
-
154
134
  case ISOLATION_LEVEL.SERIALIZABLE:
155
135
  return 'SERIALIZABLE';
156
-
157
136
  case ISOLATION_LEVEL.SNAPSHOT:
158
137
  return 'SNAPSHOT';
159
138
  }
160
-
161
139
  return '';
162
140
  }
163
-
164
141
  }
165
-
166
142
  exports.Transaction = Transaction;
167
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPUEVSQVRJT05fVFlQRSIsIlRNX0dFVF9EVENfQUREUkVTUyIsIlRNX1BST1BBR0FURV9YQUNUIiwiVE1fQkVHSU5fWEFDVCIsIlRNX1BST01PVEVfWEFDVCIsIlRNX0NPTU1JVF9YQUNUIiwiVE1fUk9MTEJBQ0tfWEFDVCIsIlRNX1NBVkVfWEFDVCIsIklTT0xBVElPTl9MRVZFTCIsIk5PX0NIQU5HRSIsIlJFQURfVU5DT01NSVRURUQiLCJSRUFEX0NPTU1JVFRFRCIsIlJFUEVBVEFCTEVfUkVBRCIsIlNFUklBTElaQUJMRSIsIlNOQVBTSE9UIiwiaXNvbGF0aW9uTGV2ZWxCeVZhbHVlIiwibmFtZSIsInZhbHVlIiwiYXNzZXJ0VmFsaWRJc29sYXRpb25MZXZlbCIsImlzb2xhdGlvbkxldmVsIiwiVHlwZUVycm9yIiwiaW5jbHVkZXMiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJSYW5nZUVycm9yIiwiVHJhbnNhY3Rpb24iLCJjb25zdHJ1Y3RvciIsIm91dHN0YW5kaW5nUmVxdWVzdENvdW50IiwiYmVnaW5QYXlsb2FkIiwidHhuRGVzY3JpcHRvciIsImJ1ZmZlciIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJ3cml0ZVVTaG9ydCIsIndyaXRlVUludDgiLCJsZW5ndGgiLCJ3cml0ZVN0cmluZyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZGF0YSIsInRvU3RyaW5nIiwiY29tbWl0UGF5bG9hZCIsInJvbGxiYWNrUGF5bG9hZCIsInNhdmVQYXlsb2FkIiwiaXNvbGF0aW9uTGV2ZWxUb1RTUUwiXSwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNhY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcbmltcG9ydCB7IHdyaXRlVG9UcmFja2luZ0J1ZmZlciB9IGZyb20gJy4vYWxsLWhlYWRlcnMnO1xuXG4vKlxuICBzMi4yLjYuOFxuICovXG5cbmV4cG9ydCBjb25zdCBPUEVSQVRJT05fVFlQRSA9IHtcbiAgVE1fR0VUX0RUQ19BRERSRVNTOiAweDAwLFxuICBUTV9QUk9QQUdBVEVfWEFDVDogMHgwMSxcbiAgVE1fQkVHSU5fWEFDVDogMHgwNSxcbiAgVE1fUFJPTU9URV9YQUNUOiAweDA2LFxuICBUTV9DT01NSVRfWEFDVDogMHgwNyxcbiAgVE1fUk9MTEJBQ0tfWEFDVDogMHgwOCxcbiAgVE1fU0FWRV9YQUNUOiAweDA5XG59O1xuXG5leHBvcnQgY29uc3QgSVNPTEFUSU9OX0xFVkVMOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge1xuICBOT19DSEFOR0U6IDB4MDAsXG4gIFJFQURfVU5DT01NSVRURUQ6IDB4MDEsXG4gIFJFQURfQ09NTUlUVEVEOiAweDAyLFxuICBSRVBFQVRBQkxFX1JFQUQ6IDB4MDMsXG4gIFNFUklBTElaQUJMRTogMHgwNCxcbiAgU05BUFNIT1Q6IDB4MDVcbn07XG5cbmV4cG9ydCBjb25zdCBpc29sYXRpb25MZXZlbEJ5VmFsdWU6IHsgW2tleTogbnVtYmVyXTogc3RyaW5nIH0gPSB7fTtcbmZvciAoY29uc3QgbmFtZSBpbiBJU09MQVRJT05fTEVWRUwpIHtcbiAgY29uc3QgdmFsdWUgPSBJU09MQVRJT05fTEVWRUxbbmFtZV07XG4gIGlzb2xhdGlvbkxldmVsQnlWYWx1ZVt2YWx1ZV0gPSBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VmFsaWRJc29sYXRpb25MZXZlbChpc29sYXRpb25MZXZlbDogYW55LCBuYW1lOiBzdHJpbmcpOiBhc3NlcnRzIGlzb2xhdGlvbkxldmVsIGlzIDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB7XG4gIGlmICh0eXBlb2YgaXNvbGF0aW9uTGV2ZWwgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiJHtuYW1lfVwiICR7bmFtZS5pbmNsdWRlcygnLicpID8gJ3Byb3BlcnR5JyA6ICdhcmd1bWVudCd9IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgaXNvbGF0aW9uTGV2ZWx9ICgke2lzb2xhdGlvbkxldmVsfSlgKTtcbiAgfVxuXG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihpc29sYXRpb25MZXZlbCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIHZhbHVlIG9mIFwiJHtuYW1lfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhbiBpbnRlZ2VyLiBSZWNlaXZlZDogJHtpc29sYXRpb25MZXZlbH1gKTtcbiAgfVxuXG4gIGlmICghKGlzb2xhdGlvbkxldmVsID49IDAgJiYgaXNvbGF0aW9uTGV2ZWwgPD0gNSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIHZhbHVlIG9mIFwiJHtuYW1lfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSA+PSAwICYmIDw9IDUuIFJlY2VpdmVkOiAke2lzb2xhdGlvbkxldmVsfWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgaXNvbGF0aW9uTGV2ZWw6IG51bWJlcjtcbiAgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGlzb2xhdGlvbkxldmVsID0gSVNPTEFUSU9OX0xFVkVMLk5PX0NIQU5HRSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5pc29sYXRpb25MZXZlbCA9IGlzb2xhdGlvbkxldmVsO1xuICAgIHRoaXMub3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPSAxO1xuICB9XG5cbiAgYmVnaW5QYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ3VjczInKTtcbiAgICB3cml0ZVRvVHJhY2tpbmdCdWZmZXIoYnVmZmVyLCB0eG5EZXNjcmlwdG9yLCB0aGlzLm91dHN0YW5kaW5nUmVxdWVzdENvdW50KTtcbiAgICBidWZmZXIud3JpdGVVU2hvcnQoT1BFUkFUSU9OX1RZUEUuVE1fQkVHSU5fWEFDVCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5pc29sYXRpb25MZXZlbCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5uYW1lLmxlbmd0aCAqIDIpO1xuICAgIGJ1ZmZlci53cml0ZVN0cmluZyh0aGlzLm5hbWUsICd1Y3MyJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJ0JlZ2luIFRyYW5zYWN0aW9uOiBuYW1lPScgKyB0aGlzLm5hbWUgKyAnLCBpc29sYXRpb25MZXZlbD0nICsgaXNvbGF0aW9uTGV2ZWxCeVZhbHVlW3RoaXMuaXNvbGF0aW9uTGV2ZWxdO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb21taXRQYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ2FzY2lpJyk7XG4gICAgd3JpdGVUb1RyYWNraW5nQnVmZmVyKGJ1ZmZlciwgdHhuRGVzY3JpcHRvciwgdGhpcy5vdXRzdGFuZGluZ1JlcXVlc3RDb3VudCk7XG4gICAgYnVmZmVyLndyaXRlVVNob3J0KE9QRVJBVElPTl9UWVBFLlRNX0NPTU1JVF9YQUNUKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCh0aGlzLm5hbWUubGVuZ3RoICogMik7XG4gICAgYnVmZmVyLndyaXRlU3RyaW5nKHRoaXMubmFtZSwgJ3VjczInKTtcbiAgICAvLyBObyBmQmVnaW5YYWN0IGZsYWcsIHNvIG5vIG5ldyB0cmFuc2FjdGlvbiBpcyBzdGFydGVkLlxuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgeWllbGQgYnVmZmVyLmRhdGE7XG4gICAgICB9LFxuICAgICAgdG9TdHJpbmc6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuICdDb21taXQgVHJhbnNhY3Rpb246IG5hbWU9JyArIHRoaXMubmFtZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcm9sbGJhY2tQYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ2FzY2lpJyk7XG4gICAgd3JpdGVUb1RyYWNraW5nQnVmZmVyKGJ1ZmZlciwgdHhuRGVzY3JpcHRvciwgdGhpcy5vdXRzdGFuZGluZ1JlcXVlc3RDb3VudCk7XG4gICAgYnVmZmVyLndyaXRlVVNob3J0KE9QRVJBVElPTl9UWVBFLlRNX1JPTExCQUNLX1hBQ1QpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KHRoaXMubmFtZS5sZW5ndGggKiAyKTtcbiAgICBidWZmZXIud3JpdGVTdHJpbmcodGhpcy5uYW1lLCAndWNzMicpO1xuICAgIC8vIE5vIGZCZWdpblhhY3QgZmxhZywgc28gbm8gbmV3IHRyYW5zYWN0aW9uIGlzIHN0YXJ0ZWQuXG4gICAgYnVmZmVyLndyaXRlVUludDgoMCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJ1JvbGxiYWNrIFRyYW5zYWN0aW9uOiBuYW1lPScgKyB0aGlzLm5hbWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHNhdmVQYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ2FzY2lpJyk7XG4gICAgd3JpdGVUb1RyYWNraW5nQnVmZmVyKGJ1ZmZlciwgdHhuRGVzY3JpcHRvciwgdGhpcy5vdXRzdGFuZGluZ1JlcXVlc3RDb3VudCk7XG4gICAgYnVmZmVyLndyaXRlVVNob3J0KE9QRVJBVElPTl9UWVBFLlRNX1NBVkVfWEFDVCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5uYW1lLmxlbmd0aCAqIDIpO1xuICAgIGJ1ZmZlci53cml0ZVN0cmluZyh0aGlzLm5hbWUsICd1Y3MyJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJ1NhdmUgVHJhbnNhY3Rpb246IG5hbWU9JyArIHRoaXMubmFtZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgaXNvbGF0aW9uTGV2ZWxUb1RTUUwoKSB7XG4gICAgc3dpdGNoICh0aGlzLmlzb2xhdGlvbkxldmVsKSB7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5SRUFEX1VOQ09NTUlUVEVEOlxuICAgICAgICByZXR1cm4gJ1JFQUQgVU5DT01NSVRURUQnO1xuICAgICAgY2FzZSBJU09MQVRJT05fTEVWRUwuUkVBRF9DT01NSVRURUQ6XG4gICAgICAgIHJldHVybiAnUkVBRCBDT01NSVRURUQnO1xuICAgICAgY2FzZSBJU09MQVRJT05fTEVWRUwuUkVQRUFUQUJMRV9SRUFEOlxuICAgICAgICByZXR1cm4gJ1JFUEVBVEFCTEUgUkVBRCc7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5TRVJJQUxJWkFCTEU6XG4gICAgICAgIHJldHVybiAnU0VSSUFMSVpBQkxFJztcbiAgICAgIGNhc2UgSVNPTEFUSU9OX0xFVkVMLlNOQVBTSE9UOlxuICAgICAgICByZXR1cm4gJ1NOQVBTSE9UJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4iXSwi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
143
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2FsbEhlYWRlcnMiLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIk9QRVJBVElPTl9UWVBFIiwiVE1fR0VUX0RUQ19BRERSRVNTIiwiVE1fUFJPUEFHQVRFX1hBQ1QiLCJUTV9CRUdJTl9YQUNUIiwiVE1fUFJPTU9URV9YQUNUIiwiVE1fQ09NTUlUX1hBQ1QiLCJUTV9ST0xMQkFDS19YQUNUIiwiVE1fU0FWRV9YQUNUIiwiZXhwb3J0cyIsIklTT0xBVElPTl9MRVZFTCIsIk5PX0NIQU5HRSIsIlJFQURfVU5DT01NSVRURUQiLCJSRUFEX0NPTU1JVFRFRCIsIlJFUEVBVEFCTEVfUkVBRCIsIlNFUklBTElaQUJMRSIsIlNOQVBTSE9UIiwiaXNvbGF0aW9uTGV2ZWxCeVZhbHVlIiwibmFtZSIsInZhbHVlIiwiYXNzZXJ0VmFsaWRJc29sYXRpb25MZXZlbCIsImlzb2xhdGlvbkxldmVsIiwiVHlwZUVycm9yIiwiaW5jbHVkZXMiLCJOdW1iZXIiLCJpc0ludGVnZXIiLCJSYW5nZUVycm9yIiwiVHJhbnNhY3Rpb24iLCJvdXRzdGFuZGluZ1JlcXVlc3RDb3VudCIsImNvbnN0cnVjdG9yIiwiYmVnaW5QYXlsb2FkIiwidHhuRGVzY3JpcHRvciIsImJ1ZmZlciIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJ3cml0ZVRvVHJhY2tpbmdCdWZmZXIiLCJ3cml0ZVVTaG9ydCIsIndyaXRlVUludDgiLCJsZW5ndGgiLCJ3cml0ZVN0cmluZyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZGF0YSIsInRvU3RyaW5nIiwiY29tbWl0UGF5bG9hZCIsInJvbGxiYWNrUGF5bG9hZCIsInNhdmVQYXlsb2FkIiwiaXNvbGF0aW9uTGV2ZWxUb1RTUUwiXSwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNhY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi90cmFja2luZy1idWZmZXIvd3JpdGFibGUtdHJhY2tpbmctYnVmZmVyJztcbmltcG9ydCB7IHdyaXRlVG9UcmFja2luZ0J1ZmZlciB9IGZyb20gJy4vYWxsLWhlYWRlcnMnO1xuXG4vKlxuICBzMi4yLjYuOFxuICovXG5cbmV4cG9ydCBjb25zdCBPUEVSQVRJT05fVFlQRSA9IHtcbiAgVE1fR0VUX0RUQ19BRERSRVNTOiAweDAwLFxuICBUTV9QUk9QQUdBVEVfWEFDVDogMHgwMSxcbiAgVE1fQkVHSU5fWEFDVDogMHgwNSxcbiAgVE1fUFJPTU9URV9YQUNUOiAweDA2LFxuICBUTV9DT01NSVRfWEFDVDogMHgwNyxcbiAgVE1fUk9MTEJBQ0tfWEFDVDogMHgwOCxcbiAgVE1fU0FWRV9YQUNUOiAweDA5XG59O1xuXG5leHBvcnQgY29uc3QgSVNPTEFUSU9OX0xFVkVMOiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge1xuICBOT19DSEFOR0U6IDB4MDAsXG4gIFJFQURfVU5DT01NSVRURUQ6IDB4MDEsXG4gIFJFQURfQ09NTUlUVEVEOiAweDAyLFxuICBSRVBFQVRBQkxFX1JFQUQ6IDB4MDMsXG4gIFNFUklBTElaQUJMRTogMHgwNCxcbiAgU05BUFNIT1Q6IDB4MDVcbn07XG5cbmV4cG9ydCBjb25zdCBpc29sYXRpb25MZXZlbEJ5VmFsdWU6IHsgW2tleTogbnVtYmVyXTogc3RyaW5nIH0gPSB7fTtcbmZvciAoY29uc3QgbmFtZSBpbiBJU09MQVRJT05fTEVWRUwpIHtcbiAgY29uc3QgdmFsdWUgPSBJU09MQVRJT05fTEVWRUxbbmFtZV07XG4gIGlzb2xhdGlvbkxldmVsQnlWYWx1ZVt2YWx1ZV0gPSBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VmFsaWRJc29sYXRpb25MZXZlbChpc29sYXRpb25MZXZlbDogYW55LCBuYW1lOiBzdHJpbmcpOiBhc3NlcnRzIGlzb2xhdGlvbkxldmVsIGlzIDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB7XG4gIGlmICh0eXBlb2YgaXNvbGF0aW9uTGV2ZWwgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgVGhlIFwiJHtuYW1lfVwiICR7bmFtZS5pbmNsdWRlcygnLicpID8gJ3Byb3BlcnR5JyA6ICdhcmd1bWVudCd9IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJHt0eXBlb2YgaXNvbGF0aW9uTGV2ZWx9ICgke2lzb2xhdGlvbkxldmVsfSlgKTtcbiAgfVxuXG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihpc29sYXRpb25MZXZlbCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIHZhbHVlIG9mIFwiJHtuYW1lfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhbiBpbnRlZ2VyLiBSZWNlaXZlZDogJHtpc29sYXRpb25MZXZlbH1gKTtcbiAgfVxuXG4gIGlmICghKGlzb2xhdGlvbkxldmVsID49IDAgJiYgaXNvbGF0aW9uTGV2ZWwgPD0gNSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihgVGhlIHZhbHVlIG9mIFwiJHtuYW1lfVwiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSA+PSAwICYmIDw9IDUuIFJlY2VpdmVkOiAke2lzb2xhdGlvbkxldmVsfWApO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgaXNvbGF0aW9uTGV2ZWw6IG51bWJlcjtcbiAgb3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIGlzb2xhdGlvbkxldmVsID0gSVNPTEFUSU9OX0xFVkVMLk5PX0NIQU5HRSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5pc29sYXRpb25MZXZlbCA9IGlzb2xhdGlvbkxldmVsO1xuICAgIHRoaXMub3V0c3RhbmRpbmdSZXF1ZXN0Q291bnQgPSAxO1xuICB9XG5cbiAgYmVnaW5QYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ3VjczInKTtcbiAgICB3cml0ZVRvVHJhY2tpbmdCdWZmZXIoYnVmZmVyLCB0eG5EZXNjcmlwdG9yLCB0aGlzLm91dHN0YW5kaW5nUmVxdWVzdENvdW50KTtcbiAgICBidWZmZXIud3JpdGVVU2hvcnQoT1BFUkFUSU9OX1RZUEUuVE1fQkVHSU5fWEFDVCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5pc29sYXRpb25MZXZlbCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5uYW1lLmxlbmd0aCAqIDIpO1xuICAgIGJ1ZmZlci53cml0ZVN0cmluZyh0aGlzLm5hbWUsICd1Y3MyJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJ0JlZ2luIFRyYW5zYWN0aW9uOiBuYW1lPScgKyB0aGlzLm5hbWUgKyAnLCBpc29sYXRpb25MZXZlbD0nICsgaXNvbGF0aW9uTGV2ZWxCeVZhbHVlW3RoaXMuaXNvbGF0aW9uTGV2ZWxdO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBjb21taXRQYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ2FzY2lpJyk7XG4gICAgd3JpdGVUb1RyYWNraW5nQnVmZmVyKGJ1ZmZlciwgdHhuRGVzY3JpcHRvciwgdGhpcy5vdXRzdGFuZGluZ1JlcXVlc3RDb3VudCk7XG4gICAgYnVmZmVyLndyaXRlVVNob3J0KE9QRVJBVElPTl9UWVBFLlRNX0NPTU1JVF9YQUNUKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCh0aGlzLm5hbWUubGVuZ3RoICogMik7XG4gICAgYnVmZmVyLndyaXRlU3RyaW5nKHRoaXMubmFtZSwgJ3VjczInKTtcbiAgICAvLyBObyBmQmVnaW5YYWN0IGZsYWcsIHNvIG5vIG5ldyB0cmFuc2FjdGlvbiBpcyBzdGFydGVkLlxuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICAgICAgeWllbGQgYnVmZmVyLmRhdGE7XG4gICAgICB9LFxuICAgICAgdG9TdHJpbmc6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuICdDb21taXQgVHJhbnNhY3Rpb246IG5hbWU9JyArIHRoaXMubmFtZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcm9sbGJhY2tQYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ2FzY2lpJyk7XG4gICAgd3JpdGVUb1RyYWNraW5nQnVmZmVyKGJ1ZmZlciwgdHhuRGVzY3JpcHRvciwgdGhpcy5vdXRzdGFuZGluZ1JlcXVlc3RDb3VudCk7XG4gICAgYnVmZmVyLndyaXRlVVNob3J0KE9QRVJBVElPTl9UWVBFLlRNX1JPTExCQUNLX1hBQ1QpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KHRoaXMubmFtZS5sZW5ndGggKiAyKTtcbiAgICBidWZmZXIud3JpdGVTdHJpbmcodGhpcy5uYW1lLCAndWNzMicpO1xuICAgIC8vIE5vIGZCZWdpblhhY3QgZmxhZywgc28gbm8gbmV3IHRyYW5zYWN0aW9uIGlzIHN0YXJ0ZWQuXG4gICAgYnVmZmVyLndyaXRlVUludDgoMCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJ1JvbGxiYWNrIFRyYW5zYWN0aW9uOiBuYW1lPScgKyB0aGlzLm5hbWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHNhdmVQYXlsb2FkKHR4bkRlc2NyaXB0b3I6IEJ1ZmZlcikge1xuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgJ2FzY2lpJyk7XG4gICAgd3JpdGVUb1RyYWNraW5nQnVmZmVyKGJ1ZmZlciwgdHhuRGVzY3JpcHRvciwgdGhpcy5vdXRzdGFuZGluZ1JlcXVlc3RDb3VudCk7XG4gICAgYnVmZmVyLndyaXRlVVNob3J0KE9QRVJBVElPTl9UWVBFLlRNX1NBVkVfWEFDVCk7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5uYW1lLmxlbmd0aCAqIDIpO1xuICAgIGJ1ZmZlci53cml0ZVN0cmluZyh0aGlzLm5hbWUsICd1Y3MyJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgKltTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgICAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgICAgIH0sXG4gICAgICB0b1N0cmluZzogKCkgPT4ge1xuICAgICAgICByZXR1cm4gJ1NhdmUgVHJhbnNhY3Rpb246IG5hbWU9JyArIHRoaXMubmFtZTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgaXNvbGF0aW9uTGV2ZWxUb1RTUUwoKSB7XG4gICAgc3dpdGNoICh0aGlzLmlzb2xhdGlvbkxldmVsKSB7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5SRUFEX1VOQ09NTUlUVEVEOlxuICAgICAgICByZXR1cm4gJ1JFQUQgVU5DT01NSVRURUQnO1xuICAgICAgY2FzZSBJU09MQVRJT05fTEVWRUwuUkVBRF9DT01NSVRURUQ6XG4gICAgICAgIHJldHVybiAnUkVBRCBDT01NSVRURUQnO1xuICAgICAgY2FzZSBJU09MQVRJT05fTEVWRUwuUkVQRUFUQUJMRV9SRUFEOlxuICAgICAgICByZXR1cm4gJ1JFUEVBVEFCTEUgUkVBRCc7XG4gICAgICBjYXNlIElTT0xBVElPTl9MRVZFTC5TRVJJQUxJWkFCTEU6XG4gICAgICAgIHJldHVybiAnU0VSSUFMSVpBQkxFJztcbiAgICAgIGNhc2UgSVNPTEFUSU9OX0xFVkVMLlNOQVBTSE9UOlxuICAgICAgICByZXR1cm4gJ1NOQVBTSE9UJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsdUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUFzRCxTQUFBRCx1QkFBQUcsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQUV0RDtBQUNBO0FBQ0E7O0FBRU8sTUFBTUcsY0FBYyxHQUFHO0VBQzVCQyxrQkFBa0IsRUFBRSxJQUFJO0VBQ3hCQyxpQkFBaUIsRUFBRSxJQUFJO0VBQ3ZCQyxhQUFhLEVBQUUsSUFBSTtFQUNuQkMsZUFBZSxFQUFFLElBQUk7RUFDckJDLGNBQWMsRUFBRSxJQUFJO0VBQ3BCQyxnQkFBZ0IsRUFBRSxJQUFJO0VBQ3RCQyxZQUFZLEVBQUU7QUFDaEIsQ0FBQztBQUFDQyxPQUFBLENBQUFSLGNBQUEsR0FBQUEsY0FBQTtBQUVLLE1BQU1TLGVBQTBDLEdBQUc7RUFDeERDLFNBQVMsRUFBRSxJQUFJO0VBQ2ZDLGdCQUFnQixFQUFFLElBQUk7RUFDdEJDLGNBQWMsRUFBRSxJQUFJO0VBQ3BCQyxlQUFlLEVBQUUsSUFBSTtFQUNyQkMsWUFBWSxFQUFFLElBQUk7RUFDbEJDLFFBQVEsRUFBRTtBQUNaLENBQUM7QUFBQ1AsT0FBQSxDQUFBQyxlQUFBLEdBQUFBLGVBQUE7QUFFSyxNQUFNTyxxQkFBZ0QsR0FBRyxDQUFDLENBQUM7QUFBQ1IsT0FBQSxDQUFBUSxxQkFBQSxHQUFBQSxxQkFBQTtBQUNuRSxLQUFLLE1BQU1DLElBQUksSUFBSVIsZUFBZSxFQUFFO0VBQ2xDLE1BQU1TLEtBQUssR0FBR1QsZUFBZSxDQUFDUSxJQUFJLENBQUM7RUFDbkNE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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","names":["_writableTrackingBuffer","_interopRequireDefault","require","_allHeaders","obj","__esModule","default","OPERATION_TYPE","TM_GET_DTC_ADDRESS","TM_PROPAGATE_XACT","TM_BEGIN_XACT","TM_PROMOTE_XACT","TM_COMMIT_XACT","TM_ROLLBACK_XACT","TM_SAVE_XACT","exports","ISOLATION_LEVEL","NO_CHANGE","READ_UNCOMMITTED","READ_COMMITTED","REPEATABLE_READ","SERIALIZABLE","SNAPSHOT","isolationLevelByValue","name","value","assertValidIsolationLevel","isolationLevel","TypeError","includes","Number","isInteger","RangeError","Transaction","outstandingRequestCount","constructor","beginPayload","txnDescriptor","buffer","WritableTrackingBuffer","writeToTrackingBuffer","writeUShort","writeUInt8","length","writeString","Symbol","iterator","data","toString","commitPayload","rollbackPayload","savePayload","isolationLevelToTSQL"],"sources":["../src/transaction.ts"],"sourcesContent":["import WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\nimport { writeToTrackingBuffer } from './all-headers';\n\n/*\n s2.2.6.8\n */\n\nexport const OPERATION_TYPE = {\n TM_GET_DTC_ADDRESS: 0x00,\n TM_PROPAGATE_XACT: 0x01,\n TM_BEGIN_XACT: 0x05,\n TM_PROMOTE_XACT: 0x06,\n TM_COMMIT_XACT: 0x07,\n TM_ROLLBACK_XACT: 0x08,\n TM_SAVE_XACT: 0x09\n};\n\nexport const ISOLATION_LEVEL: { [key: string]: number } = {\n NO_CHANGE: 0x00,\n READ_UNCOMMITTED: 0x01,\n READ_COMMITTED: 0x02,\n REPEATABLE_READ: 0x03,\n SERIALIZABLE: 0x04,\n SNAPSHOT: 0x05\n};\n\nexport const isolationLevelByValue: { [key: number]: string } = {};\nfor (const name in ISOLATION_LEVEL) {\n const value = ISOLATION_LEVEL[name];\n isolationLevelByValue[value] = name;\n}\n\nexport function assertValidIsolationLevel(isolationLevel: any, name: string): asserts isolationLevel is 0 | 1 | 2 | 3 | 4 | 5 {\n if (typeof isolationLevel !== 'number') {\n throw new TypeError(`The \"${name}\" ${name.includes('.') ? 'property' : 'argument'} must be of type number. Received type ${typeof isolationLevel} (${isolationLevel})`);\n }\n\n if (!Number.isInteger(isolationLevel)) {\n throw new RangeError(`The value of \"${name}\" is out of range. It must be an integer. Received: ${isolationLevel}`);\n }\n\n if (!(isolationLevel >= 0 && isolationLevel <= 5)) {\n throw new RangeError(`The value of \"${name}\" is out of range. It must be >= 0 && <= 5. Received: ${isolationLevel}`);\n }\n}\n\nexport class Transaction {\n name: string;\n isolationLevel: number;\n outstandingRequestCount: number;\n\n constructor(name: string, isolationLevel = ISOLATION_LEVEL.NO_CHANGE) {\n this.name = name;\n this.isolationLevel = isolationLevel;\n this.outstandingRequestCount = 1;\n }\n\n beginPayload(txnDescriptor: Buffer) {\n const buffer = new WritableTrackingBuffer(100, 'ucs2');\n writeToTrackingBuffer(buffer, txnDescriptor, this.outstandingRequestCount);\n buffer.writeUShort(OPERATION_TYPE.TM_BEGIN_XACT);\n buffer.writeUInt8(this.isolationLevel);\n buffer.writeUInt8(this.name.length * 2);\n buffer.writeString(this.name, 'ucs2');\n\n return {\n *[Symbol.iterator]() {\n yield buffer.data;\n },\n toString: () => {\n return 'Begin Transaction: name=' + this.name + ', isolationLevel=' + isolationLevelByValue[this.isolationLevel];\n }\n };\n }\n\n commitPayload(txnDescriptor: Buffer) {\n const buffer = new WritableTrackingBuffer(100, 'ascii');\n writeToTrackingBuffer(buffer, txnDescriptor, this.outstandingRequestCount);\n buffer.writeUShort(OPERATION_TYPE.TM_COMMIT_XACT);\n buffer.writeUInt8(this.name.length * 2);\n buffer.writeString(this.name, 'ucs2');\n // No fBeginXact flag, so no new transaction is started.\n buffer.writeUInt8(0);\n\n return {\n *[Symbol.iterator]() {\n yield buffer.data;\n },\n toString: () => {\n return 'Commit Transaction: name=' + this.name;\n }\n };\n }\n\n rollbackPayload(txnDescriptor: Buffer) {\n const buffer = new WritableTrackingBuffer(100, 'ascii');\n writeToTrackingBuffer(buffer, txnDescriptor, this.outstandingRequestCount);\n buffer.writeUShort(OPERATION_TYPE.TM_ROLLBACK_XACT);\n buffer.writeUInt8(this.name.length * 2);\n buffer.writeString(this.name, 'ucs2');\n // No fBeginXact flag, so no new transaction is started.\n buffer.writeUInt8(0);\n\n return {\n *[Symbol.iterator]() {\n yield buffer.data;\n },\n toString: () => {\n return 'Rollback Transaction: name=' + this.name;\n }\n };\n }\n\n savePayload(txnDescriptor: Buffer) {\n const buffer = new WritableTrackingBuffer(100, 'ascii');\n writeToTrackingBuffer(buffer, txnDescriptor, this.outstandingRequestCount);\n buffer.writeUShort(OPERATION_TYPE.TM_SAVE_XACT);\n buffer.writeUInt8(this.name.length * 2);\n buffer.writeString(this.name, 'ucs2');\n\n return {\n *[Symbol.iterator]() {\n yield buffer.data;\n },\n toString: () => {\n return 'Save Transaction: name=' + this.name;\n }\n };\n }\n\n isolationLevelToTSQL() {\n switch (this.isolationLevel) {\n case ISOLATION_LEVEL.READ_UNCOMMITTED:\n return 'READ UNCOMMITTED';\n case ISOLATION_LEVEL.READ_COMMITTED:\n return 'READ COMMITTED';\n case ISOLATION_LEVEL.REPEATABLE_READ:\n return 'REPEATABLE READ';\n case ISOLATION_LEVEL.SERIALIZABLE:\n return 'SERIALIZABLE';\n case ISOLATION_LEVEL.SNAPSHOT:\n return 'SNAPSHOT';\n }\n return '';\n }\n}\n"],"mappings":"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"}
@@ -4,7 +4,6 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.TransientErrorLookup = void 0;
7
-
8
7
  // This simple piece of code is factored out into a separate class to make it
9
8
  // easy to stub it out in tests. It's hard, if not impossible, to cause a
10
9
  // transient error on demand in tests.
@@ -15,8 +14,6 @@ class TransientErrorLookup {
15
14
  const transientErrors = [4060, 10928, 10929, 40197, 40501, 40613];
16
15
  return transientErrors.indexOf(error) !== -1;
17
16
  }
18
-
19
17
  }
20
-
21
18
  exports.TransientErrorLookup = TransientErrorLookup;
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUcmFuc2llbnRFcnJvckxvb2t1cCIsImlzVHJhbnNpZW50RXJyb3IiLCJlcnJvciIsInRyYW5zaWVudEVycm9ycyIsImluZGV4T2YiXSwic291cmNlcyI6WyIuLi9zcmMvdHJhbnNpZW50LWVycm9yLWxvb2t1cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIHNpbXBsZSBwaWVjZSBvZiBjb2RlIGlzIGZhY3RvcmVkIG91dCBpbnRvIGEgc2VwYXJhdGUgY2xhc3MgdG8gbWFrZSBpdFxuLy8gZWFzeSB0byBzdHViIGl0IG91dCBpbiB0ZXN0cy4gSXQncyBoYXJkLCBpZiBub3QgaW1wb3NzaWJsZSwgdG8gY2F1c2UgYVxuLy8gdHJhbnNpZW50IGVycm9yIG9uIGRlbWFuZCBpbiB0ZXN0cy5cbmV4cG9ydCBjbGFzcyBUcmFuc2llbnRFcnJvckxvb2t1cCB7XG4gIGlzVHJhbnNpZW50RXJyb3IoZXJyb3I6IG51bWJlcikge1xuICAgIC8vIFRoaXMgbGlzdCBvZiB0cmFuc2llbnQgZXJyb3JzIGNvbWVzIGZyb20gTWljcm9zb2Z0IGltcGxlbWVudGF0aW9uIG9mIFNxbENsaWVudDpcbiAgICAvLyAgLSBodHRwczovL2dpdGh1Yi5jb20vZG90bmV0L2NvcmVmeC9ibG9iL21hc3Rlci9zcmMvU3lzdGVtLkRhdGEuU3FsQ2xpZW50L3NyYy9TeXN0ZW0vRGF0YS9TcWxDbGllbnQvU3FsSW50ZXJuYWxDb25uZWN0aW9uVGRzLmNzI0wxMTVcbiAgICBjb25zdCB0cmFuc2llbnRFcnJvcnMgPSBbNDA2MCwgMTA5MjgsIDEwOTI5LCA0MDE5NywgNDA1MDEsIDQwNjEzXTtcbiAgICByZXR1cm4gdHJhbnNpZW50RXJyb3JzLmluZGV4T2YoZXJyb3IpICE9PSAtMTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ08sTUFBTUEsb0JBQU4sQ0FBMkI7RUFDaENDLGdCQUFnQixDQUFDQyxLQUFELEVBQWdCO0lBQzlCO0lBQ0E7SUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FBQyxJQUFELEVBQU8sS0FBUCxFQUFjLEtBQWQsRUFBcUIsS0FBckIsRUFBNEIsS0FBNUIsRUFBbUMsS0FBbkMsQ0FBeEI7SUFDQSxPQUFPQSxlQUFlLENBQUNDLE9BQWhCLENBQXdCRixLQUF4QixNQUFtQyxDQUFDLENBQTNDO0VBQ0Q7O0FBTitCIn0=
19
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJUcmFuc2llbnRFcnJvckxvb2t1cCIsImlzVHJhbnNpZW50RXJyb3IiLCJlcnJvciIsInRyYW5zaWVudEVycm9ycyIsImluZGV4T2YiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL3RyYW5zaWVudC1lcnJvci1sb29rdXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gVGhpcyBzaW1wbGUgcGllY2Ugb2YgY29kZSBpcyBmYWN0b3JlZCBvdXQgaW50byBhIHNlcGFyYXRlIGNsYXNzIHRvIG1ha2UgaXRcbi8vIGVhc3kgdG8gc3R1YiBpdCBvdXQgaW4gdGVzdHMuIEl0J3MgaGFyZCwgaWYgbm90IGltcG9zc2libGUsIHRvIGNhdXNlIGFcbi8vIHRyYW5zaWVudCBlcnJvciBvbiBkZW1hbmQgaW4gdGVzdHMuXG5leHBvcnQgY2xhc3MgVHJhbnNpZW50RXJyb3JMb29rdXAge1xuICBpc1RyYW5zaWVudEVycm9yKGVycm9yOiBudW1iZXIpIHtcbiAgICAvLyBUaGlzIGxpc3Qgb2YgdHJhbnNpZW50IGVycm9ycyBjb21lcyBmcm9tIE1pY3Jvc29mdCBpbXBsZW1lbnRhdGlvbiBvZiBTcWxDbGllbnQ6XG4gICAgLy8gIC0gaHR0cHM6Ly9naXRodWIuY29tL2RvdG5ldC9jb3JlZngvYmxvYi9tYXN0ZXIvc3JjL1N5c3RlbS5EYXRhLlNxbENsaWVudC9zcmMvU3lzdGVtL0RhdGEvU3FsQ2xpZW50L1NxbEludGVybmFsQ29ubmVjdGlvblRkcy5jcyNMMTE1XG4gICAgY29uc3QgdHJhbnNpZW50RXJyb3JzID0gWzQwNjAsIDEwOTI4LCAxMDkyOSwgNDAxOTcsIDQwNTAxLCA0MDYxM107XG4gICAgcmV0dXJuIHRyYW5zaWVudEVycm9ycy5pbmRleE9mKGVycm9yKSAhPT0gLTE7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ08sTUFBTUEsb0JBQW9CLENBQUM7RUFDaENDLGdCQUFnQkEsQ0FBQ0MsS0FBYSxFQUFFO0lBQzlCO0lBQ0E7SUFDQSxNQUFNQyxlQUFlLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQztJQUNqRSxPQUFPQSxlQUFlLENBQUNDLE9BQU8sQ0FBQ0YsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0VBQzlDO0FBQ0Y7QUFBQ0csT0FBQSxDQUFBTCxvQkFBQSxHQUFBQSxvQkFBQSJ9
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transient-error-lookup.js","names":["TransientErrorLookup","isTransientError","error","transientErrors","indexOf","exports"],"sources":["../src/transient-error-lookup.ts"],"sourcesContent":["// This simple piece of code is factored out into a separate class to make it\n// easy to stub it out in tests. It's hard, if not impossible, to cause a\n// transient error on demand in tests.\nexport class TransientErrorLookup {\n isTransientError(error: number) {\n // This list of transient errors comes from Microsoft implementation of SqlClient:\n // - https://github.com/dotnet/corefx/blob/master/src/System.Data.SqlClient/src/System/Data/SqlClient/SqlInternalConnectionTds.cs#L115\n const transientErrors = [4060, 10928, 10929, 40197, 40501, 40613];\n return transientErrors.indexOf(error) !== -1;\n }\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACO,MAAMA,oBAAoB,CAAC;EAChCC,gBAAgBA,CAACC,KAAa,EAAE;IAC9B;IACA;IACA,MAAMC,eAAe,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;IACjE,OAAOA,eAAe,CAACC,OAAO,CAACF,KAAK,CAAC,KAAK,CAAC,CAAC;EAC9C;AACF;AAACG,OAAA,CAAAL,oBAAA,GAAAA,oBAAA"}
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.withTimeout = withTimeout;
7
-
8
7
  var _nodeAbortController = require("node-abort-controller");
9
-
10
8
  var _timeoutError = _interopRequireDefault(require("../errors/timeout-error"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
10
  /**
15
11
  * Run the function `func` with an `AbortSignal` that will automatically abort after the time specified
16
12
  * by `timeout` or when the given `signal` is aborted.
@@ -19,27 +15,23 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
19
15
  */
20
16
  async function withTimeout(timeout, func, signal) {
21
17
  const timeoutController = new _nodeAbortController.AbortController();
22
-
23
18
  const abortCurrentAttempt = () => {
24
19
  timeoutController.abort();
25
20
  };
26
-
27
21
  const timer = setTimeout(abortCurrentAttempt, timeout);
28
22
  signal === null || signal === void 0 ? void 0 : signal.addEventListener('abort', abortCurrentAttempt, {
29
23
  once: true
30
24
  });
31
-
32
25
  try {
33
26
  return await func(timeoutController.signal);
34
27
  } catch (err) {
35
28
  if (err instanceof Error && err.name === 'AbortError' && !(signal && signal.aborted)) {
36
29
  throw new _timeoutError.default();
37
30
  }
38
-
39
31
  throw err;
40
32
  } finally {
41
33
  signal === null || signal === void 0 ? void 0 : signal.removeEventListener('abort', abortCurrentAttempt);
42
34
  clearTimeout(timer);
43
35
  }
44
36
  }
45
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ3aXRoVGltZW91dCIsInRpbWVvdXQiLCJmdW5jIiwic2lnbmFsIiwidGltZW91dENvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJhYm9ydEN1cnJlbnRBdHRlbXB0IiwiYWJvcnQiLCJ0aW1lciIsInNldFRpbWVvdXQiLCJhZGRFdmVudExpc3RlbmVyIiwib25jZSIsImVyciIsIkVycm9yIiwibmFtZSIsImFib3J0ZWQiLCJUaW1lb3V0RXJyb3IiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiY2xlYXJUaW1lb3V0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3dpdGgtdGltZW91dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYm9ydENvbnRyb2xsZXIsIEFib3J0U2lnbmFsIH0gZnJvbSAnbm9kZS1hYm9ydC1jb250cm9sbGVyJztcbmltcG9ydCBUaW1lb3V0RXJyb3IgZnJvbSAnLi4vZXJyb3JzL3RpbWVvdXQtZXJyb3InO1xuXG4vKipcbiAqIFJ1biB0aGUgZnVuY3Rpb24gYGZ1bmNgIHdpdGggYW4gYEFib3J0U2lnbmFsYCB0aGF0IHdpbGwgYXV0b21hdGljYWxseSBhYm9ydCBhZnRlciB0aGUgdGltZSBzcGVjaWZpZWRcbiAqIGJ5IGB0aW1lb3V0YCBvciB3aGVuIHRoZSBnaXZlbiBgc2lnbmFsYCBpcyBhYm9ydGVkLlxuICpcbiAqIE9uIHRpbWVvdXQsIHRoZSBgdGltZW91dFNpZ25hbGAgd2lsbCBiZSBhYm9ydGVkIGFuZCBhIGBUaW1lb3V0RXJyb3JgIHdpbGwgYmUgdGhyb3duLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFRpbWVvdXQ8VD4odGltZW91dDogbnVtYmVyLCBmdW5jOiAodGltZW91dFNpZ25hbDogQWJvcnRTaWduYWwpID0+IFByb21pc2U8VD4sIHNpZ25hbD86IEFib3J0U2lnbmFsKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHRpbWVvdXRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICBjb25zdCBhYm9ydEN1cnJlbnRBdHRlbXB0ID0gKCkgPT4geyB0aW1lb3V0Q29udHJvbGxlci5hYm9ydCgpOyB9O1xuXG4gIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dChhYm9ydEN1cnJlbnRBdHRlbXB0LCB0aW1lb3V0KTtcbiAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0Q3VycmVudEF0dGVtcHQsIHsgb25jZTogdHJ1ZSB9KTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmdW5jKHRpbWVvdXRDb250cm9sbGVyLnNpZ25hbCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvciAmJiBlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InICYmICEoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSkge1xuICAgICAgdGhyb3cgbmV3IFRpbWVvdXRFcnJvcigpO1xuICAgIH1cblxuICAgIHRocm93IGVycjtcbiAgfSBmaW5hbGx5IHtcbiAgICBzaWduYWw/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRDdXJyZW50QXR0ZW1wdCk7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxlQUFlQSxXQUFmLENBQThCQyxPQUE5QixFQUErQ0MsSUFBL0MsRUFBaUdDLE1BQWpHLEVBQW1JO0VBQ3hJLE1BQU1DLGlCQUFpQixHQUFHLElBQUlDLG9DQUFKLEVBQTFCOztFQUNBLE1BQU1DLG1CQUFtQixHQUFHLE1BQU07SUFBRUYsaUJBQWlCLENBQUNHLEtBQWxCO0VBQTRCLENBQWhFOztFQUVBLE1BQU1DLEtBQUssR0FBR0MsVUFBVSxDQUFDSCxtQkFBRCxFQUFzQkwsT0FBdEIsQ0FBeEI7RUFDQUUsTUFBTSxTQUFOLElBQUFBLE1BQU0sV0FBTixZQUFBQSxNQUFNLENBQUVPLGdCQUFSLENBQXlCLE9BQXpCLEVBQWtDSixtQkFBbEMsRUFBdUQ7SUFBRUssSUFBSSxFQUFFO0VBQVIsQ0FBdkQ7O0VBRUEsSUFBSTtJQUNGLE9BQU8sTUFBTVQsSUFBSSxDQUFDRSxpQkFBaUIsQ0FBQ0QsTUFBbkIsQ0FBakI7RUFDRCxDQUZELENBRUUsT0FBT1MsR0FBUCxFQUFZO0lBQ1osSUFBSUEsR0FBRyxZQUFZQyxLQUFmLElBQXdCRCxHQUFHLENBQUNFLElBQUosS0FBYSxZQUFyQyxJQUFxRCxFQUFFWCxNQUFNLElBQUlBLE1BQU0sQ0FBQ1ksT0FBbkIsQ0FBekQsRUFBc0Y7TUFDcEYsTUFBTSxJQUFJQyxxQkFBSixFQUFOO0lBQ0Q7O0lBRUQsTUFBTUosR0FBTjtFQUNELENBUkQsU0FRVTtJQUNSVCxNQUFNLFNBQU4sSUFBQUEsTUFBTSxXQUFOLFlBQUFBLE1BQU0sQ0FBRWMsbUJBQVIsQ0FBNEIsT0FBNUIsRUFBcUNYLG1CQUFyQztJQUNBWSxZQUFZLENBQUNWLEtBQUQsQ0FBWjtFQUNEO0FBQ0YifQ==
37
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZUFib3J0Q29udHJvbGxlciIsInJlcXVpcmUiLCJfdGltZW91dEVycm9yIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIm9iaiIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0Iiwid2l0aFRpbWVvdXQiLCJ0aW1lb3V0IiwiZnVuYyIsInNpZ25hbCIsInRpbWVvdXRDb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwiYWJvcnRDdXJyZW50QXR0ZW1wdCIsImFib3J0IiwidGltZXIiLCJzZXRUaW1lb3V0IiwiYWRkRXZlbnRMaXN0ZW5lciIsIm9uY2UiLCJlcnIiLCJFcnJvciIsIm5hbWUiLCJhYm9ydGVkIiwiVGltZW91dEVycm9yIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNsZWFyVGltZW91dCJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy93aXRoLXRpbWVvdXQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJvcnRDb250cm9sbGVyLCBBYm9ydFNpZ25hbCB9IGZyb20gJ25vZGUtYWJvcnQtY29udHJvbGxlcic7XG5pbXBvcnQgVGltZW91dEVycm9yIGZyb20gJy4uL2Vycm9ycy90aW1lb3V0LWVycm9yJztcblxuLyoqXG4gKiBSdW4gdGhlIGZ1bmN0aW9uIGBmdW5jYCB3aXRoIGFuIGBBYm9ydFNpZ25hbGAgdGhhdCB3aWxsIGF1dG9tYXRpY2FsbHkgYWJvcnQgYWZ0ZXIgdGhlIHRpbWUgc3BlY2lmaWVkXG4gKiBieSBgdGltZW91dGAgb3Igd2hlbiB0aGUgZ2l2ZW4gYHNpZ25hbGAgaXMgYWJvcnRlZC5cbiAqXG4gKiBPbiB0aW1lb3V0LCB0aGUgYHRpbWVvdXRTaWduYWxgIHdpbGwgYmUgYWJvcnRlZCBhbmQgYSBgVGltZW91dEVycm9yYCB3aWxsIGJlIHRocm93bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KHRpbWVvdXQ6IG51bWJlciwgZnVuYzogKHRpbWVvdXRTaWduYWw6IEFib3J0U2lnbmFsKSA9PiBQcm9taXNlPFQ+LCBzaWduYWw/OiBBYm9ydFNpZ25hbCk6IFByb21pc2U8VD4ge1xuICBjb25zdCB0aW1lb3V0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgY29uc3QgYWJvcnRDdXJyZW50QXR0ZW1wdCA9ICgpID0+IHsgdGltZW91dENvbnRyb2xsZXIuYWJvcnQoKTsgfTtcblxuICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoYWJvcnRDdXJyZW50QXR0ZW1wdCwgdGltZW91dCk7XG4gIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydEN1cnJlbnRBdHRlbXB0LCB7IG9uY2U6IHRydWUgfSk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZnVuYyh0aW1lb3V0Q29udHJvbGxlci5zaWduYWwpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJyAmJiAhKHNpZ25hbCAmJiBzaWduYWwuYWJvcnRlZCkpIHtcbiAgICAgIHRocm93IG5ldyBUaW1lb3V0RXJyb3IoKTtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnI7XG4gIH0gZmluYWxseSB7XG4gICAgc2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0Q3VycmVudEF0dGVtcHQpO1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsb0JBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGFBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUFtRCxTQUFBRSx1QkFBQUMsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQUVuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxlQUFlRyxXQUFXQSxDQUFJQyxPQUFlLEVBQUVDLElBQWdELEVBQUVDLE1BQW9CLEVBQWM7RUFDeEksTUFBTUMsaUJBQWlCLEdBQUcsSUFBSUMsb0NBQWUsQ0FBQyxDQUFDO0VBQy9DLE1BQU1DLG1CQUFtQixHQUFHQSxDQUFBLEtBQU07SUFBRUYsaUJBQWlCLENBQUNHLEtBQUssQ0FBQyxDQUFDO0VBQUUsQ0FBQztFQUVoRSxNQUFNQyxLQUFLLEdBQUdDLFVBQVUsQ0FBQ0gsbUJBQW1CLEVBQUVMLE9BQU8sQ0FBQztFQUN0REUsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUVPLGdCQUFnQixDQUFDLE9BQU8sRUFBRUosbUJBQW1CLEVBQUU7SUFBRUssSUFBSSxFQUFFO0VBQUssQ0FBQyxDQUFDO0VBRXRFLElBQUk7SUFDRixPQUFPLE1BQU1ULElBQUksQ0FBQ0UsaUJBQWlCLENBQUNELE1BQU0sQ0FBQztFQUM3QyxDQUFDLENBQUMsT0FBT1MsR0FBRyxFQUFFO0lBQ1osSUFBSUEsR0FBRyxZQUFZQyxLQUFLLElBQUlELEdBQUcsQ0FBQ0UsSUFBSSxLQUFLLFlBQVksSUFBSSxFQUFFWCxNQUFNLElBQUlBLE1BQU0sQ0FBQ1ksT0FBTyxDQUFDLEVBQUU7TUFDcEYsTUFBTSxJQUFJQyxxQkFBWSxDQUFDLENBQUM7SUFDMUI7SUFFQSxNQUFNSixHQUFHO0VBQ1gsQ0FBQyxTQUFTO0lBQ1JULE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFYyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUVYLG1CQUFtQixDQUFDO0lBQ3pEWSxZQUFZLENBQUNWLEtBQUssQ0FBQztFQUNyQjtBQUNGIn0=
@@ -0,0 +1 @@
1
+ {"version":3,"file":"with-timeout.js","names":["_nodeAbortController","require","_timeoutError","_interopRequireDefault","obj","__esModule","default","withTimeout","timeout","func","signal","timeoutController","AbortController","abortCurrentAttempt","abort","timer","setTimeout","addEventListener","once","err","Error","name","aborted","TimeoutError","removeEventListener","clearTimeout"],"sources":["../../src/utils/with-timeout.ts"],"sourcesContent":["import { AbortController, AbortSignal } from 'node-abort-controller';\nimport TimeoutError from '../errors/timeout-error';\n\n/**\n * Run the function `func` with an `AbortSignal` that will automatically abort after the time specified\n * by `timeout` or when the given `signal` is aborted.\n *\n * On timeout, the `timeoutSignal` will be aborted and a `TimeoutError` will be thrown.\n */\nexport async function withTimeout<T>(timeout: number, func: (timeoutSignal: AbortSignal) => Promise<T>, signal?: AbortSignal): Promise<T> {\n const timeoutController = new AbortController();\n const abortCurrentAttempt = () => { timeoutController.abort(); };\n\n const timer = setTimeout(abortCurrentAttempt, timeout);\n signal?.addEventListener('abort', abortCurrentAttempt, { once: true });\n\n try {\n return await func(timeoutController.signal);\n } catch (err) {\n if (err instanceof Error && err.name === 'AbortError' && !(signal && signal.aborted)) {\n throw new TimeoutError();\n }\n\n throw err;\n } finally {\n signal?.removeEventListener('abort', abortCurrentAttempt);\n clearTimeout(timer);\n }\n}\n"],"mappings":";;;;;;AAAA,IAAAA,oBAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAmD,SAAAE,uBAAAC,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAEnD;AACA;AACA;AACA;AACA;AACA;AACO,eAAeG,WAAWA,CAAIC,OAAe,EAAEC,IAAgD,EAAEC,MAAoB,EAAc;EACxI,MAAMC,iBAAiB,GAAG,IAAIC,oCAAe,CAAC,CAAC;EAC/C,MAAMC,mBAAmB,GAAGA,CAAA,KAAM;IAAEF,iBAAiB,CAACG,KAAK,CAAC,CAAC;EAAE,CAAC;EAEhE,MAAMC,KAAK,GAAGC,UAAU,CAACH,mBAAmB,EAAEL,OAAO,CAAC;EACtDE,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEO,gBAAgB,CAAC,OAAO,EAAEJ,mBAAmB,EAAE;IAAEK,IAAI,EAAE;EAAK,CAAC,CAAC;EAEtE,IAAI;IACF,OAAO,MAAMT,IAAI,CAACE,iBAAiB,CAACD,MAAM,CAAC;EAC7C,CAAC,CAAC,OAAOS,GAAG,EAAE;IACZ,IAAIA,GAAG,YAAYC,KAAK,IAAID,GAAG,CAACE,IAAI,KAAK,YAAY,IAAI,EAAEX,MAAM,IAAIA,MAAM,CAACY,OAAO,CAAC,EAAE;MACpF,MAAM,IAAIC,qBAAY,CAAC,CAAC;IAC1B;IAEA,MAAMJ,GAAG;EACX,CAAC,SAAS;IACRT,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEc,mBAAmB,CAAC,OAAO,EAAEX,mBAAmB,CAAC;IACzDY,YAAY,CAACV,KAAK,CAAC;EACrB;AACF"}