tedious 20.1.0 → 20.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/all-headers.js +4 -4
- package/lib/all-headers.js.map +1 -1
- package/lib/bulk-load.js +3 -3
- package/lib/bulk-load.js.map +1 -1
- package/lib/data-types/bigint.js +2 -2
- package/lib/data-types/bigint.js.map +1 -1
- package/lib/data-types/datetime2.js +2 -2
- package/lib/data-types/datetime2.js.map +1 -1
- package/lib/data-types/datetimeoffset.js +2 -2
- package/lib/data-types/datetimeoffset.js.map +1 -1
- package/lib/data-types/time.js +2 -2
- package/lib/data-types/time.js.map +1 -1
- package/lib/data-types/tvp.js +5 -6
- package/lib/data-types/tvp.js.map +1 -1
- package/lib/data-types/varbinary.js +1 -3
- package/lib/data-types/varbinary.js.map +1 -1
- package/lib/ntlm-payload.js +7 -9
- package/lib/ntlm-payload.js.map +1 -1
- package/lib/prelogin-payload.js +8 -9
- package/lib/prelogin-payload.js.map +1 -1
- package/lib/request.d.ts +33 -0
- package/lib/request.js +20 -1
- package/lib/request.js.map +1 -1
- package/lib/rpcrequest-payload.js +6 -6
- package/lib/rpcrequest-payload.js.map +1 -1
- package/lib/sqlbatch-payload.js +2 -2
- package/lib/sqlbatch-payload.js.map +1 -1
- package/lib/token/colinfo-token-parser.d.ts +5 -0
- package/lib/token/colinfo-token-parser.js +68 -0
- package/lib/token/colinfo-token-parser.js.map +1 -0
- package/lib/token/handler.d.ts +5 -1
- package/lib/token/handler.js +17 -1
- package/lib/token/handler.js.map +1 -1
- package/lib/token/stream-parser.d.ts +3 -1
- package/lib/token/stream-parser.js +41 -1
- package/lib/token/stream-parser.js.map +1 -1
- package/lib/token/tabname-token-parser.d.ts +5 -0
- package/lib/token/tabname-token-parser.js +51 -0
- package/lib/token/tabname-token-parser.js.map +1 -0
- package/lib/token/token.d.ts +47 -0
- package/lib/token/token.js +22 -2
- package/lib/token/token.js.map +1 -1
- package/lib/tracking-buffer/writable-tracking-buffer.d.ts +58 -21
- package/lib/tracking-buffer/writable-tracking-buffer.js +187 -170
- package/lib/tracking-buffer/writable-tracking-buffer.js.map +1 -1
- package/lib/transaction.js +5 -5
- package/lib/transaction.js.map +1 -1
- package/package.json +1 -1
package/lib/token/handler.js
CHANGED
|
@@ -85,6 +85,12 @@ class TokenHandler {
|
|
|
85
85
|
onColMetadata(token) {
|
|
86
86
|
throw new UnexpectedTokenError(this, token);
|
|
87
87
|
}
|
|
88
|
+
onTabName(token) {
|
|
89
|
+
throw new UnexpectedTokenError(this, token);
|
|
90
|
+
}
|
|
91
|
+
onColInfo(token) {
|
|
92
|
+
throw new UnexpectedTokenError(this, token);
|
|
93
|
+
}
|
|
88
94
|
onOrder(token) {
|
|
89
95
|
throw new UnexpectedTokenError(this, token);
|
|
90
96
|
}
|
|
@@ -367,6 +373,16 @@ class RequestTokenHandler extends TokenHandler {
|
|
|
367
373
|
}
|
|
368
374
|
}
|
|
369
375
|
}
|
|
376
|
+
onTabName(token) {
|
|
377
|
+
if (!this.request.canceled) {
|
|
378
|
+
this.request.emit('tabName', token.tableNames);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
onColInfo(token) {
|
|
382
|
+
if (!this.request.canceled) {
|
|
383
|
+
this.request.emit('colInfo', token.columns);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
370
386
|
onOrder(token) {
|
|
371
387
|
if (!this.request.canceled) {
|
|
372
388
|
this.request.emit('order', token.orderColumns);
|
|
@@ -466,4 +482,4 @@ class AttentionTokenHandler extends TokenHandler {
|
|
|
466
482
|
}
|
|
467
483
|
}
|
|
468
484
|
exports.AttentionTokenHandler = AttentionTokenHandler;
|
|
469
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVxdWVzdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2Vycm9ycyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlVuZXhwZWN0ZWRUb2tlbkVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsImhhbmRsZXIiLCJ0b2tlbiIsIm5hbWUiLCJleHBvcnRzIiwidGRzNzFEZXByZWNhdGlvbldhcm5pbmciLCJlbWl0dGVkIiwiZW1pdCIsInByb2Nlc3MiLCJlbWl0V2FybmluZyIsInR5cGUiLCJjb2RlIiwiVG9rZW5IYW5kbGVyIiwib25JbmZvTWVzc2FnZSIsIm9uRXJyb3JNZXNzYWdlIiwib25TU1BJIiwib25EYXRhYmFzZUNoYW5nZSIsIm9uTGFuZ3VhZ2VDaGFuZ2UiLCJvbkNoYXJzZXRDaGFuZ2UiLCJvblNxbENvbGxhdGlvbkNoYW5nZSIsIm9uUm91dGluZ0NoYW5nZSIsIm9uUGFja2V0U2l6ZUNoYW5nZSIsIm9uUmVzZXRDb25uZWN0aW9uIiwib25CZWdpblRyYW5zYWN0aW9uIiwib25Db21taXRUcmFuc2FjdGlvbiIsIm9uUm9sbGJhY2tUcmFuc2FjdGlvbiIsIm9uRmVkQXV0aEluZm8iLCJvbkZlYXR1cmVFeHRBY2siLCJvbkxvZ2luQWNrIiwib25Db2xNZXRhZGF0YSIsIm9uT3JkZXIiLCJvblJvdyIsIm9uUmV0dXJuU3RhdHVzIiwib25SZXR1cm5WYWx1ZSIsIm9uRG9uZVByb2MiLCJvbkRvbmVJblByb2MiLCJvbkRvbmUiLCJvbkRhdGFiYXNlTWlycm9yaW5nUGFydG5lciIsIkluaXRpYWxTcWxUb2tlbkhhbmRsZXIiLCJjb25uZWN0aW9uIiwibmV3VmFsdWUiLCJkYXRhYmFzZUNvbGxhdGlvbiIsIm1lc3NhZ2VJbyIsInBhY2tldFNpemUiLCJ0cmFuc2FjdGlvbkRlc2NyaXB0b3JzIiwicHVzaCIsImluVHJhbnNhY3Rpb24iLCJsZW5ndGgiLCJjbG9zZSIsIkxvZ2luN1Rva2VuSGFuZGxlciIsImxvZ2luQWNrUmVjZWl2ZWQiLCJsb2dpbkVycm9yIiwidW5kZWZpbmVkIiwiZXJyb3IiLCJDb25uZWN0aW9uRXJyb3IiLCJtZXNzYWdlIiwiaXNMb2dpbkVycm9yVHJhbnNpZW50IiwidHJhbnNpZW50RXJyb3JMb29rdXAiLCJpc1RyYW5zaWVudEVycm9yIiwibnVtYmVyIiwiY3VyVHJhbnNpZW50UmV0cnlDb3VudCIsImNvbmZpZyIsIm9wdGlvbnMiLCJtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMiLCJpc1RyYW5zaWVudCIsIm50bG1wYWNrZXQiLCJudGxtcGFja2V0QnVmZmVyIiwiZmVkQXV0aEluZm9Ub2tlbiIsImF1dGhlbnRpY2F0aW9uIiwiZmVkQXV0aCIsInV0ZjhTdXBwb3J0IiwidGRzVmVyc2lvbiIsImludGVyZmFjZSIsInNlcnZlciIsImluc3RhbmNlIiwic3BsaXQiLCJyb3V0aW5nRGF0YSIsInBvcnQiLCJSZXF1ZXN0VG9rZW5IYW5kbGVyIiwicmVxdWVzdCIsImVycm9ycyIsImNhbmNlbGVkIiwiUmVxdWVzdEVycm9yIiwic3RhdGUiLCJjbGFzcyIsInNlcnZlck5hbWUiLCJwcm9jTmFtZSIsImxpbmVOdW1iZXIiLCJSZXF1ZXN0IiwiQWdncmVnYXRlRXJyb3IiLCJ1c2VDb2x1bW5OYW1lcyIsImNvbHVtbnMiLCJPYmplY3QiLCJjcmVhdGUiLCJqIiwibGVuIiwiY29sIiwiY29sTmFtZSIsIm9yZGVyQ29sdW1ucyIsInJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uIiwicm93cyIsInJvd0NvbGxlY3Rpb25PbkRvbmUiLCJyc3QiLCJwcm9jUmV0dXJuU3RhdHVzVmFsdWUiLCJ2YWx1ZSIsInBhcmFtTmFtZSIsIm1ldGFkYXRhIiwic3FsRXJyb3IiLCJyb3dDb3VudCIsIm1vcmUiLCJBdHRlbnRpb25Ub2tlbkhhbmRsZXIiLCJhdHRlbnRpb25SZWNlaXZlZCIsImF0dGVudGlvbiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi9oYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb25uZWN0aW9uIGZyb20gJy4uL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgeyBDb25uZWN0aW9uRXJyb3IsIFJlcXVlc3RFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyB0eXBlIENvbHVtbk1ldGFkYXRhIH0gZnJvbSAnLi9jb2xtZXRhZGF0YS10b2tlbi1wYXJzZXInO1xuaW1wb3J0IHtcbiAgQmVnaW5UcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBDaGFyc2V0RW52Q2hhbmdlVG9rZW4sXG4gIENvbGxhdGlvbkNoYW5nZVRva2VuLFxuICBDb2xNZXRhZGF0YVRva2VuLFxuICBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBEYXRhYmFzZUVudkNoYW5nZVRva2VuLFxuICBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbixcbiAgRG9uZUluUHJvY1Rva2VuLFxuICBEb25lUHJvY1Rva2VuLFxuICBEb25lVG9rZW4sXG4gIEVycm9yTWVzc2FnZVRva2VuLFxuICBGZWF0dXJlRXh0QWNrVG9rZW4sXG4gIEZlZEF1dGhJbmZvVG9rZW4sXG4gIEluZm9NZXNzYWdlVG9rZW4sXG4gIExhbmd1YWdlRW52Q2hhbmdlVG9rZW4sXG4gIExvZ2luQWNrVG9rZW4sXG4gIE5CQ1Jvd1Rva2VuLFxuICBPcmRlclRva2VuLFxuICBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4sXG4gIFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSZXR1cm5TdGF0dXNUb2tlbixcbiAgUmV0dXJuVmFsdWVUb2tlbixcbiAgUm9sbGJhY2tUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSb3V0aW5nRW52Q2hhbmdlVG9rZW4sXG4gIFJvd1Rva2VuLFxuICBTU1BJVG9rZW4sXG4gIFRva2VuXG59IGZyb20gJy4vdG9rZW4nO1xuaW1wb3J0IEJ1bGtMb2FkIGZyb20gJy4uL2J1bGstbG9hZCc7XG5cbmV4cG9ydCBjbGFzcyBVbmV4cGVjdGVkVG9rZW5FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IoaGFuZGxlcjogVG9rZW5IYW5kbGVyLCB0b2tlbjogVG9rZW4pIHtcbiAgICBzdXBlcignVW5leHBlY3RlZCB0b2tlbiBgJyArIHRva2VuLm5hbWUgKyAnYCBpbiBgJyArIGhhbmRsZXIuY29uc3RydWN0b3IubmFtZSArICdgJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBFbWl0cyBhIHdhcm5pbmcgKG9uY2UgcGVyIHByb2Nlc3MpIHdoZW4gYSBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkXG4gKiB1c2luZyBURFMgNy4xLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCB0ZHM3MURlcHJlY2F0aW9uV2FybmluZyA9IHtcbiAgZW1pdHRlZDogZmFsc2UsXG5cbiAgZW1pdCgpIHtcbiAgICBpZiAodGhpcy5lbWl0dGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZW1pdHRlZCA9IHRydWU7XG5cbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKFxuICAgICAgJ1N1cHBvcnQgZm9yIFREUyA3LjEgKHVzZWQgYnkgU1FMIFNlcnZlciAyMDAwKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBgdGVkaW91c2AuJyxcbiAgICAgIHsgdHlwZTogJ0RlcHJlY2F0aW9uV2FybmluZycsIGNvZGU6ICdURURJT1VTX0RFUF9URFM3MScgfVxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBjbGFzcyBUb2tlbkhhbmRsZXIge1xuICBvbkluZm9NZXNzYWdlKHRva2VuOiBJbmZvTWVzc2FnZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRXJyb3JNZXNzYWdlKHRva2VuOiBFcnJvck1lc3NhZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblNTUEkodG9rZW46IFNTUElUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkRhdGFiYXNlQ2hhbmdlKHRva2VuOiBEYXRhYmFzZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uTGFuZ3VhZ2VDaGFuZ2UodG9rZW46IExhbmd1YWdlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25DaGFyc2V0Q2hhbmdlKHRva2VuOiBDaGFyc2V0RW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25TcWxDb2xsYXRpb25DaGFuZ2UodG9rZW46IENvbGxhdGlvbkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uUm91dGluZ0NoYW5nZSh0b2tlbjogUm91dGluZ0VudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uUGFja2V0U2l6ZUNoYW5nZSh0b2tlbjogUGFja2V0U2l6ZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uUmVzZXRDb25uZWN0aW9uKHRva2VuOiBSZXNldENvbm5lY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkJlZ2luVHJhbnNhY3Rpb24odG9rZW46IEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkNvbW1pdFRyYW5zYWN0aW9uKHRva2VuOiBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uUm9sbGJhY2tUcmFuc2FjdGlvbih0b2tlbjogUm9sbGJhY2tUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRmVkQXV0aEluZm8odG9rZW46IEZlZEF1dGhJbmZvVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25GZWF0dXJlRXh0QWNrKHRva2VuOiBGZWF0dXJlRXh0QWNrVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Mb2dpbkFjayh0b2tlbjogTG9naW5BY2tUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkNvbE1ldGFkYXRhKHRva2VuOiBDb2xNZXRhZGF0YVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uT3JkZXIodG9rZW46IE9yZGVyVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Sb3codG9rZW46IFJvd1Rva2VuIHwgTkJDUm93VG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25SZXR1cm5TdGF0dXModG9rZW46IFJldHVyblN0YXR1c1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uUmV0dXJuVmFsdWUodG9rZW46IFJldHVyblZhbHVlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Eb25lUHJvYyh0b2tlbjogRG9uZVByb2NUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkRvbmVJblByb2ModG9rZW46IERvbmVJblByb2NUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkRvbmUodG9rZW46IERvbmVUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkRhdGFiYXNlTWlycm9yaW5nUGFydG5lcih0b2tlbjogRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0b2tlbnMgcmVjZWl2ZWQgaW4gdGhlIHJlc3BvbnNlIG1lc3NhZ2UgdG8gdGhlIGluaXRpYWwgU1FMIEJhdGNoIHJlcXVlc3RcbiAqIHRoYXQgc2V0cyB1cCBkaWZmZXJlbnQgY29ubmVjdGlvbiBzZXR0aW5ncy5cbiAqL1xuZXhwb3J0IGNsYXNzIEluaXRpYWxTcWxUb2tlbkhhbmRsZXIgZXh0ZW5kcyBUb2tlbkhhbmRsZXIge1xuICBkZWNsYXJlIGNvbm5lY3Rpb246IENvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbjogQ29ubmVjdGlvbikge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICB9XG5cbiAgb25JbmZvTWVzc2FnZSh0b2tlbjogSW5mb01lc3NhZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdpbmZvTWVzc2FnZScsIHRva2VuKTtcbiAgfVxuXG4gIG9uRXJyb3JNZXNzYWdlKHRva2VuOiBFcnJvck1lc3NhZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvck1lc3NhZ2UnLCB0b2tlbik7XG4gIH1cblxuICBvbkRhdGFiYXNlQ2hhbmdlKHRva2VuOiBEYXRhYmFzZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2RhdGFiYXNlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25MYW5ndWFnZUNoYW5nZSh0b2tlbjogTGFuZ3VhZ2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdsYW5ndWFnZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uQ2hhcnNldENoYW5nZSh0b2tlbjogQ2hhcnNldEVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2NoYXJzZXRDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvblNxbENvbGxhdGlvbkNoYW5nZSh0b2tlbjogQ29sbGF0aW9uQ2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZGF0YWJhc2VDb2xsYXRpb24gPSB0b2tlbi5uZXdWYWx1ZTtcbiAgfVxuXG4gIG9uUGFja2V0U2l6ZUNoYW5nZSh0b2tlbjogUGFja2V0U2l6ZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLm1lc3NhZ2VJby5wYWNrZXRTaXplKHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uQmVnaW5UcmFuc2FjdGlvbih0b2tlbjogQmVnaW5UcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMucHVzaCh0b2tlbi5uZXdWYWx1ZSk7XG4gICAgdGhpcy5jb25uZWN0aW9uLmluVHJhbnNhY3Rpb24gPSB0cnVlO1xuICB9XG5cbiAgb25Db21taXRUcmFuc2FjdGlvbih0b2tlbjogQ29tbWl0VHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aCA9IDE7XG4gICAgdGhpcy5jb25uZWN0aW9uLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgfVxuXG4gIG9uUm9sbGJhY2tUcmFuc2FjdGlvbih0b2tlbjogUm9sbGJhY2tUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoID0gMTtcbiAgICAvLyBBbiBvdXRlcm1vc3QgdHJhbnNhY3Rpb24gd2FzIHJvbGxlZCBiYWNrLiBSZXNldCB0aGUgdHJhbnNhY3Rpb24gY291bnRlclxuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ3JvbGxiYWNrVHJhbnNhY3Rpb24nKTtcbiAgfVxuXG4gIG9uQ29sTWV0YWRhdGEodG9rZW46IENvbE1ldGFkYXRhVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoXCJSZWNlaXZlZCAnY29sdW1uTWV0YWRhdGEnIHdoZW4gbm8gc3FsUmVxdWVzdCBpcyBpbiBwcm9ncmVzc1wiKSk7XG4gICAgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBvbk9yZGVyKHRva2VuOiBPcmRlclRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKFwiUmVjZWl2ZWQgJ29yZGVyJyB3aGVuIG5vIHNxbFJlcXVlc3QgaXMgaW4gcHJvZ3Jlc3NcIikpO1xuICAgIHRoaXMuY29ubmVjdGlvbi5jbG9zZSgpO1xuICB9XG5cbiAgb25Sb3codG9rZW46IFJvd1Rva2VuIHwgTkJDUm93VG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoXCJSZWNlaXZlZCAncm93JyB3aGVuIG5vIHNxbFJlcXVlc3QgaXMgaW4gcHJvZ3Jlc3NcIikpO1xuICAgIHRoaXMuY29ubmVjdGlvbi5jbG9zZSgpO1xuICB9XG5cbiAgb25SZXR1cm5TdGF0dXModG9rZW46IFJldHVyblN0YXR1c1Rva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25SZXR1cm5WYWx1ZSh0b2tlbjogUmV0dXJuVmFsdWVUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uRG9uZVByb2ModG9rZW46IERvbmVQcm9jVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvbkRvbmVJblByb2ModG9rZW46IERvbmVJblByb2NUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25SZXNldENvbm5lY3Rpb24odG9rZW46IFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ3Jlc2V0Q29ubmVjdGlvbicpO1xuICB9XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0b2tlbnMgcmVjZWl2ZWQgaW4gdGhlIHJlc3BvbnNlIG1lc3NhZ2UgdG8gYSBMb2dpbjcgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGNsYXNzIExvZ2luN1Rva2VuSGFuZGxlciBleHRlbmRzIFRva2VuSGFuZGxlciB7XG4gIGRlY2xhcmUgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcblxuICBkZWNsYXJlIGZlZEF1dGhJbmZvVG9rZW46IEZlZEF1dGhJbmZvVG9rZW4gfCB1bmRlZmluZWQ7XG4gIGRlY2xhcmUgcm91dGluZ0RhdGE6IHsgc2VydmVyOiBzdHJpbmcsIHBvcnQ6IG51bWJlciwgaW5zdGFuY2U6IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuXG4gIGRlY2xhcmUgbG9naW5BY2tSZWNlaXZlZDogYm9vbGVhbjtcblxuICBkZWNsYXJlIGxvZ2luRXJyb3I6IENvbm5lY3Rpb25FcnJvciB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uOiBDb25uZWN0aW9uKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmxvZ2luQWNrUmVjZWl2ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICAgIHRoaXMubG9naW5FcnJvciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnaW5mb01lc3NhZ2UnLCB0b2tlbik7XG4gIH1cblxuICBvbkVycm9yTWVzc2FnZSh0b2tlbjogRXJyb3JNZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3JNZXNzYWdlJywgdG9rZW4pO1xuXG4gICAgY29uc3QgZXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKHRva2VuLm1lc3NhZ2UsICdFTE9HSU4nKTtcblxuICAgIGNvbnN0IGlzTG9naW5FcnJvclRyYW5zaWVudCA9IHRoaXMuY29ubmVjdGlvbi50cmFuc2llbnRFcnJvckxvb2t1cC5pc1RyYW5zaWVudEVycm9yKHRva2VuLm51bWJlcik7XG4gICAgaWYgKGlzTG9naW5FcnJvclRyYW5zaWVudCAmJiB0aGlzLmNvbm5lY3Rpb24uY3VyVHJhbnNpZW50UmV0cnlDb3VudCAhPT0gdGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLm1heFJldHJpZXNPblRyYW5zaWVudEVycm9ycykge1xuICAgICAgZXJyb3IuaXNUcmFuc2llbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMubG9naW5FcnJvciA9IGVycm9yO1xuICB9XG5cbiAgb25TU1BJKHRva2VuOiBTU1BJVG9rZW4pIHtcbiAgICBpZiAodG9rZW4ubnRsbXBhY2tldCkge1xuICAgICAgdGhpcy5jb25uZWN0aW9uLm50bG1wYWNrZXQgPSB0b2tlbi5udGxtcGFja2V0O1xuICAgICAgdGhpcy5jb25uZWN0aW9uLm50bG1wYWNrZXRCdWZmZXIgPSB0b2tlbi5udGxtcGFja2V0QnVmZmVyO1xuICAgIH1cbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZGF0YWJhc2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkRhdGFiYXNlTWlycm9yaW5nUGFydG5lcih0b2tlbjogRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25MYW5ndWFnZUNoYW5nZSh0b2tlbjogTGFuZ3VhZ2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdsYW5ndWFnZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uQ2hhcnNldENoYW5nZSh0b2tlbjogQ2hhcnNldEVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2NoYXJzZXRDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvblNxbENvbGxhdGlvbkNoYW5nZSh0b2tlbjogQ29sbGF0aW9uQ2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZGF0YWJhc2VDb2xsYXRpb24gPSB0b2tlbi5uZXdWYWx1ZTtcbiAgfVxuXG4gIG9uRmVkQXV0aEluZm8odG9rZW46IEZlZEF1dGhJbmZvVG9rZW4pIHtcbiAgICB0aGlzLmZlZEF1dGhJbmZvVG9rZW4gPSB0b2tlbjtcbiAgfVxuXG4gIG9uRmVhdHVyZUV4dEFjayh0b2tlbjogRmVhdHVyZUV4dEFja1Rva2VuKSB7XG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGlvbiB9ID0gdGhpcy5jb25uZWN0aW9uLmNvbmZpZztcblxuICAgIGlmIChhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1wYXNzd29yZCcgfHwgYXV0aGVudGljYXRpb24udHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktYWNjZXNzLXRva2VuJyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1tc2ktdm0nIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS1hcHAtc2VydmljZScgfHwgYXV0aGVudGljYXRpb24udHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3Rvcnktc2VydmljZS1wcmluY2lwYWwtc2VjcmV0JyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1kZWZhdWx0Jykge1xuICAgICAgaWYgKHRva2VuLmZlZEF1dGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKCdEaWQgbm90IHJlY2VpdmUgQWN0aXZlIERpcmVjdG9yeSBhdXRoZW50aWNhdGlvbiBhY2tub3dsZWRnZW1lbnQnKTtcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4uZmVkQXV0aC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcihgQWN0aXZlIERpcmVjdG9yeSBhdXRoZW50aWNhdGlvbiBhY2tub3dsZWRnbWVudCBmb3IgJHthdXRoZW50aWNhdGlvbi50eXBlfSBhdXRoZW50aWNhdGlvbiBtZXRob2QgaW5jbHVkZXMgZXh0cmEgZGF0YWApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodG9rZW4uZmVkQXV0aCA9PT0gdW5kZWZpbmVkICYmIHRva2VuLnV0ZjhTdXBwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ1JlY2VpdmVkIGFja25vd2xlZGdlbWVudCBmb3IgdW5rbm93biBmZWF0dXJlJyk7XG4gICAgfSBlbHNlIGlmICh0b2tlbi5mZWRBdXRoKSB7XG4gICAgICB0aGlzLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKCdEaWQgbm90IHJlcXVlc3QgQWN0aXZlIERpcmVjdG9yeSBhdXRoZW50aWNhdGlvbiwgYnV0IHJlY2VpdmVkIHRoZSBhY2tub3dsZWRnbWVudCcpO1xuICAgIH1cbiAgfVxuXG4gIG9uTG9naW5BY2sodG9rZW46IExvZ2luQWNrVG9rZW4pIHtcbiAgICBpZiAoIXRva2VuLnRkc1ZlcnNpb24pIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIFREUyB2ZXJzaW9uXG4gICAgICB0aGlzLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKCdTZXJ2ZXIgcmVzcG9uZGVkIHdpdGggdW5rbm93biBURFMgdmVyc2lvbi4nLCAnRVREUycpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdG9rZW4uaW50ZXJmYWNlKSB7XG4gICAgICAvLyB1bnN1cHBvcnRlZCBpbnRlcmZhY2VcbiAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ1NlcnZlciByZXNwb25kZWQgd2l0aCB1bnN1cHBvcnRlZCBpbnRlcmZhY2UuJywgJ0VJTlRFUkZBQ0VOT1RTVVBQJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdXNlIG5lZ290aWF0ZWQgdmVyc2lvblxuICAgIHRoaXMuY29ubmVjdGlvbi5jb25maWcub3B0aW9ucy50ZHNWZXJzaW9uID0gdG9rZW4udGRzVmVyc2lvbjtcblxuICAgIGlmICh0b2tlbi50ZHNWZXJzaW9uIDwgJzdfMicpIHtcbiAgICAgIHRkczcxRGVwcmVjYXRpb25XYXJuaW5nLmVtaXQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZ2luQWNrUmVjZWl2ZWQgPSB0cnVlO1xuICB9XG5cbiAgb25Sb3V0aW5nQ2hhbmdlKHRva2VuOiBSb3V0aW5nRW52Q2hhbmdlVG9rZW4pIHtcbiAgICAvLyBTcGxpdHMgaW5zdGFuY2UgbmFtZSBhdHRhY2hlZCB0byB0aGUgcmVkaXJlY3QgdXJsLiBFLmcuLCByZWRpcmVjdC5kYi5uZXRcXGluc3RhbmNlMSAtLT4gW3JlZGlyZWN0LmRiLm5ldCwgaW5zdGFuY2UxXVxuICAgIGNvbnN0IFsgc2VydmVyLCBpbnN0YW5jZSBdID0gdG9rZW4ubmV3VmFsdWUuc2VydmVyLnNwbGl0KCdcXFxcJyk7XG5cbiAgICB0aGlzLnJvdXRpbmdEYXRhID0ge1xuICAgICAgc2VydmVyLCBwb3J0OiB0b2tlbi5uZXdWYWx1ZS5wb3J0LCBpbnN0YW5jZVxuICAgIH07XG4gIH1cblxuICBvbkRvbmVJblByb2ModG9rZW46IERvbmVJblByb2NUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24ubWVzc2FnZUlvLnBhY2tldFNpemUodG9rZW4ubmV3VmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0b2tlbnMgcmVjZWl2ZWQgaW4gdGhlIHJlc3BvbnNlIG1lc3NhZ2UgdG8gYSBSUEMgUmVxdWVzdCxcbiAqIGEgU1FMIEJhdGNoIFJlcXVlc3QsIGEgQnVsayBMb2FkIEJDUCBSZXF1ZXN0IG9yIGEgVHJhbnNhY3Rpb24gTWFuYWdlciBSZXF1ZXN0LlxuICovXG5leHBvcnQgY2xhc3MgUmVxdWVzdFRva2VuSGFuZGxlciBleHRlbmRzIFRva2VuSGFuZGxlciB7XG4gIGRlY2xhcmUgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcbiAgZGVjbGFyZSByZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQ7XG4gIGRlY2xhcmUgZXJyb3JzOiBSZXF1ZXN0RXJyb3JbXTtcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uOiBDb25uZWN0aW9uLCByZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuICAgIHRoaXMuZXJyb3JzID0gW107XG4gIH1cblxuICBvbkluZm9NZXNzYWdlKHRva2VuOiBJbmZvTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2luZm9NZXNzYWdlJywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yTWVzc2FnZScsIHRva2VuKTtcblxuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBjb25zdCBlcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IodG9rZW4ubWVzc2FnZSwgJ0VSRVFVRVNUJyk7XG5cbiAgICAgIGVycm9yLm51bWJlciA9IHRva2VuLm51bWJlcjtcbiAgICAgIGVycm9yLnN0YXRlID0gdG9rZW4uc3RhdGU7XG4gICAgICBlcnJvci5jbGFzcyA9IHRva2VuLmNsYXNzO1xuICAgICAgZXJyb3Iuc2VydmVyTmFtZSA9IHRva2VuLnNlcnZlck5hbWU7XG4gICAgICBlcnJvci5wcm9jTmFtZSA9IHRva2VuLnByb2NOYW1lO1xuICAgICAgZXJyb3IubGluZU51bWJlciA9IHRva2VuLmxpbmVOdW1iZXI7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKTtcbiAgICAgIHRoaXMucmVxdWVzdC5lcnJvciA9IGVycm9yO1xuICAgICAgaWYgKHRoaXMucmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QgJiYgdGhpcy5lcnJvcnMubGVuZ3RoID4gMSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QuZXJyb3IgPSBuZXcgQWdncmVnYXRlRXJyb3IodGhpcy5lcnJvcnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZGF0YWJhc2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2xhbmd1YWdlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25DaGFyc2V0Q2hhbmdlKHRva2VuOiBDaGFyc2V0RW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnY2hhcnNldENoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5kYXRhYmFzZUNvbGxhdGlvbiA9IHRva2VuLm5ld1ZhbHVlO1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24ubWVzc2FnZUlvLnBhY2tldFNpemUodG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25CZWdpblRyYW5zYWN0aW9uKHRva2VuOiBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5wdXNoKHRva2VuLm5ld1ZhbHVlKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IHRydWU7XG4gIH1cblxuICBvbkNvbW1pdFRyYW5zYWN0aW9uKHRva2VuOiBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoID0gMTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgb25Sb2xsYmFja1RyYW5zYWN0aW9uKHRva2VuOiBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIC8vIEFuIG91dGVybW9zdCB0cmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2suIFJlc2V0IHRoZSB0cmFuc2FjdGlvbiBjb3VudGVyXG4gICAgdGhpcy5jb25uZWN0aW9uLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncm9sbGJhY2tUcmFuc2FjdGlvbicpO1xuICB9XG5cbiAgb25Db2xNZXRhZGF0YSh0b2tlbjogQ29sTWV0YWRhdGFUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnVzZUNvbHVtbk5hbWVzKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnM6IHsgW2tleTogc3RyaW5nXTogQ29sdW1uTWV0YWRhdGEgfSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICAgICAgZm9yIChsZXQgaiA9IDAsIGxlbiA9IHRva2VuLmNvbHVtbnMubGVuZ3RoOyBqIDwgbGVuOyBqKyspIHtcbiAgICAgICAgICBjb25zdCBjb2wgPSB0b2tlbi5jb2x1bW5zW2pdO1xuICAgICAgICAgIGlmIChjb2x1bW5zW2NvbC5jb2xOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBjb2x1bW5zW2NvbC5jb2xOYW1lXSA9IGNvbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnY29sdW1uTWV0YWRhdGEnLCBjb2x1bW5zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdjb2x1bW5NZXRhZGF0YScsIHRva2VuLmNvbHVtbnMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uT3JkZXIodG9rZW46IE9yZGVyVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ29yZGVyJywgdG9rZW4ub3JkZXJDb2x1bW5zKTtcbiAgICB9XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dzIS5wdXNoKHRva2VuLmNvbHVtbnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmUpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJzdCEucHVzaCh0b2tlbi5jb2x1bW5zKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ3JvdycsIHRva2VuLmNvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIG9uUmV0dXJuU3RhdHVzKHRva2VuOiBSZXR1cm5TdGF0dXNUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICAvLyBLZWVwIHZhbHVlIGZvciBwYXNzaW5nIGluICdkb25lUHJvYycgZXZlbnQuXG4gICAgICB0aGlzLmNvbm5lY3Rpb24ucHJvY1JldHVyblN0YXR1c1ZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgfVxuICB9XG5cbiAgb25SZXR1cm5WYWx1ZSh0b2tlbjogUmV0dXJuVmFsdWVUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgncmV0dXJuVmFsdWUnLCB0b2tlbi5wYXJhbU5hbWUsIHRva2VuLnZhbHVlLCB0b2tlbi5tZXRhZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgb25Eb25lUHJvYyh0b2tlbjogRG9uZVByb2NUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodG9rZW4uc3FsRXJyb3IgJiYgIXRoaXMucmVxdWVzdC5lcnJvcikge1xuICAgICAgICAvLyBjaGVjayBpZiB0aGUgRE9ORV9FUlJPUiBmbGFncyB3YXMgc2V0LCBidXQgYW4gRVJST1IgdG9rZW4gd2FzIG5vdCBzZW50LlxuICAgICAgICB0aGlzLnJlcXVlc3QuZXJyb3IgPSBuZXcgUmVxdWVzdEVycm9yKCdBbiB1bmtub3duIGVycm9yIGhhcyBvY2N1cnJlZC4nLCAnVU5LTk9XTicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnZG9uZVByb2MnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5jb25uZWN0aW9uLnByb2NSZXR1cm5TdGF0dXNWYWx1ZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIHRoaXMuY29ubmVjdGlvbi5wcm9jUmV0dXJuU3RhdHVzVmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Eb25lSW5Qcm9jKHRva2VuOiBEb25lSW5Qcm9jVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2RvbmVJblByb2MnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgaWYgKHRva2VuLnNxbEVycm9yICYmICF0aGlzLnJlcXVlc3QuZXJyb3IpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIERPTkVfRVJST1IgZmxhZ3Mgd2FzIHNldCwgYnV0IGFuIEVSUk9SIHRva2VuIHdhcyBub3Qgc2VudC5cbiAgICAgICAgdGhpcy5yZXF1ZXN0LmVycm9yID0gbmV3IFJlcXVlc3RFcnJvcignQW4gdW5rbm93biBlcnJvciBoYXMgb2NjdXJyZWQuJywgJ1VOS05PV04nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2RvbmUnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25SZXNldENvbm5lY3Rpb24odG9rZW46IFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ3Jlc2V0Q29ubmVjdGlvbicpO1xuICB9XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgYXR0ZW50aW9uIGFja25vd2xlZGdlbWVudCBtZXNzYWdlLlxuICpcbiAqIFRoaXMgbWVzc2FnZSBvbmx5IGNvbnRhaW5zIGEgYERPTkVgIHRva2VuIHRoYXQgYWNrbm93bGVkZ2VzXG4gKiB0aGF0IHRoZSBhdHRlbnRpb24gbWVzc2FnZSB3YXMgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlci5cbiAqL1xuZXhwb3J0IGNsYXNzIEF0dGVudGlvblRva2VuSGFuZGxlciBleHRlbmRzIFRva2VuSGFuZGxlciB7XG4gIGRlY2xhcmUgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcbiAgZGVjbGFyZSByZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBhbiBhdHRlbnRpb24gYWNrbm93bGVkZ2VtZW50IHdhcyByZWNlaXZlZC5cbiAgICovXG4gIGRlY2xhcmUgYXR0ZW50aW9uUmVjZWl2ZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbjogQ29ubmVjdGlvbiwgcmVxdWVzdDogUmVxdWVzdCB8IEJ1bGtMb2FkKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcblxuICAgIHRoaXMuYXR0ZW50aW9uUmVjZWl2ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgaWYgKHRva2VuLmF0dGVudGlvbikge1xuICAgICAgdGhpcy5hdHRlbnRpb25SZWNlaXZlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFFBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUEwRCxTQUFBRCx1QkFBQUcsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQWlDbkQsTUFBTUcsb0JBQW9CLFNBQVNDLEtBQUssQ0FBQztFQUM5Q0MsV0FBV0EsQ0FBQ0MsT0FBcUIsRUFBRUMsS0FBWSxFQUFFO0lBQy9DLEtBQUssQ0FBQyxvQkFBb0IsR0FBR0EsS0FBSyxDQUFDQyxJQUFJLEdBQUcsUUFBUSxHQUFHRixPQUFPLENBQUNELFdBQVcsQ0FBQ0csSUFBSSxHQUFHLEdBQUcsQ0FBQztFQUN0RjtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUxBQyxPQUFBLENBQUFOLG9CQUFBLEdBQUFBLG9CQUFBO0FBTU8sTUFBTU8sdUJBQXVCLEdBQUFELE9BQUEsQ0FBQUMsdUJBQUEsR0FBRztFQUNyQ0MsT0FBTyxFQUFFLEtBQUs7RUFFZEMsSUFBSUEsQ0FBQSxFQUFHO0lBQ0wsSUFBSSxJQUFJLENBQUNELE9BQU8sRUFBRTtNQUNoQjtJQUNG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
|
|
485
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVxdWVzdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2Vycm9ycyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlVuZXhwZWN0ZWRUb2tlbkVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsImhhbmRsZXIiLCJ0b2tlbiIsIm5hbWUiLCJleHBvcnRzIiwidGRzNzFEZXByZWNhdGlvbldhcm5pbmciLCJlbWl0dGVkIiwiZW1pdCIsInByb2Nlc3MiLCJlbWl0V2FybmluZyIsInR5cGUiLCJjb2RlIiwiVG9rZW5IYW5kbGVyIiwib25JbmZvTWVzc2FnZSIsIm9uRXJyb3JNZXNzYWdlIiwib25TU1BJIiwib25EYXRhYmFzZUNoYW5nZSIsIm9uTGFuZ3VhZ2VDaGFuZ2UiLCJvbkNoYXJzZXRDaGFuZ2UiLCJvblNxbENvbGxhdGlvbkNoYW5nZSIsIm9uUm91dGluZ0NoYW5nZSIsIm9uUGFja2V0U2l6ZUNoYW5nZSIsIm9uUmVzZXRDb25uZWN0aW9uIiwib25CZWdpblRyYW5zYWN0aW9uIiwib25Db21taXRUcmFuc2FjdGlvbiIsIm9uUm9sbGJhY2tUcmFuc2FjdGlvbiIsIm9uRmVkQXV0aEluZm8iLCJvbkZlYXR1cmVFeHRBY2siLCJvbkxvZ2luQWNrIiwib25Db2xNZXRhZGF0YSIsIm9uVGFiTmFtZSIsIm9uQ29sSW5mbyIsIm9uT3JkZXIiLCJvblJvdyIsIm9uUmV0dXJuU3RhdHVzIiwib25SZXR1cm5WYWx1ZSIsIm9uRG9uZVByb2MiLCJvbkRvbmVJblByb2MiLCJvbkRvbmUiLCJvbkRhdGFiYXNlTWlycm9yaW5nUGFydG5lciIsIkluaXRpYWxTcWxUb2tlbkhhbmRsZXIiLCJjb25uZWN0aW9uIiwibmV3VmFsdWUiLCJkYXRhYmFzZUNvbGxhdGlvbiIsIm1lc3NhZ2VJbyIsInBhY2tldFNpemUiLCJ0cmFuc2FjdGlvbkRlc2NyaXB0b3JzIiwicHVzaCIsImluVHJhbnNhY3Rpb24iLCJsZW5ndGgiLCJjbG9zZSIsIkxvZ2luN1Rva2VuSGFuZGxlciIsImxvZ2luQWNrUmVjZWl2ZWQiLCJsb2dpbkVycm9yIiwidW5kZWZpbmVkIiwiZXJyb3IiLCJDb25uZWN0aW9uRXJyb3IiLCJtZXNzYWdlIiwiaXNMb2dpbkVycm9yVHJhbnNpZW50IiwidHJhbnNpZW50RXJyb3JMb29rdXAiLCJpc1RyYW5zaWVudEVycm9yIiwibnVtYmVyIiwiY3VyVHJhbnNpZW50UmV0cnlDb3VudCIsImNvbmZpZyIsIm9wdGlvbnMiLCJtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMiLCJpc1RyYW5zaWVudCIsIm50bG1wYWNrZXQiLCJudGxtcGFja2V0QnVmZmVyIiwiZmVkQXV0aEluZm9Ub2tlbiIsImF1dGhlbnRpY2F0aW9uIiwiZmVkQXV0aCIsInV0ZjhTdXBwb3J0IiwidGRzVmVyc2lvbiIsImludGVyZmFjZSIsInNlcnZlciIsImluc3RhbmNlIiwic3BsaXQiLCJyb3V0aW5nRGF0YSIsInBvcnQiLCJSZXF1ZXN0VG9rZW5IYW5kbGVyIiwicmVxdWVzdCIsImVycm9ycyIsImNhbmNlbGVkIiwiUmVxdWVzdEVycm9yIiwic3RhdGUiLCJjbGFzcyIsInNlcnZlck5hbWUiLCJwcm9jTmFtZSIsImxpbmVOdW1iZXIiLCJSZXF1ZXN0IiwiQWdncmVnYXRlRXJyb3IiLCJ1c2VDb2x1bW5OYW1lcyIsImNvbHVtbnMiLCJPYmplY3QiLCJjcmVhdGUiLCJqIiwibGVuIiwiY29sIiwiY29sTmFtZSIsInRhYmxlTmFtZXMiLCJvcmRlckNvbHVtbnMiLCJyb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbiIsInJvd3MiLCJyb3dDb2xsZWN0aW9uT25Eb25lIiwicnN0IiwicHJvY1JldHVyblN0YXR1c1ZhbHVlIiwidmFsdWUiLCJwYXJhbU5hbWUiLCJtZXRhZGF0YSIsInNxbEVycm9yIiwicm93Q291bnQiLCJtb3JlIiwiQXR0ZW50aW9uVG9rZW5IYW5kbGVyIiwiYXR0ZW50aW9uUmVjZWl2ZWQiLCJhdHRlbnRpb24iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vaGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29ubmVjdGlvbiBmcm9tICcuLi9jb25uZWN0aW9uJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yLCBSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHsgdHlwZSBDb2x1bW5NZXRhZGF0YSB9IGZyb20gJy4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyJztcbmltcG9ydCB7XG4gIEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbixcbiAgQ2hhcnNldEVudkNoYW5nZVRva2VuLFxuICBDb2xJbmZvVG9rZW4sXG4gIENvbGxhdGlvbkNoYW5nZVRva2VuLFxuICBDb2xNZXRhZGF0YVRva2VuLFxuICBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBEYXRhYmFzZUVudkNoYW5nZVRva2VuLFxuICBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbixcbiAgRG9uZUluUHJvY1Rva2VuLFxuICBEb25lUHJvY1Rva2VuLFxuICBEb25lVG9rZW4sXG4gIEVycm9yTWVzc2FnZVRva2VuLFxuICBGZWF0dXJlRXh0QWNrVG9rZW4sXG4gIEZlZEF1dGhJbmZvVG9rZW4sXG4gIEluZm9NZXNzYWdlVG9rZW4sXG4gIExhbmd1YWdlRW52Q2hhbmdlVG9rZW4sXG4gIExvZ2luQWNrVG9rZW4sXG4gIE5CQ1Jvd1Rva2VuLFxuICBPcmRlclRva2VuLFxuICBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4sXG4gIFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSZXR1cm5TdGF0dXNUb2tlbixcbiAgUmV0dXJuVmFsdWVUb2tlbixcbiAgUm9sbGJhY2tUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSb3V0aW5nRW52Q2hhbmdlVG9rZW4sXG4gIFJvd1Rva2VuLFxuICBTU1BJVG9rZW4sXG4gIFRhYk5hbWVUb2tlbixcbiAgVG9rZW5cbn0gZnJvbSAnLi90b2tlbic7XG5pbXBvcnQgQnVsa0xvYWQgZnJvbSAnLi4vYnVsay1sb2FkJztcblxuZXhwb3J0IGNsYXNzIFVuZXhwZWN0ZWRUb2tlbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihoYW5kbGVyOiBUb2tlbkhhbmRsZXIsIHRva2VuOiBUb2tlbikge1xuICAgIHN1cGVyKCdVbmV4cGVjdGVkIHRva2VuIGAnICsgdG9rZW4ubmFtZSArICdgIGluIGAnICsgaGFuZGxlci5jb25zdHJ1Y3Rvci5uYW1lICsgJ2AnKTtcbiAgfVxufVxuXG4vKipcbiAqIEVtaXRzIGEgd2FybmluZyAob25jZSBwZXIgcHJvY2Vzcykgd2hlbiBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWRcbiAqIHVzaW5nIFREUyA3LjEuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHRkczcxRGVwcmVjYXRpb25XYXJuaW5nID0ge1xuICBlbWl0dGVkOiBmYWxzZSxcblxuICBlbWl0KCkge1xuICAgIGlmICh0aGlzLmVtaXR0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbWl0dGVkID0gdHJ1ZTtcblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoXG4gICAgICAnU3VwcG9ydCBmb3IgVERTIDcuMSAodXNlZCBieSBTUUwgU2VydmVyIDIwMDApIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIGB0ZWRpb3VzYC4nLFxuICAgICAgeyB0eXBlOiAnRGVwcmVjYXRpb25XYXJuaW5nJywgY29kZTogJ1RFRElPVVNfREVQX1REUzcxJyB9XG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNsYXNzIFRva2VuSGFuZGxlciB7XG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uU1NQSSh0b2tlbjogU1NQSVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25MYW5ndWFnZUNoYW5nZSh0b2tlbjogTGFuZ3VhZ2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblNxbENvbGxhdGlvbkNoYW5nZSh0b2tlbjogQ29sbGF0aW9uQ2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Sb3V0aW5nQ2hhbmdlKHRva2VuOiBSb3V0aW5nRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25SZXNldENvbm5lY3Rpb24odG9rZW46IFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQmVnaW5UcmFuc2FjdGlvbih0b2tlbjogQmVnaW5UcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQ29tbWl0VHJhbnNhY3Rpb24odG9rZW46IENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Sb2xsYmFja1RyYW5zYWN0aW9uKHRva2VuOiBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25GZWRBdXRoSW5mbyh0b2tlbjogRmVkQXV0aEluZm9Ub2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkZlYXR1cmVFeHRBY2sodG9rZW46IEZlYXR1cmVFeHRBY2tUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkxvZ2luQWNrKHRva2VuOiBMb2dpbkFja1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQ29sTWV0YWRhdGEodG9rZW46IENvbE1ldGFkYXRhVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25UYWJOYW1lKHRva2VuOiBUYWJOYW1lVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Db2xJbmZvKHRva2VuOiBDb2xJbmZvVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25PcmRlcih0b2tlbjogT3JkZXJUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJldHVyblN0YXR1cyh0b2tlbjogUmV0dXJuU3RhdHVzVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25SZXR1cm5WYWx1ZSh0b2tlbjogUmV0dXJuVmFsdWVUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkRvbmVQcm9jKHRva2VuOiBEb25lUHJvY1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyKHRva2VuOiBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byB0aGUgaW5pdGlhbCBTUUwgQmF0Y2ggcmVxdWVzdFxuICogdGhhdCBzZXRzIHVwIGRpZmZlcmVudCBjb25uZWN0aW9uIHNldHRpbmdzLlxuICovXG5leHBvcnQgY2xhc3MgSW5pdGlhbFNxbFRva2VuSGFuZGxlciBleHRlbmRzIFRva2VuSGFuZGxlciB7XG4gIGRlY2xhcmUgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uOiBDb25uZWN0aW9uKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gIH1cblxuICBvbkluZm9NZXNzYWdlKHRva2VuOiBJbmZvTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2luZm9NZXNzYWdlJywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yTWVzc2FnZScsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZGF0YWJhc2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2xhbmd1YWdlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25DaGFyc2V0Q2hhbmdlKHRva2VuOiBDaGFyc2V0RW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnY2hhcnNldENoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5kYXRhYmFzZUNvbGxhdGlvbiA9IHRva2VuLm5ld1ZhbHVlO1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24ubWVzc2FnZUlvLnBhY2tldFNpemUodG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25CZWdpblRyYW5zYWN0aW9uKHRva2VuOiBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5wdXNoKHRva2VuLm5ld1ZhbHVlKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IHRydWU7XG4gIH1cblxuICBvbkNvbW1pdFRyYW5zYWN0aW9uKHRva2VuOiBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoID0gMTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgb25Sb2xsYmFja1RyYW5zYWN0aW9uKHRva2VuOiBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIC8vIEFuIG91dGVybW9zdCB0cmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2suIFJlc2V0IHRoZSB0cmFuc2FjdGlvbiBjb3VudGVyXG4gICAgdGhpcy5jb25uZWN0aW9uLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncm9sbGJhY2tUcmFuc2FjdGlvbicpO1xuICB9XG5cbiAgb25Db2xNZXRhZGF0YSh0b2tlbjogQ29sTWV0YWRhdGFUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihcIlJlY2VpdmVkICdjb2x1bW5NZXRhZGF0YScgd2hlbiBubyBzcWxSZXF1ZXN0IGlzIGluIHByb2dyZXNzXCIpKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIG9uT3JkZXIodG9rZW46IE9yZGVyVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoXCJSZWNlaXZlZCAnb3JkZXInIHdoZW4gbm8gc3FsUmVxdWVzdCBpcyBpbiBwcm9ncmVzc1wiKSk7XG4gICAgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihcIlJlY2VpdmVkICdyb3cnIHdoZW4gbm8gc3FsUmVxdWVzdCBpcyBpbiBwcm9ncmVzc1wiKSk7XG4gICAgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBvblJldHVyblN0YXR1cyh0b2tlbjogUmV0dXJuU3RhdHVzVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblJldHVyblZhbHVlKHRva2VuOiBSZXR1cm5WYWx1ZVRva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lUHJvYyh0b2tlbjogRG9uZVByb2NUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblJlc2V0Q29ubmVjdGlvbih0b2tlbjogUmVzZXRDb25uZWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncmVzZXRDb25uZWN0aW9uJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byBhIExvZ2luNyBtZXNzYWdlLlxuICovXG5leHBvcnQgY2xhc3MgTG9naW43VG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuXG4gIGRlY2xhcmUgZmVkQXV0aEluZm9Ub2tlbjogRmVkQXV0aEluZm9Ub2tlbiB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSByb3V0aW5nRGF0YTogeyBzZXJ2ZXI6IHN0cmluZywgcG9ydDogbnVtYmVyLCBpbnN0YW5jZTogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG5cbiAgZGVjbGFyZSBsb2dpbkFja1JlY2VpdmVkOiBib29sZWFuO1xuXG4gIGRlY2xhcmUgbG9naW5FcnJvcjogQ29ubmVjdGlvbkVycm9yIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9naW5BY2tSZWNlaXZlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgdGhpcy5sb2dpbkVycm9yID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgb25JbmZvTWVzc2FnZSh0b2tlbjogSW5mb01lc3NhZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdpbmZvTWVzc2FnZScsIHRva2VuKTtcbiAgfVxuXG4gIG9uRXJyb3JNZXNzYWdlKHRva2VuOiBFcnJvck1lc3NhZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvck1lc3NhZ2UnLCB0b2tlbik7XG5cbiAgICBjb25zdCBlcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IodG9rZW4ubWVzc2FnZSwgJ0VMT0dJTicpO1xuXG4gICAgY29uc3QgaXNMb2dpbkVycm9yVHJhbnNpZW50ID0gdGhpcy5jb25uZWN0aW9uLnRyYW5zaWVudEVycm9yTG9va3VwLmlzVHJhbnNpZW50RXJyb3IodG9rZW4ubnVtYmVyKTtcbiAgICBpZiAoaXNMb2dpbkVycm9yVHJhbnNpZW50ICYmIHRoaXMuY29ubmVjdGlvbi5jdXJUcmFuc2llbnRSZXRyeUNvdW50ICE9PSB0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzKSB7XG4gICAgICBlcnJvci5pc1RyYW5zaWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5sb2dpbkVycm9yID0gZXJyb3I7XG4gIH1cblxuICBvblNTUEkodG9rZW46IFNTUElUb2tlbikge1xuICAgIGlmICh0b2tlbi5udGxtcGFja2V0KSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ubnRsbXBhY2tldCA9IHRva2VuLm50bG1wYWNrZXQ7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ubnRsbXBhY2tldEJ1ZmZlciA9IHRva2VuLm50bG1wYWNrZXRCdWZmZXI7XG4gICAgfVxuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyKHRva2VuOiBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXInLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2xhbmd1YWdlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25DaGFyc2V0Q2hhbmdlKHRva2VuOiBDaGFyc2V0RW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnY2hhcnNldENoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5kYXRhYmFzZUNvbGxhdGlvbiA9IHRva2VuLm5ld1ZhbHVlO1xuICB9XG5cbiAgb25GZWRBdXRoSW5mbyh0b2tlbjogRmVkQXV0aEluZm9Ub2tlbikge1xuICAgIHRoaXMuZmVkQXV0aEluZm9Ub2tlbiA9IHRva2VuO1xuICB9XG5cbiAgb25GZWF0dXJlRXh0QWNrKHRva2VuOiBGZWF0dXJlRXh0QWNrVG9rZW4pIHtcbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0aW9uIH0gPSB0aGlzLmNvbm5lY3Rpb24uY29uZmlnO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW4nIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bScgfHwgYXV0aGVudGljYXRpb24udHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlJyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnKSB7XG4gICAgICBpZiAodG9rZW4uZmVkQXV0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ0RpZCBub3QgcmVjZWl2ZSBBY3RpdmUgRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uIGFja25vd2xlZGdlbWVudCcpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi5mZWRBdXRoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aGlzLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKGBBY3RpdmUgRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uIGFja25vd2xlZGdtZW50IGZvciAke2F1dGhlbnRpY2F0aW9uLnR5cGV9IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBpbmNsdWRlcyBleHRyYSBkYXRhYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0b2tlbi5mZWRBdXRoID09PSB1bmRlZmluZWQgJiYgdG9rZW4udXRmOFN1cHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignUmVjZWl2ZWQgYWNrbm93bGVkZ2VtZW50IGZvciB1bmtub3duIGZlYXR1cmUnKTtcbiAgICB9IGVsc2UgaWYgKHRva2VuLmZlZEF1dGgpIHtcbiAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ0RpZCBub3QgcmVxdWVzdCBBY3RpdmUgRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uLCBidXQgcmVjZWl2ZWQgdGhlIGFja25vd2xlZGdtZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgb25Mb2dpbkFjayh0b2tlbjogTG9naW5BY2tUb2tlbikge1xuICAgIGlmICghdG9rZW4udGRzVmVyc2lvbikge1xuICAgICAgLy8gdW5zdXBwb3J0ZWQgVERTIHZlcnNpb25cbiAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ1NlcnZlciByZXNwb25kZWQgd2l0aCB1bmtub3duIFREUyB2ZXJzaW9uLicsICdFVERTJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0b2tlbi5pbnRlcmZhY2UpIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIGludGVyZmFjZVxuICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignU2VydmVyIHJlc3BvbmRlZCB3aXRoIHVuc3VwcG9ydGVkIGludGVyZmFjZS4nLCAnRUlOVEVSRkFDRU5PVFNVUFAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB1c2UgbmVnb3RpYXRlZCB2ZXJzaW9uXG4gICAgdGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPSB0b2tlbi50ZHNWZXJzaW9uO1xuXG4gICAgaWYgKHRva2VuLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgdGRzNzFEZXByZWNhdGlvbldhcm5pbmcuZW1pdCgpO1xuICAgIH1cblxuICAgIHRoaXMubG9naW5BY2tSZWNlaXZlZCA9IHRydWU7XG4gIH1cblxuICBvblJvdXRpbmdDaGFuZ2UodG9rZW46IFJvdXRpbmdFbnZDaGFuZ2VUb2tlbikge1xuICAgIC8vIFNwbGl0cyBpbnN0YW5jZSBuYW1lIGF0dGFjaGVkIHRvIHRoZSByZWRpcmVjdCB1cmwuIEUuZy4sIHJlZGlyZWN0LmRiLm5ldFxcaW5zdGFuY2UxIC0tPiBbcmVkaXJlY3QuZGIubmV0LCBpbnN0YW5jZTFdXG4gICAgY29uc3QgWyBzZXJ2ZXIsIGluc3RhbmNlIF0gPSB0b2tlbi5uZXdWYWx1ZS5zZXJ2ZXIuc3BsaXQoJ1xcXFwnKTtcblxuICAgIHRoaXMucm91dGluZ0RhdGEgPSB7XG4gICAgICBzZXJ2ZXIsIHBvcnQ6IHRva2VuLm5ld1ZhbHVlLnBvcnQsIGluc3RhbmNlXG4gICAgfTtcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5tZXNzYWdlSW8ucGFja2V0U2l6ZSh0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byBhIFJQQyBSZXF1ZXN0LFxuICogYSBTUUwgQmF0Y2ggUmVxdWVzdCwgYSBCdWxrIExvYWQgQkNQIFJlcXVlc3Qgb3IgYSBUcmFuc2FjdGlvbiBNYW5hZ2VyIFJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0VG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuICBkZWNsYXJlIHJlcXVlc3Q6IFJlcXVlc3QgfCBCdWxrTG9hZDtcbiAgZGVjbGFyZSBlcnJvcnM6IFJlcXVlc3RFcnJvcltdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24sIHJlcXVlc3Q6IFJlcXVlc3QgfCBCdWxrTG9hZCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgfVxuXG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnaW5mb01lc3NhZ2UnLCB0b2tlbik7XG4gIH1cblxuICBvbkVycm9yTWVzc2FnZSh0b2tlbjogRXJyb3JNZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3JNZXNzYWdlJywgdG9rZW4pO1xuXG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFJlcXVlc3RFcnJvcih0b2tlbi5tZXNzYWdlLCAnRVJFUVVFU1QnKTtcblxuICAgICAgZXJyb3IubnVtYmVyID0gdG9rZW4ubnVtYmVyO1xuICAgICAgZXJyb3Iuc3RhdGUgPSB0b2tlbi5zdGF0ZTtcbiAgICAgIGVycm9yLmNsYXNzID0gdG9rZW4uY2xhc3M7XG4gICAgICBlcnJvci5zZXJ2ZXJOYW1lID0gdG9rZW4uc2VydmVyTmFtZTtcbiAgICAgIGVycm9yLnByb2NOYW1lID0gdG9rZW4ucHJvY05hbWU7XG4gICAgICBlcnJvci5saW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjtcbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgdGhpcy5yZXF1ZXN0LmVycm9yID0gZXJyb3I7XG4gICAgICBpZiAodGhpcy5yZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCAmJiB0aGlzLmVycm9ycy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5lcnJvciA9IG5ldyBBZ2dyZWdhdGVFcnJvcih0aGlzLmVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uTGFuZ3VhZ2VDaGFuZ2UodG9rZW46IExhbmd1YWdlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnbGFuZ3VhZ2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdjaGFyc2V0Q2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25TcWxDb2xsYXRpb25DaGFuZ2UodG9rZW46IENvbGxhdGlvbkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmRhdGFiYXNlQ29sbGF0aW9uID0gdG9rZW4ubmV3VmFsdWU7XG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5tZXNzYWdlSW8ucGFja2V0U2l6ZSh0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkJlZ2luVHJhbnNhY3Rpb24odG9rZW46IEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLnB1c2godG9rZW4ubmV3VmFsdWUpO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIG9uQ29tbWl0VHJhbnNhY3Rpb24odG9rZW46IENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICBvblJvbGxiYWNrVHJhbnNhY3Rpb24odG9rZW46IFJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aCA9IDE7XG4gICAgLy8gQW4gb3V0ZXJtb3N0IHRyYW5zYWN0aW9uIHdhcyByb2xsZWQgYmFjay4gUmVzZXQgdGhlIHRyYW5zYWN0aW9uIGNvdW50ZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdyb2xsYmFja1RyYW5zYWN0aW9uJyk7XG4gIH1cblxuICBvbkNvbE1ldGFkYXRhKHRva2VuOiBDb2xNZXRhZGF0YVRva2VuKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMudXNlQ29sdW1uTmFtZXMpIHtcbiAgICAgICAgY29uc3QgY29sdW1uczogeyBba2V5OiBzdHJpbmddOiBDb2x1bW5NZXRhZGF0YSB9ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICBmb3IgKGxldCBqID0gMCwgbGVuID0gdG9rZW4uY29sdW1ucy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGNvbnN0IGNvbCA9IHRva2VuLmNvbHVtbnNbal07XG4gICAgICAgICAgaWYgKGNvbHVtbnNbY29sLmNvbE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbHVtbnNbY29sLmNvbE5hbWVdID0gY29sO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdjb2x1bW5NZXRhZGF0YScsIGNvbHVtbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2NvbHVtbk1ldGFkYXRhJywgdG9rZW4uY29sdW1ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25UYWJOYW1lKHRva2VuOiBUYWJOYW1lVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ3RhYk5hbWUnLCB0b2tlbi50YWJsZU5hbWVzKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbEluZm8odG9rZW46IENvbEluZm9Ub2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnY29sSW5mbycsIHRva2VuLmNvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIG9uT3JkZXIodG9rZW46IE9yZGVyVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ29yZGVyJywgdG9rZW4ub3JkZXJDb2x1bW5zKTtcbiAgICB9XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dzIS5wdXNoKHRva2VuLmNvbHVtbnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmUpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJzdCEucHVzaCh0b2tlbi5jb2x1bW5zKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ3JvdycsIHRva2VuLmNvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIG9uUmV0dXJuU3RhdHVzKHRva2VuOiBSZXR1cm5TdGF0dXNUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICAvLyBLZWVwIHZhbHVlIGZvciBwYXNzaW5nIGluICdkb25lUHJvYycgZXZlbnQuXG4gICAgICB0aGlzLmNvbm5lY3Rpb24ucHJvY1JldHVyblN0YXR1c1ZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgfVxuICB9XG5cbiAgb25SZXR1cm5WYWx1ZSh0b2tlbjogUmV0dXJuVmFsdWVUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgncmV0dXJuVmFsdWUnLCB0b2tlbi5wYXJhbU5hbWUsIHRva2VuLnZhbHVlLCB0b2tlbi5tZXRhZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgb25Eb25lUHJvYyh0b2tlbjogRG9uZVByb2NUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodG9rZW4uc3FsRXJyb3IgJiYgIXRoaXMucmVxdWVzdC5lcnJvcikge1xuICAgICAgICAvLyBjaGVjayBpZiB0aGUgRE9ORV9FUlJPUiBmbGFncyB3YXMgc2V0LCBidXQgYW4gRVJST1IgdG9rZW4gd2FzIG5vdCBzZW50LlxuICAgICAgICB0aGlzLnJlcXVlc3QuZXJyb3IgPSBuZXcgUmVxdWVzdEVycm9yKCdBbiB1bmtub3duIGVycm9yIGhhcyBvY2N1cnJlZC4nLCAnVU5LTk9XTicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnZG9uZVByb2MnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5jb25uZWN0aW9uLnByb2NSZXR1cm5TdGF0dXNWYWx1ZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIHRoaXMuY29ubmVjdGlvbi5wcm9jUmV0dXJuU3RhdHVzVmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Eb25lSW5Qcm9jKHRva2VuOiBEb25lSW5Qcm9jVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2RvbmVJblByb2MnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgaWYgKHRva2VuLnNxbEVycm9yICYmICF0aGlzLnJlcXVlc3QuZXJyb3IpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIERPTkVfRVJST1IgZmxhZ3Mgd2FzIHNldCwgYnV0IGFuIEVSUk9SIHRva2VuIHdhcyBub3Qgc2VudC5cbiAgICAgICAgdGhpcy5yZXF1ZXN0LmVycm9yID0gbmV3IFJlcXVlc3RFcnJvcignQW4gdW5rbm93biBlcnJvciBoYXMgb2NjdXJyZWQuJywgJ1VOS05PV04nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2RvbmUnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25SZXNldENvbm5lY3Rpb24odG9rZW46IFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ3Jlc2V0Q29ubmVjdGlvbicpO1xuICB9XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgYXR0ZW50aW9uIGFja25vd2xlZGdlbWVudCBtZXNzYWdlLlxuICpcbiAqIFRoaXMgbWVzc2FnZSBvbmx5IGNvbnRhaW5zIGEgYERPTkVgIHRva2VuIHRoYXQgYWNrbm93bGVkZ2VzXG4gKiB0aGF0IHRoZSBhdHRlbnRpb24gbWVzc2FnZSB3YXMgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlci5cbiAqL1xuZXhwb3J0IGNsYXNzIEF0dGVudGlvblRva2VuSGFuZGxlciBleHRlbmRzIFRva2VuSGFuZGxlciB7XG4gIGRlY2xhcmUgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcbiAgZGVjbGFyZSByZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBhbiBhdHRlbnRpb24gYWNrbm93bGVkZ2VtZW50IHdhcyByZWNlaXZlZC5cbiAgICovXG4gIGRlY2xhcmUgYXR0ZW50aW9uUmVjZWl2ZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbjogQ29ubmVjdGlvbiwgcmVxdWVzdDogUmVxdWVzdCB8IEJ1bGtMb2FkKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcblxuICAgIHRoaXMuYXR0ZW50aW9uUmVjZWl2ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgaWYgKHRva2VuLmF0dGVudGlvbikge1xuICAgICAgdGhpcy5hdHRlbnRpb25SZWNlaXZlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFB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
|
package/lib/token/handler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler.js","names":["_request","_interopRequireDefault","require","_errors","e","__esModule","default","UnexpectedTokenError","Error","constructor","handler","token","name","exports","tds71DeprecationWarning","emitted","emit","process","emitWarning","type","code","TokenHandler","onInfoMessage","onErrorMessage","onSSPI","onDatabaseChange","onLanguageChange","onCharsetChange","onSqlCollationChange","onRoutingChange","onPacketSizeChange","onResetConnection","onBeginTransaction","onCommitTransaction","onRollbackTransaction","onFedAuthInfo","onFeatureExtAck","onLoginAck","onColMetadata","onOrder","onRow","onReturnStatus","onReturnValue","onDoneProc","onDoneInProc","onDone","onDatabaseMirroringPartner","InitialSqlTokenHandler","connection","newValue","databaseCollation","messageIo","packetSize","transactionDescriptors","push","inTransaction","length","close","Login7TokenHandler","loginAckReceived","loginError","undefined","error","ConnectionError","message","isLoginErrorTransient","transientErrorLookup","isTransientError","number","curTransientRetryCount","config","options","maxRetriesOnTransientErrors","isTransient","ntlmpacket","ntlmpacketBuffer","fedAuthInfoToken","authentication","fedAuth","utf8Support","tdsVersion","interface","server","instance","split","routingData","port","RequestTokenHandler","request","errors","canceled","RequestError","state","class","serverName","procName","lineNumber","Request","AggregateError","useColumnNames","columns","Object","create","j","len","col","colName","orderColumns","rowCollectionOnRequestCompletion","rows","rowCollectionOnDone","rst","procReturnStatusValue","value","paramName","metadata","sqlError","rowCount","more","AttentionTokenHandler","attentionReceived","attention"],"sources":["../../src/token/handler.ts"],"sourcesContent":["import Connection from '../connection';\nimport Request from '../request';\nimport { ConnectionError, RequestError } from '../errors';\nimport { type ColumnMetadata } from './colmetadata-token-parser';\nimport {\n BeginTransactionEnvChangeToken,\n CharsetEnvChangeToken,\n CollationChangeToken,\n ColMetadataToken,\n CommitTransactionEnvChangeToken,\n DatabaseEnvChangeToken,\n DatabaseMirroringPartnerEnvChangeToken,\n DoneInProcToken,\n DoneProcToken,\n DoneToken,\n ErrorMessageToken,\n FeatureExtAckToken,\n FedAuthInfoToken,\n InfoMessageToken,\n LanguageEnvChangeToken,\n LoginAckToken,\n NBCRowToken,\n OrderToken,\n PacketSizeEnvChangeToken,\n ResetConnectionEnvChangeToken,\n ReturnStatusToken,\n ReturnValueToken,\n RollbackTransactionEnvChangeToken,\n RoutingEnvChangeToken,\n RowToken,\n SSPIToken,\n Token\n} from './token';\nimport BulkLoad from '../bulk-load';\n\nexport class UnexpectedTokenError extends Error {\n constructor(handler: TokenHandler, token: Token) {\n super('Unexpected token `' + token.name + '` in `' + handler.constructor.name + '`');\n }\n}\n\n/**\n * Emits a warning (once per process) when a connection is established\n * using TDS 7.1.\n *\n * @private\n */\nexport const tds71DeprecationWarning = {\n emitted: false,\n\n emit() {\n if (this.emitted) {\n return;\n }\n this.emitted = true;\n\n process.emitWarning(\n 'Support for TDS 7.1 (used by SQL Server 2000) is deprecated and will be removed in a future version of `tedious`.',\n { type: 'DeprecationWarning', code: 'TEDIOUS_DEP_TDS71' }\n );\n }\n};\n\nexport class TokenHandler {\n onInfoMessage(token: InfoMessageToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onSSPI(token: SSPIToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onRoutingChange(token: RoutingEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onResetConnection(token: ResetConnectionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onBeginTransaction(token: BeginTransactionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onCommitTransaction(token: CommitTransactionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onRollbackTransaction(token: RollbackTransactionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onFedAuthInfo(token: FedAuthInfoToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onFeatureExtAck(token: FeatureExtAckToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onLoginAck(token: LoginAckToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onColMetadata(token: ColMetadataToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onOrder(token: OrderToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onRow(token: RowToken | NBCRowToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onReturnStatus(token: ReturnStatusToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onReturnValue(token: ReturnValueToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDoneProc(token: DoneProcToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDoneInProc(token: DoneInProcToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDone(token: DoneToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDatabaseMirroringPartner(token: DatabaseMirroringPartnerEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n}\n\n/**\n * A handler for tokens received in the response message to the initial SQL Batch request\n * that sets up different connection settings.\n */\nexport class InitialSqlTokenHandler extends TokenHandler {\n declare connection: Connection;\n\n constructor(connection: Connection) {\n super();\n\n this.connection = connection;\n }\n\n onInfoMessage(token: InfoMessageToken) {\n this.connection.emit('infoMessage', token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n this.connection.emit('errorMessage', token);\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n this.connection.emit('databaseChange', token.newValue);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n this.connection.emit('languageChange', token.newValue);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n this.connection.emit('charsetChange', token.newValue);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n this.connection.databaseCollation = token.newValue;\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n this.connection.messageIo.packetSize(token.newValue);\n }\n\n onBeginTransaction(token: BeginTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.push(token.newValue);\n this.connection.inTransaction = true;\n }\n\n onCommitTransaction(token: CommitTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n this.connection.inTransaction = false;\n }\n\n onRollbackTransaction(token: RollbackTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n // An outermost transaction was rolled back. Reset the transaction counter\n this.connection.inTransaction = false;\n this.connection.emit('rollbackTransaction');\n }\n\n onColMetadata(token: ColMetadataToken) {\n this.connection.emit('error', new Error(\"Received 'columnMetadata' when no sqlRequest is in progress\"));\n this.connection.close();\n }\n\n onOrder(token: OrderToken) {\n this.connection.emit('error', new Error(\"Received 'order' when no sqlRequest is in progress\"));\n this.connection.close();\n }\n\n onRow(token: RowToken | NBCRowToken) {\n this.connection.emit('error', new Error(\"Received 'row' when no sqlRequest is in progress\"));\n this.connection.close();\n }\n\n onReturnStatus(token: ReturnStatusToken) {\n // Do nothing\n }\n\n onReturnValue(token: ReturnValueToken) {\n // Do nothing\n }\n\n onDoneProc(token: DoneProcToken) {\n // Do nothing\n }\n\n onDoneInProc(token: DoneInProcToken) {\n // Do nothing\n }\n\n onDone(token: DoneToken) {\n // Do nothing\n }\n\n onResetConnection(token: ResetConnectionEnvChangeToken) {\n this.connection.emit('resetConnection');\n }\n}\n\n/**\n * A handler for tokens received in the response message to a Login7 message.\n */\nexport class Login7TokenHandler extends TokenHandler {\n declare connection: Connection;\n\n declare fedAuthInfoToken: FedAuthInfoToken | undefined;\n declare routingData: { server: string, port: number, instance: string } | undefined;\n\n declare loginAckReceived: boolean;\n\n declare loginError: ConnectionError | undefined;\n\n constructor(connection: Connection) {\n super();\n this.loginAckReceived = false;\n this.connection = connection;\n this.loginError = undefined;\n }\n\n onInfoMessage(token: InfoMessageToken) {\n this.connection.emit('infoMessage', token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n this.connection.emit('errorMessage', token);\n\n const error = new ConnectionError(token.message, 'ELOGIN');\n\n const isLoginErrorTransient = this.connection.transientErrorLookup.isTransientError(token.number);\n if (isLoginErrorTransient && this.connection.curTransientRetryCount !== this.connection.config.options.maxRetriesOnTransientErrors) {\n error.isTransient = true;\n }\n\n this.loginError = error;\n }\n\n onSSPI(token: SSPIToken) {\n if (token.ntlmpacket) {\n this.connection.ntlmpacket = token.ntlmpacket;\n this.connection.ntlmpacketBuffer = token.ntlmpacketBuffer;\n }\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n this.connection.emit('databaseChange', token.newValue);\n }\n\n onDatabaseMirroringPartner(token: DatabaseMirroringPartnerEnvChangeToken) {\n this.connection.emit('databaseMirroringPartner', token.newValue);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n this.connection.emit('languageChange', token.newValue);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n this.connection.emit('charsetChange', token.newValue);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n this.connection.databaseCollation = token.newValue;\n }\n\n onFedAuthInfo(token: FedAuthInfoToken) {\n this.fedAuthInfoToken = token;\n }\n\n onFeatureExtAck(token: FeatureExtAckToken) {\n const { authentication } = this.connection.config;\n\n if (authentication.type === 'azure-active-directory-password' || authentication.type === 'azure-active-directory-access-token' || authentication.type === 'azure-active-directory-msi-vm' || authentication.type === 'azure-active-directory-msi-app-service' || authentication.type === 'azure-active-directory-service-principal-secret' || authentication.type === 'azure-active-directory-default') {\n if (token.fedAuth === undefined) {\n this.loginError = new ConnectionError('Did not receive Active Directory authentication acknowledgement');\n } else if (token.fedAuth.length !== 0) {\n this.loginError = new ConnectionError(`Active Directory authentication acknowledgment for ${authentication.type} authentication method includes extra data`);\n }\n } else if (token.fedAuth === undefined && token.utf8Support === undefined) {\n this.loginError = new ConnectionError('Received acknowledgement for unknown feature');\n } else if (token.fedAuth) {\n this.loginError = new ConnectionError('Did not request Active Directory authentication, but received the acknowledgment');\n }\n }\n\n onLoginAck(token: LoginAckToken) {\n if (!token.tdsVersion) {\n // unsupported TDS version\n this.loginError = new ConnectionError('Server responded with unknown TDS version.', 'ETDS');\n return;\n }\n\n if (!token.interface) {\n // unsupported interface\n this.loginError = new ConnectionError('Server responded with unsupported interface.', 'EINTERFACENOTSUPP');\n return;\n }\n\n // use negotiated version\n this.connection.config.options.tdsVersion = token.tdsVersion;\n\n if (token.tdsVersion < '7_2') {\n tds71DeprecationWarning.emit();\n }\n\n this.loginAckReceived = true;\n }\n\n onRoutingChange(token: RoutingEnvChangeToken) {\n // Splits instance name attached to the redirect url. E.g., redirect.db.net\\instance1 --> [redirect.db.net, instance1]\n const [ server, instance ] = token.newValue.server.split('\\\\');\n\n this.routingData = {\n server, port: token.newValue.port, instance\n };\n }\n\n onDoneInProc(token: DoneInProcToken) {\n // Do nothing\n }\n\n onDone(token: DoneToken) {\n // Do nothing\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n this.connection.messageIo.packetSize(token.newValue);\n }\n}\n\n/**\n * A handler for tokens received in the response message to a RPC Request,\n * a SQL Batch Request, a Bulk Load BCP Request or a Transaction Manager Request.\n */\nexport class RequestTokenHandler extends TokenHandler {\n declare connection: Connection;\n declare request: Request | BulkLoad;\n declare errors: RequestError[];\n\n constructor(connection: Connection, request: Request | BulkLoad) {\n super();\n\n this.connection = connection;\n this.request = request;\n this.errors = [];\n }\n\n onInfoMessage(token: InfoMessageToken) {\n this.connection.emit('infoMessage', token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n this.connection.emit('errorMessage', token);\n\n if (!this.request.canceled) {\n const error = new RequestError(token.message, 'EREQUEST');\n\n error.number = token.number;\n error.state = token.state;\n error.class = token.class;\n error.serverName = token.serverName;\n error.procName = token.procName;\n error.lineNumber = token.lineNumber;\n this.errors.push(error);\n this.request.error = error;\n if (this.request instanceof Request && this.errors.length > 1) {\n this.request.error = new AggregateError(this.errors);\n }\n }\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n this.connection.emit('databaseChange', token.newValue);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n this.connection.emit('languageChange', token.newValue);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n this.connection.emit('charsetChange', token.newValue);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n this.connection.databaseCollation = token.newValue;\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n this.connection.messageIo.packetSize(token.newValue);\n }\n\n onBeginTransaction(token: BeginTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.push(token.newValue);\n this.connection.inTransaction = true;\n }\n\n onCommitTransaction(token: CommitTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n this.connection.inTransaction = false;\n }\n\n onRollbackTransaction(token: RollbackTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n // An outermost transaction was rolled back. Reset the transaction counter\n this.connection.inTransaction = false;\n this.connection.emit('rollbackTransaction');\n }\n\n onColMetadata(token: ColMetadataToken) {\n if (!this.request.canceled) {\n if (this.connection.config.options.useColumnNames) {\n const columns: { [key: string]: ColumnMetadata } = Object.create(null);\n\n for (let j = 0, len = token.columns.length; j < len; j++) {\n const col = token.columns[j];\n if (columns[col.colName] == null) {\n columns[col.colName] = col;\n }\n }\n\n this.request.emit('columnMetadata', columns);\n } else {\n this.request.emit('columnMetadata', token.columns);\n }\n }\n }\n\n onOrder(token: OrderToken) {\n if (!this.request.canceled) {\n this.request.emit('order', token.orderColumns);\n }\n }\n\n onRow(token: RowToken | NBCRowToken) {\n if (!this.request.canceled) {\n if (this.connection.config.options.rowCollectionOnRequestCompletion) {\n this.request.rows!.push(token.columns);\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst!.push(token.columns);\n }\n\n this.request.emit('row', token.columns);\n }\n }\n\n onReturnStatus(token: ReturnStatusToken) {\n if (!this.request.canceled) {\n // Keep value for passing in 'doneProc' event.\n this.connection.procReturnStatusValue = token.value;\n }\n }\n\n onReturnValue(token: ReturnValueToken) {\n if (!this.request.canceled) {\n this.request.emit('returnValue', token.paramName, token.value, token.metadata);\n }\n }\n\n onDoneProc(token: DoneProcToken) {\n if (!this.request.canceled) {\n if (token.sqlError && !this.request.error) {\n // check if the DONE_ERROR flags was set, but an ERROR token was not sent.\n this.request.error = new RequestError('An unknown error has occurred.', 'UNKNOWN');\n }\n\n this.request.emit('doneProc', token.rowCount, token.more, this.connection.procReturnStatusValue, this.request.rst);\n\n this.connection.procReturnStatusValue = undefined;\n\n if (token.rowCount !== undefined) {\n this.request.rowCount! += token.rowCount;\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst = [];\n }\n }\n }\n\n onDoneInProc(token: DoneInProcToken) {\n if (!this.request.canceled) {\n this.request.emit('doneInProc', token.rowCount, token.more, this.request.rst);\n\n if (token.rowCount !== undefined) {\n this.request.rowCount! += token.rowCount;\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst = [];\n }\n }\n }\n\n onDone(token: DoneToken) {\n if (!this.request.canceled) {\n if (token.sqlError && !this.request.error) {\n // check if the DONE_ERROR flags was set, but an ERROR token was not sent.\n this.request.error = new RequestError('An unknown error has occurred.', 'UNKNOWN');\n }\n\n this.request.emit('done', token.rowCount, token.more, this.request.rst);\n\n if (token.rowCount !== undefined) {\n this.request.rowCount! += token.rowCount;\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst = [];\n }\n }\n }\n\n onResetConnection(token: ResetConnectionEnvChangeToken) {\n this.connection.emit('resetConnection');\n }\n}\n\n/**\n * A handler for the attention acknowledgement message.\n *\n * This message only contains a `DONE` token that acknowledges\n * that the attention message was received by the server.\n */\nexport class AttentionTokenHandler extends TokenHandler {\n declare connection: Connection;\n declare request: Request | BulkLoad;\n\n /**\n * Returns whether an attention acknowledgement was received.\n */\n declare attentionReceived: boolean;\n\n constructor(connection: Connection, request: Request | BulkLoad) {\n super();\n\n this.connection = connection;\n this.request = request;\n\n this.attentionReceived = false;\n }\n\n onDone(token: DoneToken) {\n if (token.attention) {\n this.attentionReceived = true;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"handler.js","names":["_request","_interopRequireDefault","require","_errors","e","__esModule","default","UnexpectedTokenError","Error","constructor","handler","token","name","exports","tds71DeprecationWarning","emitted","emit","process","emitWarning","type","code","TokenHandler","onInfoMessage","onErrorMessage","onSSPI","onDatabaseChange","onLanguageChange","onCharsetChange","onSqlCollationChange","onRoutingChange","onPacketSizeChange","onResetConnection","onBeginTransaction","onCommitTransaction","onRollbackTransaction","onFedAuthInfo","onFeatureExtAck","onLoginAck","onColMetadata","onTabName","onColInfo","onOrder","onRow","onReturnStatus","onReturnValue","onDoneProc","onDoneInProc","onDone","onDatabaseMirroringPartner","InitialSqlTokenHandler","connection","newValue","databaseCollation","messageIo","packetSize","transactionDescriptors","push","inTransaction","length","close","Login7TokenHandler","loginAckReceived","loginError","undefined","error","ConnectionError","message","isLoginErrorTransient","transientErrorLookup","isTransientError","number","curTransientRetryCount","config","options","maxRetriesOnTransientErrors","isTransient","ntlmpacket","ntlmpacketBuffer","fedAuthInfoToken","authentication","fedAuth","utf8Support","tdsVersion","interface","server","instance","split","routingData","port","RequestTokenHandler","request","errors","canceled","RequestError","state","class","serverName","procName","lineNumber","Request","AggregateError","useColumnNames","columns","Object","create","j","len","col","colName","tableNames","orderColumns","rowCollectionOnRequestCompletion","rows","rowCollectionOnDone","rst","procReturnStatusValue","value","paramName","metadata","sqlError","rowCount","more","AttentionTokenHandler","attentionReceived","attention"],"sources":["../../src/token/handler.ts"],"sourcesContent":["import Connection from '../connection';\nimport Request from '../request';\nimport { ConnectionError, RequestError } from '../errors';\nimport { type ColumnMetadata } from './colmetadata-token-parser';\nimport {\n BeginTransactionEnvChangeToken,\n CharsetEnvChangeToken,\n ColInfoToken,\n CollationChangeToken,\n ColMetadataToken,\n CommitTransactionEnvChangeToken,\n DatabaseEnvChangeToken,\n DatabaseMirroringPartnerEnvChangeToken,\n DoneInProcToken,\n DoneProcToken,\n DoneToken,\n ErrorMessageToken,\n FeatureExtAckToken,\n FedAuthInfoToken,\n InfoMessageToken,\n LanguageEnvChangeToken,\n LoginAckToken,\n NBCRowToken,\n OrderToken,\n PacketSizeEnvChangeToken,\n ResetConnectionEnvChangeToken,\n ReturnStatusToken,\n ReturnValueToken,\n RollbackTransactionEnvChangeToken,\n RoutingEnvChangeToken,\n RowToken,\n SSPIToken,\n TabNameToken,\n Token\n} from './token';\nimport BulkLoad from '../bulk-load';\n\nexport class UnexpectedTokenError extends Error {\n constructor(handler: TokenHandler, token: Token) {\n super('Unexpected token `' + token.name + '` in `' + handler.constructor.name + '`');\n }\n}\n\n/**\n * Emits a warning (once per process) when a connection is established\n * using TDS 7.1.\n *\n * @private\n */\nexport const tds71DeprecationWarning = {\n emitted: false,\n\n emit() {\n if (this.emitted) {\n return;\n }\n this.emitted = true;\n\n process.emitWarning(\n 'Support for TDS 7.1 (used by SQL Server 2000) is deprecated and will be removed in a future version of `tedious`.',\n { type: 'DeprecationWarning', code: 'TEDIOUS_DEP_TDS71' }\n );\n }\n};\n\nexport class TokenHandler {\n onInfoMessage(token: InfoMessageToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onSSPI(token: SSPIToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onRoutingChange(token: RoutingEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onResetConnection(token: ResetConnectionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onBeginTransaction(token: BeginTransactionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onCommitTransaction(token: CommitTransactionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onRollbackTransaction(token: RollbackTransactionEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onFedAuthInfo(token: FedAuthInfoToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onFeatureExtAck(token: FeatureExtAckToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onLoginAck(token: LoginAckToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onColMetadata(token: ColMetadataToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onTabName(token: TabNameToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onColInfo(token: ColInfoToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onOrder(token: OrderToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onRow(token: RowToken | NBCRowToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onReturnStatus(token: ReturnStatusToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onReturnValue(token: ReturnValueToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDoneProc(token: DoneProcToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDoneInProc(token: DoneInProcToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDone(token: DoneToken) {\n throw new UnexpectedTokenError(this, token);\n }\n\n onDatabaseMirroringPartner(token: DatabaseMirroringPartnerEnvChangeToken) {\n throw new UnexpectedTokenError(this, token);\n }\n}\n\n/**\n * A handler for tokens received in the response message to the initial SQL Batch request\n * that sets up different connection settings.\n */\nexport class InitialSqlTokenHandler extends TokenHandler {\n declare connection: Connection;\n\n constructor(connection: Connection) {\n super();\n\n this.connection = connection;\n }\n\n onInfoMessage(token: InfoMessageToken) {\n this.connection.emit('infoMessage', token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n this.connection.emit('errorMessage', token);\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n this.connection.emit('databaseChange', token.newValue);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n this.connection.emit('languageChange', token.newValue);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n this.connection.emit('charsetChange', token.newValue);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n this.connection.databaseCollation = token.newValue;\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n this.connection.messageIo.packetSize(token.newValue);\n }\n\n onBeginTransaction(token: BeginTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.push(token.newValue);\n this.connection.inTransaction = true;\n }\n\n onCommitTransaction(token: CommitTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n this.connection.inTransaction = false;\n }\n\n onRollbackTransaction(token: RollbackTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n // An outermost transaction was rolled back. Reset the transaction counter\n this.connection.inTransaction = false;\n this.connection.emit('rollbackTransaction');\n }\n\n onColMetadata(token: ColMetadataToken) {\n this.connection.emit('error', new Error(\"Received 'columnMetadata' when no sqlRequest is in progress\"));\n this.connection.close();\n }\n\n onOrder(token: OrderToken) {\n this.connection.emit('error', new Error(\"Received 'order' when no sqlRequest is in progress\"));\n this.connection.close();\n }\n\n onRow(token: RowToken | NBCRowToken) {\n this.connection.emit('error', new Error(\"Received 'row' when no sqlRequest is in progress\"));\n this.connection.close();\n }\n\n onReturnStatus(token: ReturnStatusToken) {\n // Do nothing\n }\n\n onReturnValue(token: ReturnValueToken) {\n // Do nothing\n }\n\n onDoneProc(token: DoneProcToken) {\n // Do nothing\n }\n\n onDoneInProc(token: DoneInProcToken) {\n // Do nothing\n }\n\n onDone(token: DoneToken) {\n // Do nothing\n }\n\n onResetConnection(token: ResetConnectionEnvChangeToken) {\n this.connection.emit('resetConnection');\n }\n}\n\n/**\n * A handler for tokens received in the response message to a Login7 message.\n */\nexport class Login7TokenHandler extends TokenHandler {\n declare connection: Connection;\n\n declare fedAuthInfoToken: FedAuthInfoToken | undefined;\n declare routingData: { server: string, port: number, instance: string } | undefined;\n\n declare loginAckReceived: boolean;\n\n declare loginError: ConnectionError | undefined;\n\n constructor(connection: Connection) {\n super();\n this.loginAckReceived = false;\n this.connection = connection;\n this.loginError = undefined;\n }\n\n onInfoMessage(token: InfoMessageToken) {\n this.connection.emit('infoMessage', token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n this.connection.emit('errorMessage', token);\n\n const error = new ConnectionError(token.message, 'ELOGIN');\n\n const isLoginErrorTransient = this.connection.transientErrorLookup.isTransientError(token.number);\n if (isLoginErrorTransient && this.connection.curTransientRetryCount !== this.connection.config.options.maxRetriesOnTransientErrors) {\n error.isTransient = true;\n }\n\n this.loginError = error;\n }\n\n onSSPI(token: SSPIToken) {\n if (token.ntlmpacket) {\n this.connection.ntlmpacket = token.ntlmpacket;\n this.connection.ntlmpacketBuffer = token.ntlmpacketBuffer;\n }\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n this.connection.emit('databaseChange', token.newValue);\n }\n\n onDatabaseMirroringPartner(token: DatabaseMirroringPartnerEnvChangeToken) {\n this.connection.emit('databaseMirroringPartner', token.newValue);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n this.connection.emit('languageChange', token.newValue);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n this.connection.emit('charsetChange', token.newValue);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n this.connection.databaseCollation = token.newValue;\n }\n\n onFedAuthInfo(token: FedAuthInfoToken) {\n this.fedAuthInfoToken = token;\n }\n\n onFeatureExtAck(token: FeatureExtAckToken) {\n const { authentication } = this.connection.config;\n\n if (authentication.type === 'azure-active-directory-password' || authentication.type === 'azure-active-directory-access-token' || authentication.type === 'azure-active-directory-msi-vm' || authentication.type === 'azure-active-directory-msi-app-service' || authentication.type === 'azure-active-directory-service-principal-secret' || authentication.type === 'azure-active-directory-default') {\n if (token.fedAuth === undefined) {\n this.loginError = new ConnectionError('Did not receive Active Directory authentication acknowledgement');\n } else if (token.fedAuth.length !== 0) {\n this.loginError = new ConnectionError(`Active Directory authentication acknowledgment for ${authentication.type} authentication method includes extra data`);\n }\n } else if (token.fedAuth === undefined && token.utf8Support === undefined) {\n this.loginError = new ConnectionError('Received acknowledgement for unknown feature');\n } else if (token.fedAuth) {\n this.loginError = new ConnectionError('Did not request Active Directory authentication, but received the acknowledgment');\n }\n }\n\n onLoginAck(token: LoginAckToken) {\n if (!token.tdsVersion) {\n // unsupported TDS version\n this.loginError = new ConnectionError('Server responded with unknown TDS version.', 'ETDS');\n return;\n }\n\n if (!token.interface) {\n // unsupported interface\n this.loginError = new ConnectionError('Server responded with unsupported interface.', 'EINTERFACENOTSUPP');\n return;\n }\n\n // use negotiated version\n this.connection.config.options.tdsVersion = token.tdsVersion;\n\n if (token.tdsVersion < '7_2') {\n tds71DeprecationWarning.emit();\n }\n\n this.loginAckReceived = true;\n }\n\n onRoutingChange(token: RoutingEnvChangeToken) {\n // Splits instance name attached to the redirect url. E.g., redirect.db.net\\instance1 --> [redirect.db.net, instance1]\n const [ server, instance ] = token.newValue.server.split('\\\\');\n\n this.routingData = {\n server, port: token.newValue.port, instance\n };\n }\n\n onDoneInProc(token: DoneInProcToken) {\n // Do nothing\n }\n\n onDone(token: DoneToken) {\n // Do nothing\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n this.connection.messageIo.packetSize(token.newValue);\n }\n}\n\n/**\n * A handler for tokens received in the response message to a RPC Request,\n * a SQL Batch Request, a Bulk Load BCP Request or a Transaction Manager Request.\n */\nexport class RequestTokenHandler extends TokenHandler {\n declare connection: Connection;\n declare request: Request | BulkLoad;\n declare errors: RequestError[];\n\n constructor(connection: Connection, request: Request | BulkLoad) {\n super();\n\n this.connection = connection;\n this.request = request;\n this.errors = [];\n }\n\n onInfoMessage(token: InfoMessageToken) {\n this.connection.emit('infoMessage', token);\n }\n\n onErrorMessage(token: ErrorMessageToken) {\n this.connection.emit('errorMessage', token);\n\n if (!this.request.canceled) {\n const error = new RequestError(token.message, 'EREQUEST');\n\n error.number = token.number;\n error.state = token.state;\n error.class = token.class;\n error.serverName = token.serverName;\n error.procName = token.procName;\n error.lineNumber = token.lineNumber;\n this.errors.push(error);\n this.request.error = error;\n if (this.request instanceof Request && this.errors.length > 1) {\n this.request.error = new AggregateError(this.errors);\n }\n }\n }\n\n onDatabaseChange(token: DatabaseEnvChangeToken) {\n this.connection.emit('databaseChange', token.newValue);\n }\n\n onLanguageChange(token: LanguageEnvChangeToken) {\n this.connection.emit('languageChange', token.newValue);\n }\n\n onCharsetChange(token: CharsetEnvChangeToken) {\n this.connection.emit('charsetChange', token.newValue);\n }\n\n onSqlCollationChange(token: CollationChangeToken) {\n this.connection.databaseCollation = token.newValue;\n }\n\n onPacketSizeChange(token: PacketSizeEnvChangeToken) {\n this.connection.messageIo.packetSize(token.newValue);\n }\n\n onBeginTransaction(token: BeginTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.push(token.newValue);\n this.connection.inTransaction = true;\n }\n\n onCommitTransaction(token: CommitTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n this.connection.inTransaction = false;\n }\n\n onRollbackTransaction(token: RollbackTransactionEnvChangeToken) {\n this.connection.transactionDescriptors.length = 1;\n // An outermost transaction was rolled back. Reset the transaction counter\n this.connection.inTransaction = false;\n this.connection.emit('rollbackTransaction');\n }\n\n onColMetadata(token: ColMetadataToken) {\n if (!this.request.canceled) {\n if (this.connection.config.options.useColumnNames) {\n const columns: { [key: string]: ColumnMetadata } = Object.create(null);\n\n for (let j = 0, len = token.columns.length; j < len; j++) {\n const col = token.columns[j];\n if (columns[col.colName] == null) {\n columns[col.colName] = col;\n }\n }\n\n this.request.emit('columnMetadata', columns);\n } else {\n this.request.emit('columnMetadata', token.columns);\n }\n }\n }\n\n onTabName(token: TabNameToken) {\n if (!this.request.canceled) {\n this.request.emit('tabName', token.tableNames);\n }\n }\n\n onColInfo(token: ColInfoToken) {\n if (!this.request.canceled) {\n this.request.emit('colInfo', token.columns);\n }\n }\n\n onOrder(token: OrderToken) {\n if (!this.request.canceled) {\n this.request.emit('order', token.orderColumns);\n }\n }\n\n onRow(token: RowToken | NBCRowToken) {\n if (!this.request.canceled) {\n if (this.connection.config.options.rowCollectionOnRequestCompletion) {\n this.request.rows!.push(token.columns);\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst!.push(token.columns);\n }\n\n this.request.emit('row', token.columns);\n }\n }\n\n onReturnStatus(token: ReturnStatusToken) {\n if (!this.request.canceled) {\n // Keep value for passing in 'doneProc' event.\n this.connection.procReturnStatusValue = token.value;\n }\n }\n\n onReturnValue(token: ReturnValueToken) {\n if (!this.request.canceled) {\n this.request.emit('returnValue', token.paramName, token.value, token.metadata);\n }\n }\n\n onDoneProc(token: DoneProcToken) {\n if (!this.request.canceled) {\n if (token.sqlError && !this.request.error) {\n // check if the DONE_ERROR flags was set, but an ERROR token was not sent.\n this.request.error = new RequestError('An unknown error has occurred.', 'UNKNOWN');\n }\n\n this.request.emit('doneProc', token.rowCount, token.more, this.connection.procReturnStatusValue, this.request.rst);\n\n this.connection.procReturnStatusValue = undefined;\n\n if (token.rowCount !== undefined) {\n this.request.rowCount! += token.rowCount;\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst = [];\n }\n }\n }\n\n onDoneInProc(token: DoneInProcToken) {\n if (!this.request.canceled) {\n this.request.emit('doneInProc', token.rowCount, token.more, this.request.rst);\n\n if (token.rowCount !== undefined) {\n this.request.rowCount! += token.rowCount;\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst = [];\n }\n }\n }\n\n onDone(token: DoneToken) {\n if (!this.request.canceled) {\n if (token.sqlError && !this.request.error) {\n // check if the DONE_ERROR flags was set, but an ERROR token was not sent.\n this.request.error = new RequestError('An unknown error has occurred.', 'UNKNOWN');\n }\n\n this.request.emit('done', token.rowCount, token.more, this.request.rst);\n\n if (token.rowCount !== undefined) {\n this.request.rowCount! += token.rowCount;\n }\n\n if (this.connection.config.options.rowCollectionOnDone) {\n this.request.rst = [];\n }\n }\n }\n\n onResetConnection(token: ResetConnectionEnvChangeToken) {\n this.connection.emit('resetConnection');\n }\n}\n\n/**\n * A handler for the attention acknowledgement message.\n *\n * This message only contains a `DONE` token that acknowledges\n * that the attention message was received by the server.\n */\nexport class AttentionTokenHandler extends TokenHandler {\n declare connection: Connection;\n declare request: Request | BulkLoad;\n\n /**\n * Returns whether an attention acknowledgement was received.\n */\n declare attentionReceived: boolean;\n\n constructor(connection: Connection, request: Request | BulkLoad) {\n super();\n\n this.connection = connection;\n this.request = request;\n\n this.attentionReceived = false;\n }\n\n onDone(token: DoneToken) {\n if (token.attention) {\n this.attentionReceived = true;\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import Debug from '../debug';
|
|
2
2
|
import { type InternalConnectionOptions } from '../connection';
|
|
3
|
-
import { ColMetadataToken, DoneProcToken, DoneToken, DoneInProcToken, ErrorMessageToken, InfoMessageToken, RowToken, type EnvChangeToken, LoginAckToken, ReturnStatusToken, OrderToken, FedAuthInfoToken, SSPIToken, ReturnValueToken, NBCRowToken, FeatureExtAckToken, Token } from './token';
|
|
3
|
+
import { ColInfoToken, ColMetadataToken, DoneProcToken, DoneToken, DoneInProcToken, ErrorMessageToken, InfoMessageToken, RowToken, type EnvChangeToken, LoginAckToken, ReturnStatusToken, OrderToken, FedAuthInfoToken, SSPIToken, ReturnValueToken, NBCRowToken, FeatureExtAckToken, TabNameToken, Token } from './token';
|
|
4
4
|
import { type ColumnMetadata } from './colmetadata-token-parser';
|
|
5
5
|
export type ParserOptions = Pick<InternalConnectionOptions, 'useUTC' | 'lowerCaseGuids' | 'tdsVersion' | 'useColumnNames' | 'columnNameReplacer' | 'camelCaseColumns'>;
|
|
6
6
|
declare class Parser {
|
|
@@ -13,6 +13,8 @@ declare class Parser {
|
|
|
13
13
|
static parseTokens(iterable: AsyncIterable<Buffer> | Iterable<Buffer>, debug: Debug, options: ParserOptions, colMetadata?: ColumnMetadata[]): AsyncGenerator<Token | undefined, void, unknown>;
|
|
14
14
|
readToken(type: number): Token | undefined | Promise<Token | undefined>;
|
|
15
15
|
readFeatureExtAckToken(): FeatureExtAckToken | Promise<FeatureExtAckToken>;
|
|
16
|
+
readTabNameToken(): TabNameToken | Promise<TabNameToken>;
|
|
17
|
+
readColInfoToken(): ColInfoToken | Promise<ColInfoToken>;
|
|
16
18
|
readNbcRowToken(): Promise<NBCRowToken>;
|
|
17
19
|
readReturnValueToken(): Promise<ReturnValueToken>;
|
|
18
20
|
readColMetadataToken(): Promise<ColMetadataToken>;
|