tedious 20.2.3 → 20.3.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/README.md +3 -0
- package/SECURITY.md +23 -0
- package/lib/always-encrypted/get-parameter-encryption-metadata.js +5 -2
- package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -1
- package/lib/bulk-load-payload.js +9 -5
- package/lib/bulk-load-payload.js.map +1 -1
- package/lib/bulk-load.js +17 -6
- package/lib/bulk-load.js.map +1 -1
- package/lib/connection.d.ts +5 -0
- package/lib/connection.js +34 -34
- package/lib/connection.js.map +1 -1
- package/lib/data-type.d.ts +47 -3
- package/lib/data-type.js +113 -2
- package/lib/data-type.js.map +1 -1
- package/lib/data-types/bigint.js +10 -17
- package/lib/data-types/bigint.js.map +1 -1
- package/lib/data-types/binary.js +10 -17
- package/lib/data-types/binary.js.map +1 -1
- package/lib/data-types/bit.js +10 -14
- package/lib/data-types/bit.js.map +1 -1
- package/lib/data-types/bitn.js +3 -6
- package/lib/data-types/bitn.js.map +1 -1
- package/lib/data-types/char.js +12 -17
- package/lib/data-types/char.js.map +1 -1
- package/lib/data-types/date.js +11 -27
- package/lib/data-types/date.js.map +1 -1
- package/lib/data-types/datetime.js +17 -37
- package/lib/data-types/datetime.js.map +1 -1
- package/lib/data-types/datetime2.js +12 -67
- package/lib/data-types/datetime2.js.map +1 -1
- package/lib/data-types/datetimen.js +3 -6
- package/lib/data-types/datetimen.js.map +1 -1
- package/lib/data-types/datetimeoffset.js +13 -60
- package/lib/data-types/datetimeoffset.js.map +1 -1
- package/lib/data-types/decimal-common.d.ts +18 -0
- package/lib/data-types/decimal-common.js +79 -0
- package/lib/data-types/decimal-common.js.map +1 -0
- package/lib/data-types/decimal.js +6 -67
- package/lib/data-types/decimal.js.map +1 -1
- package/lib/data-types/decimaln.js +3 -6
- package/lib/data-types/decimaln.js.map +1 -1
- package/lib/data-types/float.js +10 -15
- package/lib/data-types/float.js.map +1 -1
- package/lib/data-types/floatn.js +3 -6
- package/lib/data-types/floatn.js.map +1 -1
- package/lib/data-types/image.js +10 -17
- package/lib/data-types/image.js.map +1 -1
- package/lib/data-types/int.js +8 -15
- package/lib/data-types/int.js.map +1 -1
- package/lib/data-types/intn.js +3 -6
- package/lib/data-types/intn.js.map +1 -1
- package/lib/data-types/money.js +14 -18
- package/lib/data-types/money.js.map +1 -1
- package/lib/data-types/moneyn.js +3 -6
- package/lib/data-types/moneyn.js.map +1 -1
- package/lib/data-types/nchar.js +17 -31
- package/lib/data-types/nchar.js.map +1 -1
- package/lib/data-types/ntext.js +13 -17
- package/lib/data-types/ntext.js.map +1 -1
- package/lib/data-types/null.js +3 -6
- package/lib/data-types/null.js.map +1 -1
- package/lib/data-types/numeric.js +6 -67
- package/lib/data-types/numeric.js.map +1 -1
- package/lib/data-types/numericn.js +3 -6
- package/lib/data-types/numericn.js.map +1 -1
- package/lib/data-types/nvarchar.js +68 -57
- package/lib/data-types/nvarchar.js.map +1 -1
- package/lib/data-types/plp-stream.d.ts +19 -0
- package/lib/data-types/plp-stream.js +59 -0
- package/lib/data-types/plp-stream.js.map +1 -0
- package/lib/data-types/real.js +10 -16
- package/lib/data-types/real.js.map +1 -1
- package/lib/data-types/smalldatetime.js +17 -23
- package/lib/data-types/smalldatetime.js.map +1 -1
- package/lib/data-types/smallint.js +10 -16
- package/lib/data-types/smallint.js.map +1 -1
- package/lib/data-types/smallmoney.js +10 -16
- package/lib/data-types/smallmoney.js.map +1 -1
- package/lib/data-types/sql-variant.js +3 -6
- package/lib/data-types/sql-variant.js.map +1 -1
- package/lib/data-types/temporal.d.ts +22 -0
- package/lib/data-types/temporal.js +72 -0
- package/lib/data-types/temporal.js.map +1 -0
- package/lib/data-types/text.js +12 -18
- package/lib/data-types/text.js.map +1 -1
- package/lib/data-types/time.js +11 -55
- package/lib/data-types/time.js.map +1 -1
- package/lib/data-types/tinyint.js +10 -16
- package/lib/data-types/tinyint.js.map +1 -1
- package/lib/data-types/tvp.js +145 -87
- package/lib/data-types/tvp.js.map +1 -1
- package/lib/data-types/udt.js +3 -6
- package/lib/data-types/udt.js.map +1 -1
- package/lib/data-types/uniqueidentifier.js +12 -14
- package/lib/data-types/uniqueidentifier.js.map +1 -1
- package/lib/data-types/varbinary.js +58 -48
- package/lib/data-types/varbinary.js.map +1 -1
- package/lib/data-types/varchar.js +84 -50
- package/lib/data-types/varchar.js.map +1 -1
- package/lib/data-types/xml.js +3 -6
- package/lib/data-types/xml.js.map +1 -1
- package/lib/request.d.ts +23 -3
- package/lib/request.js +29 -3
- package/lib/request.js.map +1 -1
- package/lib/rpcrequest-payload.d.ts +21 -9
- package/lib/rpcrequest-payload.js +62 -51
- package/lib/rpcrequest-payload.js.map +1 -1
- package/lib/tedious.d.ts +2 -2
- package/lib/tedious.js +7 -1
- package/lib/tedious.js.map +1 -1
- package/lib/token/handler.js +9 -1
- package/lib/token/handler.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpcrequest-payload.js","names":["_writableTrackingBuffer","_interopRequireDefault","require","_allHeaders","_errors","e","__esModule","default","STATUS","BY_REF_VALUE","DEFAULT_VALUE","RpcRequestPayload","constructor","procedure","parameters","txnDescriptor","options","
|
|
1
|
+
{"version":3,"file":"rpcrequest-payload.js","names":["_writableTrackingBuffer","_interopRequireDefault","require","_allHeaders","_dataType","_errors","e","__esModule","default","STATUS","BY_REF_VALUE","DEFAULT_VALUE","RpcRequestPayload","constructor","procedure","parameters","txnDescriptor","options","Symbol","asyncIterator","buffer","WritableTrackingBuffer","writeHeader","parametersLength","length","i","parameter","writeParameterHeader","rest","type","writeTypeInfo","data","writeValue","error","InputError","name","cause","undefined","_","writeRest","chunk","getBuffers","consume","CHUNK_SIZE","toString","indent","tdsVersion","outstandingRequestCount","writeToTrackingBuffer","writeUsVarchar","writeUShort","optionFlags","writeUInt16LE","writeBVarchar","statusFlags","output","writeUInt8","_default","exports","module"],"sources":["../src/rpcrequest-payload.ts"],"sourcesContent":["import WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\nimport { writeToTrackingBuffer } from './all-headers';\nimport { type ResolvedParameter, writeRest } from './data-type';\nimport { type InternalConnectionOptions } from './connection';\nimport { InputError } from './errors';\n\n// const OPTION = {\n// WITH_RECOMPILE: 0x01,\n// NO_METADATA: 0x02,\n// REUSE_METADATA: 0x04\n// };\n\nconst STATUS = {\n BY_REF_VALUE: 0x01,\n DEFAULT_VALUE: 0x02\n};\n\n/*\n s2.2.6.5\n */\nclass RpcRequestPayload implements AsyncIterable<Buffer> {\n declare procedure: string | number;\n declare parameters: ResolvedParameter[];\n\n declare options: InternalConnectionOptions;\n declare txnDescriptor: Buffer;\n\n constructor(procedure: string | number, parameters: ResolvedParameter[], txnDescriptor: Buffer, options: InternalConnectionOptions) {\n this.procedure = procedure;\n this.parameters = parameters;\n this.options = options;\n this.txnDescriptor = txnDescriptor;\n }\n\n /**\n * The request is written into one buffer whose contents are yielded once\n * it holds a chunk's worth (`WritableTrackingBuffer.CHUNK_SIZE`), checked\n * after every parameter, and at the end. A large value written by\n * reference stays by reference, so this costs no extra copy. A parameter\n * whose value is read from a source while the request is written has the\n * rest of that write returned by `writeValue`, and is driven here so that\n * the buffer is handed on whenever the type says it is worth it.\n *\n * Chunks are yielded one by one rather than through `yield*`: an array\n * iterator has no `throw` method, so an error a consumer throws into this\n * generator during such a delegation would surface as a TypeError instead.\n */\n async *[Symbol.asyncIterator]() {\n const buffer = new WritableTrackingBuffer();\n this.writeHeader(buffer);\n\n const parametersLength = this.parameters.length;\n for (let i = 0; i < parametersLength; i++) {\n const parameter = this.parameters[i];\n this.writeParameterHeader(buffer, parameter);\n\n let rest: void | AsyncIterable<void>;\n try {\n parameter.type.writeTypeInfo(buffer, parameter.data, this.options);\n rest = parameter.type.writeValue(buffer, parameter.data, this.options);\n } catch (error) {\n throw new InputError(`Input parameter '${parameter.name}' could not be validated`, { cause: error });\n }\n\n // A value read from a source while the request is written: the type\n // yields whenever the buffer is worth handing on.\n if (rest !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of writeRest(rest, (error) => new InputError(`Input parameter '${parameter.name}' could not be validated`, { cause: error }))) {\n for (const chunk of buffer.getBuffers()) {\n yield chunk;\n }\n buffer.consume(buffer.length);\n }\n }\n\n if (buffer.length >= WritableTrackingBuffer.CHUNK_SIZE) {\n for (const chunk of buffer.getBuffers()) {\n yield chunk;\n }\n buffer.consume(buffer.length);\n }\n }\n\n for (const chunk of buffer.getBuffers()) {\n yield chunk;\n }\n }\n\n toString(indent = '') {\n return indent + ('RPC Request - ' + this.procedure);\n }\n\n writeHeader(buffer: WritableTrackingBuffer) {\n if (this.options.tdsVersion >= '7_2') {\n const outstandingRequestCount = 1;\n writeToTrackingBuffer(buffer, this.txnDescriptor, outstandingRequestCount);\n }\n\n if (typeof this.procedure === 'string') {\n buffer.writeUsVarchar(this.procedure, 'ucs2');\n } else {\n buffer.writeUShort(0xFFFF);\n buffer.writeUShort(this.procedure);\n }\n\n const optionFlags = 0;\n buffer.writeUInt16LE(optionFlags);\n }\n\n writeParameterHeader(buffer: WritableTrackingBuffer, parameter: ResolvedParameter) {\n if (parameter.name) {\n buffer.writeBVarchar('@' + parameter.name, 'ucs2');\n } else {\n buffer.writeBVarchar('', 'ucs2');\n }\n\n let statusFlags = 0;\n if (parameter.output) {\n statusFlags |= STATUS.BY_REF_VALUE;\n }\n buffer.writeUInt8(statusFlags);\n }\n}\n\nexport default RpcRequestPayload;\nmodule.exports = RpcRequestPayload;\n"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAD,OAAA;AACA,IAAAE,SAAA,GAAAF,OAAA;AAEA,IAAAG,OAAA,GAAAH,OAAA;AAAsC,SAAAD,uBAAAK,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtC;AACA;AACA;AACA;AACA;;AAEA,MAAMG,MAAM,GAAG;EACbC,YAAY,EAAE,IAAI;EAClBC,aAAa,EAAE;AACjB,CAAC;;AAED;AACA;AACA;AACA,MAAMC,iBAAiB,CAAkC;EAOvDC,WAAWA,CAACC,SAA0B,EAAEC,UAA+B,EAAEC,aAAqB,EAAEC,OAAkC,EAAE;IAClI,IAAI,CAACH,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAACE,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACD,aAAa,GAAGA,aAAa;EACpC;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,QAAQE,MAAM,CAACC,aAAa,IAAI;IAC9B,MAAMC,MAAM,GAAG,IAAIC,+BAAsB,CAAC,CAAC;IAC3C,IAAI,CAACC,WAAW,CAACF,MAAM,CAAC;IAExB,MAAMG,gBAAgB,GAAG,IAAI,CAACR,UAAU,CAACS,MAAM;IAC/C,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,gBAAgB,EAAEE,CAAC,EAAE,EAAE;MACzC,MAAMC,SAAS,GAAG,IAAI,CAACX,UAAU,CAACU,CAAC,CAAC;MACpC,IAAI,CAACE,oBAAoB,CAACP,MAAM,EAAEM,SAAS,CAAC;MAE5C,IAAIE,IAAgC;MACpC,IAAI;QACFF,SAAS,CAACG,IAAI,CAACC,aAAa,CAACV,MAAM,EAAEM,SAAS,CAACK,IAAI,EAAE,IAAI,CAACd,OAAO,CAAC;QAClEW,IAAI,GAAGF,SAAS,CAACG,IAAI,CAACG,UAAU,CAACZ,MAAM,EAAEM,SAAS,CAACK,IAAI,EAAE,IAAI,CAACd,OAAO,CAAC;MACxE,CAAC,CAAC,OAAOgB,KAAK,EAAE;QACd,MAAM,IAAIC,kBAAU,CAAC,oBAAoBR,SAAS,CAACS,IAAI,0BAA0B,EAAE;UAAEC,KAAK,EAAEH;QAAM,CAAC,CAAC;MACtG;;MAEA;MACA;MACA,IAAIL,IAAI,KAAKS,SAAS,EAAE;QACtB;QACA,WAAW,MAAMC,CAAC,IAAI,IAAAC,mBAAS,EAACX,IAAI,EAAGK,KAAK,IAAK,IAAIC,kBAAU,CAAC,oBAAoBR,SAAS,CAACS,IAAI,0BAA0B,EAAE;UAAEC,KAAK,EAAEH;QAAM,CAAC,CAAC,CAAC,EAAE;UAChJ,KAAK,MAAMO,KAAK,IAAIpB,MAAM,CAACqB,UAAU,CAAC,CAAC,EAAE;YACvC,MAAMD,KAAK;UACb;UACApB,MAAM,CAACsB,OAAO,CAACtB,MAAM,CAACI,MAAM,CAAC;QAC/B;MACF;MAEA,IAAIJ,MAAM,CAACI,MAAM,IAAIH,+BAAsB,CAACsB,UAAU,EAAE;QACtD,KAAK,MAAMH,KAAK,IAAIpB,MAAM,CAACqB,UAAU,CAAC,CAAC,EAAE;UACvC,MAAMD,KAAK;QACb;QACApB,MAAM,CAACsB,OAAO,CAACtB,MAAM,CAACI,MAAM,CAAC;MAC/B;IACF;IAEA,KAAK,MAAMgB,KAAK,IAAIpB,MAAM,CAACqB,UAAU,CAAC,CAAC,EAAE;MACvC,MAAMD,KAAK;IACb;EACF;EAEAI,QAAQA,CAACC,MAAM,GAAG,EAAE,EAAE;IACpB,OAAOA,MAAM,IAAI,gBAAgB,GAAG,IAAI,CAAC/B,SAAS,CAAC;EACrD;EAEAQ,WAAWA,CAACF,MAA8B,EAAE;IAC1C,IAAI,IAAI,CAACH,OAAO,CAAC6B,UAAU,IAAI,KAAK,EAAE;MACpC,MAAMC,uBAAuB,GAAG,CAAC;MACjC,IAAAC,iCAAqB,EAAC5B,MAAM,EAAE,IAAI,CAACJ,aAAa,EAAE+B,uBAAuB,CAAC;IAC5E;IAEA,IAAI,OAAO,IAAI,CAACjC,SAAS,KAAK,QAAQ,EAAE;MACtCM,MAAM,CAAC6B,cAAc,CAAC,IAAI,CAACnC,SAAS,EAAE,MAAM,CAAC;IAC/C,CAAC,MAAM;MACLM,MAAM,CAAC8B,WAAW,CAAC,MAAM,CAAC;MAC1B9B,MAAM,CAAC8B,WAAW,CAAC,IAAI,CAACpC,SAAS,CAAC;IACpC;IAEA,MAAMqC,WAAW,GAAG,CAAC;IACrB/B,MAAM,CAACgC,aAAa,CAACD,WAAW,CAAC;EACnC;EAEAxB,oBAAoBA,CAACP,MAA8B,EAAEM,SAA4B,EAAE;IACjF,IAAIA,SAAS,CAACS,IAAI,EAAE;MAClBf,MAAM,CAACiC,aAAa,CAAC,GAAG,GAAG3B,SAAS,CAACS,IAAI,EAAE,MAAM,CAAC;IACpD,CAAC,MAAM;MACLf,MAAM,CAACiC,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC;IAClC;IAEA,IAAIC,WAAW,GAAG,CAAC;IACnB,IAAI5B,SAAS,CAAC6B,MAAM,EAAE;MACpBD,WAAW,IAAI7C,MAAM,CAACC,YAAY;IACpC;IACAU,MAAM,CAACoC,UAAU,CAACF,WAAW,CAAC;EAChC;AACF;AAAC,IAAAG,QAAA,GAAAC,OAAA,CAAAlD,OAAA,GAEcI,iBAAiB;AAChC+C,MAAM,CAACD,OAAO,GAAG9C,iBAAiB","ignoreList":[]}
|
package/lib/tedious.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import BulkLoad from './bulk-load';
|
|
2
2
|
import Connection, { type ConnectionAuthentication, type ConnectionConfiguration, type ConnectionOptions } from './connection';
|
|
3
3
|
import Request from './request';
|
|
4
|
-
import { ConnectionError, RequestError } from './errors';
|
|
4
|
+
import { ConnectionError, InputError, RequestError } from './errors';
|
|
5
5
|
import { TYPES } from './data-type';
|
|
6
6
|
import { ISOLATION_LEVEL } from './transaction';
|
|
7
7
|
import { versions as TDS_VERSION } from './tds-versions';
|
|
@@ -9,5 +9,5 @@ declare const library: {
|
|
|
9
9
|
name: string;
|
|
10
10
|
};
|
|
11
11
|
export declare function connect(config: ConnectionConfiguration, connectListener?: (err?: Error) => void): Connection;
|
|
12
|
-
export { BulkLoad, Connection, Request, library, ConnectionError, RequestError, TYPES, ISOLATION_LEVEL, TDS_VERSION };
|
|
12
|
+
export { BulkLoad, Connection, Request, library, ConnectionError, InputError, RequestError, TYPES, ISOLATION_LEVEL, TDS_VERSION };
|
|
13
13
|
export type { ConnectionAuthentication, ConnectionConfiguration, ConnectionOptions };
|
package/lib/tedious.js
CHANGED
|
@@ -27,6 +27,12 @@ Object.defineProperty(exports, "ISOLATION_LEVEL", {
|
|
|
27
27
|
return _transaction.ISOLATION_LEVEL;
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
|
+
Object.defineProperty(exports, "InputError", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return _errors.InputError;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
30
36
|
Object.defineProperty(exports, "Request", {
|
|
31
37
|
enumerable: true,
|
|
32
38
|
get: function () {
|
|
@@ -70,4 +76,4 @@ function connect(config, connectListener) {
|
|
|
70
76
|
connection.connect(connectListener);
|
|
71
77
|
return connection;
|
|
72
78
|
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYnVsa0xvYWQiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9jb25uZWN0aW9uIiwiX3JlcXVlc3QiLCJfbGlicmFyeSIsIl9lcnJvcnMiLCJfZGF0YVR5cGUiLCJfdHJhbnNhY3Rpb24iLCJfdGRzVmVyc2lvbnMiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJsaWJyYXJ5IiwiZXhwb3J0cyIsIm5hbWUiLCJjb25uZWN0IiwiY29uZmlnIiwiY29ubmVjdExpc3RlbmVyIiwiY29ubmVjdGlvbiIsIkNvbm5lY3Rpb24iXSwic291cmNlcyI6WyIuLi9zcmMvdGVkaW91cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVsa0xvYWQgZnJvbSAnLi9idWxrLWxvYWQnO1xuaW1wb3J0IENvbm5lY3Rpb24sIHsgdHlwZSBDb25uZWN0aW9uQXV0aGVudGljYXRpb24sIHR5cGUgQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24sIHR5cGUgQ29ubmVjdGlvbk9wdGlvbnMgfSBmcm9tICcuL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7IG5hbWUgfSBmcm9tICcuL2xpYnJhcnknO1xuXG5pbXBvcnQgeyBDb25uZWN0aW9uRXJyb3IsIElucHV0RXJyb3IsIFJlcXVlc3RFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcblxuaW1wb3J0IHsgVFlQRVMgfSBmcm9tICcuL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBJU09MQVRJT05fTEVWRUwgfSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmltcG9ydCB7IHZlcnNpb25zIGFzIFREU19WRVJTSU9OIH0gZnJvbSAnLi90ZHMtdmVyc2lvbnMnO1xuXG5jb25zdCBsaWJyYXJ5ID0geyBuYW1lOiBuYW1lIH07XG5cbmV4cG9ydCBmdW5jdGlvbiBjb25uZWN0KGNvbmZpZzogQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24sIGNvbm5lY3RMaXN0ZW5lcj86IChlcnI/OiBFcnJvcikgPT4gdm9pZCkge1xuICBjb25zdCBjb25uZWN0aW9uID0gbmV3IENvbm5lY3Rpb24oY29uZmlnKTtcbiAgY29ubmVjdGlvbi5jb25uZWN0KGNvbm5lY3RMaXN0ZW5lcik7XG4gIHJldHVybiBjb25uZWN0aW9uO1xufVxuXG5leHBvcnQge1xuICBCdWxrTG9hZCxcbiAgQ29ubmVjdGlvbixcbiAgUmVxdWVzdCxcbiAgbGlicmFyeSxcbiAgQ29ubmVjdGlvbkVycm9yLFxuICBJbnB1dEVycm9yLFxuICBSZXF1ZXN0RXJyb3IsXG4gIFRZUEVTLFxuICBJU09MQVRJT05fTEVWRUwsXG4gIFREU19WRVJTSU9OXG59O1xuXG5leHBvcnQgdHlwZSB7XG4gIENvbm5lY3Rpb25BdXRoZW50aWNhdGlvbixcbiAgQ29ubmVjdGlvbkNvbmZpZ3VyYXRpb24sXG4gIENvbm5lY3Rpb25PcHRpb25zXG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsU0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBRixzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUUsUUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUcsUUFBQSxHQUFBSCxPQUFBO0FBRUEsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssU0FBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sWUFBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sWUFBQSxHQUFBUCxPQUFBO0FBQXlELFNBQUFELHVCQUFBUyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRXpELE1BQU1HLE9BQU8sR0FBQUMsT0FBQSxDQUFBRCxPQUFBLEdBQUc7RUFBRUUsSUFBSSxFQUFFQTtBQUFLLENBQUM7QUFFdkIsU0FBU0MsT0FBT0EsQ0FBQ0MsTUFBK0IsRUFBRUMsZUFBdUMsRUFBRTtFQUNoRyxNQUFNQyxVQUFVLEdBQUcsSUFBSUMsbUJBQVUsQ0FBQ0gsTUFBTSxDQUFDO0VBQ3pDRSxVQUFVLENBQUNILE9BQU8sQ0FBQ0UsZUFBZSxDQUFDO0VBQ25DLE9BQU9DLFVBQVU7QUFDbkIiLCJpZ25vcmVMaXN0IjpbXX0=
|
package/lib/tedious.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tedious.js","names":["_bulkLoad","_interopRequireDefault","require","_connection","_request","_library","_errors","_dataType","_transaction","_tdsVersions","e","__esModule","default","library","exports","name","connect","config","connectListener","connection","Connection"],"sources":["../src/tedious.ts"],"sourcesContent":["import BulkLoad from './bulk-load';\nimport Connection, { type ConnectionAuthentication, type ConnectionConfiguration, type ConnectionOptions } from './connection';\nimport Request from './request';\nimport { name } from './library';\n\nimport { ConnectionError, RequestError } from './errors';\n\nimport { TYPES } from './data-type';\nimport { ISOLATION_LEVEL } from './transaction';\nimport { versions as TDS_VERSION } from './tds-versions';\n\nconst library = { name: name };\n\nexport function connect(config: ConnectionConfiguration, connectListener?: (err?: Error) => void) {\n const connection = new Connection(config);\n connection.connect(connectListener);\n return connection;\n}\n\nexport {\n BulkLoad,\n Connection,\n Request,\n library,\n ConnectionError,\n RequestError,\n TYPES,\n ISOLATION_LEVEL,\n TDS_VERSION\n};\n\nexport type {\n ConnectionAuthentication,\n ConnectionConfiguration,\n ConnectionOptions\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"tedious.js","names":["_bulkLoad","_interopRequireDefault","require","_connection","_request","_library","_errors","_dataType","_transaction","_tdsVersions","e","__esModule","default","library","exports","name","connect","config","connectListener","connection","Connection"],"sources":["../src/tedious.ts"],"sourcesContent":["import BulkLoad from './bulk-load';\nimport Connection, { type ConnectionAuthentication, type ConnectionConfiguration, type ConnectionOptions } from './connection';\nimport Request from './request';\nimport { name } from './library';\n\nimport { ConnectionError, InputError, RequestError } from './errors';\n\nimport { TYPES } from './data-type';\nimport { ISOLATION_LEVEL } from './transaction';\nimport { versions as TDS_VERSION } from './tds-versions';\n\nconst library = { name: name };\n\nexport function connect(config: ConnectionConfiguration, connectListener?: (err?: Error) => void) {\n const connection = new Connection(config);\n connection.connect(connectListener);\n return connection;\n}\n\nexport {\n BulkLoad,\n Connection,\n Request,\n library,\n ConnectionError,\n InputError,\n RequestError,\n TYPES,\n ISOLATION_LEVEL,\n TDS_VERSION\n};\n\nexport type {\n ConnectionAuthentication,\n ConnectionConfiguration,\n ConnectionOptions\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,SAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,QAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AAEA,IAAAI,OAAA,GAAAJ,OAAA;AAEA,IAAAK,SAAA,GAAAL,OAAA;AACA,IAAAM,YAAA,GAAAN,OAAA;AACA,IAAAO,YAAA,GAAAP,OAAA;AAAyD,SAAAD,uBAAAS,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEzD,MAAMG,OAAO,GAAAC,OAAA,CAAAD,OAAA,GAAG;EAAEE,IAAI,EAAEA;AAAK,CAAC;AAEvB,SAASC,OAAOA,CAACC,MAA+B,EAAEC,eAAuC,EAAE;EAChG,MAAMC,UAAU,GAAG,IAAIC,mBAAU,CAACH,MAAM,CAAC;EACzCE,UAAU,CAACH,OAAO,CAACE,eAAe,CAAC;EACnC,OAAOC,UAAU;AACnB","ignoreList":[]}
|
package/lib/token/handler.js
CHANGED
|
@@ -407,6 +407,14 @@ class RequestTokenHandler extends TokenHandler {
|
|
|
407
407
|
}
|
|
408
408
|
onReturnValue(token) {
|
|
409
409
|
if (!this.request.canceled) {
|
|
410
|
+
// The response to `sp_prepare` returns the prepared statement's handle.
|
|
411
|
+
if (this.request instanceof _request.default && this.request.preparing) {
|
|
412
|
+
if (token.paramName === 'handle') {
|
|
413
|
+
this.request.handle = token.value;
|
|
414
|
+
} else {
|
|
415
|
+
this.request.error = new _errors.RequestError(`Tedious > Unexpected output parameter ${token.paramName} from sp_prepare`);
|
|
416
|
+
}
|
|
417
|
+
}
|
|
410
418
|
this.request.emit('returnValue', token.paramName, token.value, token.metadata);
|
|
411
419
|
}
|
|
412
420
|
}
|
|
@@ -482,4 +490,4 @@ class AttentionTokenHandler extends TokenHandler {
|
|
|
482
490
|
}
|
|
483
491
|
}
|
|
484
492
|
exports.AttentionTokenHandler = AttentionTokenHandler;
|
|
485
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVxdWVzdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2Vycm9ycyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlVuZXhwZWN0ZWRUb2tlbkVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsImhhbmRsZXIiLCJ0b2tlbiIsIm5hbWUiLCJleHBvcnRzIiwidGRzNzFEZXByZWNhdGlvbldhcm5pbmciLCJlbWl0dGVkIiwiZW1pdCIsInByb2Nlc3MiLCJlbWl0V2FybmluZyIsInR5cGUiLCJjb2RlIiwiVG9rZW5IYW5kbGVyIiwib25JbmZvTWVzc2FnZSIsIm9uRXJyb3JNZXNzYWdlIiwib25TU1BJIiwib25EYXRhYmFzZUNoYW5nZSIsIm9uTGFuZ3VhZ2VDaGFuZ2UiLCJvbkNoYXJzZXRDaGFuZ2UiLCJvblNxbENvbGxhdGlvbkNoYW5nZSIsIm9uUm91dGluZ0NoYW5nZSIsIm9uUGFja2V0U2l6ZUNoYW5nZSIsIm9uUmVzZXRDb25uZWN0aW9uIiwib25CZWdpblRyYW5zYWN0aW9uIiwib25Db21taXRUcmFuc2FjdGlvbiIsIm9uUm9sbGJhY2tUcmFuc2FjdGlvbiIsIm9uRmVkQXV0aEluZm8iLCJvbkZlYXR1cmVFeHRBY2siLCJvbkxvZ2luQWNrIiwib25Db2xNZXRhZGF0YSIsIm9uVGFiTmFtZSIsIm9uQ29sSW5mbyIsIm9uT3JkZXIiLCJvblJvdyIsIm9uUmV0dXJuU3RhdHVzIiwib25SZXR1cm5WYWx1ZSIsIm9uRG9uZVByb2MiLCJvbkRvbmVJblByb2MiLCJvbkRvbmUiLCJvbkRhdGFiYXNlTWlycm9yaW5nUGFydG5lciIsIkluaXRpYWxTcWxUb2tlbkhhbmRsZXIiLCJjb25uZWN0aW9uIiwibmV3VmFsdWUiLCJkYXRhYmFzZUNvbGxhdGlvbiIsIm1lc3NhZ2VJbyIsInBhY2tldFNpemUiLCJ0cmFuc2FjdGlvbkRlc2NyaXB0b3JzIiwicHVzaCIsImluVHJhbnNhY3Rpb24iLCJsZW5ndGgiLCJjbG9zZSIsIkxvZ2luN1Rva2VuSGFuZGxlciIsImxvZ2luQWNrUmVjZWl2ZWQiLCJsb2dpbkVycm9yIiwidW5kZWZpbmVkIiwiZXJyb3IiLCJDb25uZWN0aW9uRXJyb3IiLCJtZXNzYWdlIiwiaXNMb2dpbkVycm9yVHJhbnNpZW50IiwidHJhbnNpZW50RXJyb3JMb29rdXAiLCJpc1RyYW5zaWVudEVycm9yIiwibnVtYmVyIiwiY3VyVHJhbnNpZW50UmV0cnlDb3VudCIsImNvbmZpZyIsIm9wdGlvbnMiLCJtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMiLCJpc1RyYW5zaWVudCIsIm50bG1wYWNrZXQiLCJudGxtcGFja2V0QnVmZmVyIiwiZmVkQXV0aEluZm9Ub2tlbiIsImF1dGhlbnRpY2F0aW9uIiwiZmVkQXV0aCIsInV0ZjhTdXBwb3J0IiwidGRzVmVyc2lvbiIsImludGVyZmFjZSIsInNlcnZlciIsImluc3RhbmNlIiwic3BsaXQiLCJyb3V0aW5nRGF0YSIsInBvcnQiLCJSZXF1ZXN0VG9rZW5IYW5kbGVyIiwicmVxdWVzdCIsImVycm9ycyIsImNhbmNlbGVkIiwiUmVxdWVzdEVycm9yIiwic3RhdGUiLCJjbGFzcyIsInNlcnZlck5hbWUiLCJwcm9jTmFtZSIsImxpbmVOdW1iZXIiLCJSZXF1ZXN0IiwiQWdncmVnYXRlRXJyb3IiLCJ1c2VDb2x1bW5OYW1lcyIsImNvbHVtbnMiLCJPYmplY3QiLCJjcmVhdGUiLCJqIiwibGVuIiwiY29sIiwiY29sTmFtZSIsInRhYmxlTmFtZXMiLCJvcmRlckNvbHVtbnMiLCJyb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbiIsInJvd3MiLCJyb3dDb2xsZWN0aW9uT25Eb25lIiwicnN0IiwicHJvY1JldHVyblN0YXR1c1ZhbHVlIiwidmFsdWUiLCJwYXJhbU5hbWUiLCJtZXRhZGF0YSIsInNxbEVycm9yIiwicm93Q291bnQiLCJtb3JlIiwiQXR0ZW50aW9uVG9rZW5IYW5kbGVyIiwiYXR0ZW50aW9uUmVjZWl2ZWQiLCJhdHRlbnRpb24iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vaGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29ubmVjdGlvbiBmcm9tICcuLi9jb25uZWN0aW9uJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yLCBSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHsgdHlwZSBDb2x1bW5NZXRhZGF0YSB9IGZyb20gJy4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyJztcbmltcG9ydCB7XG4gIEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbixcbiAgQ2hhcnNldEVudkNoYW5nZVRva2VuLFxuICBDb2xJbmZvVG9rZW4sXG4gIENvbGxhdGlvbkNoYW5nZVRva2VuLFxuICBDb2xNZXRhZGF0YVRva2VuLFxuICBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBEYXRhYmFzZUVudkNoYW5nZVRva2VuLFxuICBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbixcbiAgRG9uZUluUHJvY1Rva2VuLFxuICBEb25lUHJvY1Rva2VuLFxuICBEb25lVG9rZW4sXG4gIEVycm9yTWVzc2FnZVRva2VuLFxuICBGZWF0dXJlRXh0QWNrVG9rZW4sXG4gIEZlZEF1dGhJbmZvVG9rZW4sXG4gIEluZm9NZXNzYWdlVG9rZW4sXG4gIExhbmd1YWdlRW52Q2hhbmdlVG9rZW4sXG4gIExvZ2luQWNrVG9rZW4sXG4gIE5CQ1Jvd1Rva2VuLFxuICBPcmRlclRva2VuLFxuICBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4sXG4gIFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSZXR1cm5TdGF0dXNUb2tlbixcbiAgUmV0dXJuVmFsdWVUb2tlbixcbiAgUm9sbGJhY2tUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSb3V0aW5nRW52Q2hhbmdlVG9rZW4sXG4gIFJvd1Rva2VuLFxuICBTU1BJVG9rZW4sXG4gIFRhYk5hbWVUb2tlbixcbiAgVG9rZW5cbn0gZnJvbSAnLi90b2tlbic7XG5pbXBvcnQgQnVsa0xvYWQgZnJvbSAnLi4vYnVsay1sb2FkJztcblxuZXhwb3J0IGNsYXNzIFVuZXhwZWN0ZWRUb2tlbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihoYW5kbGVyOiBUb2tlbkhhbmRsZXIsIHRva2VuOiBUb2tlbikge1xuICAgIHN1cGVyKCdVbmV4cGVjdGVkIHRva2VuIGAnICsgdG9rZW4ubmFtZSArICdgIGluIGAnICsgaGFuZGxlci5jb25zdHJ1Y3Rvci5uYW1lICsgJ2AnKTtcbiAgfVxufVxuXG4vKipcbiAqIEVtaXRzIGEgd2FybmluZyAob25jZSBwZXIgcHJvY2Vzcykgd2hlbiBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWRcbiAqIHVzaW5nIFREUyA3LjEuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHRkczcxRGVwcmVjYXRpb25XYXJuaW5nID0ge1xuICBlbWl0dGVkOiBmYWxzZSxcblxuICBlbWl0KCkge1xuICAgIGlmICh0aGlzLmVtaXR0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbWl0dGVkID0gdHJ1ZTtcblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoXG4gICAgICAnU3VwcG9ydCBmb3IgVERTIDcuMSAodXNlZCBieSBTUUwgU2VydmVyIDIwMDApIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIGB0ZWRpb3VzYC4nLFxuICAgICAgeyB0eXBlOiAnRGVwcmVjYXRpb25XYXJuaW5nJywgY29kZTogJ1RFRElPVVNfREVQX1REUzcxJyB9XG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNsYXNzIFRva2VuSGFuZGxlciB7XG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uU1NQSSh0b2tlbjogU1NQSVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25MYW5ndWFnZUNoYW5nZSh0b2tlbjogTGFuZ3VhZ2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblNxbENvbGxhdGlvbkNoYW5nZSh0b2tlbjogQ29sbGF0aW9uQ2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Sb3V0aW5nQ2hhbmdlKHRva2VuOiBSb3V0aW5nRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25SZXNldENvbm5lY3Rpb24odG9rZW46IFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQmVnaW5UcmFuc2FjdGlvbih0b2tlbjogQmVnaW5UcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQ29tbWl0VHJhbnNhY3Rpb24odG9rZW46IENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Sb2xsYmFja1RyYW5zYWN0aW9uKHRva2VuOiBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25GZWRBdXRoSW5mbyh0b2tlbjogRmVkQXV0aEluZm9Ub2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkZlYXR1cmVFeHRBY2sodG9rZW46IEZlYXR1cmVFeHRBY2tUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkxvZ2luQWNrKHRva2VuOiBMb2dpbkFja1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQ29sTWV0YWRhdGEodG9rZW46IENvbE1ldGFkYXRhVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25UYWJOYW1lKHRva2VuOiBUYWJOYW1lVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Db2xJbmZvKHRva2VuOiBDb2xJbmZvVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25PcmRlcih0b2tlbjogT3JkZXJUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJldHVyblN0YXR1cyh0b2tlbjogUmV0dXJuU3RhdHVzVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25SZXR1cm5WYWx1ZSh0b2tlbjogUmV0dXJuVmFsdWVUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkRvbmVQcm9jKHRva2VuOiBEb25lUHJvY1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyKHRva2VuOiBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byB0aGUgaW5pdGlhbCBTUUwgQmF0Y2ggcmVxdWVzdFxuICogdGhhdCBzZXRzIHVwIGRpZmZlcmVudCBjb25uZWN0aW9uIHNldHRpbmdzLlxuICovXG5leHBvcnQgY2xhc3MgSW5pdGlhbFNxbFRva2VuSGFuZGxlciBleHRlbmRzIFRva2VuSGFuZGxlciB7XG4gIGRlY2xhcmUgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uOiBDb25uZWN0aW9uKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gIH1cblxuICBvbkluZm9NZXNzYWdlKHRva2VuOiBJbmZvTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2luZm9NZXNzYWdlJywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yTWVzc2FnZScsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZGF0YWJhc2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2xhbmd1YWdlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25DaGFyc2V0Q2hhbmdlKHRva2VuOiBDaGFyc2V0RW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnY2hhcnNldENoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5kYXRhYmFzZUNvbGxhdGlvbiA9IHRva2VuLm5ld1ZhbHVlO1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24ubWVzc2FnZUlvLnBhY2tldFNpemUodG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25CZWdpblRyYW5zYWN0aW9uKHRva2VuOiBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5wdXNoKHRva2VuLm5ld1ZhbHVlKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IHRydWU7XG4gIH1cblxuICBvbkNvbW1pdFRyYW5zYWN0aW9uKHRva2VuOiBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoID0gMTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgb25Sb2xsYmFja1RyYW5zYWN0aW9uKHRva2VuOiBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIC8vIEFuIG91dGVybW9zdCB0cmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2suIFJlc2V0IHRoZSB0cmFuc2FjdGlvbiBjb3VudGVyXG4gICAgdGhpcy5jb25uZWN0aW9uLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncm9sbGJhY2tUcmFuc2FjdGlvbicpO1xuICB9XG5cbiAgb25Db2xNZXRhZGF0YSh0b2tlbjogQ29sTWV0YWRhdGFUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihcIlJlY2VpdmVkICdjb2x1bW5NZXRhZGF0YScgd2hlbiBubyBzcWxSZXF1ZXN0IGlzIGluIHByb2dyZXNzXCIpKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIG9uT3JkZXIodG9rZW46IE9yZGVyVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoXCJSZWNlaXZlZCAnb3JkZXInIHdoZW4gbm8gc3FsUmVxdWVzdCBpcyBpbiBwcm9ncmVzc1wiKSk7XG4gICAgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihcIlJlY2VpdmVkICdyb3cnIHdoZW4gbm8gc3FsUmVxdWVzdCBpcyBpbiBwcm9ncmVzc1wiKSk7XG4gICAgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBvblJldHVyblN0YXR1cyh0b2tlbjogUmV0dXJuU3RhdHVzVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblJldHVyblZhbHVlKHRva2VuOiBSZXR1cm5WYWx1ZVRva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lUHJvYyh0b2tlbjogRG9uZVByb2NUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblJlc2V0Q29ubmVjdGlvbih0b2tlbjogUmVzZXRDb25uZWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncmVzZXRDb25uZWN0aW9uJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byBhIExvZ2luNyBtZXNzYWdlLlxuICovXG5leHBvcnQgY2xhc3MgTG9naW43VG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuXG4gIGRlY2xhcmUgZmVkQXV0aEluZm9Ub2tlbjogRmVkQXV0aEluZm9Ub2tlbiB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSByb3V0aW5nRGF0YTogeyBzZXJ2ZXI6IHN0cmluZywgcG9ydDogbnVtYmVyLCBpbnN0YW5jZTogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG5cbiAgZGVjbGFyZSBsb2dpbkFja1JlY2VpdmVkOiBib29sZWFuO1xuXG4gIGRlY2xhcmUgbG9naW5FcnJvcjogQ29ubmVjdGlvbkVycm9yIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9naW5BY2tSZWNlaXZlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgdGhpcy5sb2dpbkVycm9yID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgb25JbmZvTWVzc2FnZSh0b2tlbjogSW5mb01lc3NhZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdpbmZvTWVzc2FnZScsIHRva2VuKTtcbiAgfVxuXG4gIG9uRXJyb3JNZXNzYWdlKHRva2VuOiBFcnJvck1lc3NhZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvck1lc3NhZ2UnLCB0b2tlbik7XG5cbiAgICBjb25zdCBlcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IodG9rZW4ubWVzc2FnZSwgJ0VMT0dJTicpO1xuXG4gICAgY29uc3QgaXNMb2dpbkVycm9yVHJhbnNpZW50ID0gdGhpcy5jb25uZWN0aW9uLnRyYW5zaWVudEVycm9yTG9va3VwLmlzVHJhbnNpZW50RXJyb3IodG9rZW4ubnVtYmVyKTtcbiAgICBpZiAoaXNMb2dpbkVycm9yVHJhbnNpZW50ICYmIHRoaXMuY29ubmVjdGlvbi5jdXJUcmFuc2llbnRSZXRyeUNvdW50ICE9PSB0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzKSB7XG4gICAgICBlcnJvci5pc1RyYW5zaWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5sb2dpbkVycm9yID0gZXJyb3I7XG4gIH1cblxuICBvblNTUEkodG9rZW46IFNTUElUb2tlbikge1xuICAgIGlmICh0b2tlbi5udGxtcGFja2V0KSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ubnRsbXBhY2tldCA9IHRva2VuLm50bG1wYWNrZXQ7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ubnRsbXBhY2tldEJ1ZmZlciA9IHRva2VuLm50bG1wYWNrZXRCdWZmZXI7XG4gICAgfVxuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyKHRva2VuOiBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXInLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2xhbmd1YWdlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25DaGFyc2V0Q2hhbmdlKHRva2VuOiBDaGFyc2V0RW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnY2hhcnNldENoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5kYXRhYmFzZUNvbGxhdGlvbiA9IHRva2VuLm5ld1ZhbHVlO1xuICB9XG5cbiAgb25GZWRBdXRoSW5mbyh0b2tlbjogRmVkQXV0aEluZm9Ub2tlbikge1xuICAgIHRoaXMuZmVkQXV0aEluZm9Ub2tlbiA9IHRva2VuO1xuICB9XG5cbiAgb25GZWF0dXJlRXh0QWNrKHRva2VuOiBGZWF0dXJlRXh0QWNrVG9rZW4pIHtcbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0aW9uIH0gPSB0aGlzLmNvbm5lY3Rpb24uY29uZmlnO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW4nIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bScgfHwgYXV0aGVudGljYXRpb24udHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlJyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnKSB7XG4gICAgICBpZiAodG9rZW4uZmVkQXV0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ0RpZCBub3QgcmVjZWl2ZSBBY3RpdmUgRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uIGFja25vd2xlZGdlbWVudCcpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi5mZWRBdXRoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aGlzLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKGBBY3RpdmUgRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uIGFja25vd2xlZGdtZW50IGZvciAke2F1dGhlbnRpY2F0aW9uLnR5cGV9IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBpbmNsdWRlcyBleHRyYSBkYXRhYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0b2tlbi5mZWRBdXRoID09PSB1bmRlZmluZWQgJiYgdG9rZW4udXRmOFN1cHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignUmVjZWl2ZWQgYWNrbm93bGVkZ2VtZW50IGZvciB1bmtub3duIGZlYXR1cmUnKTtcbiAgICB9IGVsc2UgaWYgKHRva2VuLmZlZEF1dGgpIHtcbiAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ0RpZCBub3QgcmVxdWVzdCBBY3RpdmUgRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uLCBidXQgcmVjZWl2ZWQgdGhlIGFja25vd2xlZGdtZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgb25Mb2dpbkFjayh0b2tlbjogTG9naW5BY2tUb2tlbikge1xuICAgIGlmICghdG9rZW4udGRzVmVyc2lvbikge1xuICAgICAgLy8gdW5zdXBwb3J0ZWQgVERTIHZlcnNpb25cbiAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ1NlcnZlciByZXNwb25kZWQgd2l0aCB1bmtub3duIFREUyB2ZXJzaW9uLicsICdFVERTJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0b2tlbi5pbnRlcmZhY2UpIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIGludGVyZmFjZVxuICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignU2VydmVyIHJlc3BvbmRlZCB3aXRoIHVuc3VwcG9ydGVkIGludGVyZmFjZS4nLCAnRUlOVEVSRkFDRU5PVFNVUFAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB1c2UgbmVnb3RpYXRlZCB2ZXJzaW9uXG4gICAgdGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPSB0b2tlbi50ZHNWZXJzaW9uO1xuXG4gICAgaWYgKHRva2VuLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgdGRzNzFEZXByZWNhdGlvbldhcm5pbmcuZW1pdCgpO1xuICAgIH1cblxuICAgIHRoaXMubG9naW5BY2tSZWNlaXZlZCA9IHRydWU7XG4gIH1cblxuICBvblJvdXRpbmdDaGFuZ2UodG9rZW46IFJvdXRpbmdFbnZDaGFuZ2VUb2tlbikge1xuICAgIC8vIFNwbGl0cyBpbnN0YW5jZSBuYW1lIGF0dGFjaGVkIHRvIHRoZSByZWRpcmVjdCB1cmwuIEUuZy4sIHJlZGlyZWN0LmRiLm5ldFxcaW5zdGFuY2UxIC0tPiBbcmVkaXJlY3QuZGIubmV0LCBpbnN0YW5jZTFdXG4gICAgY29uc3QgWyBzZXJ2ZXIsIGluc3RhbmNlIF0gPSB0b2tlbi5uZXdWYWx1ZS5zZXJ2ZXIuc3BsaXQoJ1xcXFwnKTtcblxuICAgIHRoaXMucm91dGluZ0RhdGEgPSB7XG4gICAgICBzZXJ2ZXIsIHBvcnQ6IHRva2VuLm5ld1ZhbHVlLnBvcnQsIGluc3RhbmNlXG4gICAgfTtcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5tZXNzYWdlSW8ucGFja2V0U2l6ZSh0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byBhIFJQQyBSZXF1ZXN0LFxuICogYSBTUUwgQmF0Y2ggUmVxdWVzdCwgYSBCdWxrIExvYWQgQkNQIFJlcXVlc3Qgb3IgYSBUcmFuc2FjdGlvbiBNYW5hZ2VyIFJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0VG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuICBkZWNsYXJlIHJlcXVlc3Q6IFJlcXVlc3QgfCBCdWxrTG9hZDtcbiAgZGVjbGFyZSBlcnJvcnM6IFJlcXVlc3RFcnJvcltdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24sIHJlcXVlc3Q6IFJlcXVlc3QgfCBCdWxrTG9hZCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgfVxuXG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnaW5mb01lc3NhZ2UnLCB0b2tlbik7XG4gIH1cblxuICBvbkVycm9yTWVzc2FnZSh0b2tlbjogRXJyb3JNZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3JNZXNzYWdlJywgdG9rZW4pO1xuXG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFJlcXVlc3RFcnJvcih0b2tlbi5tZXNzYWdlLCAnRVJFUVVFU1QnKTtcblxuICAgICAgZXJyb3IubnVtYmVyID0gdG9rZW4ubnVtYmVyO1xuICAgICAgZXJyb3Iuc3RhdGUgPSB0b2tlbi5zdGF0ZTtcbiAgICAgIGVycm9yLmNsYXNzID0gdG9rZW4uY2xhc3M7XG4gICAgICBlcnJvci5zZXJ2ZXJOYW1lID0gdG9rZW4uc2VydmVyTmFtZTtcbiAgICAgIGVycm9yLnByb2NOYW1lID0gdG9rZW4ucHJvY05hbWU7XG4gICAgICBlcnJvci5saW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjtcbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgdGhpcy5yZXF1ZXN0LmVycm9yID0gZXJyb3I7XG4gICAgICBpZiAodGhpcy5yZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCAmJiB0aGlzLmVycm9ycy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5lcnJvciA9IG5ldyBBZ2dyZWdhdGVFcnJvcih0aGlzLmVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uTGFuZ3VhZ2VDaGFuZ2UodG9rZW46IExhbmd1YWdlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnbGFuZ3VhZ2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdjaGFyc2V0Q2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25TcWxDb2xsYXRpb25DaGFuZ2UodG9rZW46IENvbGxhdGlvbkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmRhdGFiYXNlQ29sbGF0aW9uID0gdG9rZW4ubmV3VmFsdWU7XG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5tZXNzYWdlSW8ucGFja2V0U2l6ZSh0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkJlZ2luVHJhbnNhY3Rpb24odG9rZW46IEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLnB1c2godG9rZW4ubmV3VmFsdWUpO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIG9uQ29tbWl0VHJhbnNhY3Rpb24odG9rZW46IENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICBvblJvbGxiYWNrVHJhbnNhY3Rpb24odG9rZW46IFJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aCA9IDE7XG4gICAgLy8gQW4gb3V0ZXJtb3N0IHRyYW5zYWN0aW9uIHdhcyByb2xsZWQgYmFjay4gUmVzZXQgdGhlIHRyYW5zYWN0aW9uIGNvdW50ZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdyb2xsYmFja1RyYW5zYWN0aW9uJyk7XG4gIH1cblxuICBvbkNvbE1ldGFkYXRhKHRva2VuOiBDb2xNZXRhZGF0YVRva2VuKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMudXNlQ29sdW1uTmFtZXMpIHtcbiAgICAgICAgY29uc3QgY29sdW1uczogeyBba2V5OiBzdHJpbmddOiBDb2x1bW5NZXRhZGF0YSB9ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICBmb3IgKGxldCBqID0gMCwgbGVuID0gdG9rZW4uY29sdW1ucy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGNvbnN0IGNvbCA9IHRva2VuLmNvbHVtbnNbal07XG4gICAgICAgICAgaWYgKGNvbHVtbnNbY29sLmNvbE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbHVtbnNbY29sLmNvbE5hbWVdID0gY29sO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdjb2x1bW5NZXRhZGF0YScsIGNvbHVtbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2NvbHVtbk1ldGFkYXRhJywgdG9rZW4uY29sdW1ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25UYWJOYW1lKHRva2VuOiBUYWJOYW1lVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ3RhYk5hbWUnLCB0b2tlbi50YWJsZU5hbWVzKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbEluZm8odG9rZW46IENvbEluZm9Ub2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnY29sSW5mbycsIHRva2VuLmNvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIG9uT3JkZXIodG9rZW46IE9yZGVyVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ29yZGVyJywgdG9rZW4ub3JkZXJDb2x1bW5zKTtcbiAgICB9XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dzIS5wdXNoKHRva2VuLmNvbHVtbnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmUpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJzdCEucHVzaCh0b2tlbi5jb2x1bW5zKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ3JvdycsIHRva2VuLmNvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIG9uUmV0dXJuU3RhdHVzKHRva2VuOiBSZXR1cm5TdGF0dXNUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICAvLyBLZWVwIHZhbHVlIGZvciBwYXNzaW5nIGluICdkb25lUHJvYycgZXZlbnQuXG4gICAgICB0aGlzLmNvbm5lY3Rpb24ucHJvY1JldHVyblN0YXR1c1ZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgfVxuICB9XG5cbiAgb25SZXR1cm5WYWx1ZSh0b2tlbjogUmV0dXJuVmFsdWVUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgncmV0dXJuVmFsdWUnLCB0b2tlbi5wYXJhbU5hbWUsIHRva2VuLnZhbHVlLCB0b2tlbi5tZXRhZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgb25Eb25lUHJvYyh0b2tlbjogRG9uZVByb2NUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodG9rZW4uc3FsRXJyb3IgJiYgIXRoaXMucmVxdWVzdC5lcnJvcikge1xuICAgICAgICAvLyBjaGVjayBpZiB0aGUgRE9ORV9FUlJPUiBmbGFncyB3YXMgc2V0LCBidXQgYW4gRVJST1IgdG9rZW4gd2FzIG5vdCBzZW50LlxuICAgICAgICB0aGlzLnJlcXVlc3QuZXJyb3IgPSBuZXcgUmVxdWVzdEVycm9yKCdBbiB1bmtub3duIGVycm9yIGhhcyBvY2N1cnJlZC4nLCAnVU5LTk9XTicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnZG9uZVByb2MnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5jb25uZWN0aW9uLnByb2NSZXR1cm5TdGF0dXNWYWx1ZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIHRoaXMuY29ubmVjdGlvbi5wcm9jUmV0dXJuU3RhdHVzVmFsdWUgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Eb25lSW5Qcm9jKHRva2VuOiBEb25lSW5Qcm9jVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2RvbmVJblByb2MnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgaWYgKHRva2VuLnNxbEVycm9yICYmICF0aGlzLnJlcXVlc3QuZXJyb3IpIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIERPTkVfRVJST1IgZmxhZ3Mgd2FzIHNldCwgYnV0IGFuIEVSUk9SIHRva2VuIHdhcyBub3Qgc2VudC5cbiAgICAgICAgdGhpcy5yZXF1ZXN0LmVycm9yID0gbmV3IFJlcXVlc3RFcnJvcignQW4gdW5rbm93biBlcnJvciBoYXMgb2NjdXJyZWQuJywgJ1VOS05PV04nKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2RvbmUnLCB0b2tlbi5yb3dDb3VudCwgdG9rZW4ubW9yZSwgdGhpcy5yZXF1ZXN0LnJzdCk7XG5cbiAgICAgIGlmICh0b2tlbi5yb3dDb3VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dDb3VudCEgKz0gdG9rZW4ucm93Q291bnQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMucm93Q29sbGVjdGlvbk9uRG9uZSkge1xuICAgICAgICB0aGlzLnJlcXVlc3QucnN0ID0gW107XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25SZXNldENvbm5lY3Rpb24odG9rZW46IFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ3Jlc2V0Q29ubmVjdGlvbicpO1xuICB9XG59XG5cbi8qKlxuICogQSBoYW5kbGVyIGZvciB0aGUgYXR0ZW50aW9uIGFja25vd2xlZGdlbWVudCBtZXNzYWdlLlxuICpcbiAqIFRoaXMgbWVzc2FnZSBvbmx5IGNvbnRhaW5zIGEgYERPTkVgIHRva2VuIHRoYXQgYWNrbm93bGVkZ2VzXG4gKiB0aGF0IHRoZSBhdHRlbnRpb24gbWVzc2FnZSB3YXMgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlci5cbiAqL1xuZXhwb3J0IGNsYXNzIEF0dGVudGlvblRva2VuSGFuZGxlciBleHRlbmRzIFRva2VuSGFuZGxlciB7XG4gIGRlY2xhcmUgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcbiAgZGVjbGFyZSByZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciBhbiBhdHRlbnRpb24gYWNrbm93bGVkZ2VtZW50IHdhcyByZWNlaXZlZC5cbiAgICovXG4gIGRlY2xhcmUgYXR0ZW50aW9uUmVjZWl2ZWQ6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbjogQ29ubmVjdGlvbiwgcmVxdWVzdDogUmVxdWVzdCB8IEJ1bGtMb2FkKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdDtcblxuICAgIHRoaXMuYXR0ZW50aW9uUmVjZWl2ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgaWYgKHRva2VuLmF0dGVudGlvbikge1xuICAgICAgdGhpcy5hdHRlbnRpb25SZWNlaXZlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFB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
|
|
493
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVxdWVzdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2Vycm9ycyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlVuZXhwZWN0ZWRUb2tlbkVycm9yIiwiRXJyb3IiLCJjb25zdHJ1Y3RvciIsImhhbmRsZXIiLCJ0b2tlbiIsIm5hbWUiLCJleHBvcnRzIiwidGRzNzFEZXByZWNhdGlvbldhcm5pbmciLCJlbWl0dGVkIiwiZW1pdCIsInByb2Nlc3MiLCJlbWl0V2FybmluZyIsInR5cGUiLCJjb2RlIiwiVG9rZW5IYW5kbGVyIiwib25JbmZvTWVzc2FnZSIsIm9uRXJyb3JNZXNzYWdlIiwib25TU1BJIiwib25EYXRhYmFzZUNoYW5nZSIsIm9uTGFuZ3VhZ2VDaGFuZ2UiLCJvbkNoYXJzZXRDaGFuZ2UiLCJvblNxbENvbGxhdGlvbkNoYW5nZSIsIm9uUm91dGluZ0NoYW5nZSIsIm9uUGFja2V0U2l6ZUNoYW5nZSIsIm9uUmVzZXRDb25uZWN0aW9uIiwib25CZWdpblRyYW5zYWN0aW9uIiwib25Db21taXRUcmFuc2FjdGlvbiIsIm9uUm9sbGJhY2tUcmFuc2FjdGlvbiIsIm9uRmVkQXV0aEluZm8iLCJvbkZlYXR1cmVFeHRBY2siLCJvbkxvZ2luQWNrIiwib25Db2xNZXRhZGF0YSIsIm9uVGFiTmFtZSIsIm9uQ29sSW5mbyIsIm9uT3JkZXIiLCJvblJvdyIsIm9uUmV0dXJuU3RhdHVzIiwib25SZXR1cm5WYWx1ZSIsIm9uRG9uZVByb2MiLCJvbkRvbmVJblByb2MiLCJvbkRvbmUiLCJvbkRhdGFiYXNlTWlycm9yaW5nUGFydG5lciIsIkluaXRpYWxTcWxUb2tlbkhhbmRsZXIiLCJjb25uZWN0aW9uIiwibmV3VmFsdWUiLCJkYXRhYmFzZUNvbGxhdGlvbiIsIm1lc3NhZ2VJbyIsInBhY2tldFNpemUiLCJ0cmFuc2FjdGlvbkRlc2NyaXB0b3JzIiwicHVzaCIsImluVHJhbnNhY3Rpb24iLCJsZW5ndGgiLCJjbG9zZSIsIkxvZ2luN1Rva2VuSGFuZGxlciIsImxvZ2luQWNrUmVjZWl2ZWQiLCJsb2dpbkVycm9yIiwidW5kZWZpbmVkIiwiZXJyb3IiLCJDb25uZWN0aW9uRXJyb3IiLCJtZXNzYWdlIiwiaXNMb2dpbkVycm9yVHJhbnNpZW50IiwidHJhbnNpZW50RXJyb3JMb29rdXAiLCJpc1RyYW5zaWVudEVycm9yIiwibnVtYmVyIiwiY3VyVHJhbnNpZW50UmV0cnlDb3VudCIsImNvbmZpZyIsIm9wdGlvbnMiLCJtYXhSZXRyaWVzT25UcmFuc2llbnRFcnJvcnMiLCJpc1RyYW5zaWVudCIsIm50bG1wYWNrZXQiLCJudGxtcGFja2V0QnVmZmVyIiwiZmVkQXV0aEluZm9Ub2tlbiIsImF1dGhlbnRpY2F0aW9uIiwiZmVkQXV0aCIsInV0ZjhTdXBwb3J0IiwidGRzVmVyc2lvbiIsImludGVyZmFjZSIsInNlcnZlciIsImluc3RhbmNlIiwic3BsaXQiLCJyb3V0aW5nRGF0YSIsInBvcnQiLCJSZXF1ZXN0VG9rZW5IYW5kbGVyIiwicmVxdWVzdCIsImVycm9ycyIsImNhbmNlbGVkIiwiUmVxdWVzdEVycm9yIiwic3RhdGUiLCJjbGFzcyIsInNlcnZlck5hbWUiLCJwcm9jTmFtZSIsImxpbmVOdW1iZXIiLCJSZXF1ZXN0IiwiQWdncmVnYXRlRXJyb3IiLCJ1c2VDb2x1bW5OYW1lcyIsImNvbHVtbnMiLCJPYmplY3QiLCJjcmVhdGUiLCJqIiwibGVuIiwiY29sIiwiY29sTmFtZSIsInRhYmxlTmFtZXMiLCJvcmRlckNvbHVtbnMiLCJyb3dDb2xsZWN0aW9uT25SZXF1ZXN0Q29tcGxldGlvbiIsInJvd3MiLCJyb3dDb2xsZWN0aW9uT25Eb25lIiwicnN0IiwicHJvY1JldHVyblN0YXR1c1ZhbHVlIiwidmFsdWUiLCJwcmVwYXJpbmciLCJwYXJhbU5hbWUiLCJoYW5kbGUiLCJtZXRhZGF0YSIsInNxbEVycm9yIiwicm93Q291bnQiLCJtb3JlIiwiQXR0ZW50aW9uVG9rZW5IYW5kbGVyIiwiYXR0ZW50aW9uUmVjZWl2ZWQiLCJhdHRlbnRpb24iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vaGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29ubmVjdGlvbiBmcm9tICcuLi9jb25uZWN0aW9uJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IHsgQ29ubmVjdGlvbkVycm9yLCBSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IHsgdHlwZSBDb2x1bW5NZXRhZGF0YSB9IGZyb20gJy4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyJztcbmltcG9ydCB7XG4gIEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbixcbiAgQ2hhcnNldEVudkNoYW5nZVRva2VuLFxuICBDb2xJbmZvVG9rZW4sXG4gIENvbGxhdGlvbkNoYW5nZVRva2VuLFxuICBDb2xNZXRhZGF0YVRva2VuLFxuICBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBEYXRhYmFzZUVudkNoYW5nZVRva2VuLFxuICBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbixcbiAgRG9uZUluUHJvY1Rva2VuLFxuICBEb25lUHJvY1Rva2VuLFxuICBEb25lVG9rZW4sXG4gIEVycm9yTWVzc2FnZVRva2VuLFxuICBGZWF0dXJlRXh0QWNrVG9rZW4sXG4gIEZlZEF1dGhJbmZvVG9rZW4sXG4gIEluZm9NZXNzYWdlVG9rZW4sXG4gIExhbmd1YWdlRW52Q2hhbmdlVG9rZW4sXG4gIExvZ2luQWNrVG9rZW4sXG4gIE5CQ1Jvd1Rva2VuLFxuICBPcmRlclRva2VuLFxuICBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4sXG4gIFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSZXR1cm5TdGF0dXNUb2tlbixcbiAgUmV0dXJuVmFsdWVUb2tlbixcbiAgUm9sbGJhY2tUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuLFxuICBSb3V0aW5nRW52Q2hhbmdlVG9rZW4sXG4gIFJvd1Rva2VuLFxuICBTU1BJVG9rZW4sXG4gIFRhYk5hbWVUb2tlbixcbiAgVG9rZW5cbn0gZnJvbSAnLi90b2tlbic7XG5pbXBvcnQgQnVsa0xvYWQgZnJvbSAnLi4vYnVsay1sb2FkJztcblxuZXhwb3J0IGNsYXNzIFVuZXhwZWN0ZWRUb2tlbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihoYW5kbGVyOiBUb2tlbkhhbmRsZXIsIHRva2VuOiBUb2tlbikge1xuICAgIHN1cGVyKCdVbmV4cGVjdGVkIHRva2VuIGAnICsgdG9rZW4ubmFtZSArICdgIGluIGAnICsgaGFuZGxlci5jb25zdHJ1Y3Rvci5uYW1lICsgJ2AnKTtcbiAgfVxufVxuXG4vKipcbiAqIEVtaXRzIGEgd2FybmluZyAob25jZSBwZXIgcHJvY2Vzcykgd2hlbiBhIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWRcbiAqIHVzaW5nIFREUyA3LjEuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IHRkczcxRGVwcmVjYXRpb25XYXJuaW5nID0ge1xuICBlbWl0dGVkOiBmYWxzZSxcblxuICBlbWl0KCkge1xuICAgIGlmICh0aGlzLmVtaXR0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5lbWl0dGVkID0gdHJ1ZTtcblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoXG4gICAgICAnU3VwcG9ydCBmb3IgVERTIDcuMSAodXNlZCBieSBTUUwgU2VydmVyIDIwMDApIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIGB0ZWRpb3VzYC4nLFxuICAgICAgeyB0eXBlOiAnRGVwcmVjYXRpb25XYXJuaW5nJywgY29kZTogJ1RFRElPVVNfREVQX1REUzcxJyB9XG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNsYXNzIFRva2VuSGFuZGxlciB7XG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uU1NQSSh0b2tlbjogU1NQSVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25MYW5ndWFnZUNoYW5nZSh0b2tlbjogTGFuZ3VhZ2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblNxbENvbGxhdGlvbkNoYW5nZSh0b2tlbjogQ29sbGF0aW9uQ2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Sb3V0aW5nQ2hhbmdlKHRva2VuOiBSb3V0aW5nRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25SZXNldENvbm5lY3Rpb24odG9rZW46IFJlc2V0Q29ubmVjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQmVnaW5UcmFuc2FjdGlvbih0b2tlbjogQmVnaW5UcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQ29tbWl0VHJhbnNhY3Rpb24odG9rZW46IENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Sb2xsYmFja1RyYW5zYWN0aW9uKHRva2VuOiBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25GZWRBdXRoSW5mbyh0b2tlbjogRmVkQXV0aEluZm9Ub2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkZlYXR1cmVFeHRBY2sodG9rZW46IEZlYXR1cmVFeHRBY2tUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkxvZ2luQWNrKHRva2VuOiBMb2dpbkFja1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uQ29sTWV0YWRhdGEodG9rZW46IENvbE1ldGFkYXRhVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25UYWJOYW1lKHRva2VuOiBUYWJOYW1lVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25Db2xJbmZvKHRva2VuOiBDb2xJbmZvVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25PcmRlcih0b2tlbjogT3JkZXJUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvblJldHVyblN0YXR1cyh0b2tlbjogUmV0dXJuU3RhdHVzVG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgVW5leHBlY3RlZFRva2VuRXJyb3IodGhpcywgdG9rZW4pO1xuICB9XG5cbiAgb25SZXR1cm5WYWx1ZSh0b2tlbjogUmV0dXJuVmFsdWVUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cblxuICBvbkRvbmVQcm9jKHRva2VuOiBEb25lUHJvY1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRG9uZSh0b2tlbjogRG9uZVRva2VuKSB7XG4gICAgdGhyb3cgbmV3IFVuZXhwZWN0ZWRUb2tlbkVycm9yKHRoaXMsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyKHRva2VuOiBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRocm93IG5ldyBVbmV4cGVjdGVkVG9rZW5FcnJvcih0aGlzLCB0b2tlbik7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byB0aGUgaW5pdGlhbCBTUUwgQmF0Y2ggcmVxdWVzdFxuICogdGhhdCBzZXRzIHVwIGRpZmZlcmVudCBjb25uZWN0aW9uIHNldHRpbmdzLlxuICovXG5leHBvcnQgY2xhc3MgSW5pdGlhbFNxbFRva2VuSGFuZGxlciBleHRlbmRzIFRva2VuSGFuZGxlciB7XG4gIGRlY2xhcmUgY29ubmVjdGlvbjogQ29ubmVjdGlvbjtcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uOiBDb25uZWN0aW9uKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gIH1cblxuICBvbkluZm9NZXNzYWdlKHRva2VuOiBJbmZvTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2luZm9NZXNzYWdlJywgdG9rZW4pO1xuICB9XG5cbiAgb25FcnJvck1lc3NhZ2UodG9rZW46IEVycm9yTWVzc2FnZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2Vycm9yTWVzc2FnZScsIHRva2VuKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VDaGFuZ2UodG9rZW46IERhdGFiYXNlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZGF0YWJhc2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2xhbmd1YWdlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25DaGFyc2V0Q2hhbmdlKHRva2VuOiBDaGFyc2V0RW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnY2hhcnNldENoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5kYXRhYmFzZUNvbGxhdGlvbiA9IHRva2VuLm5ld1ZhbHVlO1xuICB9XG5cbiAgb25QYWNrZXRTaXplQ2hhbmdlKHRva2VuOiBQYWNrZXRTaXplRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24ubWVzc2FnZUlvLnBhY2tldFNpemUodG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25CZWdpblRyYW5zYWN0aW9uKHRva2VuOiBCZWdpblRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5wdXNoKHRva2VuLm5ld1ZhbHVlKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IHRydWU7XG4gIH1cblxuICBvbkNvbW1pdFRyYW5zYWN0aW9uKHRva2VuOiBDb21taXRUcmFuc2FjdGlvbkVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLnRyYW5zYWN0aW9uRGVzY3JpcHRvcnMubGVuZ3RoID0gMTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICB9XG5cbiAgb25Sb2xsYmFja1RyYW5zYWN0aW9uKHRva2VuOiBSb2xsYmFja1RyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIC8vIEFuIG91dGVybW9zdCB0cmFuc2FjdGlvbiB3YXMgcm9sbGVkIGJhY2suIFJlc2V0IHRoZSB0cmFuc2FjdGlvbiBjb3VudGVyXG4gICAgdGhpcy5jb25uZWN0aW9uLmluVHJhbnNhY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncm9sbGJhY2tUcmFuc2FjdGlvbicpO1xuICB9XG5cbiAgb25Db2xNZXRhZGF0YSh0b2tlbjogQ29sTWV0YWRhdGFUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihcIlJlY2VpdmVkICdjb2x1bW5NZXRhZGF0YScgd2hlbiBubyBzcWxSZXF1ZXN0IGlzIGluIHByb2dyZXNzXCIpKTtcbiAgICB0aGlzLmNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgfVxuXG4gIG9uT3JkZXIodG9rZW46IE9yZGVyVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IoXCJSZWNlaXZlZCAnb3JkZXInIHdoZW4gbm8gc3FsUmVxdWVzdCBpcyBpbiBwcm9ncmVzc1wiKSk7XG4gICAgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihcIlJlY2VpdmVkICdyb3cnIHdoZW4gbm8gc3FsUmVxdWVzdCBpcyBpbiBwcm9ncmVzc1wiKSk7XG4gICAgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBvblJldHVyblN0YXR1cyh0b2tlbjogUmV0dXJuU3RhdHVzVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblJldHVyblZhbHVlKHRva2VuOiBSZXR1cm5WYWx1ZVRva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lUHJvYyh0b2tlbjogRG9uZVByb2NUb2tlbikge1xuICAgIC8vIERvIG5vdGhpbmdcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblJlc2V0Q29ubmVjdGlvbih0b2tlbjogUmVzZXRDb25uZWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncmVzZXRDb25uZWN0aW9uJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byBhIExvZ2luNyBtZXNzYWdlLlxuICovXG5leHBvcnQgY2xhc3MgTG9naW43VG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuXG4gIGRlY2xhcmUgZmVkQXV0aEluZm9Ub2tlbjogRmVkQXV0aEluZm9Ub2tlbiB8IHVuZGVmaW5lZDtcbiAgZGVjbGFyZSByb3V0aW5nRGF0YTogeyBzZXJ2ZXI6IHN0cmluZywgcG9ydDogbnVtYmVyLCBpbnN0YW5jZTogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG5cbiAgZGVjbGFyZSBsb2dpbkFja1JlY2VpdmVkOiBib29sZWFuO1xuXG4gIGRlY2xhcmUgbG9naW5FcnJvcjogQ29ubmVjdGlvbkVycm9yIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubG9naW5BY2tSZWNlaXZlZCA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGlvbiA9IGNvbm5lY3Rpb247XG4gICAgdGhpcy5sb2dpbkVycm9yID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgb25JbmZvTWVzc2FnZSh0b2tlbjogSW5mb01lc3NhZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdpbmZvTWVzc2FnZScsIHRva2VuKTtcbiAgfVxuXG4gIG9uRXJyb3JNZXNzYWdlKHRva2VuOiBFcnJvck1lc3NhZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdlcnJvck1lc3NhZ2UnLCB0b2tlbik7XG5cbiAgICBjb25zdCBlcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IodG9rZW4ubWVzc2FnZSwgJ0VMT0dJTicpO1xuXG4gICAgY29uc3QgaXNMb2dpbkVycm9yVHJhbnNpZW50ID0gdGhpcy5jb25uZWN0aW9uLnRyYW5zaWVudEVycm9yTG9va3VwLmlzVHJhbnNpZW50RXJyb3IodG9rZW4ubnVtYmVyKTtcbiAgICBpZiAoaXNMb2dpbkVycm9yVHJhbnNpZW50ICYmIHRoaXMuY29ubmVjdGlvbi5jdXJUcmFuc2llbnRSZXRyeUNvdW50ICE9PSB0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMubWF4UmV0cmllc09uVHJhbnNpZW50RXJyb3JzKSB7XG4gICAgICBlcnJvci5pc1RyYW5zaWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5sb2dpbkVycm9yID0gZXJyb3I7XG4gIH1cblxuICBvblNTUEkodG9rZW46IFNTUElUb2tlbikge1xuICAgIGlmICh0b2tlbi5udGxtcGFja2V0KSB7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ubnRsbXBhY2tldCA9IHRva2VuLm50bG1wYWNrZXQ7XG4gICAgICB0aGlzLmNvbm5lY3Rpb24ubnRsbXBhY2tldEJ1ZmZlciA9IHRva2VuLm50bG1wYWNrZXRCdWZmZXI7XG4gICAgfVxuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uRGF0YWJhc2VNaXJyb3JpbmdQYXJ0bmVyKHRva2VuOiBEYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXJFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZU1pcnJvcmluZ1BhcnRuZXInLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkxhbmd1YWdlQ2hhbmdlKHRva2VuOiBMYW5ndWFnZUVudkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmVtaXQoJ2xhbmd1YWdlQ2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25DaGFyc2V0Q2hhbmdlKHRva2VuOiBDaGFyc2V0RW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnY2hhcnNldENoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uU3FsQ29sbGF0aW9uQ2hhbmdlKHRva2VuOiBDb2xsYXRpb25DaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5kYXRhYmFzZUNvbGxhdGlvbiA9IHRva2VuLm5ld1ZhbHVlO1xuICB9XG5cbiAgb25GZWRBdXRoSW5mbyh0b2tlbjogRmVkQXV0aEluZm9Ub2tlbikge1xuICAgIHRoaXMuZmVkQXV0aEluZm9Ub2tlbiA9IHRva2VuO1xuICB9XG5cbiAgb25GZWF0dXJlRXh0QWNrKHRva2VuOiBGZWF0dXJlRXh0QWNrVG9rZW4pIHtcbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0aW9uIH0gPSB0aGlzLmNvbm5lY3Rpb24uY29uZmlnO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LXBhc3N3b3JkJyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1hY2Nlc3MtdG9rZW4nIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LW1zaS12bScgfHwgYXV0aGVudGljYXRpb24udHlwZSA9PT0gJ2F6dXJlLWFjdGl2ZS1kaXJlY3RvcnktbXNpLWFwcC1zZXJ2aWNlJyB8fCBhdXRoZW50aWNhdGlvbi50eXBlID09PSAnYXp1cmUtYWN0aXZlLWRpcmVjdG9yeS1zZXJ2aWNlLXByaW5jaXBhbC1zZWNyZXQnIHx8IGF1dGhlbnRpY2F0aW9uLnR5cGUgPT09ICdhenVyZS1hY3RpdmUtZGlyZWN0b3J5LWRlZmF1bHQnKSB7XG4gICAgICBpZiAodG9rZW4uZmVkQXV0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ0RpZCBub3QgcmVjZWl2ZSBBY3RpdmUgRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uIGFja25vd2xlZGdlbWVudCcpO1xuICAgICAgfSBlbHNlIGlmICh0b2tlbi5mZWRBdXRoLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aGlzLmxvZ2luRXJyb3IgPSBuZXcgQ29ubmVjdGlvbkVycm9yKGBBY3RpdmUgRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uIGFja25vd2xlZGdtZW50IGZvciAke2F1dGhlbnRpY2F0aW9uLnR5cGV9IGF1dGhlbnRpY2F0aW9uIG1ldGhvZCBpbmNsdWRlcyBleHRyYSBkYXRhYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0b2tlbi5mZWRBdXRoID09PSB1bmRlZmluZWQgJiYgdG9rZW4udXRmOFN1cHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignUmVjZWl2ZWQgYWNrbm93bGVkZ2VtZW50IGZvciB1bmtub3duIGZlYXR1cmUnKTtcbiAgICB9IGVsc2UgaWYgKHRva2VuLmZlZEF1dGgpIHtcbiAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ0RpZCBub3QgcmVxdWVzdCBBY3RpdmUgRGlyZWN0b3J5IGF1dGhlbnRpY2F0aW9uLCBidXQgcmVjZWl2ZWQgdGhlIGFja25vd2xlZGdtZW50Jyk7XG4gICAgfVxuICB9XG5cbiAgb25Mb2dpbkFjayh0b2tlbjogTG9naW5BY2tUb2tlbikge1xuICAgIGlmICghdG9rZW4udGRzVmVyc2lvbikge1xuICAgICAgLy8gdW5zdXBwb3J0ZWQgVERTIHZlcnNpb25cbiAgICAgIHRoaXMubG9naW5FcnJvciA9IG5ldyBDb25uZWN0aW9uRXJyb3IoJ1NlcnZlciByZXNwb25kZWQgd2l0aCB1bmtub3duIFREUyB2ZXJzaW9uLicsICdFVERTJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0b2tlbi5pbnRlcmZhY2UpIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIGludGVyZmFjZVxuICAgICAgdGhpcy5sb2dpbkVycm9yID0gbmV3IENvbm5lY3Rpb25FcnJvcignU2VydmVyIHJlc3BvbmRlZCB3aXRoIHVuc3VwcG9ydGVkIGludGVyZmFjZS4nLCAnRUlOVEVSRkFDRU5PVFNVUFAnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB1c2UgbmVnb3RpYXRlZCB2ZXJzaW9uXG4gICAgdGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnRkc1ZlcnNpb24gPSB0b2tlbi50ZHNWZXJzaW9uO1xuXG4gICAgaWYgKHRva2VuLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgdGRzNzFEZXByZWNhdGlvbldhcm5pbmcuZW1pdCgpO1xuICAgIH1cblxuICAgIHRoaXMubG9naW5BY2tSZWNlaXZlZCA9IHRydWU7XG4gIH1cblxuICBvblJvdXRpbmdDaGFuZ2UodG9rZW46IFJvdXRpbmdFbnZDaGFuZ2VUb2tlbikge1xuICAgIC8vIFNwbGl0cyBpbnN0YW5jZSBuYW1lIGF0dGFjaGVkIHRvIHRoZSByZWRpcmVjdCB1cmwuIEUuZy4sIHJlZGlyZWN0LmRiLm5ldFxcaW5zdGFuY2UxIC0tPiBbcmVkaXJlY3QuZGIubmV0LCBpbnN0YW5jZTFdXG4gICAgY29uc3QgWyBzZXJ2ZXIsIGluc3RhbmNlIF0gPSB0b2tlbi5uZXdWYWx1ZS5zZXJ2ZXIuc3BsaXQoJ1xcXFwnKTtcblxuICAgIHRoaXMucm91dGluZ0RhdGEgPSB7XG4gICAgICBzZXJ2ZXIsIHBvcnQ6IHRva2VuLm5ld1ZhbHVlLnBvcnQsIGluc3RhbmNlXG4gICAgfTtcbiAgfVxuXG4gIG9uRG9uZUluUHJvYyh0b2tlbjogRG9uZUluUHJvY1Rva2VuKSB7XG4gICAgLy8gRG8gbm90aGluZ1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICAvLyBEbyBub3RoaW5nXG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5tZXNzYWdlSW8ucGFja2V0U2l6ZSh0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRva2VucyByZWNlaXZlZCBpbiB0aGUgcmVzcG9uc2UgbWVzc2FnZSB0byBhIFJQQyBSZXF1ZXN0LFxuICogYSBTUUwgQmF0Y2ggUmVxdWVzdCwgYSBCdWxrIExvYWQgQkNQIFJlcXVlc3Qgb3IgYSBUcmFuc2FjdGlvbiBNYW5hZ2VyIFJlcXVlc3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0VG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuICBkZWNsYXJlIHJlcXVlc3Q6IFJlcXVlc3QgfCBCdWxrTG9hZDtcbiAgZGVjbGFyZSBlcnJvcnM6IFJlcXVlc3RFcnJvcltdO1xuXG4gIGNvbnN0cnVjdG9yKGNvbm5lY3Rpb246IENvbm5lY3Rpb24sIHJlcXVlc3Q6IFJlcXVlc3QgfCBCdWxrTG9hZCkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb24gPSBjb25uZWN0aW9uO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3Q7XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgfVxuXG4gIG9uSW5mb01lc3NhZ2UodG9rZW46IEluZm9NZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnaW5mb01lc3NhZ2UnLCB0b2tlbik7XG4gIH1cblxuICBvbkVycm9yTWVzc2FnZSh0b2tlbjogRXJyb3JNZXNzYWdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnZXJyb3JNZXNzYWdlJywgdG9rZW4pO1xuXG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IFJlcXVlc3RFcnJvcih0b2tlbi5tZXNzYWdlLCAnRVJFUVVFU1QnKTtcblxuICAgICAgZXJyb3IubnVtYmVyID0gdG9rZW4ubnVtYmVyO1xuICAgICAgZXJyb3Iuc3RhdGUgPSB0b2tlbi5zdGF0ZTtcbiAgICAgIGVycm9yLmNsYXNzID0gdG9rZW4uY2xhc3M7XG4gICAgICBlcnJvci5zZXJ2ZXJOYW1lID0gdG9rZW4uc2VydmVyTmFtZTtcbiAgICAgIGVycm9yLnByb2NOYW1lID0gdG9rZW4ucHJvY05hbWU7XG4gICAgICBlcnJvci5saW5lTnVtYmVyID0gdG9rZW4ubGluZU51bWJlcjtcbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goZXJyb3IpO1xuICAgICAgdGhpcy5yZXF1ZXN0LmVycm9yID0gZXJyb3I7XG4gICAgICBpZiAodGhpcy5yZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCAmJiB0aGlzLmVycm9ycy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5lcnJvciA9IG5ldyBBZ2dyZWdhdGVFcnJvcih0aGlzLmVycm9ycyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EYXRhYmFzZUNoYW5nZSh0b2tlbjogRGF0YWJhc2VFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdkYXRhYmFzZUNoYW5nZScsIHRva2VuLm5ld1ZhbHVlKTtcbiAgfVxuXG4gIG9uTGFuZ3VhZ2VDaGFuZ2UodG9rZW46IExhbmd1YWdlRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgnbGFuZ3VhZ2VDaGFuZ2UnLCB0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkNoYXJzZXRDaGFuZ2UodG9rZW46IENoYXJzZXRFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdjaGFyc2V0Q2hhbmdlJywgdG9rZW4ubmV3VmFsdWUpO1xuICB9XG5cbiAgb25TcWxDb2xsYXRpb25DaGFuZ2UodG9rZW46IENvbGxhdGlvbkNoYW5nZVRva2VuKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uLmRhdGFiYXNlQ29sbGF0aW9uID0gdG9rZW4ubmV3VmFsdWU7XG4gIH1cblxuICBvblBhY2tldFNpemVDaGFuZ2UodG9rZW46IFBhY2tldFNpemVFbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi5tZXNzYWdlSW8ucGFja2V0U2l6ZSh0b2tlbi5uZXdWYWx1ZSk7XG4gIH1cblxuICBvbkJlZ2luVHJhbnNhY3Rpb24odG9rZW46IEJlZ2luVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLnB1c2godG9rZW4ubmV3VmFsdWUpO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gdHJ1ZTtcbiAgfVxuXG4gIG9uQ29tbWl0VHJhbnNhY3Rpb24odG9rZW46IENvbW1pdFRyYW5zYWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24udHJhbnNhY3Rpb25EZXNjcmlwdG9ycy5sZW5ndGggPSAxO1xuICAgIHRoaXMuY29ubmVjdGlvbi5pblRyYW5zYWN0aW9uID0gZmFsc2U7XG4gIH1cblxuICBvblJvbGxiYWNrVHJhbnNhY3Rpb24odG9rZW46IFJvbGxiYWNrVHJhbnNhY3Rpb25FbnZDaGFuZ2VUb2tlbikge1xuICAgIHRoaXMuY29ubmVjdGlvbi50cmFuc2FjdGlvbkRlc2NyaXB0b3JzLmxlbmd0aCA9IDE7XG4gICAgLy8gQW4gb3V0ZXJtb3N0IHRyYW5zYWN0aW9uIHdhcyByb2xsZWQgYmFjay4gUmVzZXQgdGhlIHRyYW5zYWN0aW9uIGNvdW50ZXJcbiAgICB0aGlzLmNvbm5lY3Rpb24uaW5UcmFuc2FjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY29ubmVjdGlvbi5lbWl0KCdyb2xsYmFja1RyYW5zYWN0aW9uJyk7XG4gIH1cblxuICBvbkNvbE1ldGFkYXRhKHRva2VuOiBDb2xNZXRhZGF0YVRva2VuKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGlmICh0aGlzLmNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMudXNlQ29sdW1uTmFtZXMpIHtcbiAgICAgICAgY29uc3QgY29sdW1uczogeyBba2V5OiBzdHJpbmddOiBDb2x1bW5NZXRhZGF0YSB9ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgICBmb3IgKGxldCBqID0gMCwgbGVuID0gdG9rZW4uY29sdW1ucy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgICAgIGNvbnN0IGNvbCA9IHRva2VuLmNvbHVtbnNbal07XG4gICAgICAgICAgaWYgKGNvbHVtbnNbY29sLmNvbE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbHVtbnNbY29sLmNvbE5hbWVdID0gY29sO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdjb2x1bW5NZXRhZGF0YScsIGNvbHVtbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ2NvbHVtbk1ldGFkYXRhJywgdG9rZW4uY29sdW1ucyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25UYWJOYW1lKHRva2VuOiBUYWJOYW1lVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ3RhYk5hbWUnLCB0b2tlbi50YWJsZU5hbWVzKTtcbiAgICB9XG4gIH1cblxuICBvbkNvbEluZm8odG9rZW46IENvbEluZm9Ub2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnY29sSW5mbycsIHRva2VuLmNvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIG9uT3JkZXIodG9rZW46IE9yZGVyVG9rZW4pIHtcbiAgICBpZiAoIXRoaXMucmVxdWVzdC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ29yZGVyJywgdG9rZW4ub3JkZXJDb2x1bW5zKTtcbiAgICB9XG4gIH1cblxuICBvblJvdyh0b2tlbjogUm93VG9rZW4gfCBOQkNSb3dUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PblJlcXVlc3RDb21wbGV0aW9uKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yb3dzIS5wdXNoKHRva2VuLmNvbHVtbnMpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5jb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zLnJvd0NvbGxlY3Rpb25PbkRvbmUpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJzdCEucHVzaCh0b2tlbi5jb2x1bW5zKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5yZXF1ZXN0LmVtaXQoJ3JvdycsIHRva2VuLmNvbHVtbnMpO1xuICAgIH1cbiAgfVxuXG4gIG9uUmV0dXJuU3RhdHVzKHRva2VuOiBSZXR1cm5TdGF0dXNUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICAvLyBLZWVwIHZhbHVlIGZvciBwYXNzaW5nIGluICdkb25lUHJvYycgZXZlbnQuXG4gICAgICB0aGlzLmNvbm5lY3Rpb24ucHJvY1JldHVyblN0YXR1c1ZhbHVlID0gdG9rZW4udmFsdWU7XG4gICAgfVxuICB9XG5cbiAgb25SZXR1cm5WYWx1ZSh0b2tlbjogUmV0dXJuVmFsdWVUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICAvLyBUaGUgcmVzcG9uc2UgdG8gYHNwX3ByZXBhcmVgIHJldHVybnMgdGhlIHByZXBhcmVkIHN0YXRlbWVudCdzIGhhbmRsZS5cbiAgICAgIGlmICh0aGlzLnJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0ICYmIHRoaXMucmVxdWVzdC5wcmVwYXJpbmcpIHtcbiAgICAgICAgaWYgKHRva2VuLnBhcmFtTmFtZSA9PT0gJ2hhbmRsZScpIHtcbiAgICAgICAgICB0aGlzLnJlcXVlc3QuaGFuZGxlID0gdG9rZW4udmFsdWUgYXMgbnVtYmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVxdWVzdC5lcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IoYFRlZGlvdXMgPiBVbmV4cGVjdGVkIG91dHB1dCBwYXJhbWV0ZXIgJHt0b2tlbi5wYXJhbU5hbWV9IGZyb20gc3BfcHJlcGFyZWApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdyZXR1cm5WYWx1ZScsIHRva2VuLnBhcmFtTmFtZSwgdG9rZW4udmFsdWUsIHRva2VuLm1ldGFkYXRhKTtcbiAgICB9XG4gIH1cblxuICBvbkRvbmVQcm9jKHRva2VuOiBEb25lUHJvY1Rva2VuKSB7XG4gICAgaWYgKCF0aGlzLnJlcXVlc3QuY2FuY2VsZWQpIHtcbiAgICAgIGlmICh0b2tlbi5zcWxFcnJvciAmJiAhdGhpcy5yZXF1ZXN0LmVycm9yKSB7XG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBET05FX0VSUk9SIGZsYWdzIHdhcyBzZXQsIGJ1dCBhbiBFUlJPUiB0b2tlbiB3YXMgbm90IHNlbnQuXG4gICAgICAgIHRoaXMucmVxdWVzdC5lcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IoJ0FuIHVua25vd24gZXJyb3IgaGFzIG9jY3VycmVkLicsICdVTktOT1dOJyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucmVxdWVzdC5lbWl0KCdkb25lUHJvYycsIHRva2VuLnJvd0NvdW50LCB0b2tlbi5tb3JlLCB0aGlzLmNvbm5lY3Rpb24ucHJvY1JldHVyblN0YXR1c1ZhbHVlLCB0aGlzLnJlcXVlc3QucnN0KTtcblxuICAgICAgdGhpcy5jb25uZWN0aW9uLnByb2NSZXR1cm5TdGF0dXNWYWx1ZSA9IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKHRva2VuLnJvd0NvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJvd0NvdW50ISArPSB0b2tlbi5yb3dDb3VudDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5jb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yc3QgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRvbmVJblByb2ModG9rZW46IERvbmVJblByb2NUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnZG9uZUluUHJvYycsIHRva2VuLnJvd0NvdW50LCB0b2tlbi5tb3JlLCB0aGlzLnJlcXVlc3QucnN0KTtcblxuICAgICAgaWYgKHRva2VuLnJvd0NvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJvd0NvdW50ISArPSB0b2tlbi5yb3dDb3VudDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5jb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yc3QgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRvbmUodG9rZW46IERvbmVUb2tlbikge1xuICAgIGlmICghdGhpcy5yZXF1ZXN0LmNhbmNlbGVkKSB7XG4gICAgICBpZiAodG9rZW4uc3FsRXJyb3IgJiYgIXRoaXMucmVxdWVzdC5lcnJvcikge1xuICAgICAgICAvLyBjaGVjayBpZiB0aGUgRE9ORV9FUlJPUiBmbGFncyB3YXMgc2V0LCBidXQgYW4gRVJST1IgdG9rZW4gd2FzIG5vdCBzZW50LlxuICAgICAgICB0aGlzLnJlcXVlc3QuZXJyb3IgPSBuZXcgUmVxdWVzdEVycm9yKCdBbiB1bmtub3duIGVycm9yIGhhcyBvY2N1cnJlZC4nLCAnVU5LTk9XTicpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnJlcXVlc3QuZW1pdCgnZG9uZScsIHRva2VuLnJvd0NvdW50LCB0b2tlbi5tb3JlLCB0aGlzLnJlcXVlc3QucnN0KTtcblxuICAgICAgaWYgKHRva2VuLnJvd0NvdW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LnJvd0NvdW50ISArPSB0b2tlbi5yb3dDb3VudDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29ubmVjdGlvbi5jb25maWcub3B0aW9ucy5yb3dDb2xsZWN0aW9uT25Eb25lKSB7XG4gICAgICAgIHRoaXMucmVxdWVzdC5yc3QgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlc2V0Q29ubmVjdGlvbih0b2tlbjogUmVzZXRDb25uZWN0aW9uRW52Q2hhbmdlVG9rZW4pIHtcbiAgICB0aGlzLmNvbm5lY3Rpb24uZW1pdCgncmVzZXRDb25uZWN0aW9uJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIGhhbmRsZXIgZm9yIHRoZSBhdHRlbnRpb24gYWNrbm93bGVkZ2VtZW50IG1lc3NhZ2UuXG4gKlxuICogVGhpcyBtZXNzYWdlIG9ubHkgY29udGFpbnMgYSBgRE9ORWAgdG9rZW4gdGhhdCBhY2tub3dsZWRnZXNcbiAqIHRoYXQgdGhlIGF0dGVudGlvbiBtZXNzYWdlIHdhcyByZWNlaXZlZCBieSB0aGUgc2VydmVyLlxuICovXG5leHBvcnQgY2xhc3MgQXR0ZW50aW9uVG9rZW5IYW5kbGVyIGV4dGVuZHMgVG9rZW5IYW5kbGVyIHtcbiAgZGVjbGFyZSBjb25uZWN0aW9uOiBDb25uZWN0aW9uO1xuICBkZWNsYXJlIHJlcXVlc3Q6IFJlcXVlc3QgfCBCdWxrTG9hZDtcblxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIGFuIGF0dGVudGlvbiBhY2tub3dsZWRnZW1lbnQgd2FzIHJlY2VpdmVkLlxuICAgKi9cbiAgZGVjbGFyZSBhdHRlbnRpb25SZWNlaXZlZDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3Rvcihjb25uZWN0aW9uOiBDb25uZWN0aW9uLCByZXF1ZXN0OiBSZXF1ZXN0IHwgQnVsa0xvYWQpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0O1xuXG4gICAgdGhpcy5hdHRlbnRpb25SZWNlaXZlZCA9IGZhbHNlO1xuICB9XG5cbiAgb25Eb25lKHRva2VuOiBEb25lVG9rZW4pIHtcbiAgICBpZiAodG9rZW4uYXR0ZW50aW9uKSB7XG4gICAgICB0aGlzLmF0dGVudGlvblJlY2VpdmVkID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsUUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQTBELFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBbUNuRCxNQUFNRyxvQkFBb0IsU0FBU0MsS0FBSyxDQUFDO0VBQzlDQyxXQUFXQSxDQUFDQyxPQUFxQixFQUFFQyxLQUFZLEVBQUU7SUFDL0MsS0FBSyxDQUFDLG9CQUFvQixHQUFHQSxLQUFLLENBQUNDLElBQUksR0FBRyxRQUFRLEdBQUdGLE9BQU8sQ0FBQ0QsV0FBVyxDQUFDRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0VBQ3RGO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTEFDLE9BQUEsQ0FBQU4sb0JBQUEsR0FBQUEsb0JBQUE7QUFNTyxNQUFNTyx1QkFBdUIsR0FBQUQsT0FBQSxDQUFBQyx1QkFBQSxHQUFHO0VBQ3JDQyxPQUFP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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","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
|
+
{"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","preparing","paramName","handle","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 // The response to `sp_prepare` returns the prepared statement's handle.\n if (this.request instanceof Request && this.request.preparing) {\n if (token.paramName === 'handle') {\n this.request.handle = token.value as number;\n } else {\n this.request.error = new RequestError(`Tedious > Unexpected output parameter ${token.paramName} from sp_prepare`);\n }\n }\n\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":[]}
|
package/package.json
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"homepage": "https://github.com/tediousjs/tedious",
|
|
28
28
|
"bugs": "https://github.com/tediousjs/tedious/issues",
|
|
29
29
|
"license": "MIT",
|
|
30
|
-
"version": "20.
|
|
30
|
+
"version": "20.3.1",
|
|
31
31
|
"main": "./lib/tedious.js",
|
|
32
32
|
"types": "./lib/tedious.d.ts",
|
|
33
33
|
"repository": {
|