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.
Files changed (109) hide show
  1. package/lib/always-encrypted/get-parameter-encryption-metadata.js +5 -2
  2. package/lib/always-encrypted/get-parameter-encryption-metadata.js.map +1 -1
  3. package/lib/bulk-load-payload.js +9 -5
  4. package/lib/bulk-load-payload.js.map +1 -1
  5. package/lib/bulk-load.js +17 -6
  6. package/lib/bulk-load.js.map +1 -1
  7. package/lib/connection.d.ts +5 -0
  8. package/lib/connection.js +33 -26
  9. package/lib/connection.js.map +1 -1
  10. package/lib/data-type.d.ts +47 -3
  11. package/lib/data-type.js +113 -2
  12. package/lib/data-type.js.map +1 -1
  13. package/lib/data-types/bigint.js +10 -17
  14. package/lib/data-types/bigint.js.map +1 -1
  15. package/lib/data-types/binary.js +10 -17
  16. package/lib/data-types/binary.js.map +1 -1
  17. package/lib/data-types/bit.js +10 -14
  18. package/lib/data-types/bit.js.map +1 -1
  19. package/lib/data-types/bitn.js +3 -6
  20. package/lib/data-types/bitn.js.map +1 -1
  21. package/lib/data-types/char.js +12 -17
  22. package/lib/data-types/char.js.map +1 -1
  23. package/lib/data-types/date.js +11 -27
  24. package/lib/data-types/date.js.map +1 -1
  25. package/lib/data-types/datetime.js +17 -37
  26. package/lib/data-types/datetime.js.map +1 -1
  27. package/lib/data-types/datetime2.js +12 -67
  28. package/lib/data-types/datetime2.js.map +1 -1
  29. package/lib/data-types/datetimen.js +3 -6
  30. package/lib/data-types/datetimen.js.map +1 -1
  31. package/lib/data-types/datetimeoffset.js +13 -60
  32. package/lib/data-types/datetimeoffset.js.map +1 -1
  33. package/lib/data-types/decimal-common.d.ts +18 -0
  34. package/lib/data-types/decimal-common.js +79 -0
  35. package/lib/data-types/decimal-common.js.map +1 -0
  36. package/lib/data-types/decimal.js +6 -67
  37. package/lib/data-types/decimal.js.map +1 -1
  38. package/lib/data-types/decimaln.js +3 -6
  39. package/lib/data-types/decimaln.js.map +1 -1
  40. package/lib/data-types/float.js +10 -15
  41. package/lib/data-types/float.js.map +1 -1
  42. package/lib/data-types/floatn.js +3 -6
  43. package/lib/data-types/floatn.js.map +1 -1
  44. package/lib/data-types/image.js +10 -17
  45. package/lib/data-types/image.js.map +1 -1
  46. package/lib/data-types/int.js +8 -15
  47. package/lib/data-types/int.js.map +1 -1
  48. package/lib/data-types/intn.js +3 -6
  49. package/lib/data-types/intn.js.map +1 -1
  50. package/lib/data-types/money.js +14 -18
  51. package/lib/data-types/money.js.map +1 -1
  52. package/lib/data-types/moneyn.js +3 -6
  53. package/lib/data-types/moneyn.js.map +1 -1
  54. package/lib/data-types/nchar.js +17 -31
  55. package/lib/data-types/nchar.js.map +1 -1
  56. package/lib/data-types/ntext.js +13 -17
  57. package/lib/data-types/ntext.js.map +1 -1
  58. package/lib/data-types/null.js +3 -6
  59. package/lib/data-types/null.js.map +1 -1
  60. package/lib/data-types/numeric.js +6 -67
  61. package/lib/data-types/numeric.js.map +1 -1
  62. package/lib/data-types/numericn.js +3 -6
  63. package/lib/data-types/numericn.js.map +1 -1
  64. package/lib/data-types/nvarchar.js +68 -57
  65. package/lib/data-types/nvarchar.js.map +1 -1
  66. package/lib/data-types/plp-stream.d.ts +19 -0
  67. package/lib/data-types/plp-stream.js +59 -0
  68. package/lib/data-types/plp-stream.js.map +1 -0
  69. package/lib/data-types/real.js +10 -16
  70. package/lib/data-types/real.js.map +1 -1
  71. package/lib/data-types/smalldatetime.js +17 -23
  72. package/lib/data-types/smalldatetime.js.map +1 -1
  73. package/lib/data-types/smallint.js +10 -16
  74. package/lib/data-types/smallint.js.map +1 -1
  75. package/lib/data-types/smallmoney.js +10 -16
  76. package/lib/data-types/smallmoney.js.map +1 -1
  77. package/lib/data-types/sql-variant.js +3 -6
  78. package/lib/data-types/sql-variant.js.map +1 -1
  79. package/lib/data-types/temporal.d.ts +22 -0
  80. package/lib/data-types/temporal.js +72 -0
  81. package/lib/data-types/temporal.js.map +1 -0
  82. package/lib/data-types/text.js +12 -18
  83. package/lib/data-types/text.js.map +1 -1
  84. package/lib/data-types/time.js +11 -55
  85. package/lib/data-types/time.js.map +1 -1
  86. package/lib/data-types/tinyint.js +10 -16
  87. package/lib/data-types/tinyint.js.map +1 -1
  88. package/lib/data-types/tvp.js +145 -87
  89. package/lib/data-types/tvp.js.map +1 -1
  90. package/lib/data-types/udt.js +3 -6
  91. package/lib/data-types/udt.js.map +1 -1
  92. package/lib/data-types/uniqueidentifier.js +12 -14
  93. package/lib/data-types/uniqueidentifier.js.map +1 -1
  94. package/lib/data-types/varbinary.js +58 -48
  95. package/lib/data-types/varbinary.js.map +1 -1
  96. package/lib/data-types/varchar.js +84 -50
  97. package/lib/data-types/varchar.js.map +1 -1
  98. package/lib/data-types/xml.js +3 -6
  99. package/lib/data-types/xml.js.map +1 -1
  100. package/lib/request.d.ts +23 -3
  101. package/lib/request.js +29 -3
  102. package/lib/request.js.map +1 -1
  103. package/lib/rpcrequest-payload.d.ts +21 -9
  104. package/lib/rpcrequest-payload.js +62 -51
  105. package/lib/rpcrequest-payload.js.map +1 -1
  106. package/lib/tedious.d.ts +2 -2
  107. package/lib/tedious.js +7 -1
  108. package/lib/tedious.js.map +1 -1
  109. 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 DATA_LENGTH = Buffer.from([0x01]);
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
- generateTypeInfo() {
19
- return Buffer.from([_intn.default.id, 0x01]);
17
+ writeTypeInfo(buffer) {
18
+ buffer.writeBuffer(TYPE_INFO);
20
19
  },
21
- generateParameterLength(parameter, options) {
22
- if (parameter.value == null) {
23
- return NULL_LENGTH;
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
- const buffer = Buffer.alloc(1);
32
- buffer.writeUInt8(Number(parameter.value), 0);
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW50biIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiREFUQV9MRU5HVEgiLCJCdWZmZXIiLCJmcm9tIiwiTlVMTF9MRU5HVEgiLCJUaW55SW50IiwiaWQiLCJ0eXBlIiwibmFtZSIsImRlY2xhcmF0aW9uIiwiZ2VuZXJhdGVUeXBlSW5mbyIsIkludE4iLCJnZW5lcmF0ZVBhcmFtZXRlckxlbmd0aCIsInBhcmFtZXRlciIsIm9wdGlvbnMiLCJ2YWx1ZSIsImdlbmVyYXRlUGFyYW1ldGVyRGF0YSIsImJ1ZmZlciIsImFsbG9jIiwid3JpdGVVSW50OCIsIk51bWJlciIsInZhbGlkYXRlIiwiaXNOYU4iLCJUeXBlRXJyb3IiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YS10eXBlcy90aW55aW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRGF0YVR5cGUgfSBmcm9tICcuLi9kYXRhLXR5cGUnO1xuaW1wb3J0IEludE4gZnJvbSAnLi9pbnRuJztcblxuY29uc3QgREFUQV9MRU5HVEggPSBCdWZmZXIuZnJvbShbMHgwMV0pO1xuY29uc3QgTlVMTF9MRU5HVEggPSBCdWZmZXIuZnJvbShbMHgwMF0pO1xuXG5jb25zdCBUaW55SW50OiBEYXRhVHlwZSA9IHtcbiAgaWQ6IDB4MzAsXG4gIHR5cGU6ICdJTlQxJyxcbiAgbmFtZTogJ1RpbnlJbnQnLFxuXG4gIGRlY2xhcmF0aW9uOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ3RpbnlpbnQnO1xuICB9LFxuXG4gIGdlbmVyYXRlVHlwZUluZm8oKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFtJbnROLmlkLCAweDAxXSk7XG4gIH0sXG5cbiAgZ2VuZXJhdGVQYXJhbWV0ZXJMZW5ndGgocGFyYW1ldGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKHBhcmFtZXRlci52YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gTlVMTF9MRU5HVEg7XG4gICAgfVxuXG4gICAgcmV0dXJuIERBVEFfTEVOR1RIO1xuICB9LFxuXG4gICogZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhKHBhcmFtZXRlciwgb3B0aW9ucykge1xuICAgIGlmIChwYXJhbWV0ZXIudmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYygxKTtcbiAgICBidWZmZXIud3JpdGVVSW50OChOdW1iZXIocGFyYW1ldGVyLnZhbHVlKSwgMCk7XG4gICAgeWllbGQgYnVmZmVyO1xuICB9LFxuXG4gIHZhbGlkYXRlOiBmdW5jdGlvbih2YWx1ZSk6IG51bWJlciB8IG51bGwge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgbnVtYmVyLicpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlIG11c3QgYmUgYmV0d2VlbiAwIGFuZCAyNTUsIGluY2x1c2l2ZS4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUgfCAwO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUaW55SW50O1xubW9kdWxlLmV4cG9ydHMgPSBUaW55SW50O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBMEIsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFMUIsTUFBTUcsV0FBVyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3ZDLE1BQU1DLFdBQVcsR0FBR0YsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUV2QyxNQUFNRSxPQUFpQixHQUFHO0VBQ3hCQyxFQUFFLEVBQUUsSUFBSTtFQUNSQyxJQUFJLEVBQUUsTUFBTTtFQUNaQyxJQUFJLEVBQUUsU0FBUztFQUVmQyxXQUFXLEVBQUUsU0FBQUEsQ0FBQSxFQUFXO0lBQ3RCLE9BQU8sU0FBUztFQUNsQixDQUFDO0VBRURDLGdCQUFnQkEsQ0FBQSxFQUFHO0lBQ2pCLE9BQU9SLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUNRLGFBQUksQ0FBQ0wsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3JDLENBQUM7RUFFRE0sdUJBQXVCQSxDQUFDQyxTQUFTLEVBQUVDLE9BQU8sRUFBRTtJQUMxQyxJQUFJRCxTQUFTLENBQUNFLEtBQUssSUFBSSxJQUFJLEVBQUU7TUFDM0IsT0FBT1gsV0FBVztJQUNwQjtJQUVBLE9BQU9ILFdBQVc7RUFDcEIsQ0FBQztFQUVELENBQUVlLHFCQUFxQkEsQ0FBQ0gsU0FBUyxFQUFFQyxPQUFPLEVBQUU7SUFDMUMsSUFBSUQsU0FBUyxDQUFDRSxLQUFLLElBQUksSUFBSSxFQUFFO01BQzNCO0lBQ0Y7SUFFQSxNQUFNRSxNQUFNLEdBQUdmLE1BQU0sQ0FBQ2dCLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDOUJELE1BQU0sQ0FBQ0UsVUFBVSxDQUFDQyxNQUFNLENBQUNQLFNBQVMsQ0FBQ0UsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdDLE1BQU1FLE1BQU07RUFDZCxDQUFDO0VBRURJLFFBQVEsRUFBRSxTQUFBQSxDQUFTTixLQUFLLEVBQWlCO0lBQ3ZDLElBQUlBLEtBQUssSUFBSSxJQUFJLEVBQUU7TUFDakIsT0FBTyxJQUFJO0lBQ2I7SUFFQSxJQUFJLE9BQU9BLEtBQUssS0FBSyxRQUFRLEVBQUU7TUFDN0JBLEtBQUssR0FBR0ssTUFBTSxDQUFDTCxLQUFLLENBQUM7SUFDdkI7SUFFQSxJQUFJTyxLQUFLLENBQUNQLEtBQUssQ0FBQyxFQUFFO01BQ2hCLE1BQU0sSUFBSVEsU0FBUyxDQUFDLGlCQUFpQixDQUFDO0lBQ3hDO0lBRUEsSUFBSVIsS0FBSyxHQUFHLENBQUMsSUFBSUEsS0FBSyxHQUFHLEdBQUcsRUFBRTtNQUM1QixNQUFNLElBQUlRLFNBQVMsQ0FBQyw2Q0FBNkMsQ0FBQztJQUNwRTtJQUVBLE9BQU9SLEtBQUssR0FBRyxDQUFDO0VBQ2xCO0FBQ0YsQ0FBQztBQUFDLElBQUFTLFFBQUEsR0FBQUMsT0FBQSxDQUFBekIsT0FBQSxHQUVhSyxPQUFPO0FBQ3RCcUIsTUFBTSxDQUFDRCxPQUFPLEdBQUdwQixPQUFPIiwiaWdub3JlTGlzdCI6W119
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","DATA_LENGTH","Buffer","from","NULL_LENGTH","TinyInt","id","type","name","declaration","generateTypeInfo","IntN","generateParameterLength","parameter","options","value","generateParameterData","buffer","alloc","writeUInt8","Number","validate","isNaN","TypeError","_default","exports","module"],"sources":["../../src/data-types/tinyint.ts"],"sourcesContent":["import { type DataType } from '../data-type';\nimport IntN from './intn';\n\nconst DATA_LENGTH = Buffer.from([0x01]);\nconst NULL_LENGTH = Buffer.from([0x00]);\n\nconst TinyInt: DataType = {\n id: 0x30,\n type: 'INT1',\n name: 'TinyInt',\n\n declaration: function() {\n return 'tinyint';\n },\n\n generateTypeInfo() {\n return Buffer.from([IntN.id, 0x01]);\n },\n\n generateParameterLength(parameter, options) {\n if (parameter.value == null) {\n return NULL_LENGTH;\n }\n\n return DATA_LENGTH;\n },\n\n * generateParameterData(parameter, options) {\n if (parameter.value == null) {\n return;\n }\n\n const buffer = Buffer.alloc(1);\n buffer.writeUInt8(Number(parameter.value), 0);\n yield buffer;\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,WAAW,GAAGC,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACvC,MAAMC,WAAW,GAAGF,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAEvC,MAAME,OAAiB,GAAG;EACxBC,EAAE,EAAE,IAAI;EACRC,IAAI,EAAE,MAAM;EACZC,IAAI,EAAE,SAAS;EAEfC,WAAW,EAAE,SAAAA,CAAA,EAAW;IACtB,OAAO,SAAS;EAClB,CAAC;EAEDC,gBAAgBA,CAAA,EAAG;IACjB,OAAOR,MAAM,CAACC,IAAI,CAAC,CAACQ,aAAI,CAACL,EAAE,EAAE,IAAI,CAAC,CAAC;EACrC,CAAC;EAEDM,uBAAuBA,CAACC,SAAS,EAAEC,OAAO,EAAE;IAC1C,IAAID,SAAS,CAACE,KAAK,IAAI,IAAI,EAAE;MAC3B,OAAOX,WAAW;IACpB;IAEA,OAAOH,WAAW;EACpB,CAAC;EAED,CAAEe,qBAAqBA,CAACH,SAAS,EAAEC,OAAO,EAAE;IAC1C,IAAID,SAAS,CAACE,KAAK,IAAI,IAAI,EAAE;MAC3B;IACF;IAEA,MAAME,MAAM,GAAGf,MAAM,CAACgB,KAAK,CAAC,CAAC,CAAC;IAC9BD,MAAM,CAACE,UAAU,CAACC,MAAM,CAACP,SAAS,CAACE,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7C,MAAME,MAAM;EACd,CAAC;EAEDI,QAAQ,EAAE,SAAAA,CAASN,KAAK,EAAiB;IACvC,IAAIA,KAAK,IAAI,IAAI,EAAE;MACjB,OAAO,IAAI;IACb;IAEA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7BA,KAAK,GAAGK,MAAM,CAACL,KAAK,CAAC;IACvB;IAEA,IAAIO,KAAK,CAACP,KAAK,CAAC,EAAE;MAChB,MAAM,IAAIQ,SAAS,CAAC,iBAAiB,CAAC;IACxC;IAEA,IAAIR,KAAK,GAAG,CAAC,IAAIA,KAAK,GAAG,GAAG,EAAE;MAC5B,MAAM,IAAIQ,SAAS,CAAC,6CAA6C,CAAC;IACpE;IAEA,OAAOR,KAAK,GAAG,CAAC;EAClB;AACF,CAAC;AAAC,IAAAS,QAAA,GAAAC,OAAA,CAAAzB,OAAA,GAEaK,OAAO;AACtBqB,MAAM,CAACD,OAAO,GAAGpB,OAAO","ignoreList":[]}
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":[]}
@@ -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
- const NULL_LENGTH = Buffer.from([0xFF, 0xFF]);
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: 0xF3,
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
- generateTypeInfo(parameter) {
23
- const databaseName = '';
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
- generateParameterLength(parameter, options) {
34
- if (parameter.value == null) {
35
- return NULL_LENGTH;
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
- const {
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
- *generateParameterData(parameter, options) {
45
- if (parameter.value == null) {
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
- validate: function (value) {
160
+ async *writeValue(buffer, parameter, options) {
161
+ const value = parameter.value;
100
162
  if (value == null) {
101
- return null;
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 (!Array.isArray(value.rows)) {
110
- throw new TypeError('Invalid table.');
166
+ if (Array.isArray(value.rows)) {
167
+ yield* writeRows(buffer, value, value.rows, parameter.collation, options);
168
+ return;
111
169
  }
112
- return value;
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/IHZhbHVlLnNjaGVtYSArICcuJyA6ICcnO1xuICAgIHJldHVybiBzY2hlbWEgKyB2YWx1ZS5uYW1lICsgJyByZWFkb25seSc7XG4gIH0sXG5cbiAgdmFsaWRhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsaWRhdGVUYWJsZSh2YWx1ZSk7XG4gIH0sXG5cbiAgcmVzb2x2ZShwYXJhbWV0ZXIsIGNvbGxhdGlvbikge1xuICAgIC8vIEEgVFZQJ3MgYHdyaXRlVmFsdWVgIGFsd2F5cyByZXR1cm5zIHRoZSByZXN0IG9mIHRoZSB3cml0ZSwgd2hldGhlclxuICAgIC8vIGl0cyByb3dzIGFyZSBhbiBhcnJheSBvciBhbiBhc3luYyBpdGVyYWJsZS5cbiAgICBjb25zdCBkYXRhOiBQYXJhbWV0ZXJEYXRhPFR2cFZhbHVlIHwgbnVsbD4gPSB7IHZhbHVlOiB2YWxpZGF0ZVRhYmxlKHBhcmFtZXRlci52YWx1ZSkgfTtcbiAgICBpZiAoY29sbGF0aW9uKSB7XG4gICAgICBkYXRhLmNvbGxhdGlvbiA9IGNvbGxhdGlvbjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfSxcblxuICB3cml0ZVR5cGVJbmZvKGJ1ZmZlciwgcGFyYW1ldGVyKSB7XG4gICAgd3JpdGVUdnBUeXBlSW5mbyhidWZmZXIsIHBhcmFtZXRlci52YWx1ZSBhcyBUdnBWYWx1ZSB8IG51bGwpO1xuICB9LFxuXG4gIGFzeW5jICogd3JpdGVWYWx1ZShidWZmZXIsIHBhcmFtZXRlciwgb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyLnZhbHVlIGFzIFR2cFZhbHVlIHwgbnVsbDtcblxuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBidWZmZXIud3JpdGVCdWZmZXIoTlVMTF9UQUJMRSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUucm93cykpIHtcbiAgICAgIHlpZWxkICogd3JpdGVSb3dzKGJ1ZmZlciwgdmFsdWUsIHZhbHVlLnJvd3MsIHBhcmFtZXRlci5jb2xsYXRpb24sIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHlpZWxkICogd3JpdGVSb3dzRnJvbShidWZmZXIsIHZhbHVlLCB2YWx1ZS5yb3dzLCBwYXJhbWV0ZXIuY29sbGF0aW9uLCBvcHRpb25zKTtcbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgVFZQO1xubW9kdWxlLmV4cG9ydHMgPSBUVlA7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLHVCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFBK0MsU0FBQUUsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFFL0MsTUFBTUcsV0FBVyxHQUFHLElBQUk7QUFFeEIsTUFBTUMsYUFBYSxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLE1BQU1DLGFBQWEsR0FBR0YsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7QUFFekM7QUFDQTtBQUNBLE1BQU1FLFVBQVUsR0FBR0gsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQXFCeEQsU0FBU0csYUFBYUEsQ0FBQ0MsS0FBYyxFQUFtQjtFQUN0RCxJQUFJQSxLQUFLLElBQUksSUFBSSxFQUFFO0lBQ2pCLE9BQU8sSUFBSTtFQUNiO0VBRUEsSUFBSSxPQUFPQSxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsT0FBTyxDQUFFRixLQUFLLENBQWNHLE9BQU8sQ0FBQyxFQUFFO0lBQzVFLE1BQU0sSUFBSUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDO0VBQ3ZDO0VBRUEsTUFBTUMsSUFBSSxHQUFJTCxLQUFLLENBQWNLLElBQUk7RUFDckMsSUFBSSxDQUFDSixLQUFLLENBQUNDLE9BQU8sQ0FBQ0csSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFBQywwQkFBZSxFQUFDRCxJQUFJLENBQUMsRUFBRTtJQUNsRCxNQUFNLElBQUlELFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztFQUN2QztFQUVBLE9BQU9KLEtBQUs7QUFDZDs7QUFFQTtBQUNBO0FBQ0EsU0FBU08sUUFBUUEsQ0FBQ0osT0FBb0IsRUFBbUI7RUFDdkQsT0FBT0EsT0FBTyxDQUFDSyxHQUFHLENBQUVDLE1BQU0sS0FBTTtJQUFFVCxLQUFLLEVBQUVVLFNBQVM7SUFBRUMsTUFBTSxFQUFFRixNQUFNLENBQUNFLE1BQU07SUFBRUMsS0FBSyxFQUFFSCxNQUFNLENBQUNHLEtBQUs7SUFBRUMsU0FBUyxFQUFFSixNQUFNLENBQUNJO0VBQVUsQ0FBQyxDQUFDLENBQUM7QUFDakk7QUFFQSxTQUFTQyxnQkFBZ0JBLENBQUNDLE1BQThCLEVBQUVmLEtBQXNCLEVBQUU7RUFDaEZlLE1BQU0sQ0FBQ0MsVUFBVSxDQUFDdkIsV0FBVyxDQUFDO0VBQzlCO0VBQ0FzQixNQUFNLENBQUNFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDO0VBQ2hDO0VBQ0FGLE1BQU0sQ0FBQ0UsYUFBYSxDQUFDakIsS0FBSyxFQUFFa0IsTUFBTSxJQUFJLEVBQUUsRUFBRSxNQUFNLENBQUM7RUFDakQ7RUFDQUgsTUFBTSxDQUFDRSxhQUFhLENBQUNqQixLQUFLLEVBQUVtQixJQUFJLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQztBQUNqRDs7QUFFQTtBQUNBO0FBQ0EsU0FBU0MsWUFBWUEsQ0FBQ0wsTUFBOEIsRUFBRVosT0FBb0IsRUFBRWtCLE9BQWtDLEVBQUU7RUFDOUcsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQyxHQUFHLEdBQUdwQixPQUFPLENBQUNRLE1BQU0sRUFBRVcsQ0FBQyxHQUFHQyxHQUFHLEVBQUVELENBQUMsRUFBRSxFQUFFO0lBQ2xELE1BQU1iLE1BQU0sR0FBR04sT0FBTyxDQUFDbUIsQ0FBQyxDQUFDOztJQUV6QjtJQUNBUCxNQUFNLENBQUNTLGFBQWEsQ0FBQyxVQUFVLENBQUM7SUFDaEM7SUFDQVQsTUFBTSxDQUFDVSxhQUFhLENBQUMsTUFBTSxDQUFDO0lBQzVCO0lBQ0FoQixNQUFNLENBQUNpQixJQUFJLENBQUNDLGFBQWEsQ0FBQ1osTUFBTSxFQUFFO01BQUVmLEtBQUssRUFBRVUsU0FBUztNQUFFQyxNQUFNLEVBQUVGLE1BQU0sQ0FBQ0UsTUFBTTtNQUFFRSxTQUFTLEVBQUVKLE1BQU0sQ0FBQ0ksU0FBUztNQUFFRCxLQUFLLEVBQUVILE1BQU0sQ0FBQ0c7SUFBTSxDQUFDLEVBQUVTLE9BQU8sQ0FBQztJQUN6STtJQUNBTixNQUFNLENBQUNDLFVBQVUsQ0FBQyxJQUFJLENBQUM7RUFDekI7RUFFQUQsTUFBTSxDQUFDYSxXQUFXLENBQUMvQixhQUFhLENBQUM7QUFDbkM7QUFFQSxTQUFTZ0MsbUJBQW1CQSxDQUFDZCxNQUE4QixFQUFFZixLQUFlLEVBQUVxQixPQUFrQyxFQUFFO0VBQ2hITixNQUFNLENBQUNVLGFBQWEsQ0FBQ3pCLEtBQUssQ0FBQ0csT0FBTyxDQUFDUSxNQUFNLENBQUM7RUFDMUNTLFlBQVksQ0FBQ0wsTUFBTSxFQUFFZixLQUFLLENBQUNHLE9BQU8sRUFBRWtCLE9BQU8sQ0FBQztBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTUyxRQUFRQSxDQUFDZixNQUE4QixFQUFFWixPQUFvQixFQUFFNEIsS0FBc0IsRUFBRUMsR0FBVyxFQUFFQyxRQUFnQixFQUFFQyxTQUFnQyxFQUFFYixPQUFrQyxFQUFFO0VBQ25NLElBQUksQ0FBQ3BCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDOEIsR0FBRyxDQUFDLEVBQUU7SUFDdkIsTUFBTSxJQUFJRyxrQkFBVSxDQUFDLG9CQUFvQkYsUUFBUSxrQkFBa0IsQ0FBQztFQUN0RTs7RUFFQTtFQUNBO0VBQ0EsSUFBSUQsR0FBRyxDQUFDckIsTUFBTSxLQUFLUixPQUFPLENBQUNRLE1BQU0sRUFBRTtJQUNqQyxNQUFNLElBQUl3QixrQkFBVSxDQUFDLG9CQUFvQkYsUUFBUSxRQUFRRCxHQUFHLENBQUNyQixNQUFNLGtCQUFrQlIsT0FBTyxDQUFDUSxNQUFNLHlCQUF5QixDQUFDO0VBQy9IO0VBRUFJLE1BQU0sQ0FBQ2EsV0FBVyxDQUFDbEMsYUFBYSxDQUFDO0VBRWpDLEtBQUssSUFBSTBDLENBQUMsR0FBRyxDQUFDLEVBQUViLEdBQUcsR0FBR1MsR0FBRyxDQUFDckIsTUFBTSxFQUFFeUIsQ0FBQyxHQUFHYixHQUFHLEVBQUVhLENBQUMsRUFBRSxFQUFFO0lBQzlDLE1BQU0zQixNQUFNLEdBQUdOLE9BQU8sQ0FBQ2lDLENBQUMsQ0FBQztJQUN6QixNQUFNQyxJQUFJLEdBQUdOLEtBQUssQ0FBQ0ssQ0FBQyxDQUFDO0lBRXJCLElBQUk7TUFDRkMsSUFBSSxDQUFDckMsS0FBSyxHQUFHUyxNQUFNLENBQUNpQixJQUFJLENBQUNZLFFBQVEsQ0FBQ04sR0FBRyxDQUFDSSxDQUFDLENBQUMsRUFBRUYsU0FBUyxDQUFDO0lBQ3RELENBQUMsQ0FBQyxPQUFPSyxLQUFLLEVBQUU7TUFDZCxNQUFNLElBQUlKLGtCQUFVLENBQUMsZUFBZTFCLE1BQU0sQ0FBQ1UsSUFBSSxtQ0FBbUNjLFFBQVEsRUFBRSxFQUFFO1FBQUVPLEtBQUssRUFBRUQ7TUFBTSxDQUFDLENBQUM7SUFDakg7O0lBRUE7SUFDQTlCLE1BQU0sQ0FBQ2lCLElBQUksQ0FBQ2UsVUFBVSxDQUFDMUIsTUFBTSxFQUFFc0IsSUFBSSxFQUFFaEIsT0FBTyxDQUFDO0VBQy9DO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBLGdCQUFpQnFCLFNBQVNBLENBQUMzQixNQUE4QixFQUFFZixLQUFlLEVBQUVLLElBQWMsRUFBRTZCLFNBQWdDLEVBQUViLE9BQWtDLEVBQThCO0VBQzVMUSxtQkFBbUIsQ0FBQ2QsTUFBTSxFQUFFZixLQUFLLEVBQUVxQixPQUFPLENBQUM7RUFDM0MsTUFBTVUsS0FBSyxHQUFHeEIsUUFBUSxDQUFDUCxLQUFLLENBQUNHLE9BQU8sQ0FBQztFQUVyQyxLQUFLLElBQUltQixDQUFDLEdBQUcsQ0FBQyxFQUFFQyxHQUFHLEdBQUdsQixJQUFJLENBQUNNLE1BQU0sRUFBRVcsQ0FBQyxHQUFHQyxHQUFHLEVBQUVELENBQUMsRUFBRSxFQUFFO0lBQy9DUSxRQUFRLENBQUNmLE1BQU0sRUFBRWYsS0FBSyxDQUFDRyxPQUFPLEVBQUU0QixLQUFLLEVBQUUxQixJQUFJLENBQUNpQixDQUFDLENBQUMsRUFBRUEsQ0FBQyxFQUFFWSxTQUFTLEVBQUViLE9BQU8sQ0FBQztJQUV0RSxJQUFJTixNQUFNLENBQUNKLE1BQU0sSUFBSWdDLCtCQUFzQixDQUFDQyxVQUFVLEVBQUU7TUFDdEQsS0FBSztJQUNQO0VBQ0Y7RUFFQTdCLE1BQU0sQ0FBQ2EsV0FBVyxDQUFDL0IsYUFBYSxDQUFDO0FBQ25DO0FBRUEsZ0JBQWlCZ0QsYUFBYUEsQ0FBQzlCLE1BQThCLEVBQUVmLEtBQWUsRUFBRUssSUFBMkIsRUFBRTZCLFNBQWdDLEVBQUViLE9BQWtDLEVBQThCO0VBQzdNUSxtQkFBbUIsQ0FBQ2QsTUFBTSxFQUFFZixLQUFLLEVBQUVxQixPQUFPLENBQUM7RUFDM0MsTUFBTVUsS0FBSyxHQUFHeEIsUUFBUSxDQUFDUCxLQUFLLENBQUNHLE9BQU8sQ0FBQztFQUVyQyxJQUFJOEIsUUFBUSxHQUFHLENBQUM7RUFDaEIsV0FBVyxNQUFNRCxHQUFHLElBQUkzQixJQUFJLEVBQUU7SUFDNUJ5QixRQUFRLENBQUNmLE1BQU0sRUFBRWYsS0FBSyxDQUFDRyxPQUFPLEVBQUU0QixLQUFLLEVBQUVDLEdBQUcsRUFBRUMsUUFBUSxFQUFFLEVBQUVDLFNBQVMsRUFBRWIsT0FBTyxDQUFDO0lBRTNFLElBQUlOLE1BQU0sQ0FBQ0osTUFBTSxJQUFJZ0MsK0JBQXNCLENBQUNDLFVBQVUsRUFBRTtNQUN0RCxLQUFLO0lBQ1A7RUFDRjtFQUVBN0IsTUFBTSxDQUFDYSxXQUFXLENBQUMvQixhQUFhLENBQUM7QUFDbkM7QUFFQSxNQUFNaUQsR0FBYSxHQUFHO0VBQ3BCQyxFQUFFLEVBQUV0RCxXQUFXO0VBQ2ZpQyxJQUFJLEVBQUUsU0FBUztFQUNmUCxJQUFJLEVBQUUsS0FBSztFQUVYNkIsV0FBVyxFQUFFLFNBQUFBLENBQVNDLFNBQVMsRUFBRTtJQUMvQixNQUFNakQsS0FBSyxHQUFHaUQsU0FBUyxDQUFDakQsS0FBWSxDQUFDLENBQUM7SUFDdEMsTUFBTWtCLE1BQU0sR0FBR2xCLEtBQUssQ0FBQ2tCLE1BQU0sR0FBR2xCLEtBQUssQ0FBQ2tCLE1BQU0sR0FBRyxHQUFHLEdBQUcsRUFBRTtJQUNyRCxPQUFPQSxNQUFNLEdBQUdsQixLQUFLLENBQUNtQixJQUFJLEdBQUcsV0FBVztFQUMxQyxDQUFDO0VBRURtQixRQUFRQSxDQUFDdEMsS0FBSyxFQUFFO0lBQ2QsT0FBT0QsYUFBYSxDQUFDQyxLQUFLLENBQUM7RUFDN0IsQ0FBQztFQUVEa0QsT0FBT0EsQ0FBQ0QsU0FBUyxFQUFFZixTQUFTLEVBQUU7SUFDNUI7SUFDQTtJQUNBLE1BQU1pQixJQUFvQyxHQUFHO01BQUVuRCxLQUFLLEVBQUVELGFBQWEsQ0FBQ2tELFNBQVMsQ0FBQ2pELEtBQUs7SUFBRSxDQUFDO0lBQ3RGLElBQUlrQyxTQUFTLEVBQUU7TUFDYmlCLElBQUksQ0FBQ2pCLFNBQVMsR0FBR0EsU0FBUztJQUM1QjtJQUVBLE9BQU9pQixJQUFJO0VBQ2IsQ0FBQztFQUVEeEIsYUFBYUEsQ0FBQ1osTUFBTSxFQUFFa0MsU0FBUyxFQUFFO0lBQy9CbkMsZ0JBQWdCLENBQUNDLE1BQU0sRUFBRWtDLFNBQVMsQ0FBQ2pELEtBQXdCLENBQUM7RUFDOUQsQ0FBQztFQUVELE9BQVF5QyxVQUFVQSxDQUFDMUIsTUFBTSxFQUFFa0MsU0FBUyxFQUFFNUIsT0FBTyxFQUFFO0lBQzdDLE1BQU1yQixLQUFLLEdBQUdpRCxTQUFTLENBQUNqRCxLQUF3QjtJQUVoRCxJQUFJQSxLQUFLLElBQUksSUFBSSxFQUFFO01BQ2pCZSxNQUFNLENBQUNhLFdBQVcsQ0FBQzlCLFVBQVUsQ0FBQztNQUM5QjtJQUNGO0lBRUEsSUFBSUcsS0FBSyxDQUFDQyxPQUFPLENBQUNGLEtBQUssQ0FBQ0ssSUFBSSxDQUFDLEVBQUU7TUFDN0IsT0FBUXFDLFNBQVMsQ0FBQzNCLE1BQU0sRUFBRWYsS0FBSyxFQUFFQSxLQUFLLENBQUNLLElBQUksRUFBRTRDLFNBQVMsQ0FBQ2YsU0FBUyxFQUFFYixPQUFPLENBQUM7TUFDMUU7SUFDRjtJQUVBLE9BQVF3QixhQUFhLENBQUM5QixNQUFNLEVBQUVmLEtBQUssRUFBRUEsS0FBSyxDQUFDSyxJQUFJLEVBQUU0QyxTQUFTLENBQUNmLFNBQVMsRUFBRWIsT0FBTyxDQUFDO0VBQ2hGO0FBQ0YsQ0FBQztBQUFDLElBQUErQixRQUFBLEdBQUFDLE9BQUEsQ0FBQTdELE9BQUEsR0FFYXNELEdBQUc7QUFDbEJRLE1BQU0sQ0FBQ0QsT0FBTyxHQUFHUCxHQUFHIiwiaWdub3JlTGlzdCI6W119
@@ -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":[]}
@@ -11,13 +11,10 @@ const UDT = {
11
11
  declaration() {
12
12
  throw new Error('not implemented');
13
13
  },
14
- generateTypeInfo() {
14
+ writeTypeInfo() {
15
15
  throw new Error('not implemented');
16
16
  },
17
- generateParameterLength() {
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVRFQiLCJpZCIsInR5cGUiLCJuYW1lIiwiZGVjbGFyYXRpb24iLCJFcnJvciIsImdlbmVyYXRlVHlwZUluZm8iLCJnZW5lcmF0ZVBhcmFtZXRlckxlbmd0aCIsImdlbmVyYXRlUGFyYW1ldGVyRGF0YSIsInZhbGlkYXRlIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhLXR5cGVzL3VkdC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIERhdGFUeXBlIH0gZnJvbSAnLi4vZGF0YS10eXBlJztcblxuY29uc3QgVURUOiBEYXRhVHlwZSA9IHtcbiAgaWQ6IDB4RjAsXG4gIHR5cGU6ICdVRFRUWVBFJyxcbiAgbmFtZTogJ1VEVCcsXG5cbiAgZGVjbGFyYXRpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgfSxcblxuICBnZW5lcmF0ZVR5cGVJbmZvKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJyk7XG4gIH0sXG5cbiAgZ2VuZXJhdGVQYXJhbWV0ZXJMZW5ndGgoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgfSxcblxuICBnZW5lcmF0ZVBhcmFtZXRlckRhdGEoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKTtcbiAgfSxcblxuICB2YWxpZGF0ZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBVRFQ7XG5tb2R1bGUuZXhwb3J0cyA9IFVEVDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsTUFBTUEsR0FBYSxHQUFHO0VBQ3BCQyxFQUFFLEVBQUUsSUFBSTtFQUNSQyxJQUFJLEVBQUUsU0FBUztFQUNmQyxJQUFJLEVBQUUsS0FBSztFQUVYQyxXQUFXQSxDQUFBLEVBQUc7SUFDWixNQUFNLElBQUlDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztFQUNwQyxDQUFDO0VBRURDLGdCQUFnQkEsQ0FBQSxFQUFHO0lBQ2pCLE1BQU0sSUFBSUQsS0FBSyxDQUFDLGlCQUFpQixDQUFDO0VBQ3BDLENBQUM7RUFFREUsdUJBQXVCQSxDQUFBLEVBQUc7SUFDeEIsTUFBTSxJQUFJRixLQUFLLENBQUMsaUJBQWlCLENBQUM7RUFDcEMsQ0FBQztFQUVERyxxQkFBcUJBLENBQUEsRUFBRztJQUN0QixNQUFNLElBQUlILEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztFQUNwQyxDQUFDO0VBRURJLFFBQVFBLENBQUEsRUFBRztJQUNULE1BQU0sSUFBSUosS0FBSyxDQUFDLGlCQUFpQixDQUFDO0VBQ3BDO0FBQ0YsQ0FBQztBQUFDLElBQUFLLFFBQUEsR0FBQUMsT0FBQSxDQUFBQyxPQUFBLEdBRWFaLEdBQUc7QUFDbEJhLE1BQU0sQ0FBQ0YsT0FBTyxHQUFHWCxHQUFHIiwiaWdub3JlTGlzdCI6W119
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","generateTypeInfo","generateParameterLength","generateParameterData","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 generateTypeInfo() {\n throw new Error('not implemented');\n },\n\n generateParameterLength() {\n throw new Error('not implemented');\n },\n\n generateParameterData() {\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,gBAAgBA,CAAA,EAAG;IACjB,MAAM,IAAID,KAAK,CAAC,iBAAiB,CAAC;EACpC,CAAC;EAEDE,uBAAuBA,CAAA,EAAG;IACxB,MAAM,IAAIF,KAAK,CAAC,iBAAiB,CAAC;EACpC,CAAC;EAEDG,qBAAqBA,CAAA,EAAG;IACtB,MAAM,IAAIH,KAAK,CAAC,iBAAiB,CAAC;EACpC,CAAC;EAEDI,QAAQA,CAAA,EAAG;IACT,MAAM,IAAIJ,KAAK,CAAC,iBAAiB,CAAC;EACpC;AACF,CAAC;AAAC,IAAAK,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEaZ,GAAG;AAClBa,MAAM,CAACF,OAAO,GAAGX,GAAG","ignoreList":[]}
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 NULL_LENGTH = Buffer.from([0x00]);
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
- generateTypeInfo() {
21
- return Buffer.from([this.id, 0x10]);
19
+ writeTypeInfo(buffer) {
20
+ buffer.writeBuffer(TYPE_INFO);
22
21
  },
23
- generateParameterLength(parameter, options) {
24
- if (parameter.value == null) {
25
- return NULL_LENGTH;
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
- yield Buffer.from((0, _guidParser.guidToArray)(parameter.value));
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3VpZFBhcnNlciIsInJlcXVpcmUiLCJOVUxMX0xFTkdUSCIsIkJ1ZmZlciIsImZyb20iLCJEQVRBX0xFTkdUSCIsIlVuaXF1ZUlkZW50aWZpZXIiLCJpZCIsInR5cGUiLCJuYW1lIiwiZGVjbGFyYXRpb24iLCJyZXNvbHZlTGVuZ3RoIiwiZ2VuZXJhdGVUeXBlSW5mbyIsImdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoIiwicGFyYW1ldGVyIiwib3B0aW9ucyIsInZhbHVlIiwiZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhIiwiZ3VpZFRvQXJyYXkiLCJ2YWxpZGF0ZSIsIlR5cGVFcnJvciIsInRlc3QiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGEtdHlwZXMvdW5pcXVlaWRlbnRpZmllci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIERhdGFUeXBlIH0gZnJvbSAnLi4vZGF0YS10eXBlJztcbmltcG9ydCB7IGd1aWRUb0FycmF5IH0gZnJvbSAnLi4vZ3VpZC1wYXJzZXInO1xuXG5jb25zdCBOVUxMX0xFTkdUSCA9IEJ1ZmZlci5mcm9tKFsweDAwXSk7XG5jb25zdCBEQVRBX0xFTkdUSCA9IEJ1ZmZlci5mcm9tKFsweDEwXSk7XG5cbmNvbnN0IFVuaXF1ZUlkZW50aWZpZXI6IERhdGFUeXBlID0ge1xuICBpZDogMHgyNCxcbiAgdHlwZTogJ0dVSUROJyxcbiAgbmFtZTogJ1VuaXF1ZUlkZW50aWZpZXInLFxuXG4gIGRlY2xhcmF0aW9uOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ3VuaXF1ZWlkZW50aWZpZXInO1xuICB9LFxuXG4gIHJlc29sdmVMZW5ndGg6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAxNjtcbiAgfSxcblxuICBnZW5lcmF0ZVR5cGVJbmZvKCkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbShbdGhpcy5pZCwgMHgxMF0pO1xuICB9LFxuXG4gIGdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoKHBhcmFtZXRlciwgb3B0aW9ucykge1xuICAgIGlmIChwYXJhbWV0ZXIudmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIE5VTExfTEVOR1RIO1xuICAgIH1cblxuICAgIHJldHVybiBEQVRBX0xFTkdUSDtcbiAgfSxcblxuICBnZW5lcmF0ZVBhcmFtZXRlckRhdGE6IGZ1bmN0aW9uKihwYXJhbWV0ZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAocGFyYW1ldGVyLnZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB5aWVsZCBCdWZmZXIuZnJvbShndWlkVG9BcnJheShwYXJhbWV0ZXIudmFsdWUpKTtcbiAgfSxcblxuICB2YWxpZGF0ZTogZnVuY3Rpb24odmFsdWUpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc3RyaW5nLicpO1xuICAgIH1cblxuICAgIGlmICghL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kL2kudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgR1VJRC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFVuaXF1ZUlkZW50aWZpZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFVuaXF1ZUlkZW50aWZpZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQUVBLE1BQU1DLFdBQVcsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2QyxNQUFNQyxXQUFXLEdBQUdGLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFdkMsTUFBTUUsZ0JBQTBCLEdBQUc7RUFDakNDLEVBQUUsRUFBRSxJQUFJO0VBQ1JDLElBQUksRUFBRSxPQUFPO0VBQ2JDLElBQUksRUFBRSxrQkFBa0I7RUFFeEJDLFdBQVcsRUFBRSxTQUFBQSxDQUFBLEVBQVc7SUFDdEIsT0FBTyxrQkFBa0I7RUFDM0IsQ0FBQztFQUVEQyxhQUFhLEVBQUUsU0FBQUEsQ0FBQSxFQUFXO0lBQ3hCLE9BQU8sRUFBRTtFQUNYLENBQUM7RUFFREMsZ0JBQWdCQSxDQUFBLEVBQUc7SUFDakIsT0FBT1QsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUNHLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztFQUNyQyxDQUFDO0VBRURNLHVCQUF1QkEsQ0FBQ0MsU0FBUyxFQUFFQyxPQUFPLEVBQUU7SUFDMUMsSUFBSUQsU0FBUyxDQUFDRSxLQUFLLElBQUksSUFBSSxFQUFFO01BQzNCLE9BQU9kLFdBQVc7SUFDcEI7SUFFQSxPQUFPRyxXQUFXO0VBQ3BCLENBQUM7RUFFRFkscUJBQXFCLEVBQUUsVUFBQUEsQ0FBVUgsU0FBUyxFQUFFQyxPQUFPLEVBQUU7SUFDbkQsSUFBSUQsU0FBUyxDQUFDRSxLQUFLLElBQUksSUFBSSxFQUFFO01BQzNCO0lBQ0Y7SUFFQSxNQUFNYixNQUFNLENBQUNDLElBQUksQ0FBQyxJQUFBYyx1QkFBVyxFQUFDSixTQUFTLENBQUNFLEtBQUssQ0FBQyxDQUFDO0VBQ2pELENBQUM7RUFFREcsUUFBUSxFQUFFLFNBQUFBLENBQVNILEtBQUssRUFBaUI7SUFDdkMsSUFBSUEsS0FBSyxJQUFJLElBQUksRUFBRTtNQUNqQixPQUFPLElBQUk7SUFDYjtJQUVBLElBQUksT0FBT0EsS0FBSyxLQUFLLFFBQVEsRUFBRTtNQUM3QixNQUFNLElBQUlJLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztJQUN4QztJQUVBLElBQUksQ0FBQyxpRUFBaUUsQ0FBQ0MsSUFBSSxDQUFDTCxLQUFLLENBQUMsRUFBRTtNQUNsRixNQUFNLElBQUlJLFNBQVMsQ0FBQyxlQUFlLENBQUM7SUFDdEM7SUFFQSxPQUFPSixLQUFLO0VBQ2Q7QUFDRixDQUFDO0FBQUMsSUFBQU0sUUFBQSxHQUFBQyxPQUFBLENBQUFDLE9BQUEsR0FFYWxCLGdCQUFnQjtBQUMvQm1CLE1BQU0sQ0FBQ0YsT0FBTyxHQUFHakIsZ0JBQWdCIiwiaWdub3JlTGlzdCI6W119
48
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3VpZFBhcnNlciIsInJlcXVpcmUiLCJUWVBFX0lORk8iLCJCdWZmZXIiLCJmcm9tIiwiVW5pcXVlSWRlbnRpZmllciIsImlkIiwidHlwZSIsIm5hbWUiLCJkZWNsYXJhdGlvbiIsInJlc29sdmVMZW5ndGgiLCJ3cml0ZVR5cGVJbmZvIiwiYnVmZmVyIiwid3JpdGVCdWZmZXIiLCJ3cml0ZVZhbHVlIiwicGFyYW1ldGVyIiwidmFsdWUiLCJ3cml0ZVVJbnQ4IiwiYnl0ZSIsImd1aWRUb0FycmF5IiwidmFsaWRhdGUiLCJUeXBlRXJyb3IiLCJ0ZXN0IiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhLXR5cGVzL3VuaXF1ZWlkZW50aWZpZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBEYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtdHlwZSc7XG5pbXBvcnQgeyBndWlkVG9BcnJheSB9IGZyb20gJy4uL2d1aWQtcGFyc2VyJztcblxuY29uc3QgVFlQRV9JTkZPID0gQnVmZmVyLmZyb20oWzB4MjQsIDB4MTBdKTtcblxuY29uc3QgVW5pcXVlSWRlbnRpZmllcjogRGF0YVR5cGUgPSB7XG4gIGlkOiAweDI0LFxuICB0eXBlOiAnR1VJRE4nLFxuICBuYW1lOiAnVW5pcXVlSWRlbnRpZmllcicsXG5cbiAgZGVjbGFyYXRpb246IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAndW5pcXVlaWRlbnRpZmllcic7XG4gIH0sXG5cbiAgcmVzb2x2ZUxlbmd0aDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIDE2O1xuICB9LFxuXG4gIHdyaXRlVHlwZUluZm8oYnVmZmVyKSB7XG4gICAgYnVmZmVyLndyaXRlQnVmZmVyKFRZUEVfSU5GTyk7XG4gIH0sXG5cbiAgd3JpdGVWYWx1ZShidWZmZXIsIHBhcmFtZXRlcikge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyLnZhbHVlIGFzIHN0cmluZyB8IG51bGw7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDB4MDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDB4MTApO1xuICAgIGZvciAoY29uc3QgYnl0ZSBvZiBndWlkVG9BcnJheSh2YWx1ZSkpIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KGJ5dGUpO1xuICAgIH1cbiAgfSxcblxuICB2YWxpZGF0ZTogZnVuY3Rpb24odmFsdWUpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc3RyaW5nLicpO1xuICAgIH1cblxuICAgIGlmICghL15bMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn0kL2kudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgR1VJRC4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFVuaXF1ZUlkZW50aWZpZXI7XG5tb2R1bGUuZXhwb3J0cyA9IFVuaXF1ZUlkZW50aWZpZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQUVBLE1BQU1DLFNBQVMsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFM0MsTUFBTUMsZ0JBQTBCLEdBQUc7RUFDakNDLEVBQUUsRUFBRSxJQUFJO0VBQ1JDLElBQUksRUFBRSxPQUFPO0VBQ2JDLElBQUksRUFBRSxrQkFBa0I7RUFFeEJDLFdBQVcsRUFBRSxTQUFBQSxDQUFBLEVBQVc7SUFDdEIsT0FBTyxrQkFBa0I7RUFDM0IsQ0FBQztFQUVEQyxhQUFhLEVBQUUsU0FBQUEsQ0FBQSxFQUFXO0lBQ3hCLE9BQU8sRUFBRTtFQUNYLENBQUM7RUFFREMsYUFBYUEsQ0FBQ0MsTUFBTSxFQUFFO0lBQ3BCQSxNQUFNLENBQUNDLFdBQVcsQ0FBQ1gsU0FBUyxDQUFDO0VBQy9CLENBQUM7RUFFRFksVUFBVUEsQ0FBQ0YsTUFBTSxFQUFFRyxTQUFTLEVBQUU7SUFDNUIsTUFBTUMsS0FBSyxHQUFHRCxTQUFTLENBQUNDLEtBQXNCO0lBQzlDLElBQUlBLEtBQUssSUFBSSxJQUFJLEVBQUU7TUFDakJKLE1BQU0sQ0FBQ0ssVUFBVSxDQUFDLElBQUksQ0FBQztNQUN2QjtJQUNGO0lBRUFMLE1BQU0sQ0FBQ0ssVUFBVSxDQUFDLElBQUksQ0FBQztJQUN2QixLQUFLLE1BQU1DLElBQUksSUFBSSxJQUFBQyx1QkFBVyxFQUFDSCxLQUFLLENBQUMsRUFBRTtNQUNyQ0osTUFBTSxDQUFDSyxVQUFVLENBQUNDLElBQUksQ0FBQztJQUN6QjtFQUNGLENBQUM7RUFFREUsUUFBUSxFQUFFLFNBQUFBLENBQVNKLEtBQUssRUFBaUI7SUFDdkMsSUFBSUEsS0FBSyxJQUFJLElBQUksRUFBRTtNQUNqQixPQUFPLElBQUk7SUFDYjtJQUVBLElBQUksT0FBT0EsS0FBSyxLQUFLLFFBQVEsRUFBRTtNQUM3QixNQUFNLElBQUlLLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztJQUN4QztJQUVBLElBQUksQ0FBQyxpRUFBaUUsQ0FBQ0MsSUFBSSxDQUFDTixLQUFLLENBQUMsRUFBRTtNQUNsRixNQUFNLElBQUlLLFNBQVMsQ0FBQyxlQUFlLENBQUM7SUFDdEM7SUFFQSxPQUFPTCxLQUFLO0VBQ2Q7QUFDRixDQUFDO0FBQUMsSUFBQU8sUUFBQSxHQUFBQyxPQUFBLENBQUFDLE9BQUEsR0FFYXBCLGdCQUFnQjtBQUMvQnFCLE1BQU0sQ0FBQ0YsT0FBTyxHQUFHbkIsZ0JBQWdCIiwiaWdub3JlTGlzdCI6W119
@@ -1 +1 @@
1
- {"version":3,"file":"uniqueidentifier.js","names":["_guidParser","require","NULL_LENGTH","Buffer","from","DATA_LENGTH","UniqueIdentifier","id","type","name","declaration","resolveLength","generateTypeInfo","generateParameterLength","parameter","options","value","generateParameterData","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 NULL_LENGTH = Buffer.from([0x00]);\nconst DATA_LENGTH = Buffer.from([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 generateTypeInfo() {\n return Buffer.from([this.id, 0x10]);\n },\n\n generateParameterLength(parameter, options) {\n if (parameter.value == null) {\n return NULL_LENGTH;\n }\n\n return DATA_LENGTH;\n },\n\n generateParameterData: function*(parameter, options) {\n if (parameter.value == null) {\n return;\n }\n\n yield Buffer.from(guidToArray(parameter.value));\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,WAAW,GAAGC,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AACvC,MAAMC,WAAW,GAAGF,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAEvC,MAAME,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,gBAAgBA,CAAA,EAAG;IACjB,OAAOT,MAAM,CAACC,IAAI,CAAC,CAAC,IAAI,CAACG,EAAE,EAAE,IAAI,CAAC,CAAC;EACrC,CAAC;EAEDM,uBAAuBA,CAACC,SAAS,EAAEC,OAAO,EAAE;IAC1C,IAAID,SAAS,CAACE,KAAK,IAAI,IAAI,EAAE;MAC3B,OAAOd,WAAW;IACpB;IAEA,OAAOG,WAAW;EACpB,CAAC;EAEDY,qBAAqB,EAAE,UAAAA,CAAUH,SAAS,EAAEC,OAAO,EAAE;IACnD,IAAID,SAAS,CAACE,KAAK,IAAI,IAAI,EAAE;MAC3B;IACF;IAEA,MAAMb,MAAM,CAACC,IAAI,CAAC,IAAAc,uBAAW,EAACJ,SAAS,CAACE,KAAK,CAAC,CAAC;EACjD,CAAC;EAEDG,QAAQ,EAAE,SAAAA,CAASH,KAAK,EAAiB;IACvC,IAAIA,KAAK,IAAI,IAAI,EAAE;MACjB,OAAO,IAAI;IACb;IAEA,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;MAC7B,MAAM,IAAII,SAAS,CAAC,iBAAiB,CAAC;IACxC;IAEA,IAAI,CAAC,iEAAiE,CAACC,IAAI,CAACL,KAAK,CAAC,EAAE;MAClF,MAAM,IAAII,SAAS,CAAC,eAAe,CAAC;IACtC;IAEA,OAAOJ,KAAK;EACd;AACF,CAAC;AAAC,IAAAM,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEalB,gBAAgB;AAC/BmB,MAAM,CAACF,OAAO,GAAGjB,gBAAgB","ignoreList":[]}
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":[]}