tedious 20.2.3 → 20.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +33 -26
- 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/package.json +1 -1
|
@@ -6,8 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _intn = _interopRequireDefault(require("./intn"));
|
|
8
8
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
-
const
|
|
10
|
-
const NULL_LENGTH = Buffer.from([0x00]);
|
|
9
|
+
const TYPE_INFO = Buffer.from([_intn.default.id, 0x01]);
|
|
11
10
|
const TinyInt = {
|
|
12
11
|
id: 0x30,
|
|
13
12
|
type: 'INT1',
|
|
@@ -15,22 +14,17 @@ const TinyInt = {
|
|
|
15
14
|
declaration: function () {
|
|
16
15
|
return 'tinyint';
|
|
17
16
|
},
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
writeTypeInfo(buffer) {
|
|
18
|
+
buffer.writeBuffer(TYPE_INFO);
|
|
20
19
|
},
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return DATA_LENGTH;
|
|
26
|
-
},
|
|
27
|
-
*generateParameterData(parameter, options) {
|
|
28
|
-
if (parameter.value == null) {
|
|
20
|
+
writeValue(buffer, parameter) {
|
|
21
|
+
const value = parameter.value;
|
|
22
|
+
if (value == null) {
|
|
23
|
+
buffer.writeUInt8(0x00);
|
|
29
24
|
return;
|
|
30
25
|
}
|
|
31
|
-
|
|
32
|
-
buffer.writeUInt8(
|
|
33
|
-
yield buffer;
|
|
26
|
+
buffer.writeUInt8(0x01);
|
|
27
|
+
buffer.writeUInt8(value);
|
|
34
28
|
},
|
|
35
29
|
validate: function (value) {
|
|
36
30
|
if (value == null) {
|
|
@@ -50,4 +44,4 @@ const TinyInt = {
|
|
|
50
44
|
};
|
|
51
45
|
var _default = exports.default = TinyInt;
|
|
52
46
|
module.exports = TinyInt;
|
|
53
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
47
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW50biIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiVFlQRV9JTkZPIiwiQnVmZmVyIiwiZnJvbSIsIkludE4iLCJpZCIsIlRpbnlJbnQiLCJ0eXBlIiwibmFtZSIsImRlY2xhcmF0aW9uIiwid3JpdGVUeXBlSW5mbyIsImJ1ZmZlciIsIndyaXRlQnVmZmVyIiwid3JpdGVWYWx1ZSIsInBhcmFtZXRlciIsInZhbHVlIiwid3JpdGVVSW50OCIsInZhbGlkYXRlIiwiTnVtYmVyIiwiaXNOYU4iLCJUeXBlRXJyb3IiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YS10eXBlcy90aW55aW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRGF0YVR5cGUgfSBmcm9tICcuLi9kYXRhLXR5cGUnO1xuaW1wb3J0IEludE4gZnJvbSAnLi9pbnRuJztcblxuY29uc3QgVFlQRV9JTkZPID0gQnVmZmVyLmZyb20oW0ludE4uaWQsIDB4MDFdKTtcblxuY29uc3QgVGlueUludDogRGF0YVR5cGUgPSB7XG4gIGlkOiAweDMwLFxuICB0eXBlOiAnSU5UMScsXG4gIG5hbWU6ICdUaW55SW50JyxcblxuICBkZWNsYXJhdGlvbjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICd0aW55aW50JztcbiAgfSxcblxuICB3cml0ZVR5cGVJbmZvKGJ1ZmZlcikge1xuICAgIGJ1ZmZlci53cml0ZUJ1ZmZlcihUWVBFX0lORk8pO1xuICB9LFxuXG4gIHdyaXRlVmFsdWUoYnVmZmVyLCBwYXJhbWV0ZXIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtZXRlci52YWx1ZSBhcyBudW1iZXIgfCBudWxsO1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50OCgweDAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBidWZmZXIud3JpdGVVSW50OCgweDAxKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCh2YWx1ZSk7XG4gIH0sXG5cbiAgdmFsaWRhdGU6IGZ1bmN0aW9uKHZhbHVlKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBudW1iZXIuJyk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlIDwgMCB8fCB2YWx1ZSA+IDI1NSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDI1NSwgaW5jbHVzaXZlLicpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZSB8IDA7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFRpbnlJbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IFRpbnlJbnQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLEtBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUEwQixTQUFBRCx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUUxQixNQUFNRyxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUNDLGFBQUksQ0FBQ0MsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRTlDLE1BQU1DLE9BQWlCLEdBQUc7RUFDeEJELEVBQUUsRUFBRSxJQUFJO0VBQ1JFLElBQUksRUFBRSxNQUFNO0VBQ1pDLElBQUksRUFBRSxTQUFTO0VBRWZDLFdBQVcsRUFBRSxTQUFBQSxDQUFBLEVBQVc7SUFDdEIsT0FBTyxTQUFTO0VBQ2xCLENBQUM7RUFFREMsYUFBYUEsQ0FBQ0MsTUFBTSxFQUFFO0lBQ3BCQSxNQUFNLENBQUNDLFdBQVcsQ0FBQ1gsU0FBUyxDQUFDO0VBQy9CLENBQUM7RUFFRFksVUFBVUEsQ0FBQ0YsTUFBTSxFQUFFRyxTQUFTLEVBQUU7SUFDNUIsTUFBTUMsS0FBSyxHQUFHRCxTQUFTLENBQUNDLEtBQXNCO0lBQzlDLElBQUlBLEtBQUssSUFBSSxJQUFJLEVBQUU7TUFDakJKLE1BQU0sQ0FBQ0ssVUFBVSxDQUFDLElBQUksQ0FBQztNQUN2QjtJQUNGO0lBRUFMLE1BQU0sQ0FBQ0ssVUFBVSxDQUFDLElBQUksQ0FBQztJQUN2QkwsTUFBTSxDQUFDSyxVQUFVLENBQUNELEtBQUssQ0FBQztFQUMxQixDQUFDO0VBRURFLFFBQVEsRUFBRSxTQUFBQSxDQUFTRixLQUFLLEVBQWlCO0lBQ3ZDLElBQUlBLEtBQUssSUFBSSxJQUFJLEVBQUU7TUFDakIsT0FBTyxJQUFJO0lBQ2I7SUFFQSxJQUFJLE9BQU9BLEtBQUssS0FBSyxRQUFRLEVBQUU7TUFDN0JBLEtBQUssR0FBR0csTUFBTSxDQUFDSCxLQUFLLENBQUM7SUFDdkI7SUFFQSxJQUFJSSxLQUFLLENBQUNKLEtBQUssQ0FBQyxFQUFFO01BQ2hCLE1BQU0sSUFBSUssU0FBUyxDQUFDLGlCQUFpQixDQUFDO0lBQ3hDO0lBRUEsSUFBSUwsS0FBSyxHQUFHLENBQUMsSUFBSUEsS0FBSyxHQUFHLEdBQUcsRUFBRTtNQUM1QixNQUFNLElBQUlLLFNBQVMsQ0FBQyw2Q0FBNkMsQ0FBQztJQUNwRTtJQUVBLE9BQU9MLEtBQUssR0FBRyxDQUFDO0VBQ2xCO0FBQ0YsQ0FBQztBQUFDLElBQUFNLFFBQUEsR0FBQUMsT0FBQSxDQUFBdEIsT0FBQSxHQUVhTSxPQUFPO0FBQ3RCaUIsTUFBTSxDQUFDRCxPQUFPLEdBQUdoQixPQUFPIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tinyint.js","names":["_intn","_interopRequireDefault","require","e","__esModule","default","
|
|
1
|
+
{"version":3,"file":"tinyint.js","names":["_intn","_interopRequireDefault","require","e","__esModule","default","TYPE_INFO","Buffer","from","IntN","id","TinyInt","type","name","declaration","writeTypeInfo","buffer","writeBuffer","writeValue","parameter","value","writeUInt8","validate","Number","isNaN","TypeError","_default","exports","module"],"sources":["../../src/data-types/tinyint.ts"],"sourcesContent":["import { type DataType } from '../data-type';\nimport IntN from './intn';\n\nconst TYPE_INFO = Buffer.from([IntN.id, 0x01]);\n\nconst TinyInt: DataType = {\n id: 0x30,\n type: 'INT1',\n name: 'TinyInt',\n\n declaration: function() {\n return 'tinyint';\n },\n\n writeTypeInfo(buffer) {\n buffer.writeBuffer(TYPE_INFO);\n },\n\n writeValue(buffer, parameter) {\n const value = parameter.value as number | null;\n if (value == null) {\n buffer.writeUInt8(0x00);\n return;\n }\n\n buffer.writeUInt8(0x01);\n buffer.writeUInt8(value);\n },\n\n validate: function(value): number | null {\n if (value == null) {\n return null;\n }\n\n if (typeof value !== 'number') {\n value = Number(value);\n }\n\n if (isNaN(value)) {\n throw new TypeError('Invalid number.');\n }\n\n if (value < 0 || value > 255) {\n throw new TypeError('Value must be between 0 and 255, inclusive.');\n }\n\n return value | 0;\n }\n};\n\nexport default TinyInt;\nmodule.exports = TinyInt;\n"],"mappings":";;;;;;AACA,IAAAA,KAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA0B,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE1B,MAAMG,SAAS,GAAGC,MAAM,CAACC,IAAI,CAAC,CAACC,aAAI,CAACC,EAAE,EAAE,IAAI,CAAC,CAAC;AAE9C,MAAMC,OAAiB,GAAG;EACxBD,EAAE,EAAE,IAAI;EACRE,IAAI,EAAE,MAAM;EACZC,IAAI,EAAE,SAAS;EAEfC,WAAW,EAAE,SAAAA,CAAA,EAAW;IACtB,OAAO,SAAS;EAClB,CAAC;EAEDC,aAAaA,CAACC,MAAM,EAAE;IACpBA,MAAM,CAACC,WAAW,CAACX,SAAS,CAAC;EAC/B,CAAC;EAEDY,UAAUA,CAACF,MAAM,EAAEG,SAAS,EAAE;IAC5B,MAAMC,KAAK,GAAGD,SAAS,CAACC,KAAsB;IAC9C,IAAIA,KAAK,IAAI,IAAI,EAAE;MACjBJ,MAAM,CAACK,UAAU,CAAC,IAAI,CAAC;MACvB;IACF;IAEAL,MAAM,CAACK,UAAU,CAAC,IAAI,CAAC;IACvBL,MAAM,CAACK,UAAU,CAACD,KAAK,CAAC;EAC1B,CAAC;EAEDE,QAAQ,EAAE,SAAAA,CAASF,KAAK,EAAiB;IACvC,IAAIA,KAAK,IAAI,IAAI,EAAE;MACjB,OAAO,IAAI;IACb;IAEA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7BA,KAAK,GAAGG,MAAM,CAACH,KAAK,CAAC;IACvB;IAEA,IAAII,KAAK,CAACJ,KAAK,CAAC,EAAE;MAChB,MAAM,IAAIK,SAAS,CAAC,iBAAiB,CAAC;IACxC;IAEA,IAAIL,KAAK,GAAG,CAAC,IAAIA,KAAK,GAAG,GAAG,EAAE;MAC5B,MAAM,IAAIK,SAAS,CAAC,6CAA6C,CAAC;IACpE;IAEA,OAAOL,KAAK,GAAG,CAAC;EAClB;AACF,CAAC;AAAC,IAAAM,QAAA,GAAAC,OAAA,CAAAtB,OAAA,GAEaM,OAAO;AACtBiB,MAAM,CAACD,OAAO,GAAGhB,OAAO","ignoreList":[]}
|
package/lib/data-types/tvp.js
CHANGED
|
@@ -6,12 +6,133 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _errors = require("../errors");
|
|
8
8
|
var _writableTrackingBuffer = _interopRequireDefault(require("../tracking-buffer/writable-tracking-buffer"));
|
|
9
|
+
var _plpStream = require("./plp-stream");
|
|
9
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
const TVP_TYPE_ID = 0xF3;
|
|
10
12
|
const TVP_ROW_TOKEN = Buffer.from([0x01]);
|
|
11
13
|
const TVP_END_TOKEN = Buffer.from([0x00]);
|
|
12
|
-
|
|
14
|
+
|
|
15
|
+
// A NULL table: no columns, and the end tokens of the column metadata and
|
|
16
|
+
// of the rows.
|
|
17
|
+
const NULL_TABLE = Buffer.from([0xFF, 0xFF, 0x00, 0x00]);
|
|
18
|
+
function validateTable(value) {
|
|
19
|
+
if (value == null) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
if (typeof value !== 'object' || !Array.isArray(value.columns)) {
|
|
23
|
+
throw new TypeError('Invalid table.');
|
|
24
|
+
}
|
|
25
|
+
const rows = value.rows;
|
|
26
|
+
if (!Array.isArray(rows) && !(0, _plpStream.isAsyncIterable)(rows)) {
|
|
27
|
+
throw new TypeError('Invalid table.');
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// One cell per column, reused for every row: a type writes a cell's bytes
|
|
33
|
+
// as soon as it is handed the cell and keeps no reference to it.
|
|
34
|
+
function cellsFor(columns) {
|
|
35
|
+
return columns.map(column => ({
|
|
36
|
+
value: undefined,
|
|
37
|
+
length: column.length,
|
|
38
|
+
scale: column.scale,
|
|
39
|
+
precision: column.precision
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
function writeTvpTypeInfo(buffer, value) {
|
|
43
|
+
buffer.writeUInt8(TVP_TYPE_ID);
|
|
44
|
+
// DbName
|
|
45
|
+
buffer.writeBVarchar('', 'ucs2');
|
|
46
|
+
// OwningSchema
|
|
47
|
+
buffer.writeBVarchar(value?.schema ?? '', 'ucs2');
|
|
48
|
+
// TypeName
|
|
49
|
+
buffer.writeBVarchar(value?.name ?? '', 'ucs2');
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// The column metadata after the column count: one entry per column, then
|
|
53
|
+
// the end token.
|
|
54
|
+
function writeColumns(buffer, columns, options) {
|
|
55
|
+
for (let i = 0, len = columns.length; i < len; i++) {
|
|
56
|
+
const column = columns[i];
|
|
57
|
+
|
|
58
|
+
// UserType
|
|
59
|
+
buffer.writeUInt32LE(0x00000000);
|
|
60
|
+
// Flags
|
|
61
|
+
buffer.writeUInt16LE(0x0000);
|
|
62
|
+
// TYPE_INFO
|
|
63
|
+
column.type.writeTypeInfo(buffer, {
|
|
64
|
+
value: undefined,
|
|
65
|
+
length: column.length,
|
|
66
|
+
precision: column.precision,
|
|
67
|
+
scale: column.scale
|
|
68
|
+
}, options);
|
|
69
|
+
// ColName
|
|
70
|
+
buffer.writeUInt8(0x00);
|
|
71
|
+
}
|
|
72
|
+
buffer.writeBuffer(TVP_END_TOKEN);
|
|
73
|
+
}
|
|
74
|
+
function writeColumnMetadata(buffer, value, options) {
|
|
75
|
+
buffer.writeUInt16LE(value.columns.length);
|
|
76
|
+
writeColumns(buffer, value.columns, options);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Validates and writes a row cell by cell. A cell that fails validation
|
|
80
|
+
// leaves the row half written, which does not matter: the request is
|
|
81
|
+
// abandoned with the error and the buffer never reaches the wire.
|
|
82
|
+
function writeRow(buffer, columns, cells, row, rowIndex, collation, options) {
|
|
83
|
+
if (!Array.isArray(row)) {
|
|
84
|
+
throw new _errors.InputError(`TVP row at index ${rowIndex} is not an array`);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Every declared column must have a value: the row metadata covers all
|
|
88
|
+
// columns, so a shorter or longer row would desync the server's parse.
|
|
89
|
+
if (row.length !== columns.length) {
|
|
90
|
+
throw new _errors.InputError(`TVP row at index ${rowIndex} has ${row.length} value(s), but ${columns.length} column(s) are declared`);
|
|
91
|
+
}
|
|
92
|
+
buffer.writeBuffer(TVP_ROW_TOKEN);
|
|
93
|
+
for (let k = 0, len = row.length; k < len; k++) {
|
|
94
|
+
const column = columns[k];
|
|
95
|
+
const cell = cells[k];
|
|
96
|
+
try {
|
|
97
|
+
cell.value = column.type.validate(row[k], collation);
|
|
98
|
+
} catch (error) {
|
|
99
|
+
throw new _errors.InputError(`TVP column '${column.name}' has invalid data at row index ${rowIndex}`, {
|
|
100
|
+
cause: error
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// TvpColumnData
|
|
105
|
+
column.type.writeValue(buffer, cell, options);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Rows given as an array are written in a synchronous loop, so the only
|
|
110
|
+
// asynchrony is the yield for every chunk's worth of rows.
|
|
111
|
+
async function* writeRows(buffer, value, rows, collation, options) {
|
|
112
|
+
writeColumnMetadata(buffer, value, options);
|
|
113
|
+
const cells = cellsFor(value.columns);
|
|
114
|
+
for (let i = 0, len = rows.length; i < len; i++) {
|
|
115
|
+
writeRow(buffer, value.columns, cells, rows[i], i, collation, options);
|
|
116
|
+
if (buffer.length >= _writableTrackingBuffer.default.CHUNK_SIZE) {
|
|
117
|
+
yield;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
buffer.writeBuffer(TVP_END_TOKEN);
|
|
121
|
+
}
|
|
122
|
+
async function* writeRowsFrom(buffer, value, rows, collation, options) {
|
|
123
|
+
writeColumnMetadata(buffer, value, options);
|
|
124
|
+
const cells = cellsFor(value.columns);
|
|
125
|
+
let rowIndex = 0;
|
|
126
|
+
for await (const row of rows) {
|
|
127
|
+
writeRow(buffer, value.columns, cells, row, rowIndex++, collation, options);
|
|
128
|
+
if (buffer.length >= _writableTrackingBuffer.default.CHUNK_SIZE) {
|
|
129
|
+
yield;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
buffer.writeBuffer(TVP_END_TOKEN);
|
|
133
|
+
}
|
|
13
134
|
const TVP = {
|
|
14
|
-
id:
|
|
135
|
+
id: TVP_TYPE_ID,
|
|
15
136
|
type: 'TVPTYPE',
|
|
16
137
|
name: 'TVP',
|
|
17
138
|
declaration: function (parameter) {
|
|
@@ -19,99 +140,36 @@ const TVP = {
|
|
|
19
140
|
const schema = value.schema ? value.schema + '.' : '';
|
|
20
141
|
return schema + value.name + ' readonly';
|
|
21
142
|
},
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const schema = parameter.value?.schema ?? '';
|
|
25
|
-
const typeName = parameter.value?.name ?? '';
|
|
26
|
-
const buffer = new _writableTrackingBuffer.default();
|
|
27
|
-
buffer.writeUInt8(this.id);
|
|
28
|
-
buffer.writeBVarchar(databaseName, 'ucs2');
|
|
29
|
-
buffer.writeBVarchar(schema, 'ucs2');
|
|
30
|
-
buffer.writeBVarchar(typeName, 'ucs2');
|
|
31
|
-
return buffer.data;
|
|
143
|
+
validate(value) {
|
|
144
|
+
return validateTable(value);
|
|
32
145
|
},
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
146
|
+
resolve(parameter, collation) {
|
|
147
|
+
// A TVP's `writeValue` always returns the rest of the write, whether
|
|
148
|
+
// its rows are an array or an async iterable.
|
|
149
|
+
const data = {
|
|
150
|
+
value: validateTable(parameter.value)
|
|
151
|
+
};
|
|
152
|
+
if (collation) {
|
|
153
|
+
data.collation = collation;
|
|
36
154
|
}
|
|
37
|
-
|
|
38
|
-
columns
|
|
39
|
-
} = parameter.value;
|
|
40
|
-
const buffer = Buffer.alloc(2);
|
|
41
|
-
buffer.writeUInt16LE(columns.length, 0);
|
|
42
|
-
return buffer;
|
|
155
|
+
return data;
|
|
43
156
|
},
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
yield TVP_END_TOKEN;
|
|
47
|
-
yield TVP_END_TOKEN;
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
const {
|
|
51
|
-
columns,
|
|
52
|
-
rows
|
|
53
|
-
} = parameter.value;
|
|
54
|
-
for (let i = 0, len = columns.length; i < len; i++) {
|
|
55
|
-
const column = columns[i];
|
|
56
|
-
const buff = Buffer.alloc(6);
|
|
57
|
-
// UserType
|
|
58
|
-
buff.writeUInt32LE(0x00000000, 0);
|
|
59
|
-
|
|
60
|
-
// Flags
|
|
61
|
-
buff.writeUInt16LE(0x0000, 4);
|
|
62
|
-
yield buff;
|
|
63
|
-
|
|
64
|
-
// TYPE_INFO
|
|
65
|
-
yield column.type.generateTypeInfo(column);
|
|
66
|
-
|
|
67
|
-
// ColName
|
|
68
|
-
yield Buffer.from([0x00]);
|
|
69
|
-
}
|
|
70
|
-
yield TVP_END_TOKEN;
|
|
71
|
-
for (let i = 0, length = rows.length; i < length; i++) {
|
|
72
|
-
yield TVP_ROW_TOKEN;
|
|
73
|
-
const row = rows[i];
|
|
74
|
-
for (let k = 0, len2 = row.length; k < len2; k++) {
|
|
75
|
-
const column = columns[k];
|
|
76
|
-
const value = row[k];
|
|
77
|
-
let paramValue;
|
|
78
|
-
try {
|
|
79
|
-
paramValue = column.type.validate(value, parameter.collation);
|
|
80
|
-
} catch (error) {
|
|
81
|
-
throw new _errors.InputError(`TVP column '${column.name}' has invalid data at row index ${i}`, {
|
|
82
|
-
cause: error
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
const param = {
|
|
86
|
-
value: paramValue,
|
|
87
|
-
length: column.length,
|
|
88
|
-
scale: column.scale,
|
|
89
|
-
precision: column.precision
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
// TvpColumnData
|
|
93
|
-
yield column.type.generateParameterLength(param, options);
|
|
94
|
-
yield* column.type.generateParameterData(param, options);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
yield TVP_END_TOKEN;
|
|
157
|
+
writeTypeInfo(buffer, parameter) {
|
|
158
|
+
writeTvpTypeInfo(buffer, parameter.value);
|
|
98
159
|
},
|
|
99
|
-
|
|
160
|
+
async *writeValue(buffer, parameter, options) {
|
|
161
|
+
const value = parameter.value;
|
|
100
162
|
if (value == null) {
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (typeof value !== 'object') {
|
|
104
|
-
throw new TypeError('Invalid table.');
|
|
105
|
-
}
|
|
106
|
-
if (!Array.isArray(value.columns)) {
|
|
107
|
-
throw new TypeError('Invalid table.');
|
|
163
|
+
buffer.writeBuffer(NULL_TABLE);
|
|
164
|
+
return;
|
|
108
165
|
}
|
|
109
|
-
if (
|
|
110
|
-
|
|
166
|
+
if (Array.isArray(value.rows)) {
|
|
167
|
+
yield* writeRows(buffer, value, value.rows, parameter.collation, options);
|
|
168
|
+
return;
|
|
111
169
|
}
|
|
112
|
-
|
|
170
|
+
yield* writeRowsFrom(buffer, value, value.rows, parameter.collation, options);
|
|
113
171
|
}
|
|
114
172
|
};
|
|
115
173
|
var _default = exports.default = TVP;
|
|
116
174
|
module.exports = TVP;
|
|
117
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXJyb3JzIiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlRWUF9ST1dfVE9LRU4iLCJCdWZmZXIiLCJmcm9tIiwiVFZQX0VORF9UT0tFTiIsIk5VTExfTEVOR1RIIiwiVFZQIiwiaWQiLCJ0eXBlIiwibmFtZSIsImRlY2xhcmF0aW9uIiwicGFyYW1ldGVyIiwidmFsdWUiLCJzY2hlbWEiLCJnZW5lcmF0ZVR5cGVJbmZvIiwiZGF0YWJhc2VOYW1lIiwidHlwZU5hbWUiLCJidWZmZXIiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwid3JpdGVVSW50OCIsIndyaXRlQlZhcmNoYXIiLCJkYXRhIiwiZ2VuZXJhdGVQYXJhbWV0ZXJMZW5ndGgiLCJvcHRpb25zIiwiY29sdW1ucyIsImFsbG9jIiwid3JpdGVVSW50MTZMRSIsImxlbmd0aCIsImdlbmVyYXRlUGFyYW1ldGVyRGF0YSIsInJvd3MiLCJpIiwibGVuIiwiY29sdW1uIiwiYnVmZiIsIndyaXRlVUludDMyTEUiLCJyb3ciLCJrIiwibGVuMiIsInBhcmFtVmFsdWUiLCJ2YWxpZGF0ZSIsImNvbGxhdGlvbiIsImVycm9yIiwiSW5wdXRFcnJvciIsImNhdXNlIiwicGFyYW0iLCJzY2FsZSIsInByZWNpc2lvbiIsIlR5cGVFcnJvciIsIkFycmF5IiwiaXNBcnJheSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhLXR5cGVzL3R2cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIERhdGFUeXBlIH0gZnJvbSAnLi4vZGF0YS10eXBlJztcbmltcG9ydCB7IElucHV0RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuaW1wb3J0IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIgZnJvbSAnLi4vdHJhY2tpbmctYnVmZmVyL3dyaXRhYmxlLXRyYWNraW5nLWJ1ZmZlcic7XG5cbmNvbnN0IFRWUF9ST1dfVE9LRU4gPSBCdWZmZXIuZnJvbShbMHgwMV0pO1xuY29uc3QgVFZQX0VORF9UT0tFTiA9IEJ1ZmZlci5mcm9tKFsweDAwXSk7XG5cbmNvbnN0IE5VTExfTEVOR1RIID0gQnVmZmVyLmZyb20oWzB4RkYsIDB4RkZdKTtcblxuY29uc3QgVFZQOiBEYXRhVHlwZSA9IHtcbiAgaWQ6IDB4RjMsXG4gIHR5cGU6ICdUVlBUWVBFJyxcbiAgbmFtZTogJ1RWUCcsXG5cbiAgZGVjbGFyYXRpb246IGZ1bmN0aW9uKHBhcmFtZXRlcikge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyLnZhbHVlIGFzIGFueTsgLy8gVGVtcG9yYXJ5IHNvbHV0aW9uLiBSZW1vdmUgJ2FueScgbGF0ZXIuXG4gICAgY29uc3Qgc2NoZW1hID0gdmFsdWUuc2NoZW1hID8gdmFsdWUuc2NoZW1hICsgJy4nIDogJyc7XG4gICAgcmV0dXJuIHNjaGVtYSArIHZhbHVlLm5hbWUgKyAnIHJlYWRvbmx5JztcbiAgfSxcblxuICBnZW5lcmF0ZVR5cGVJbmZvKHBhcmFtZXRlcikge1xuICAgIGNvbnN0IGRhdGFiYXNlTmFtZSA9ICcnO1xuICAgIGNvbnN0IHNjaGVtYSA9IHBhcmFtZXRlci52YWx1ZT8uc2NoZW1hID8/ICcnO1xuICAgIGNvbnN0IHR5cGVOYW1lID0gcGFyYW1ldGVyLnZhbHVlPy5uYW1lID8/ICcnO1xuXG4gICAgY29uc3QgYnVmZmVyID0gbmV3IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIoKTtcbiAgICBidWZmZXIud3JpdGVVSW50OCh0aGlzLmlkKTtcbiAgICBidWZmZXIud3JpdGVCVmFyY2hhcihkYXRhYmFzZU5hbWUsICd1Y3MyJyk7XG4gICAgYnVmZmVyLndyaXRlQlZhcmNoYXIoc2NoZW1hLCAndWNzMicpO1xuICAgIGJ1ZmZlci53cml0ZUJWYXJjaGFyKHR5cGVOYW1lLCAndWNzMicpO1xuXG4gICAgcmV0dXJuIGJ1ZmZlci5kYXRhO1xuICB9LFxuXG4gIGdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoKHBhcmFtZXRlciwgb3B0aW9ucykge1xuICAgIGlmIChwYXJhbWV0ZXIudmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIE5VTExfTEVOR1RIO1xuICAgIH1cblxuICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gcGFyYW1ldGVyLnZhbHVlO1xuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygyKTtcbiAgICBidWZmZXIud3JpdGVVSW50MTZMRShjb2x1bW5zLmxlbmd0aCwgMCk7XG4gICAgcmV0dXJuIGJ1ZmZlcjtcbiAgfSxcblxuICAqZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhKHBhcmFtZXRlciwgb3B0aW9ucykge1xuICAgIGlmIChwYXJhbWV0ZXIudmFsdWUgPT0gbnVsbCkge1xuICAgICAgeWllbGQgVFZQX0VORF9UT0tFTjtcbiAgICAgIHlpZWxkIFRWUF9FTkRfVE9LRU47XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBjb2x1bW5zLCByb3dzIH0gPSBwYXJhbWV0ZXIudmFsdWU7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gY29sdW1ucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgY29sdW1uID0gY29sdW1uc1tpXTtcblxuICAgICAgY29uc3QgYnVmZiA9IEJ1ZmZlci5hbGxvYyg2KTtcbiAgICAgIC8vIFVzZXJUeXBlXG4gICAgICBidWZmLndyaXRlVUludDMyTEUoMHgwMDAwMDAwMCwgMCk7XG5cbiAgICAgIC8vIEZsYWdzXG4gICAgICBidWZmLndyaXRlVUludDE2TEUoMHgwMDAwLCA0KTtcbiAgICAgIHlpZWxkIGJ1ZmY7XG5cbiAgICAgIC8vIFRZUEVfSU5GT1xuICAgICAgeWllbGQgY29sdW1uLnR5cGUuZ2VuZXJhdGVUeXBlSW5mbyhjb2x1bW4pO1xuXG4gICAgICAvLyBDb2xOYW1lXG4gICAgICB5aWVsZCBCdWZmZXIuZnJvbShbMHgwMF0pO1xuICAgIH1cblxuICAgIHlpZWxkIFRWUF9FTkRfVE9LRU47XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuZ3RoID0gcm93cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgeWllbGQgVFZQX1JPV19UT0tFTjtcblxuICAgICAgY29uc3Qgcm93ID0gcm93c1tpXTtcbiAgICAgIGZvciAobGV0IGsgPSAwLCBsZW4yID0gcm93Lmxlbmd0aDsgayA8IGxlbjI7IGsrKykge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zW2tdO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd1trXTtcblxuICAgICAgICBsZXQgcGFyYW1WYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwYXJhbVZhbHVlID0gY29sdW1uLnR5cGUudmFsaWRhdGUodmFsdWUsIHBhcmFtZXRlci5jb2xsYXRpb24pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBJbnB1dEVycm9yKGBUVlAgY29sdW1uICcke2NvbHVtbi5uYW1lfScgaGFzIGludmFsaWQgZGF0YSBhdCByb3cgaW5kZXggJHtpfWAsIHsgY2F1c2U6IGVycm9yIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYW0gPSB7XG4gICAgICAgICAgdmFsdWU6IHBhcmFtVmFsdWUsXG4gICAgICAgICAgbGVuZ3RoOiBjb2x1bW4ubGVuZ3RoLFxuICAgICAgICAgIHNjYWxlOiBjb2x1bW4uc2NhbGUsXG4gICAgICAgICAgcHJlY2lzaW9uOiBjb2x1bW4ucHJlY2lzaW9uXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gVHZwQ29sdW1uRGF0YVxuICAgICAgICB5aWVsZCBjb2x1bW4udHlwZS5nZW5lcmF0ZVBhcmFtZXRlckxlbmd0aChwYXJhbSwgb3B0aW9ucyk7XG4gICAgICAgIHlpZWxkICogY29sdW1uLnR5cGUuZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhKHBhcmFtLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB5aWVsZCBUVlBfRU5EX1RPS0VOO1xuICB9LFxuXG4gIHZhbGlkYXRlOiBmdW5jdGlvbih2YWx1ZSk6IEJ1ZmZlciB8IG51bGwge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB0YWJsZS4nKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUuY29sdW1ucykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGFibGUuJyk7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlLnJvd3MpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHRhYmxlLicpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVFZQO1xubW9kdWxlLmV4cG9ydHMgPSBUVlA7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLHVCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFBaUYsU0FBQUUsdUJBQUFDLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFakYsTUFBTUcsYUFBYSxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLE1BQU1DLGFBQWEsR0FBR0YsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUV6QyxNQUFNRSxXQUFXLEdBQUdILE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRTdDLE1BQU1HLEdBQWEsR0FBRztFQUNwQkMsRUFBRSxF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
|
|
175
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXJyb3JzIiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9wbHBTdHJlYW0iLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJUVlBfVFlQRV9JRCIsIlRWUF9ST1dfVE9LRU4iLCJCdWZmZXIiLCJmcm9tIiwiVFZQX0VORF9UT0tFTiIsIk5VTExfVEFCTEUiLCJ2YWxpZGF0ZVRhYmxlIiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJjb2x1bW5zIiwiVHlwZUVycm9yIiwicm93cyIsImlzQXN5bmNJdGVyYWJsZSIsImNlbGxzRm9yIiwibWFwIiwiY29sdW1uIiwidW5kZWZpbmVkIiwibGVuZ3RoIiwic2NhbGUiLCJwcmVjaXNpb24iLCJ3cml0ZVR2cFR5cGVJbmZvIiwiYnVmZmVyIiwid3JpdGVVSW50OCIsIndyaXRlQlZhcmNoYXIiLCJzY2hlbWEiLCJuYW1lIiwid3JpdGVDb2x1bW5zIiwib3B0aW9ucyIsImkiLCJsZW4iLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVSW50MTZMRSIsInR5cGUiLCJ3cml0ZVR5cGVJbmZvIiwid3JpdGVCdWZmZXIiLCJ3cml0ZUNvbHVtbk1ldGFkYXRhIiwid3JpdGVSb3ciLCJjZWxscyIsInJvdyIsInJvd0luZGV4IiwiY29sbGF0aW9uIiwiSW5wdXRFcnJvciIsImsiLCJjZWxsIiwidmFsaWRhdGUiLCJlcnJvciIsImNhdXNlIiwid3JpdGVWYWx1ZSIsIndyaXRlUm93cyIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJDSFVOS19TSVpFIiwid3JpdGVSb3dzRnJvbSIsIlRWUCIsImlkIiwiZGVjbGFyYXRpb24iLCJwYXJhbWV0ZXIiLCJyZXNvbHZlIiwiZGF0YSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhLXR5cGVzL3R2cC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIERhdGFUeXBlLCB0eXBlIFBhcmFtZXRlckRhdGEgfSBmcm9tICcuLi9kYXRhLXR5cGUnO1xuaW1wb3J0IHsgdHlwZSBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSAnLi4vY29ubmVjdGlvbic7XG5pbXBvcnQgeyB0eXBlIENvbGxhdGlvbiB9IGZyb20gJy4uL2NvbGxhdGlvbic7XG5pbXBvcnQgeyBJbnB1dEVycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCBXcml0YWJsZVRyYWNraW5nQnVmZmVyIGZyb20gJy4uL3RyYWNraW5nLWJ1ZmZlci93cml0YWJsZS10cmFja2luZy1idWZmZXInO1xuaW1wb3J0IHsgaXNBc3luY0l0ZXJhYmxlIH0gZnJvbSAnLi9wbHAtc3RyZWFtJztcblxuY29uc3QgVFZQX1RZUEVfSUQgPSAweEYzO1xuXG5jb25zdCBUVlBfUk9XX1RPS0VOID0gQnVmZmVyLmZyb20oWzB4MDFdKTtcbmNvbnN0IFRWUF9FTkRfVE9LRU4gPSBCdWZmZXIuZnJvbShbMHgwMF0pO1xuXG4vLyBBIE5VTEwgdGFibGU6IG5vIGNvbHVtbnMsIGFuZCB0aGUgZW5kIHRva2VucyBvZiB0aGUgY29sdW1uIG1ldGFkYXRhIGFuZFxuLy8gb2YgdGhlIHJvd3MuXG5jb25zdCBOVUxMX1RBQkxFID0gQnVmZmVyLmZyb20oWzB4RkYsIDB4RkYsIDB4MDAsIDB4MDBdKTtcblxuaW50ZXJmYWNlIFR2cENvbHVtbiB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogRGF0YVR5cGU7XG4gIGxlbmd0aD86IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgcHJlY2lzaW9uPzogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBzY2FsZT86IG51bWJlciB8IHVuZGVmaW5lZDtcbn1cblxudHlwZSBUdnBSb3cgPSB1bmtub3duW107XG5cbmludGVyZmFjZSBUdnBWYWx1ZSB7XG4gIG5hbWU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHNjaGVtYT86IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29sdW1uczogVHZwQ29sdW1uW107XG4gIC8vIFJvd3MgYXJlIHZhbGlkYXRlZCBhcyB0aGV5IGFyZSB3cml0dGVuLCB3aGV0aGVyIHRoZXkgYXJlIGdpdmVuIGFzIGFuXG4gIC8vIGFycmF5IG9yIGFzIGFuIGFzeW5jIGl0ZXJhYmxlIHRoYXQgaXMgcmVhZCB3aGlsZSB0aGUgcmVxdWVzdCBpcyB3cml0dGVuLlxuICByb3dzOiBUdnBSb3dbXSB8IEFzeW5jSXRlcmFibGU8VHZwUm93Pjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUYWJsZSh2YWx1ZTogdW5rbm93bik6IFR2cFZhbHVlIHwgbnVsbCB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCAhQXJyYXkuaXNBcnJheSgodmFsdWUgYXMgVHZwVmFsdWUpLmNvbHVtbnMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB0YWJsZS4nKTtcbiAgfVxuXG4gIGNvbnN0IHJvd3MgPSAodmFsdWUgYXMgVHZwVmFsdWUpLnJvd3M7XG4gIGlmICghQXJyYXkuaXNBcnJheShyb3dzKSAmJiAhaXNBc3luY0l0ZXJhYmxlKHJvd3MpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCB0YWJsZS4nKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZSBhcyBUdnBWYWx1ZTtcbn1cblxuLy8gT25lIGNlbGwgcGVyIGNvbHVtbiwgcmV1c2VkIGZvciBldmVyeSByb3c6IGEgdHlwZSB3cml0ZXMgYSBjZWxsJ3MgYnl0ZXNcbi8vIGFzIHNvb24gYXMgaXQgaXMgaGFuZGVkIHRoZSBjZWxsIGFuZCBrZWVwcyBubyByZWZlcmVuY2UgdG8gaXQuXG5mdW5jdGlvbiBjZWxsc0Zvcihjb2x1bW5zOiBUdnBDb2x1bW5bXSk6IFBhcmFtZXRlckRhdGFbXSB7XG4gIHJldHVybiBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiAoeyB2YWx1ZTogdW5kZWZpbmVkLCBsZW5ndGg6IGNvbHVtbi5sZW5ndGgsIHNjYWxlOiBjb2x1bW4uc2NhbGUsIHByZWNpc2lvbjogY29sdW1uLnByZWNpc2lvbiB9KSk7XG59XG5cbmZ1bmN0aW9uIHdyaXRlVHZwVHlwZUluZm8oYnVmZmVyOiBXcml0YWJsZVRyYWNraW5nQnVmZmVyLCB2YWx1ZTogVHZwVmFsdWUgfCBudWxsKSB7XG4gIGJ1ZmZlci53cml0ZVVJbnQ4KFRWUF9UWVBFX0lEKTtcbiAgLy8gRGJOYW1lXG4gIGJ1ZmZlci53cml0ZUJWYXJjaGFyKCcnLCAndWNzMicpO1xuICAvLyBPd25pbmdTY2hlbWFcbiAgYnVmZmVyLndyaXRlQlZhcmNoYXIodmFsdWU/LnNjaGVtYSA/PyAnJywgJ3VjczInKTtcbiAgLy8gVHlwZU5hbWVcbiAgYnVmZmVyLndyaXRlQlZhcmNoYXIodmFsdWU/Lm5hbWUgPz8gJycsICd1Y3MyJyk7XG59XG5cbi8vIFRoZSBjb2x1bW4gbWV0YWRhdGEgYWZ0ZXIgdGhlIGNvbHVtbiBjb3VudDogb25lIGVudHJ5IHBlciBjb2x1bW4sIHRoZW5cbi8vIHRoZSBlbmQgdG9rZW4uXG5mdW5jdGlvbiB3cml0ZUNvbHVtbnMoYnVmZmVyOiBXcml0YWJsZVRyYWNraW5nQnVmZmVyLCBjb2x1bW5zOiBUdnBDb2x1bW5bXSwgb3B0aW9uczogSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucykge1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gY29sdW1ucy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnNbaV07XG5cbiAgICAvLyBVc2VyVHlwZVxuICAgIGJ1ZmZlci53cml0ZVVJbnQzMkxFKDB4MDAwMDAwMDApO1xuICAgIC8vIEZsYWdzXG4gICAgYnVmZmVyLndyaXRlVUludDE2TEUoMHgwMDAwKTtcbiAgICAvLyBUWVBFX0lORk9cbiAgICBjb2x1bW4udHlwZS53cml0ZVR5cGVJbmZvKGJ1ZmZlciwgeyB2YWx1ZTogdW5kZWZpbmVkLCBsZW5ndGg6IGNvbHVtbi5sZW5ndGgsIHByZWNpc2lvbjogY29sdW1uLnByZWNpc2lvbiwgc2NhbGU6IGNvbHVtbi5zY2FsZSB9LCBvcHRpb25zKTtcbiAgICAvLyBDb2xOYW1lXG4gICAgYnVmZmVyLndyaXRlVUludDgoMHgwMCk7XG4gIH1cblxuICBidWZmZXIud3JpdGVCdWZmZXIoVFZQX0VORF9UT0tFTik7XG59XG5cbmZ1bmN0aW9uIHdyaXRlQ29sdW1uTWV0YWRhdGEoYnVmZmVyOiBXcml0YWJsZVRyYWNraW5nQnVmZmVyLCB2YWx1ZTogVHZwVmFsdWUsIG9wdGlvbnM6IEludGVybmFsQ29ubmVjdGlvbk9wdGlvbnMpIHtcbiAgYnVmZmVyLndyaXRlVUludDE2TEUodmFsdWUuY29sdW1ucy5sZW5ndGgpO1xuICB3cml0ZUNvbHVtbnMoYnVmZmVyLCB2YWx1ZS5jb2x1bW5zLCBvcHRpb25zKTtcbn1cblxuLy8gVmFsaWRhdGVzIGFuZCB3cml0ZXMgYSByb3cgY2VsbCBieSBjZWxsLiBBIGNlbGwgdGhhdCBmYWlscyB2YWxpZGF0aW9uXG4vLyBsZWF2ZXMgdGhlIHJvdyBoYWxmIHdyaXR0ZW4sIHdoaWNoIGRvZXMgbm90IG1hdHRlcjogdGhlIHJlcXVlc3QgaXNcbi8vIGFiYW5kb25lZCB3aXRoIHRoZSBlcnJvciBhbmQgdGhlIGJ1ZmZlciBuZXZlciByZWFjaGVzIHRoZSB3aXJlLlxuZnVuY3Rpb24gd3JpdGVSb3coYnVmZmVyOiBXcml0YWJsZVRyYWNraW5nQnVmZmVyLCBjb2x1bW5zOiBUdnBDb2x1bW5bXSwgY2VsbHM6IFBhcmFtZXRlckRhdGFbXSwgcm93OiBUdnBSb3csIHJvd0luZGV4OiBudW1iZXIsIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkLCBvcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyb3cpKSB7XG4gICAgdGhyb3cgbmV3IElucHV0RXJyb3IoYFRWUCByb3cgYXQgaW5kZXggJHtyb3dJbmRleH0gaXMgbm90IGFuIGFycmF5YCk7XG4gIH1cblxuICAvLyBFdmVyeSBkZWNsYXJlZCBjb2x1bW4gbXVzdCBoYXZlIGEgdmFsdWU6IHRoZSByb3cgbWV0YWRhdGEgY292ZXJzIGFsbFxuICAvLyBjb2x1bW5zLCBzbyBhIHNob3J0ZXIgb3IgbG9uZ2VyIHJvdyB3b3VsZCBkZXN5bmMgdGhlIHNlcnZlcidzIHBhcnNlLlxuICBpZiAocm93Lmxlbmd0aCAhPT0gY29sdW1ucy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgSW5wdXRFcnJvcihgVFZQIHJvdyBhdCBpbmRleCAke3Jvd0luZGV4fSBoYXMgJHtyb3cubGVuZ3RofSB2YWx1ZShzKSwgYnV0ICR7Y29sdW1ucy5sZW5ndGh9IGNvbHVtbihzKSBhcmUgZGVjbGFyZWRgKTtcbiAgfVxuXG4gIGJ1ZmZlci53cml0ZUJ1ZmZlcihUVlBfUk9XX1RPS0VOKTtcblxuICBmb3IgKGxldCBrID0gMCwgbGVuID0gcm93Lmxlbmd0aDsgayA8IGxlbjsgaysrKSB7XG4gICAgY29uc3QgY29sdW1uID0gY29sdW1uc1trXTtcbiAgICBjb25zdCBjZWxsID0gY2VsbHNba107XG5cbiAgICB0cnkge1xuICAgICAgY2VsbC52YWx1ZSA9IGNvbHVtbi50eXBlLnZhbGlkYXRlKHJvd1trXSwgY29sbGF0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IElucHV0RXJyb3IoYFRWUCBjb2x1bW4gJyR7Y29sdW1uLm5hbWV9JyBoYXMgaW52YWxpZCBkYXRhIGF0IHJvdyBpbmRleCAke3Jvd0luZGV4fWAsIHsgY2F1c2U6IGVycm9yIH0pO1xuICAgIH1cblxuICAgIC8vIFR2cENvbHVtbkRhdGFcbiAgICBjb2x1bW4udHlwZS53cml0ZVZhbHVlKGJ1ZmZlciwgY2VsbCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuLy8gUm93cyBnaXZlbiBhcyBhbiBhcnJheSBhcmUgd3JpdHRlbiBpbiBhIHN5bmNocm9ub3VzIGxvb3AsIHNvIHRoZSBvbmx5XG4vLyBhc3luY2hyb255IGlzIHRoZSB5aWVsZCBmb3IgZXZlcnkgY2h1bmsncyB3b3J0aCBvZiByb3dzLlxuYXN5bmMgZnVuY3Rpb24gKiB3cml0ZVJvd3MoYnVmZmVyOiBXcml0YWJsZVRyYWNraW5nQnVmZmVyLCB2YWx1ZTogVHZwVmFsdWUsIHJvd3M6IFR2cFJvd1tdLCBjb2xsYXRpb246IENvbGxhdGlvbiB8IHVuZGVmaW5lZCwgb3B0aW9uczogSW50ZXJuYWxDb25uZWN0aW9uT3B0aW9ucyk6IEFzeW5jR2VuZXJhdG9yPHZvaWQsIHZvaWQ+IHtcbiAgd3JpdGVDb2x1bW5NZXRhZGF0YShidWZmZXIsIHZhbHVlLCBvcHRpb25zKTtcbiAgY29uc3QgY2VsbHMgPSBjZWxsc0Zvcih2YWx1ZS5jb2x1bW5zKTtcblxuICBmb3IgKGxldCBpID0gMCwgbGVuID0gcm93cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIHdyaXRlUm93KGJ1ZmZlciwgdmFsdWUuY29sdW1ucywgY2VsbHMsIHJvd3NbaV0sIGksIGNvbGxhdGlvbiwgb3B0aW9ucyk7XG5cbiAgICBpZiAoYnVmZmVyLmxlbmd0aCA+PSBXcml0YWJsZVRyYWNraW5nQnVmZmVyLkNIVU5LX1NJWkUpIHtcbiAgICAgIHlpZWxkO1xuICAgIH1cbiAgfVxuXG4gIGJ1ZmZlci53cml0ZUJ1ZmZlcihUVlBfRU5EX1RPS0VOKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gKiB3cml0ZVJvd3NGcm9tKGJ1ZmZlcjogV3JpdGFibGVUcmFja2luZ0J1ZmZlciwgdmFsdWU6IFR2cFZhbHVlLCByb3dzOiBBc3luY0l0ZXJhYmxlPFR2cFJvdz4sIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkLCBvcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zKTogQXN5bmNHZW5lcmF0b3I8dm9pZCwgdm9pZD4ge1xuICB3cml0ZUNvbHVtbk1ldGFkYXRhKGJ1ZmZlciwgdmFsdWUsIG9wdGlvbnMpO1xuICBjb25zdCBjZWxscyA9IGNlbGxzRm9yKHZhbHVlLmNvbHVtbnMpO1xuXG4gIGxldCByb3dJbmRleCA9IDA7XG4gIGZvciBhd2FpdCAoY29uc3Qgcm93IG9mIHJvd3MpIHtcbiAgICB3cml0ZVJvdyhidWZmZXIsIHZhbHVlLmNvbHVtbnMsIGNlbGxzLCByb3csIHJvd0luZGV4KyssIGNvbGxhdGlvbiwgb3B0aW9ucyk7XG5cbiAgICBpZiAoYnVmZmVyLmxlbmd0aCA+PSBXcml0YWJsZVRyYWNraW5nQnVmZmVyLkNIVU5LX1NJWkUpIHtcbiAgICAgIHlpZWxkO1xuICAgIH1cbiAgfVxuXG4gIGJ1ZmZlci53cml0ZUJ1ZmZlcihUVlBfRU5EX1RPS0VOKTtcbn1cblxuY29uc3QgVFZQOiBEYXRhVHlwZSA9IHtcbiAgaWQ6IFRWUF9UWVBFX0lELFxuICB0eXBlOiAnVFZQVFlQRScsXG4gIG5hbWU6ICdUVlAnLFxuXG4gIGRlY2xhcmF0aW9uOiBmdW5jdGlvbihwYXJhbWV0ZXIpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtZXRlci52YWx1ZSBhcyBhbnk7IC8vIFRlbXBvcmFyeSBzb2x1dGlvbi4gUmVtb3ZlICdhbnknIGxhdGVyLlxuICAgIGNvbnN0IHNjaGVtYSA9IHZhbHVlLnNjaGVtYSA/IHZhbHVlLnNjaGVtYSArICcuJyA6ICcnO1xuICAgIHJldHVybiBzY2hlbWEgKyB2YWx1ZS5uYW1lICsgJyByZWFkb25seSc7XG4gIH0sXG5cbiAgdmFsaWRhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsaWRhdGVUYWJsZSh2YWx1ZSk7XG4gIH0sXG5cbiAgcmVzb2x2ZShwYXJhbWV0ZXIsIGNvbGxhdGlvbikge1xuICAgIC8vIEEgVFZQJ3MgYHdyaXRlVmFsdWVgIGFsd2F5cyByZXR1cm5zIHRoZSByZXN0IG9mIHRoZSB3cml0ZSwgd2hldGhlclxuICAgIC8vIGl0cyByb3dzIGFyZSBhbiBhcnJheSBvciBhbiBhc3luYyBpdGVyYWJsZS5cbiAgICBjb25zdCBkYXRhOiBQYXJhbWV0ZXJEYXRhPFR2cFZhbHVlIHwgbnVsbD4gPSB7IHZhbHVlOiB2YWxpZGF0ZVRhYmxlKHBhcmFtZXRlci52YWx1ZSkgfTtcbiAgICBpZiAoY29sbGF0aW9uKSB7XG4gICAgICBkYXRhLmNvbGxhdGlvbiA9IGNvbGxhdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfSxcblxuICB3cml0ZVR5cGVJbmZvKGJ1ZmZlciwgcGFyYW1ldGVyKSB7XG4gICAgd3JpdGVUdnBUeXBlSW5mbyhidWZmZXIsIHBhcmFtZXRlci52YWx1ZSBhcyBUdnBWYWx1ZSB8IG51bGwpO1xuICB9LFxuXG4gIGFzeW5jICogd3JpdGVWYWx1ZShidWZmZXIsIHBhcmFtZXRlciwgb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyLnZhbHVlIGFzIFR2cFZhbHVlIHwgbnVsbDtcblxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBidWZmZXIud3JpdGVCdWZmZXIoTlVMTF9UQUJMRSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUucm93cykpIHtcbiAgICAgIHlpZWxkICogd3JpdGVSb3dzKGJ1ZmZlciwgdmFsdWUsIHZhbHVlLnJvd3MsIHBhcmFtZXRlci5jb2xsYXRpb24sIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHlpZWxkICogd3JpdGVSb3dzRnJvbShidWZmZXIsIHZhbHVlLCB2YWx1ZS5yb3dzLCBwYXJhbWV0ZXIuY29sbGF0aW9uLCBvcHRpb25zKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVFZQO1xubW9kdWxlLmV4cG9ydHMgPSBUVlA7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLHVCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFBK0MsU0FBQUUsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFL0MsTUFB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tvp.js","names":["_errors","require","_writableTrackingBuffer","_interopRequireDefault","e","__esModule","default","TVP_ROW_TOKEN","Buffer","from","TVP_END_TOKEN","NULL_LENGTH","TVP","id","type","name","declaration","parameter","value","schema","generateTypeInfo","databaseName","typeName","buffer","WritableTrackingBuffer","writeUInt8","writeBVarchar","data","generateParameterLength","options","columns","alloc","writeUInt16LE","length","generateParameterData","rows","i","len","column","buff","writeUInt32LE","row","k","len2","paramValue","validate","collation","error","InputError","cause","param","scale","precision","TypeError","Array","isArray","_default","exports","module"],"sources":["../../src/data-types/tvp.ts"],"sourcesContent":["import { type DataType } from '../data-type';\nimport { InputError } from '../errors';\nimport WritableTrackingBuffer from '../tracking-buffer/writable-tracking-buffer';\n\nconst TVP_ROW_TOKEN = Buffer.from([0x01]);\nconst TVP_END_TOKEN = Buffer.from([0x00]);\n\nconst NULL_LENGTH = Buffer.from([0xFF, 0xFF]);\n\nconst TVP: DataType = {\n id: 0xF3,\n type: 'TVPTYPE',\n name: 'TVP',\n\n declaration: function(parameter) {\n const value = parameter.value as any; // Temporary solution. Remove 'any' later.\n const schema = value.schema ? value.schema + '.' : '';\n return schema + value.name + ' readonly';\n },\n\n generateTypeInfo(parameter) {\n const databaseName = '';\n const schema = parameter.value?.schema ?? '';\n const typeName = parameter.value?.name ?? '';\n\n const buffer = new WritableTrackingBuffer();\n buffer.writeUInt8(this.id);\n buffer.writeBVarchar(databaseName, 'ucs2');\n buffer.writeBVarchar(schema, 'ucs2');\n buffer.writeBVarchar(typeName, 'ucs2');\n\n return buffer.data;\n },\n\n generateParameterLength(parameter, options) {\n if (parameter.value == null) {\n return NULL_LENGTH;\n }\n\n const { columns } = parameter.value;\n const buffer = Buffer.alloc(2);\n buffer.writeUInt16LE(columns.length, 0);\n return buffer;\n },\n\n *generateParameterData(parameter, options) {\n if (parameter.value == null) {\n yield TVP_END_TOKEN;\n yield TVP_END_TOKEN;\n return;\n }\n\n const { columns, rows } = parameter.value;\n\n for (let i = 0, len = columns.length; i < len; i++) {\n const column = columns[i];\n\n const buff = Buffer.alloc(6);\n // UserType\n buff.writeUInt32LE(0x00000000, 0);\n\n // Flags\n buff.writeUInt16LE(0x0000, 4);\n yield buff;\n\n // TYPE_INFO\n yield column.type.generateTypeInfo(column);\n\n // ColName\n yield Buffer.from([0x00]);\n }\n\n yield TVP_END_TOKEN;\n\n for (let i = 0, length = rows.length; i < length; i++) {\n yield TVP_ROW_TOKEN;\n\n const row = rows[i];\n for (let k = 0, len2 = row.length; k < len2; k++) {\n const column = columns[k];\n const value = row[k];\n\n let paramValue;\n try {\n paramValue = column.type.validate(value, parameter.collation);\n } catch (error) {\n throw new InputError(`TVP column '${column.name}' has invalid data at row index ${i}`, { cause: error });\n }\n\n const param = {\n value: paramValue,\n length: column.length,\n scale: column.scale,\n precision: column.precision\n };\n\n // TvpColumnData\n yield column.type.generateParameterLength(param, options);\n yield * column.type.generateParameterData(param, options);\n }\n }\n\n yield TVP_END_TOKEN;\n },\n\n validate: function(value): Buffer | null {\n if (value == null) {\n return null;\n }\n\n if (typeof value !== 'object') {\n throw new TypeError('Invalid table.');\n }\n\n if (!Array.isArray(value.columns)) {\n throw new TypeError('Invalid table.');\n }\n\n if (!Array.isArray(value.rows)) {\n throw new TypeError('Invalid table.');\n }\n\n return value;\n }\n};\n\nexport default TVP;\nmodule.exports = TVP;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"tvp.js","names":["_errors","require","_writableTrackingBuffer","_interopRequireDefault","_plpStream","e","__esModule","default","TVP_TYPE_ID","TVP_ROW_TOKEN","Buffer","from","TVP_END_TOKEN","NULL_TABLE","validateTable","value","Array","isArray","columns","TypeError","rows","isAsyncIterable","cellsFor","map","column","undefined","length","scale","precision","writeTvpTypeInfo","buffer","writeUInt8","writeBVarchar","schema","name","writeColumns","options","i","len","writeUInt32LE","writeUInt16LE","type","writeTypeInfo","writeBuffer","writeColumnMetadata","writeRow","cells","row","rowIndex","collation","InputError","k","cell","validate","error","cause","writeValue","writeRows","WritableTrackingBuffer","CHUNK_SIZE","writeRowsFrom","TVP","id","declaration","parameter","resolve","data","_default","exports","module"],"sources":["../../src/data-types/tvp.ts"],"sourcesContent":["import { type DataType, type ParameterData } from '../data-type';\nimport { type InternalConnectionOptions } from '../connection';\nimport { type Collation } from '../collation';\nimport { InputError } from '../errors';\nimport WritableTrackingBuffer from '../tracking-buffer/writable-tracking-buffer';\nimport { isAsyncIterable } from './plp-stream';\n\nconst TVP_TYPE_ID = 0xF3;\n\nconst TVP_ROW_TOKEN = Buffer.from([0x01]);\nconst TVP_END_TOKEN = Buffer.from([0x00]);\n\n// A NULL table: no columns, and the end tokens of the column metadata and\n// of the rows.\nconst NULL_TABLE = Buffer.from([0xFF, 0xFF, 0x00, 0x00]);\n\ninterface TvpColumn {\n name: string;\n type: DataType;\n length?: number | undefined;\n precision?: number | undefined;\n scale?: number | undefined;\n}\n\ntype TvpRow = unknown[];\n\ninterface TvpValue {\n name?: string | undefined;\n schema?: string | undefined;\n columns: TvpColumn[];\n // Rows are validated as they are written, whether they are given as an\n // array or as an async iterable that is read while the request is written.\n rows: TvpRow[] | AsyncIterable<TvpRow>;\n}\n\nfunction validateTable(value: unknown): TvpValue | null {\n if (value == null) {\n return null;\n }\n\n if (typeof value !== 'object' || !Array.isArray((value as TvpValue).columns)) {\n throw new TypeError('Invalid table.');\n }\n\n const rows = (value as TvpValue).rows;\n if (!Array.isArray(rows) && !isAsyncIterable(rows)) {\n throw new TypeError('Invalid table.');\n }\n\n return value as TvpValue;\n}\n\n// One cell per column, reused for every row: a type writes a cell's bytes\n// as soon as it is handed the cell and keeps no reference to it.\nfunction cellsFor(columns: TvpColumn[]): ParameterData[] {\n return columns.map((column) => ({ value: undefined, length: column.length, scale: column.scale, precision: column.precision }));\n}\n\nfunction writeTvpTypeInfo(buffer: WritableTrackingBuffer, value: TvpValue | null) {\n buffer.writeUInt8(TVP_TYPE_ID);\n // DbName\n buffer.writeBVarchar('', 'ucs2');\n // OwningSchema\n buffer.writeBVarchar(value?.schema ?? '', 'ucs2');\n // TypeName\n buffer.writeBVarchar(value?.name ?? '', 'ucs2');\n}\n\n// The column metadata after the column count: one entry per column, then\n// the end token.\nfunction writeColumns(buffer: WritableTrackingBuffer, columns: TvpColumn[], options: InternalConnectionOptions) {\n for (let i = 0, len = columns.length; i < len; i++) {\n const column = columns[i];\n\n // UserType\n buffer.writeUInt32LE(0x00000000);\n // Flags\n buffer.writeUInt16LE(0x0000);\n // TYPE_INFO\n column.type.writeTypeInfo(buffer, { value: undefined, length: column.length, precision: column.precision, scale: column.scale }, options);\n // ColName\n buffer.writeUInt8(0x00);\n }\n\n buffer.writeBuffer(TVP_END_TOKEN);\n}\n\nfunction writeColumnMetadata(buffer: WritableTrackingBuffer, value: TvpValue, options: InternalConnectionOptions) {\n buffer.writeUInt16LE(value.columns.length);\n writeColumns(buffer, value.columns, options);\n}\n\n// Validates and writes a row cell by cell. A cell that fails validation\n// leaves the row half written, which does not matter: the request is\n// abandoned with the error and the buffer never reaches the wire.\nfunction writeRow(buffer: WritableTrackingBuffer, columns: TvpColumn[], cells: ParameterData[], row: TvpRow, rowIndex: number, collation: Collation | undefined, options: InternalConnectionOptions) {\n if (!Array.isArray(row)) {\n throw new InputError(`TVP row at index ${rowIndex} is not an array`);\n }\n\n // Every declared column must have a value: the row metadata covers all\n // columns, so a shorter or longer row would desync the server's parse.\n if (row.length !== columns.length) {\n throw new InputError(`TVP row at index ${rowIndex} has ${row.length} value(s), but ${columns.length} column(s) are declared`);\n }\n\n buffer.writeBuffer(TVP_ROW_TOKEN);\n\n for (let k = 0, len = row.length; k < len; k++) {\n const column = columns[k];\n const cell = cells[k];\n\n try {\n cell.value = column.type.validate(row[k], collation);\n } catch (error) {\n throw new InputError(`TVP column '${column.name}' has invalid data at row index ${rowIndex}`, { cause: error });\n }\n\n // TvpColumnData\n column.type.writeValue(buffer, cell, options);\n }\n}\n\n// Rows given as an array are written in a synchronous loop, so the only\n// asynchrony is the yield for every chunk's worth of rows.\nasync function * writeRows(buffer: WritableTrackingBuffer, value: TvpValue, rows: TvpRow[], collation: Collation | undefined, options: InternalConnectionOptions): AsyncGenerator<void, void> {\n writeColumnMetadata(buffer, value, options);\n const cells = cellsFor(value.columns);\n\n for (let i = 0, len = rows.length; i < len; i++) {\n writeRow(buffer, value.columns, cells, rows[i], i, collation, options);\n\n if (buffer.length >= WritableTrackingBuffer.CHUNK_SIZE) {\n yield;\n }\n }\n\n buffer.writeBuffer(TVP_END_TOKEN);\n}\n\nasync function * writeRowsFrom(buffer: WritableTrackingBuffer, value: TvpValue, rows: AsyncIterable<TvpRow>, collation: Collation | undefined, options: InternalConnectionOptions): AsyncGenerator<void, void> {\n writeColumnMetadata(buffer, value, options);\n const cells = cellsFor(value.columns);\n\n let rowIndex = 0;\n for await (const row of rows) {\n writeRow(buffer, value.columns, cells, row, rowIndex++, collation, options);\n\n if (buffer.length >= WritableTrackingBuffer.CHUNK_SIZE) {\n yield;\n }\n }\n\n buffer.writeBuffer(TVP_END_TOKEN);\n}\n\nconst TVP: DataType = {\n id: TVP_TYPE_ID,\n type: 'TVPTYPE',\n name: 'TVP',\n\n declaration: function(parameter) {\n const value = parameter.value as any; // Temporary solution. Remove 'any' later.\n const schema = value.schema ? value.schema + '.' : '';\n return schema + value.name + ' readonly';\n },\n\n validate(value) {\n return validateTable(value);\n },\n\n resolve(parameter, collation) {\n // A TVP's `writeValue` always returns the rest of the write, whether\n // its rows are an array or an async iterable.\n const data: ParameterData<TvpValue | null> = { value: validateTable(parameter.value) };\n if (collation) {\n data.collation = collation;\n }\n\n return data;\n },\n\n writeTypeInfo(buffer, parameter) {\n writeTvpTypeInfo(buffer, parameter.value as TvpValue | null);\n },\n\n async * writeValue(buffer, parameter, options) {\n const value = parameter.value as TvpValue | null;\n\n if (value == null) {\n buffer.writeBuffer(NULL_TABLE);\n return;\n }\n\n if (Array.isArray(value.rows)) {\n yield * writeRows(buffer, value, value.rows, parameter.collation, options);\n return;\n }\n\n yield * writeRowsFrom(buffer, value, value.rows, parameter.collation, options);\n }\n};\n\nexport default TVP;\nmodule.exports = TVP;\n"],"mappings":"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","ignoreList":[]}
|
package/lib/data-types/udt.js
CHANGED
|
@@ -11,13 +11,10 @@ const UDT = {
|
|
|
11
11
|
declaration() {
|
|
12
12
|
throw new Error('not implemented');
|
|
13
13
|
},
|
|
14
|
-
|
|
14
|
+
writeTypeInfo() {
|
|
15
15
|
throw new Error('not implemented');
|
|
16
16
|
},
|
|
17
|
-
|
|
18
|
-
throw new Error('not implemented');
|
|
19
|
-
},
|
|
20
|
-
generateParameterData() {
|
|
17
|
+
writeValue() {
|
|
21
18
|
throw new Error('not implemented');
|
|
22
19
|
},
|
|
23
20
|
validate() {
|
|
@@ -26,4 +23,4 @@ const UDT = {
|
|
|
26
23
|
};
|
|
27
24
|
var _default = exports.default = UDT;
|
|
28
25
|
module.exports = UDT;
|
|
29
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVRFQiLCJpZCIsInR5cGUiLCJuYW1lIiwiZGVjbGFyYXRpb24iLCJFcnJvciIsIndyaXRlVHlwZUluZm8iLCJ3cml0ZVZhbHVlIiwidmFsaWRhdGUiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGEtdHlwZXMvdWR0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRGF0YVR5cGUgfSBmcm9tICcuLi9kYXRhLXR5cGUnO1xuXG5jb25zdCBVRFQ6IERhdGFUeXBlID0ge1xuICBpZDogMHhGMCxcbiAgdHlwZTogJ1VEVFRZUEUnLFxuICBuYW1lOiAnVURUJyxcblxuICBkZWNsYXJhdGlvbigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICB9LFxuXG4gIHdyaXRlVHlwZUluZm8oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgfSxcblxuICB3cml0ZVZhbHVlKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gIH0sXG5cbiAgdmFsaWRhdGUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVURUO1xubW9kdWxlLmV4cG9ydHMgPSBVRFQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLE1BQU1BLEdBQWEsR0FBRztFQUNwQkMsRUFBRSxFQUFFLElBQUk7RUFDUkMsSUFBSSxFQUFFLFNBQVM7RUFDZkMsSUFBSSxFQUFFLEtBQUs7RUFFWEMsV0FBV0EsQ0FBQSxFQUFHO0lBQ1osTUFBTSxJQUFJQyxLQUFLLENBQUMsaUJBQWlCLENBQUM7RUFDcEMsQ0FBQztFQUVEQyxhQUFhQSxDQUFBLEVBQUc7SUFDZCxNQUFNLElBQUlELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztFQUNwQyxDQUFDO0VBRURFLFVBQVVBLENBQUEsRUFBRztJQUNYLE1BQU0sSUFBSUYsS0FBSyxDQUFDLGlCQUFpQixDQUFDO0VBQ3BDLENBQUM7RUFFREcsUUFBUUEsQ0FBQSxFQUFHO0lBQ1QsTUFBTSxJQUFJSCxLQUFLLENBQUMsaUJBQWlCLENBQUM7RUFDcEM7QUFDRixDQUFDO0FBQUMsSUFBQUksUUFBQSxHQUFBQyxPQUFBLENBQUFDLE9BQUEsR0FFYVgsR0FBRztBQUNsQlksTUFBTSxDQUFDRixPQUFPLEdBQUdWLEdBQUciLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"udt.js","names":["UDT","id","type","name","declaration","Error","
|
|
1
|
+
{"version":3,"file":"udt.js","names":["UDT","id","type","name","declaration","Error","writeTypeInfo","writeValue","validate","_default","exports","default","module"],"sources":["../../src/data-types/udt.ts"],"sourcesContent":["import { type DataType } from '../data-type';\n\nconst UDT: DataType = {\n id: 0xF0,\n type: 'UDTTYPE',\n name: 'UDT',\n\n declaration() {\n throw new Error('not implemented');\n },\n\n writeTypeInfo() {\n throw new Error('not implemented');\n },\n\n writeValue() {\n throw new Error('not implemented');\n },\n\n validate() {\n throw new Error('not implemented');\n }\n};\n\nexport default UDT;\nmodule.exports = UDT;\n"],"mappings":";;;;;;AAEA,MAAMA,GAAa,GAAG;EACpBC,EAAE,EAAE,IAAI;EACRC,IAAI,EAAE,SAAS;EACfC,IAAI,EAAE,KAAK;EAEXC,WAAWA,CAAA,EAAG;IACZ,MAAM,IAAIC,KAAK,CAAC,iBAAiB,CAAC;EACpC,CAAC;EAEDC,aAAaA,CAAA,EAAG;IACd,MAAM,IAAID,KAAK,CAAC,iBAAiB,CAAC;EACpC,CAAC;EAEDE,UAAUA,CAAA,EAAG;IACX,MAAM,IAAIF,KAAK,CAAC,iBAAiB,CAAC;EACpC,CAAC;EAEDG,QAAQA,CAAA,EAAG;IACT,MAAM,IAAIH,KAAK,CAAC,iBAAiB,CAAC;EACpC;AACF,CAAC;AAAC,IAAAI,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaX,GAAG;AAClBY,MAAM,CAACF,OAAO,GAAGV,GAAG","ignoreList":[]}
|
|
@@ -5,8 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
var _guidParser = require("../guid-parser");
|
|
8
|
-
const
|
|
9
|
-
const DATA_LENGTH = Buffer.from([0x10]);
|
|
8
|
+
const TYPE_INFO = Buffer.from([0x24, 0x10]);
|
|
10
9
|
const UniqueIdentifier = {
|
|
11
10
|
id: 0x24,
|
|
12
11
|
type: 'GUIDN',
|
|
@@ -17,20 +16,19 @@ const UniqueIdentifier = {
|
|
|
17
16
|
resolveLength: function () {
|
|
18
17
|
return 16;
|
|
19
18
|
},
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
writeTypeInfo(buffer) {
|
|
20
|
+
buffer.writeBuffer(TYPE_INFO);
|
|
22
21
|
},
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
return DATA_LENGTH;
|
|
28
|
-
},
|
|
29
|
-
generateParameterData: function* (parameter, options) {
|
|
30
|
-
if (parameter.value == null) {
|
|
22
|
+
writeValue(buffer, parameter) {
|
|
23
|
+
const value = parameter.value;
|
|
24
|
+
if (value == null) {
|
|
25
|
+
buffer.writeUInt8(0x00);
|
|
31
26
|
return;
|
|
32
27
|
}
|
|
33
|
-
|
|
28
|
+
buffer.writeUInt8(0x10);
|
|
29
|
+
for (const byte of (0, _guidParser.guidToArray)(value)) {
|
|
30
|
+
buffer.writeUInt8(byte);
|
|
31
|
+
}
|
|
34
32
|
},
|
|
35
33
|
validate: function (value) {
|
|
36
34
|
if (value == null) {
|
|
@@ -47,4 +45,4 @@ const UniqueIdentifier = {
|
|
|
47
45
|
};
|
|
48
46
|
var _default = exports.default = UniqueIdentifier;
|
|
49
47
|
module.exports = UniqueIdentifier;
|
|
50
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3VpZFBhcnNlciIsInJlcXVpcmUiLCJUWVBFX0lORk8iLCJCdWZmZXIiLCJmcm9tIiwiVW5pcXVlSWRlbnRpZmllciIsImlkIiwidHlwZSIsIm5hbWUiLCJkZWNsYXJhdGlvbiIsInJlc29sdmVMZW5ndGgiLCJ3cml0ZVR5cGVJbmZvIiwiYnVmZmVyIiwid3JpdGVCdWZmZXIiLCJ3cml0ZVZhbHVlIiwicGFyYW1ldGVyIiwidmFsdWUiLCJ3cml0ZVVJbnQ4IiwiYnl0ZSIsImd1aWRUb0FycmF5IiwidmFsaWRhdGUiLCJUeXBlRXJyb3IiLCJ0ZXN0IiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhLXR5cGVzL3VuaXF1ZWlkZW50aWZpZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBEYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBndWlkVG9BcnJheSB9IGZyb20gJy4uL2d1aWQtcGFyc2VyJztcblxuY29uc3QgVFlQRV9JTkZPID0gQnVmZmVyLmZyb20oWzB4MjQsIDB4MTBdKTtcblxuY29uc3QgVW5pcXVlSWRlbnRpZmllcjogRGF0YVR5cGUgPSB7XG4gIGlkOiAweDI0LFxuICB0eXBlOiAnR1VJRE4nLFxuICBuYW1lOiAnVW5pcXVlSWRlbnRpZmllcicsXG5cbiAgZGVjbGFyYXRpb246IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAndW5pcXVlaWRlbnRpZmllcic7XG4gIH0sXG5cbiAgcmVzb2x2ZUxlbmd0aDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIDE2O1xuICB9LFxuXG4gIHdyaXRlVHlwZUluZm8oYnVmZmVyKSB7XG4gICAgYnVmZmVyLndyaXRlQnVmZmVyKFRZUEVfSU5GTyk7XG4gIH0sXG5cbiAgd3JpdGVWYWx1ZShidWZmZXIsIHBhcmFtZXRlcikge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyLnZhbHVlIGFzIHN0cmluZyB8IG51bGw7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDB4MDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDB4MTApO1xuICAgIGZvciAoY29uc3QgYnl0ZSBvZiBndWlkVG9BcnJheSh2YWx1ZSkpIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KGJ5dGUpO1xuICAgIH1cbiAgfSxcblxuICB2YWxpZGF0ZTogZnVuY3Rpb24odmFsdWUpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc3RyaW5nLicpO1xuICAgIH1cblxuICAgIGlmICghL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kL2kudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgR1VJRC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFVuaXF1ZUlkZW50aWZpZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFVuaXF1ZUlkZW50aWZpZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQUVBLE1BQU1DLFNBQVMsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFM0MsTUFBTUMsZ0JBQTBCLEdBQUc7RUFDakNDLEVBQUUsRUFBRSxJQUFJO0VBQ1JDLElBQUksRUFBRSxPQUFPO0VBQ2JDLElBQUksRUFBRSxrQkFBa0I7RUFFeEJDLFdBQVcsRUFBRSxTQUFBQSxDQUFBLEVBQVc7SUFDdEIsT0FBTyxrQkFBa0I7RUFDM0IsQ0FBQztFQUVEQyxhQUFhLEVBQUUsU0FBQUEsQ0FBQSxFQUFXO0lBQ3hCLE9BQU8sRUFBRTtFQUNYLENBQUM7RUFFREMsYUFBYUEsQ0FBQ0MsTUFBTSxFQUFFO0lBQ3BCQSxNQUFNLENBQUNDLFdBQVcsQ0FBQ1gsU0FBUyxDQUFDO0VBQy9CLENBQUM7RUFFRFksVUFBVUEsQ0FBQ0YsTUFBTSxFQUFFRyxTQUFTLEVBQUU7SUFDNUIsTUFBTUMsS0FBSyxHQUFHRCxTQUFTLENBQUNDLEtBQXNCO0lBQzlDLElBQUlBLEtBQUssSUFBSSxJQUFJLEVBQUU7TUFDakJKLE1BQU0sQ0FBQ0ssVUFBVSxDQUFDLElBQUksQ0FBQztNQUN2QjtJQUNGO0lBRUFMLE1BQU0sQ0FBQ0ssVUFBVSxDQUFDLElBQUksQ0FBQztJQUN2QixLQUFLLE1BQU1DLElBQUksSUFBSSxJQUFBQyx1QkFBVyxFQUFDSCxLQUFLLENBQUMsRUFBRTtNQUNyQ0osTUFBTSxDQUFDSyxVQUFVLENBQUNDLElBQUksQ0FBQztJQUN6QjtFQUNGLENBQUM7RUFFREUsUUFBUSxFQUFFLFNBQUFBLENBQVNKLEtBQUssRUFBaUI7SUFDdkMsSUFBSUEsS0FBSyxJQUFJLElBQUksRUFBRTtNQUNqQixPQUFPLElBQUk7SUFDYjtJQUVBLElBQUksT0FBT0EsS0FBSyxLQUFLLFFBQVEsRUFBRTtNQUM3QixNQUFNLElBQUlLLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztJQUN4QztJQUVBLElBQUksQ0FBQyxpRUFBaUUsQ0FBQ0MsSUFBSSxDQUFDTixLQUFLLENBQUMsRUFBRTtNQUNsRixNQUFNLElBQUlLLFNBQVMsQ0FBQyxlQUFlLENBQUM7SUFDdEM7SUFFQSxPQUFPTCxLQUFLO0VBQ2Q7QUFDRixDQUFDO0FBQUMsSUFBQU8sUUFBQSxHQUFBQyxPQUFBLENBQUFDLE9BQUEsR0FFYXBCLGdCQUFnQjtBQUMvQnFCLE1BQU0sQ0FBQ0YsT0FBTyxHQUFHbkIsZ0JBQWdCIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uniqueidentifier.js","names":["_guidParser","require","
|
|
1
|
+
{"version":3,"file":"uniqueidentifier.js","names":["_guidParser","require","TYPE_INFO","Buffer","from","UniqueIdentifier","id","type","name","declaration","resolveLength","writeTypeInfo","buffer","writeBuffer","writeValue","parameter","value","writeUInt8","byte","guidToArray","validate","TypeError","test","_default","exports","default","module"],"sources":["../../src/data-types/uniqueidentifier.ts"],"sourcesContent":["import { type DataType } from '../data-type';\nimport { guidToArray } from '../guid-parser';\n\nconst TYPE_INFO = Buffer.from([0x24, 0x10]);\n\nconst UniqueIdentifier: DataType = {\n id: 0x24,\n type: 'GUIDN',\n name: 'UniqueIdentifier',\n\n declaration: function() {\n return 'uniqueidentifier';\n },\n\n resolveLength: function() {\n return 16;\n },\n\n writeTypeInfo(buffer) {\n buffer.writeBuffer(TYPE_INFO);\n },\n\n writeValue(buffer, parameter) {\n const value = parameter.value as string | null;\n if (value == null) {\n buffer.writeUInt8(0x00);\n return;\n }\n\n buffer.writeUInt8(0x10);\n for (const byte of guidToArray(value)) {\n buffer.writeUInt8(byte);\n }\n },\n\n validate: function(value): string | null {\n if (value == null) {\n return null;\n }\n\n if (typeof value !== 'string') {\n throw new TypeError('Invalid string.');\n }\n\n if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(value)) {\n throw new TypeError('Invalid GUID.');\n }\n\n return value;\n }\n};\n\nexport default UniqueIdentifier;\nmodule.exports = UniqueIdentifier;\n"],"mappings":";;;;;;AACA,IAAAA,WAAA,GAAAC,OAAA;AAEA,MAAMC,SAAS,GAAGC,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAE3C,MAAMC,gBAA0B,GAAG;EACjCC,EAAE,EAAE,IAAI;EACRC,IAAI,EAAE,OAAO;EACbC,IAAI,EAAE,kBAAkB;EAExBC,WAAW,EAAE,SAAAA,CAAA,EAAW;IACtB,OAAO,kBAAkB;EAC3B,CAAC;EAEDC,aAAa,EAAE,SAAAA,CAAA,EAAW;IACxB,OAAO,EAAE;EACX,CAAC;EAEDC,aAAaA,CAACC,MAAM,EAAE;IACpBA,MAAM,CAACC,WAAW,CAACX,SAAS,CAAC;EAC/B,CAAC;EAEDY,UAAUA,CAACF,MAAM,EAAEG,SAAS,EAAE;IAC5B,MAAMC,KAAK,GAAGD,SAAS,CAACC,KAAsB;IAC9C,IAAIA,KAAK,IAAI,IAAI,EAAE;MACjBJ,MAAM,CAACK,UAAU,CAAC,IAAI,CAAC;MACvB;IACF;IAEAL,MAAM,CAACK,UAAU,CAAC,IAAI,CAAC;IACvB,KAAK,MAAMC,IAAI,IAAI,IAAAC,uBAAW,EAACH,KAAK,CAAC,EAAE;MACrCJ,MAAM,CAACK,UAAU,CAACC,IAAI,CAAC;IACzB;EACF,CAAC;EAEDE,QAAQ,EAAE,SAAAA,CAASJ,KAAK,EAAiB;IACvC,IAAIA,KAAK,IAAI,IAAI,EAAE;MACjB,OAAO,IAAI;IACb;IAEA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7B,MAAM,IAAIK,SAAS,CAAC,iBAAiB,CAAC;IACxC;IAEA,IAAI,CAAC,iEAAiE,CAACC,IAAI,CAACN,KAAK,CAAC,EAAE;MAClF,MAAM,IAAIK,SAAS,CAAC,eAAe,CAAC;IACtC;IAEA,OAAOL,KAAK;EACd;AACF,CAAC;AAAC,IAAAO,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEapB,gBAAgB;AAC/BqB,MAAM,CAACF,OAAO,GAAGnB,gBAAgB","ignoreList":[]}
|