tedious 20.2.2 → 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 (111) 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.d.ts +35 -3
  4. package/lib/bulk-load-payload.js +176 -7
  5. package/lib/bulk-load-payload.js.map +1 -1
  6. package/lib/bulk-load.d.ts +0 -42
  7. package/lib/bulk-load.js +17 -116
  8. package/lib/bulk-load.js.map +1 -1
  9. package/lib/connection.d.ts +39 -6
  10. package/lib/connection.js +76 -56
  11. package/lib/connection.js.map +1 -1
  12. package/lib/data-type.d.ts +47 -3
  13. package/lib/data-type.js +113 -2
  14. package/lib/data-type.js.map +1 -1
  15. package/lib/data-types/bigint.js +10 -17
  16. package/lib/data-types/bigint.js.map +1 -1
  17. package/lib/data-types/binary.js +10 -17
  18. package/lib/data-types/binary.js.map +1 -1
  19. package/lib/data-types/bit.js +10 -14
  20. package/lib/data-types/bit.js.map +1 -1
  21. package/lib/data-types/bitn.js +3 -6
  22. package/lib/data-types/bitn.js.map +1 -1
  23. package/lib/data-types/char.js +12 -17
  24. package/lib/data-types/char.js.map +1 -1
  25. package/lib/data-types/date.js +11 -27
  26. package/lib/data-types/date.js.map +1 -1
  27. package/lib/data-types/datetime.js +17 -37
  28. package/lib/data-types/datetime.js.map +1 -1
  29. package/lib/data-types/datetime2.js +12 -67
  30. package/lib/data-types/datetime2.js.map +1 -1
  31. package/lib/data-types/datetimen.js +3 -6
  32. package/lib/data-types/datetimen.js.map +1 -1
  33. package/lib/data-types/datetimeoffset.js +13 -60
  34. package/lib/data-types/datetimeoffset.js.map +1 -1
  35. package/lib/data-types/decimal-common.d.ts +18 -0
  36. package/lib/data-types/decimal-common.js +79 -0
  37. package/lib/data-types/decimal-common.js.map +1 -0
  38. package/lib/data-types/decimal.js +6 -67
  39. package/lib/data-types/decimal.js.map +1 -1
  40. package/lib/data-types/decimaln.js +3 -6
  41. package/lib/data-types/decimaln.js.map +1 -1
  42. package/lib/data-types/float.js +10 -15
  43. package/lib/data-types/float.js.map +1 -1
  44. package/lib/data-types/floatn.js +3 -6
  45. package/lib/data-types/floatn.js.map +1 -1
  46. package/lib/data-types/image.js +10 -17
  47. package/lib/data-types/image.js.map +1 -1
  48. package/lib/data-types/int.js +8 -15
  49. package/lib/data-types/int.js.map +1 -1
  50. package/lib/data-types/intn.js +3 -6
  51. package/lib/data-types/intn.js.map +1 -1
  52. package/lib/data-types/money.js +14 -18
  53. package/lib/data-types/money.js.map +1 -1
  54. package/lib/data-types/moneyn.js +3 -6
  55. package/lib/data-types/moneyn.js.map +1 -1
  56. package/lib/data-types/nchar.js +17 -31
  57. package/lib/data-types/nchar.js.map +1 -1
  58. package/lib/data-types/ntext.js +13 -17
  59. package/lib/data-types/ntext.js.map +1 -1
  60. package/lib/data-types/null.js +3 -6
  61. package/lib/data-types/null.js.map +1 -1
  62. package/lib/data-types/numeric.js +6 -67
  63. package/lib/data-types/numeric.js.map +1 -1
  64. package/lib/data-types/numericn.js +3 -6
  65. package/lib/data-types/numericn.js.map +1 -1
  66. package/lib/data-types/nvarchar.js +68 -57
  67. package/lib/data-types/nvarchar.js.map +1 -1
  68. package/lib/data-types/plp-stream.d.ts +19 -0
  69. package/lib/data-types/plp-stream.js +59 -0
  70. package/lib/data-types/plp-stream.js.map +1 -0
  71. package/lib/data-types/real.js +10 -16
  72. package/lib/data-types/real.js.map +1 -1
  73. package/lib/data-types/smalldatetime.js +17 -23
  74. package/lib/data-types/smalldatetime.js.map +1 -1
  75. package/lib/data-types/smallint.js +10 -16
  76. package/lib/data-types/smallint.js.map +1 -1
  77. package/lib/data-types/smallmoney.js +10 -16
  78. package/lib/data-types/smallmoney.js.map +1 -1
  79. package/lib/data-types/sql-variant.js +3 -6
  80. package/lib/data-types/sql-variant.js.map +1 -1
  81. package/lib/data-types/temporal.d.ts +22 -0
  82. package/lib/data-types/temporal.js +72 -0
  83. package/lib/data-types/temporal.js.map +1 -0
  84. package/lib/data-types/text.js +12 -18
  85. package/lib/data-types/text.js.map +1 -1
  86. package/lib/data-types/time.js +11 -55
  87. package/lib/data-types/time.js.map +1 -1
  88. package/lib/data-types/tinyint.js +10 -16
  89. package/lib/data-types/tinyint.js.map +1 -1
  90. package/lib/data-types/tvp.js +145 -87
  91. package/lib/data-types/tvp.js.map +1 -1
  92. package/lib/data-types/udt.js +3 -6
  93. package/lib/data-types/udt.js.map +1 -1
  94. package/lib/data-types/uniqueidentifier.js +12 -14
  95. package/lib/data-types/uniqueidentifier.js.map +1 -1
  96. package/lib/data-types/varbinary.js +58 -48
  97. package/lib/data-types/varbinary.js.map +1 -1
  98. package/lib/data-types/varchar.js +84 -50
  99. package/lib/data-types/varchar.js.map +1 -1
  100. package/lib/data-types/xml.js +3 -6
  101. package/lib/data-types/xml.js.map +1 -1
  102. package/lib/request.d.ts +23 -3
  103. package/lib/request.js +29 -3
  104. package/lib/request.js.map +1 -1
  105. package/lib/rpcrequest-payload.d.ts +21 -9
  106. package/lib/rpcrequest-payload.js +62 -51
  107. package/lib/rpcrequest-payload.js.map +1 -1
  108. package/lib/tedious.d.ts +2 -2
  109. package/lib/tedious.js +7 -1
  110. package/lib/tedious.js.map +1 -1
  111. package/package.json +1 -1
@@ -84,7 +84,10 @@ const getParameterEncryptionMetadata = (connection, request, callback) => {
84
84
  metadataRequest.on('row', columns => {
85
85
  resultRows.push(columns);
86
86
  });
87
- connection.makeRequest(metadataRequest, _packet.TYPE.RPC_REQUEST, new _rpcrequestPayload.default(metadataRequest.sqlTextOrProcedure, metadataRequest.parameters, connection.currentTransactionDescriptor(), connection.config.options, connection.databaseCollation));
87
+
88
+ // This request is built from raw `Parameter`s rather than a `Request`
89
+ // that has been through `validateParameters`, so they are resolved inline.
90
+ connection.makeRequest(metadataRequest, _packet.TYPE.RPC_REQUEST, new _rpcrequestPayload.default(metadataRequest.sqlTextOrProcedure, metadataRequest.parameters.map(parameter => (0, _dataType.resolveParameter)(parameter, connection.databaseCollation, connection.config.options)), connection.currentTransactionDescriptor(), connection.config.options));
88
91
  };
89
92
  exports.getParameterEncryptionMetadata = getParameterEncryptionMetadata;
90
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZXMiLCJyZXF1aXJlIiwiX2Nla0VudHJ5IiwiX2tleUNyeXB0byIsIl9kYXRhVHlwZSIsIl9yZXF1ZXN0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9ycGNyZXF1ZXN0UGF5bG9hZCIsIl9wYWNrZXQiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJnZXRQYXJhbWV0ZXJFbmNyeXB0aW9uTWV0YWRhdGEiLCJjb25uZWN0aW9uIiwicmVxdWVzdCIsImNhbGxiYWNrIiwiY3J5cHRvTWV0YWRhdGFMb2FkZWQiLCJtZXRhZGF0YVJlcXVlc3QiLCJSZXF1ZXN0IiwiZXJyb3IiLCJkZWNyeXB0U3ltbWV0cmljS2V5UHJvbWlzZXMiLCJjZWtMaXN0IiwicGFyYW1Db3VudCIsImNvbHVtbnMiLCJyZXN1bHRSb3dzIiwiaXNGaXJzdFJlY29yZFNldCIsInNvbWUiLCJjb2wiLCJtZXRhZGF0YSIsImNvbE5hbWUiLCJjdXJyZW50T3JkaW5hbCIsIkRlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDEiLCJLZXlPcmRpbmFsIiwidmFsdWUiLCJjZWtFbnRyeSIsIkNFS0VudHJ5Iiwib3JkaW5hbCIsImFkZCIsIkVuY3J5cHRlZEtleSIsIkRiSWQiLCJLZXlJZCIsIktleVZlcnNpb24iLCJLZXlNZFZlcnNpb24iLCJLZXlQYXRoIiwiUHJvdmlkZXJOYW1lIiwiS2V5RW5jcnlwdGlvbkFsZ29yaXRobSIsInBhcmFtTmFtZSIsIkRlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDIiLCJQYXJhbWV0ZXJOYW1lIiwicGFyYW1JbmRleCIsInBhcmFtZXRlcnMiLCJmaW5kSW5kZXgiLCJwYXJhbSIsIm5hbWUiLCJjZWtPcmRpbmFsIiwiQ29sdW1uRW5jcnlwdGlvbktleU9yZGluYWwiLCJsZW5ndGgiLCJFcnJvciIsImVuY1R5cGUiLCJDb2x1bW5FbmNyeXRpb25UeXBlIiwiU1FMU2VydmVyRW5jcnlwdGlvblR5cGUiLCJQbGFpblRleHQiLCJjcnlwdG9NZXRhZGF0YSIsImNpcGhlckFsZ29yaXRobUlkIiwiQ29sdW1uRW5jcnlwdGlvbkFsZ29yaXRobSIsImVuY3J5cHRpb25UeXBlIiwibm9ybWFsaXphdGlvblJ1bGVWZXJzaW9uIiwiQnVmZmVyIiwiZnJvbSIsIk5vcm1hbGl6YXRpb25SdWxlVmVyc2lvbiIsInB1c2giLCJkZWNyeXB0U3ltbWV0cmljS2V5IiwiY29uZmlnIiwib3B0aW9ucyIsImZvcmNlRW5jcnlwdCIsInNxbFRleHRPclByb2NlZHVyZSIsIlByb21pc2UiLCJhbGwiLCJ0aGVuIiwicHJvY2VzcyIsIm5leHRUaWNrIiwiYWRkUGFyYW1ldGVyIiwiVFlQRVMiLCJOVmFyQ2hhciIsIm1ha2VQYXJhbXNQYXJhbWV0ZXIiLCJvbiIsIm1ha2VSZXF1ZXN0IiwiVFlQRSIsIlJQQ19SRVFVRVNUIiwiUnBjUmVxdWVzdFBheWxvYWQiLCJjdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yIiwiZGF0YWJhc2VDb2xsYXRpb24iLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Fsd2F5cy1lbmNyeXB0ZWQvZ2V0LXBhcmFtZXRlci1lbmNyeXB0aW9uLW1ldGFkYXRhLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgY29kZSBpcyBiYXNlZCBvbiB0aGUgYG1zc3FsLWpkYmNgIGxpYnJhcnkgcHVibGlzaGVkIHVuZGVyIHRoZSBjb25kaXRpb25zIG9mIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IChjKSAyMDE5IE1pY3Jvc29mdCBDb3Jwb3JhdGlvblxuXG5pbXBvcnQgeyBTUUxTZXJ2ZXJFbmNyeXB0aW9uVHlwZSwgdHlwZSBDcnlwdG9NZXRhZGF0YSwgRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0MSwgRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0MiB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQ0VLRW50cnkgfSBmcm9tICcuL2Nlay1lbnRyeSc7XG5pbXBvcnQgeyBkZWNyeXB0U3ltbWV0cmljS2V5IH0gZnJvbSAnLi9rZXktY3J5cHRvJztcbmltcG9ydCB7IHR5cGVCeU5hbWUgYXMgVFlQRVMsIHR5cGUgUGFyYW1ldGVyIH0gZnJvbSAnLi4vZGF0YS10eXBlJztcbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuaW1wb3J0IENvbm5lY3Rpb24gZnJvbSAnLi4vY29ubmVjdGlvbic7XG5pbXBvcnQgUnBjUmVxdWVzdFBheWxvYWQgZnJvbSAnLi4vcnBjcmVxdWVzdC1wYXlsb2FkJztcbmltcG9ydCB7IFRZUEUgfSBmcm9tICcuLi9wYWNrZXQnO1xuXG5leHBvcnQgY29uc3QgZ2V0UGFyYW1ldGVyRW5jcnlwdGlvbk1ldGFkYXRhID0gKGNvbm5lY3Rpb246IENvbm5lY3Rpb24sIHJlcXVlc3Q6IFJlcXVlc3QsIGNhbGxiYWNrOiAoZXJyb3I/OiBFcnJvcikgPT4gdm9pZCkgPT4ge1xuICBpZiAocmVxdWVzdC5jcnlwdG9NZXRhZGF0YUxvYWRlZCA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9XG5cbiAgY29uc3QgbWV0YWRhdGFSZXF1ZXN0ID0gbmV3IFJlcXVlc3QoJ3NwX2Rlc2NyaWJlX3BhcmFtZXRlcl9lbmNyeXB0aW9uJywgKGVycm9yKSA9PiB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlY3J5cHRTeW1tZXRyaWNLZXlQcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW107XG4gICAgY29uc3QgY2VrTGlzdDogQ0VLRW50cnlbXSA9IFtdO1xuICAgIGxldCBwYXJhbUNvdW50ID0gMDtcblxuICAgIGZvciAoY29uc3QgY29sdW1ucyBvZiByZXN1bHRSb3dzKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpc0ZpcnN0UmVjb3JkU2V0ID0gY29sdW1ucy5zb21lKChjb2w6IGFueSkgPT4gKGNvbCAmJiBjb2wubWV0YWRhdGEgJiYgY29sLm1ldGFkYXRhLmNvbE5hbWUpID09PSAnZGF0YWJhc2VfaWQnKTtcbiAgICAgICAgaWYgKGlzRmlyc3RSZWNvcmRTZXQgPT09IHRydWUpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50T3JkaW5hbCA9IGNvbHVtbnNbRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0MS5LZXlPcmRpbmFsXS52YWx1ZTtcbiAgICAgICAgICBsZXQgY2VrRW50cnk6IENFS0VudHJ5O1xuICAgICAgICAgIGlmICghY2VrTGlzdFtjdXJyZW50T3JkaW5hbF0pIHtcbiAgICAgICAgICAgIGNla0VudHJ5ID0gbmV3IENFS0VudHJ5KGN1cnJlbnRPcmRpbmFsKTtcbiAgICAgICAgICAgIGNla0xpc3RbY2VrRW50cnkub3JkaW5hbF0gPSBjZWtFbnRyeTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2VrRW50cnkgPSBjZWtMaXN0W2N1cnJlbnRPcmRpbmFsXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2VrRW50cnkuYWRkKGNvbHVtbnNbRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0MS5FbmNyeXB0ZWRLZXldLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zW0Rlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDEuRGJJZF0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNbRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0MS5LZXlJZF0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNbRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0MS5LZXlWZXJzaW9uXS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc1tEZXNjcmliZVBhcmFtZXRlckVuY3J5cHRpb25SZXN1bHRTZXQxLktleU1kVmVyc2lvbl0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNbRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0MS5LZXlQYXRoXS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc1tEZXNjcmliZVBhcmFtZXRlckVuY3J5cHRpb25SZXN1bHRTZXQxLlByb3ZpZGVyTmFtZV0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNbRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0MS5LZXlFbmNyeXB0aW9uQWxnb3JpdGhtXS52YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcGFyYW1Db3VudCsrO1xuICAgICAgICAgIGNvbnN0IHBhcmFtTmFtZTogc3RyaW5nID0gY29sdW1uc1tEZXNjcmliZVBhcmFtZXRlckVuY3J5cHRpb25SZXN1bHRTZXQyLlBhcmFtZXRlck5hbWVdLnZhbHVlO1xuICAgICAgICAgIGNvbnN0IHBhcmFtSW5kZXg6IG51bWJlciA9IHJlcXVlc3QucGFyYW1ldGVycy5maW5kSW5kZXgoKHBhcmFtOiBQYXJhbWV0ZXIpID0+IHBhcmFtTmFtZSA9PT0gYEAke3BhcmFtLm5hbWV9YCk7XG4gICAgICAgICAgY29uc3QgY2VrT3JkaW5hbDogbnVtYmVyID0gY29sdW1uc1tEZXNjcmliZVBhcmFtZXRlckVuY3J5cHRpb25SZXN1bHRTZXQyLkNvbHVtbkVuY3J5cHRpb25LZXlPcmRpbmFsXS52YWx1ZTtcbiAgICAgICAgICBjb25zdCBjZWtFbnRyeTogQ0VLRW50cnkgPSBjZWtMaXN0W2Nla09yZGluYWxdO1xuXG4gICAgICAgICAgaWYgKGNla0VudHJ5ICYmIGNla0xpc3QubGVuZ3RoIDwgY2VrT3JkaW5hbCkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcihgSW50ZXJuYWwgZXJyb3IuIFRoZSByZWZlcmVuY2VkIGNvbHVtbiBlbmNyeXB0aW9uIGtleSBvcmRpbmFsIFwiJHtjZWtPcmRpbmFsfVwiIGlzIG1pc3NpbmcgaW4gdGhlIGVuY3J5cHRpb24gbWV0YWRhdGEgcmV0dXJuZWQgYnkgc3BfZGVzY3JpYmVfcGFyYW1ldGVyX2VuY3J5cHRpb24uIE1heCBvcmRpbmFsIGlzIFwiJHtjZWtMaXN0Lmxlbmd0aH1cIi5gKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgZW5jVHlwZSA9IGNvbHVtbnNbRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0Mi5Db2x1bW5FbmNyeXRpb25UeXBlXS52YWx1ZTtcbiAgICAgICAgICBpZiAoU1FMU2VydmVyRW5jcnlwdGlvblR5cGUuUGxhaW5UZXh0ICE9PSBlbmNUeXBlKSB7XG4gICAgICAgICAgICByZXF1ZXN0LnBhcmFtZXRlcnNbcGFyYW1JbmRleF0uY3J5cHRvTWV0YWRhdGEgPSB7XG4gICAgICAgICAgICAgIGNla0VudHJ5OiBjZWtFbnRyeSxcbiAgICAgICAgICAgICAgb3JkaW5hbDogY2VrT3JkaW5hbCxcbiAgICAgICAgICAgICAgY2lwaGVyQWxnb3JpdGhtSWQ6IGNvbHVtbnNbRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0Mi5Db2x1bW5FbmNyeXB0aW9uQWxnb3JpdGhtXS52YWx1ZSxcbiAgICAgICAgICAgICAgZW5jcnlwdGlvblR5cGU6IGVuY1R5cGUsXG4gICAgICAgICAgICAgIG5vcm1hbGl6YXRpb25SdWxlVmVyc2lvbjogQnVmZmVyLmZyb20oW2NvbHVtbnNbRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0Mi5Ob3JtYWxpemF0aW9uUnVsZVZlcnNpb25dLnZhbHVlXSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGVjcnlwdFN5bW1ldHJpY0tleVByb21pc2VzLnB1c2goZGVjcnlwdFN5bW1ldHJpY0tleShyZXF1ZXN0LnBhcmFtZXRlcnNbcGFyYW1JbmRleF0uY3J5cHRvTWV0YWRhdGEgYXMgQ3J5cHRvTWV0YWRhdGEsIGNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlcXVlc3QucGFyYW1ldGVyc1twYXJhbUluZGV4XS5mb3JjZUVuY3J5cHQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYENhbm5vdCBleGVjdXRlIHN0YXRlbWVudCBvciBwcm9jZWR1cmUgJHtyZXF1ZXN0LnNxbFRleHRPclByb2NlZHVyZX0gYmVjYXVzZSBGb3JjZSBFbmNyeXB0aW9uIHdhcyBzZXQgYXMgdHJ1ZSBmb3IgcGFyYW1ldGVyICR7cGFyYW1JbmRleCArIDF9IGFuZCB0aGUgZGF0YWJhc2UgZXhwZWN0cyB0aGlzIHBhcmFtZXRlciB0byBiZSBzZW50IGFzIHBsYWludGV4dC4gVGhpcyBtYXkgYmUgZHVlIHRvIGEgY29uZmlndXJhdGlvbiBlcnJvci5gKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcihgSW50ZXJuYWwgZXJyb3IuIFVuYWJsZSB0byBwYXJzZSBwYXJhbWV0ZXIgZW5jcnlwdGlvbiBtZXRhZGF0YSBpbiBzdGF0ZW1lbnQgb3IgcHJvY2VkdXJlIFwiJHtyZXF1ZXN0LnNxbFRleHRPclByb2NlZHVyZX1cImApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocGFyYW1Db3VudCAhPT0gcmVxdWVzdC5wYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcihgSW50ZXJuYWwgZXJyb3IuIE1ldGFkYXRhIGZvciBzb21lIHBhcmFtZXRlcnMgaW4gc3RhdGVtZW50IG9yIHByb2NlZHVyZSBcIiR7cmVxdWVzdC5zcWxUZXh0T3JQcm9jZWR1cmV9XCIgaXMgbWlzc2luZyBpbiB0aGUgcmVzdWx0c2V0IHJldHVybmVkIGJ5IHNwX2Rlc2NyaWJlX3BhcmFtZXRlcl9lbmNyeXB0aW9uLmApKTtcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoZGVjcnlwdFN5bW1ldHJpY0tleVByb21pc2VzKS50aGVuKCgpID0+IHtcbiAgICAgIHJlcXVlc3QuY3J5cHRvTWV0YWRhdGFMb2FkZWQgPSB0cnVlO1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayk7XG4gICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBlcnJvcik7XG4gICAgfSk7XG4gIH0pO1xuXG4gIG1ldGFkYXRhUmVxdWVzdC5hZGRQYXJhbWV0ZXIoJ3RzcWwnLCBUWVBFUy5OVmFyQ2hhciwgcmVxdWVzdC5zcWxUZXh0T3JQcm9jZWR1cmUpO1xuICBpZiAocmVxdWVzdC5wYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgIG1ldGFkYXRhUmVxdWVzdC5hZGRQYXJhbWV0ZXIoJ3BhcmFtcycsIFRZUEVTLk5WYXJDaGFyLCBtZXRhZGF0YVJlcXVlc3QubWFrZVBhcmFtc1BhcmFtZXRlcihyZXF1ZXN0LnBhcmFtZXRlcnMpKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdFJvd3M6IGFueVtdID0gW107XG5cbiAgbWV0YWRhdGFSZXF1ZXN0Lm9uKCdyb3cnLCAoY29sdW1uczogYW55KSA9PiB7XG4gICAgcmVzdWx0Um93cy5wdXNoKGNvbHVtbnMpO1xuICB9KTtcblxuICBjb25uZWN0aW9uLm1ha2VSZXF1ZXN0KG1ldGFkYXRhUmVxdWVzdCwgVFlQRS5SUENfUkVRVUVTVCwgbmV3IFJwY1JlcXVlc3RQYXlsb2FkKG1ldGFkYXRhUmVxdWVzdC5zcWxUZXh0T3JQcm9jZWR1cmUhLCBtZXRhZGF0YVJlcXVlc3QucGFyYW1ldGVycywgY29ubmVjdGlvbi5jdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yKCksIGNvbm5lY3Rpb24uY29uZmlnLm9wdGlvbnMsIGNvbm5lY3Rpb24uZGF0YWJhc2VDb2xsYXRpb24pKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQUNB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
93
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdHlwZXMiLCJyZXF1aXJlIiwiX2Nla0VudHJ5IiwiX2tleUNyeXB0byIsIl9kYXRhVHlwZSIsIl9yZXF1ZXN0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9ycGNyZXF1ZXN0UGF5bG9hZCIsIl9wYWNrZXQiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJnZXRQYXJhbWV0ZXJFbmNyeXB0aW9uTWV0YWRhdGEiLCJjb25uZWN0aW9uIiwicmVxdWVzdCIsImNhbGxiYWNrIiwiY3J5cHRvTWV0YWRhdGFMb2FkZWQiLCJtZXRhZGF0YVJlcXVlc3QiLCJSZXF1ZXN0IiwiZXJyb3IiLCJkZWNyeXB0U3ltbWV0cmljS2V5UHJvbWlzZXMiLCJjZWtMaXN0IiwicGFyYW1Db3VudCIsImNvbHVtbnMiLCJyZXN1bHRSb3dzIiwiaXNGaXJzdFJlY29yZFNldCIsInNvbWUiLCJjb2wiLCJtZXRhZGF0YSIsImNvbE5hbWUiLCJjdXJyZW50T3JkaW5hbCIsIkRlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDEiLCJLZXlPcmRpbmFsIiwidmFsdWUiLCJjZWtFbnRyeSIsIkNFS0VudHJ5Iiwib3JkaW5hbCIsImFkZCIsIkVuY3J5cHRlZEtleSIsIkRiSWQiLCJLZXlJZCIsIktleVZlcnNpb24iLCJLZXlNZFZlcnNpb24iLCJLZXlQYXRoIiwiUHJvdmlkZXJOYW1lIiwiS2V5RW5jcnlwdGlvbkFsZ29yaXRobSIsInBhcmFtTmFtZSIsIkRlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDIiLCJQYXJhbWV0ZXJOYW1lIiwicGFyYW1JbmRleCIsInBhcmFtZXRlcnMiLCJmaW5kSW5kZXgiLCJwYXJhbSIsIm5hbWUiLCJjZWtPcmRpbmFsIiwiQ29sdW1uRW5jcnlwdGlvbktleU9yZGluYWwiLCJsZW5ndGgiLCJFcnJvciIsImVuY1R5cGUiLCJDb2x1bW5FbmNyeXRpb25UeXBlIiwiU1FMU2VydmVyRW5jcnlwdGlvblR5cGUiLCJQbGFpblRleHQiLCJjcnlwdG9NZXRhZGF0YSIsImNpcGhlckFsZ29yaXRobUlkIiwiQ29sdW1uRW5jcnlwdGlvbkFsZ29yaXRobSIsImVuY3J5cHRpb25UeXBlIiwibm9ybWFsaXphdGlvblJ1bGVWZXJzaW9uIiwiQnVmZmVyIiwiZnJvbSIsIk5vcm1hbGl6YXRpb25SdWxlVmVyc2lvbiIsInB1c2giLCJkZWNyeXB0U3ltbWV0cmljS2V5IiwiY29uZmlnIiwib3B0aW9ucyIsImZvcmNlRW5jcnlwdCIsInNxbFRleHRPclByb2NlZHVyZSIsIlByb21pc2UiLCJhbGwiLCJ0aGVuIiwicHJvY2VzcyIsIm5leHRUaWNrIiwiYWRkUGFyYW1ldGVyIiwiVFlQRVMiLCJOVmFyQ2hhciIsIm1ha2VQYXJhbXNQYXJhbWV0ZXIiLCJvbiIsIm1ha2VSZXF1ZXN0IiwiVFlQRSIsIlJQQ19SRVFVRVNUIiwiUnBjUmVxdWVzdFBheWxvYWQiLCJtYXAiLCJwYXJhbWV0ZXIiLCJyZXNvbHZlUGFyYW1ldGVyIiwiZGF0YWJhc2VDb2xsYXRpb24iLCJjdXJyZW50VHJhbnNhY3Rpb25EZXNjcmlwdG9yIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hbHdheXMtZW5jcnlwdGVkL2dldC1wYXJhbWV0ZXItZW5jcnlwdGlvbi1tZXRhZGF0YS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGlzIGNvZGUgaXMgYmFzZWQgb24gdGhlIGBtc3NxbC1qZGJjYCBsaWJyYXJ5IHB1Ymxpc2hlZCB1bmRlciB0aGUgY29uZGl0aW9ucyBvZiBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAoYykgMjAxOSBNaWNyb3NvZnQgQ29ycG9yYXRpb25cblxuaW1wb3J0IHsgU1FMU2VydmVyRW5jcnlwdGlvblR5cGUsIHR5cGUgQ3J5cHRvTWV0YWRhdGEsIERlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDEsIERlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDIgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IENFS0VudHJ5IH0gZnJvbSAnLi9jZWstZW50cnknO1xuaW1wb3J0IHsgZGVjcnlwdFN5bW1ldHJpY0tleSB9IGZyb20gJy4va2V5LWNyeXB0byc7XG5pbXBvcnQgeyB0eXBlQnlOYW1lIGFzIFRZUEVTLCB0eXBlIFBhcmFtZXRlciwgcmVzb2x2ZVBhcmFtZXRlciB9IGZyb20gJy4uL2RhdGEtdHlwZSc7XG5pbXBvcnQgUmVxdWVzdCBmcm9tICcuLi9yZXF1ZXN0JztcbmltcG9ydCBDb25uZWN0aW9uIGZyb20gJy4uL2Nvbm5lY3Rpb24nO1xuaW1wb3J0IFJwY1JlcXVlc3RQYXlsb2FkIGZyb20gJy4uL3JwY3JlcXVlc3QtcGF5bG9hZCc7XG5pbXBvcnQgeyBUWVBFIH0gZnJvbSAnLi4vcGFja2V0JztcblxuZXhwb3J0IGNvbnN0IGdldFBhcmFtZXRlckVuY3J5cHRpb25NZXRhZGF0YSA9IChjb25uZWN0aW9uOiBDb25uZWN0aW9uLCByZXF1ZXN0OiBSZXF1ZXN0LCBjYWxsYmFjazogKGVycm9yPzogRXJyb3IpID0+IHZvaWQpID0+IHtcbiAgaWYgKHJlcXVlc3QuY3J5cHRvTWV0YWRhdGFMb2FkZWQgPT09IHRydWUpIHtcbiAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgfVxuXG4gIGNvbnN0IG1ldGFkYXRhUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KCdzcF9kZXNjcmliZV9wYXJhbWV0ZXJfZW5jcnlwdGlvbicsIChlcnJvcikgPT4ge1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWNyeXB0U3ltbWV0cmljS2V5UHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IFtdO1xuICAgIGNvbnN0IGNla0xpc3Q6IENFS0VudHJ5W10gPSBbXTtcbiAgICBsZXQgcGFyYW1Db3VudCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbnMgb2YgcmVzdWx0Um93cykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXNGaXJzdFJlY29yZFNldCA9IGNvbHVtbnMuc29tZSgoY29sOiBhbnkpID0+IChjb2wgJiYgY29sLm1ldGFkYXRhICYmIGNvbC5tZXRhZGF0YS5jb2xOYW1lKSA9PT0gJ2RhdGFiYXNlX2lkJyk7XG4gICAgICAgIGlmIChpc0ZpcnN0UmVjb3JkU2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgY29uc3QgY3VycmVudE9yZGluYWwgPSBjb2x1bW5zW0Rlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDEuS2V5T3JkaW5hbF0udmFsdWU7XG4gICAgICAgICAgbGV0IGNla0VudHJ5OiBDRUtFbnRyeTtcbiAgICAgICAgICBpZiAoIWNla0xpc3RbY3VycmVudE9yZGluYWxdKSB7XG4gICAgICAgICAgICBjZWtFbnRyeSA9IG5ldyBDRUtFbnRyeShjdXJyZW50T3JkaW5hbCk7XG4gICAgICAgICAgICBjZWtMaXN0W2Nla0VudHJ5Lm9yZGluYWxdID0gY2VrRW50cnk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNla0VudHJ5ID0gY2VrTGlzdFtjdXJyZW50T3JkaW5hbF07XG4gICAgICAgICAgfVxuICAgICAgICAgIGNla0VudHJ5LmFkZChjb2x1bW5zW0Rlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDEuRW5jcnlwdGVkS2V5XS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uc1tEZXNjcmliZVBhcmFtZXRlckVuY3J5cHRpb25SZXN1bHRTZXQxLkRiSWRdLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zW0Rlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDEuS2V5SWRdLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zW0Rlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDEuS2V5VmVyc2lvbl0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNbRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0MS5LZXlNZFZlcnNpb25dLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zW0Rlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDEuS2V5UGF0aF0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNbRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0MS5Qcm92aWRlck5hbWVdLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zW0Rlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDEuS2V5RW5jcnlwdGlvbkFsZ29yaXRobV0udmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHBhcmFtQ291bnQrKztcbiAgICAgICAgICBjb25zdCBwYXJhbU5hbWU6IHN0cmluZyA9IGNvbHVtbnNbRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0Mi5QYXJhbWV0ZXJOYW1lXS52YWx1ZTtcbiAgICAgICAgICBjb25zdCBwYXJhbUluZGV4OiBudW1iZXIgPSByZXF1ZXN0LnBhcmFtZXRlcnMuZmluZEluZGV4KChwYXJhbTogUGFyYW1ldGVyKSA9PiBwYXJhbU5hbWUgPT09IGBAJHtwYXJhbS5uYW1lfWApO1xuICAgICAgICAgIGNvbnN0IGNla09yZGluYWw6IG51bWJlciA9IGNvbHVtbnNbRGVzY3JpYmVQYXJhbWV0ZXJFbmNyeXB0aW9uUmVzdWx0U2V0Mi5Db2x1bW5FbmNyeXB0aW9uS2V5T3JkaW5hbF0udmFsdWU7XG4gICAgICAgICAgY29uc3QgY2VrRW50cnk6IENFS0VudHJ5ID0gY2VrTGlzdFtjZWtPcmRpbmFsXTtcblxuICAgICAgICAgIGlmIChjZWtFbnRyeSAmJiBjZWtMaXN0Lmxlbmd0aCA8IGNla09yZGluYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYEludGVybmFsIGVycm9yLiBUaGUgcmVmZXJlbmNlZCBjb2x1bW4gZW5jcnlwdGlvbiBrZXkgb3JkaW5hbCBcIiR7Y2VrT3JkaW5hbH1cIiBpcyBtaXNzaW5nIGluIHRoZSBlbmNyeXB0aW9uIG1ldGFkYXRhIHJldHVybmVkIGJ5IHNwX2Rlc2NyaWJlX3BhcmFtZXRlcl9lbmNyeXB0aW9uLiBNYXggb3JkaW5hbCBpcyBcIiR7Y2VrTGlzdC5sZW5ndGh9XCIuYCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGVuY1R5cGUgPSBjb2x1bW5zW0Rlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDIuQ29sdW1uRW5jcnl0aW9uVHlwZV0udmFsdWU7XG4gICAgICAgICAgaWYgKFNRTFNlcnZlckVuY3J5cHRpb25UeXBlLlBsYWluVGV4dCAhPT0gZW5jVHlwZSkge1xuICAgICAgICAgICAgcmVxdWVzdC5wYXJhbWV0ZXJzW3BhcmFtSW5kZXhdLmNyeXB0b01ldGFkYXRhID0ge1xuICAgICAgICAgICAgICBjZWtFbnRyeTogY2VrRW50cnksXG4gICAgICAgICAgICAgIG9yZGluYWw6IGNla09yZGluYWwsXG4gICAgICAgICAgICAgIGNpcGhlckFsZ29yaXRobUlkOiBjb2x1bW5zW0Rlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDIuQ29sdW1uRW5jcnlwdGlvbkFsZ29yaXRobV0udmFsdWUsXG4gICAgICAgICAgICAgIGVuY3J5cHRpb25UeXBlOiBlbmNUeXBlLFxuICAgICAgICAgICAgICBub3JtYWxpemF0aW9uUnVsZVZlcnNpb246IEJ1ZmZlci5mcm9tKFtjb2x1bW5zW0Rlc2NyaWJlUGFyYW1ldGVyRW5jcnlwdGlvblJlc3VsdFNldDIuTm9ybWFsaXphdGlvblJ1bGVWZXJzaW9uXS52YWx1ZV0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGRlY3J5cHRTeW1tZXRyaWNLZXlQcm9taXNlcy5wdXNoKGRlY3J5cHRTeW1tZXRyaWNLZXkocmVxdWVzdC5wYXJhbWV0ZXJzW3BhcmFtSW5kZXhdLmNyeXB0b01ldGFkYXRhIGFzIENyeXB0b01ldGFkYXRhLCBjb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0LnBhcmFtZXRlcnNbcGFyYW1JbmRleF0uZm9yY2VFbmNyeXB0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKGBDYW5ub3QgZXhlY3V0ZSBzdGF0ZW1lbnQgb3IgcHJvY2VkdXJlICR7cmVxdWVzdC5zcWxUZXh0T3JQcm9jZWR1cmV9IGJlY2F1c2UgRm9yY2UgRW5jcnlwdGlvbiB3YXMgc2V0IGFzIHRydWUgZm9yIHBhcmFtZXRlciAke3BhcmFtSW5kZXggKyAxfSBhbmQgdGhlIGRhdGFiYXNlIGV4cGVjdHMgdGhpcyBwYXJhbWV0ZXIgdG8gYmUgc2VudCBhcyBwbGFpbnRleHQuIFRoaXMgbWF5IGJlIGR1ZSB0byBhIGNvbmZpZ3VyYXRpb24gZXJyb3IuYCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYEludGVybmFsIGVycm9yLiBVbmFibGUgdG8gcGFyc2UgcGFyYW1ldGVyIGVuY3J5cHRpb24gbWV0YWRhdGEgaW4gc3RhdGVtZW50IG9yIHByb2NlZHVyZSBcIiR7cmVxdWVzdC5zcWxUZXh0T3JQcm9jZWR1cmV9XCJgKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtQ291bnQgIT09IHJlcXVlc3QucGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3IoYEludGVybmFsIGVycm9yLiBNZXRhZGF0YSBmb3Igc29tZSBwYXJhbWV0ZXJzIGluIHN0YXRlbWVudCBvciBwcm9jZWR1cmUgXCIke3JlcXVlc3Quc3FsVGV4dE9yUHJvY2VkdXJlfVwiIGlzIG1pc3NpbmcgaW4gdGhlIHJlc3VsdHNldCByZXR1cm5lZCBieSBzcF9kZXNjcmliZV9wYXJhbWV0ZXJfZW5jcnlwdGlvbi5gKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGRlY3J5cHRTeW1tZXRyaWNLZXlQcm9taXNlcykudGhlbigoKSA9PiB7XG4gICAgICByZXF1ZXN0LmNyeXB0b01ldGFkYXRhTG9hZGVkID0gdHJ1ZTtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2spO1xuICAgIH0sIChlcnJvcikgPT4ge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgZXJyb3IpO1xuICAgIH0pO1xuICB9KTtcblxuICBtZXRhZGF0YVJlcXVlc3QuYWRkUGFyYW1ldGVyKCd0c3FsJywgVFlQRVMuTlZhckNoYXIsIHJlcXVlc3Quc3FsVGV4dE9yUHJvY2VkdXJlKTtcbiAgaWYgKHJlcXVlc3QucGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICBtZXRhZGF0YVJlcXVlc3QuYWRkUGFyYW1ldGVyKCdwYXJhbXMnLCBUWVBFUy5OVmFyQ2hhciwgbWV0YWRhdGFSZXF1ZXN0Lm1ha2VQYXJhbXNQYXJhbWV0ZXIocmVxdWVzdC5wYXJhbWV0ZXJzKSk7XG4gIH1cblxuICBjb25zdCByZXN1bHRSb3dzOiBhbnlbXSA9IFtdO1xuXG4gIG1ldGFkYXRhUmVxdWVzdC5vbigncm93JywgKGNvbHVtbnM6IGFueSkgPT4ge1xuICAgIHJlc3VsdFJvd3MucHVzaChjb2x1bW5zKTtcbiAgfSk7XG5cbiAgLy8gVGhpcyByZXF1ZXN0IGlzIGJ1aWx0IGZyb20gcmF3IGBQYXJhbWV0ZXJgcyByYXRoZXIgdGhhbiBhIGBSZXF1ZXN0YFxuICAvLyB0aGF0IGhhcyBiZWVuIHRocm91Z2ggYHZhbGlkYXRlUGFyYW1ldGVyc2AsIHNvIHRoZXkgYXJlIHJlc29sdmVkIGlubGluZS5cbiAgY29ubmVjdGlvbi5tYWtlUmVxdWVzdChtZXRhZGF0YVJlcXVlc3QsIFRZUEUuUlBDX1JFUVVFU1QsIG5ldyBScGNSZXF1ZXN0UGF5bG9hZChtZXRhZGF0YVJlcXVlc3Quc3FsVGV4dE9yUHJvY2VkdXJlISwgbWV0YWRhdGFSZXF1ZXN0LnBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXIpID0+IHJlc29sdmVQYXJhbWV0ZXIocGFyYW1ldGVyLCBjb25uZWN0aW9uLmRhdGFiYXNlQ29sbGF0aW9uLCBjb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zKSksIGNvbm5lY3Rpb24uY3VycmVudFRyYW5zYWN0aW9uRGVzY3JpcHRvcigpLCBjb25uZWN0aW9uLmNvbmZpZy5vcHRpb25zKSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFHQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxTQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxTQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxRQUFBLEdBQUFDLHNCQUFBLENBQUFMLE9BQUE7QUFFQSxJQUFBTSxrQkFBQSxHQUFBRCxzQkFBQSxDQUFBTCxPQUFBO0FBQ0EsSUFBQU8sT0FBQSxHQUFBUCxPQUFBO0FBQWlDLFNBQUFLLHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBVmpDO0FBQ0E7O0FBV08sTUFBTUcsOEJBQThCLEdBQUdBLENBQUNDLFVBQXNCLEVBQUVDLE9BQWdCLEVBQUVDLFFBQWlDLEtBQUs7RUFDN0gsSUFBSUQsT0FBTyxDQUFDRSxvQkFBb0IsS0FBSyxJQUFJLEVBQUU7SUFDekMsT0FBT0QsUUFBUSxDQUFDLENBQUM7RUFDbkI7RUFFQSxNQUFNRSxlQUFlLEdBQUcsSUFBSUMsZ0JBQU8sQ0FBQyxrQ0FBa0MsRUFBR0MsS0FBSyxJQUFLO0lBQ2pGLElBQUlBLEtBQUssRUFBRTtNQUNULE9BQU9KLFFBQVEsQ0FBQ0ksS0FBSyxDQUFDO0lBQ3hCO0lBRUEsTUFBTUMsMkJBQTRDLEdBQUcsRUFBRTtJQUN2RCxNQUFNQyxPQUFtQixHQUFHLEVBQUU7SUFDOUIsSUFBSUMsVUFBVSxHQUFHLENBQUM7SUFFbEIsS0FBSyxN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
@@ -1 +1 @@
1
- {"version":3,"file":"get-parameter-encryption-metadata.js","names":["_types","require","_cekEntry","_keyCrypto","_dataType","_request","_interopRequireDefault","_rpcrequestPayload","_packet","e","__esModule","default","getParameterEncryptionMetadata","connection","request","callback","cryptoMetadataLoaded","metadataRequest","Request","error","decryptSymmetricKeyPromises","cekList","paramCount","columns","resultRows","isFirstRecordSet","some","col","metadata","colName","currentOrdinal","DescribeParameterEncryptionResultSet1","KeyOrdinal","value","cekEntry","CEKEntry","ordinal","add","EncryptedKey","DbId","KeyId","KeyVersion","KeyMdVersion","KeyPath","ProviderName","KeyEncryptionAlgorithm","paramName","DescribeParameterEncryptionResultSet2","ParameterName","paramIndex","parameters","findIndex","param","name","cekOrdinal","ColumnEncryptionKeyOrdinal","length","Error","encType","ColumnEncrytionType","SQLServerEncryptionType","PlainText","cryptoMetadata","cipherAlgorithmId","ColumnEncryptionAlgorithm","encryptionType","normalizationRuleVersion","Buffer","from","NormalizationRuleVersion","push","decryptSymmetricKey","config","options","forceEncrypt","sqlTextOrProcedure","Promise","all","then","process","nextTick","addParameter","TYPES","NVarChar","makeParamsParameter","on","makeRequest","TYPE","RPC_REQUEST","RpcRequestPayload","currentTransactionDescriptor","databaseCollation","exports"],"sources":["../../src/always-encrypted/get-parameter-encryption-metadata.ts"],"sourcesContent":["// This code is based on the `mssql-jdbc` library published under the conditions of MIT license.\n// Copyright (c) 2019 Microsoft Corporation\n\nimport { SQLServerEncryptionType, type CryptoMetadata, DescribeParameterEncryptionResultSet1, DescribeParameterEncryptionResultSet2 } from './types';\nimport { CEKEntry } from './cek-entry';\nimport { decryptSymmetricKey } from './key-crypto';\nimport { typeByName as TYPES, type Parameter } from '../data-type';\nimport Request from '../request';\nimport Connection from '../connection';\nimport RpcRequestPayload from '../rpcrequest-payload';\nimport { TYPE } from '../packet';\n\nexport const getParameterEncryptionMetadata = (connection: Connection, request: Request, callback: (error?: Error) => void) => {\n if (request.cryptoMetadataLoaded === true) {\n return callback();\n }\n\n const metadataRequest = new Request('sp_describe_parameter_encryption', (error) => {\n if (error) {\n return callback(error);\n }\n\n const decryptSymmetricKeyPromises: Promise<void>[] = [];\n const cekList: CEKEntry[] = [];\n let paramCount = 0;\n\n for (const columns of resultRows) {\n try {\n const isFirstRecordSet = columns.some((col: any) => (col && col.metadata && col.metadata.colName) === 'database_id');\n if (isFirstRecordSet === true) {\n const currentOrdinal = columns[DescribeParameterEncryptionResultSet1.KeyOrdinal].value;\n let cekEntry: CEKEntry;\n if (!cekList[currentOrdinal]) {\n cekEntry = new CEKEntry(currentOrdinal);\n cekList[cekEntry.ordinal] = cekEntry;\n } else {\n cekEntry = cekList[currentOrdinal];\n }\n cekEntry.add(columns[DescribeParameterEncryptionResultSet1.EncryptedKey].value,\n columns[DescribeParameterEncryptionResultSet1.DbId].value,\n columns[DescribeParameterEncryptionResultSet1.KeyId].value,\n columns[DescribeParameterEncryptionResultSet1.KeyVersion].value,\n columns[DescribeParameterEncryptionResultSet1.KeyMdVersion].value,\n columns[DescribeParameterEncryptionResultSet1.KeyPath].value,\n columns[DescribeParameterEncryptionResultSet1.ProviderName].value,\n columns[DescribeParameterEncryptionResultSet1.KeyEncryptionAlgorithm].value);\n } else {\n paramCount++;\n const paramName: string = columns[DescribeParameterEncryptionResultSet2.ParameterName].value;\n const paramIndex: number = request.parameters.findIndex((param: Parameter) => paramName === `@${param.name}`);\n const cekOrdinal: number = columns[DescribeParameterEncryptionResultSet2.ColumnEncryptionKeyOrdinal].value;\n const cekEntry: CEKEntry = cekList[cekOrdinal];\n\n if (cekEntry && cekList.length < cekOrdinal) {\n return callback(new Error(`Internal error. The referenced column encryption key ordinal \"${cekOrdinal}\" is missing in the encryption metadata returned by sp_describe_parameter_encryption. Max ordinal is \"${cekList.length}\".`));\n }\n\n const encType = columns[DescribeParameterEncryptionResultSet2.ColumnEncrytionType].value;\n if (SQLServerEncryptionType.PlainText !== encType) {\n request.parameters[paramIndex].cryptoMetadata = {\n cekEntry: cekEntry,\n ordinal: cekOrdinal,\n cipherAlgorithmId: columns[DescribeParameterEncryptionResultSet2.ColumnEncryptionAlgorithm].value,\n encryptionType: encType,\n normalizationRuleVersion: Buffer.from([columns[DescribeParameterEncryptionResultSet2.NormalizationRuleVersion].value]),\n };\n decryptSymmetricKeyPromises.push(decryptSymmetricKey(request.parameters[paramIndex].cryptoMetadata as CryptoMetadata, connection.config.options));\n } else if (request.parameters[paramIndex].forceEncrypt === true) {\n return callback(new Error(`Cannot execute statement or procedure ${request.sqlTextOrProcedure} because Force Encryption was set as true for parameter ${paramIndex + 1} and the database expects this parameter to be sent as plaintext. This may be due to a configuration error.`));\n }\n }\n } catch {\n return callback(new Error(`Internal error. Unable to parse parameter encryption metadata in statement or procedure \"${request.sqlTextOrProcedure}\"`));\n }\n }\n\n if (paramCount !== request.parameters.length) {\n return callback(new Error(`Internal error. Metadata for some parameters in statement or procedure \"${request.sqlTextOrProcedure}\" is missing in the resultset returned by sp_describe_parameter_encryption.`));\n }\n\n return Promise.all(decryptSymmetricKeyPromises).then(() => {\n request.cryptoMetadataLoaded = true;\n process.nextTick(callback);\n }, (error) => {\n process.nextTick(callback, error);\n });\n });\n\n metadataRequest.addParameter('tsql', TYPES.NVarChar, request.sqlTextOrProcedure);\n if (request.parameters.length) {\n metadataRequest.addParameter('params', TYPES.NVarChar, metadataRequest.makeParamsParameter(request.parameters));\n }\n\n const resultRows: any[] = [];\n\n metadataRequest.on('row', (columns: any) => {\n resultRows.push(columns);\n });\n\n connection.makeRequest(metadataRequest, TYPE.RPC_REQUEST, new RpcRequestPayload(metadataRequest.sqlTextOrProcedure!, metadataRequest.parameters, connection.currentTransactionDescriptor(), connection.config.options, connection.databaseCollation));\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"get-parameter-encryption-metadata.js","names":["_types","require","_cekEntry","_keyCrypto","_dataType","_request","_interopRequireDefault","_rpcrequestPayload","_packet","e","__esModule","default","getParameterEncryptionMetadata","connection","request","callback","cryptoMetadataLoaded","metadataRequest","Request","error","decryptSymmetricKeyPromises","cekList","paramCount","columns","resultRows","isFirstRecordSet","some","col","metadata","colName","currentOrdinal","DescribeParameterEncryptionResultSet1","KeyOrdinal","value","cekEntry","CEKEntry","ordinal","add","EncryptedKey","DbId","KeyId","KeyVersion","KeyMdVersion","KeyPath","ProviderName","KeyEncryptionAlgorithm","paramName","DescribeParameterEncryptionResultSet2","ParameterName","paramIndex","parameters","findIndex","param","name","cekOrdinal","ColumnEncryptionKeyOrdinal","length","Error","encType","ColumnEncrytionType","SQLServerEncryptionType","PlainText","cryptoMetadata","cipherAlgorithmId","ColumnEncryptionAlgorithm","encryptionType","normalizationRuleVersion","Buffer","from","NormalizationRuleVersion","push","decryptSymmetricKey","config","options","forceEncrypt","sqlTextOrProcedure","Promise","all","then","process","nextTick","addParameter","TYPES","NVarChar","makeParamsParameter","on","makeRequest","TYPE","RPC_REQUEST","RpcRequestPayload","map","parameter","resolveParameter","databaseCollation","currentTransactionDescriptor","exports"],"sources":["../../src/always-encrypted/get-parameter-encryption-metadata.ts"],"sourcesContent":["// This code is based on the `mssql-jdbc` library published under the conditions of MIT license.\n// Copyright (c) 2019 Microsoft Corporation\n\nimport { SQLServerEncryptionType, type CryptoMetadata, DescribeParameterEncryptionResultSet1, DescribeParameterEncryptionResultSet2 } from './types';\nimport { CEKEntry } from './cek-entry';\nimport { decryptSymmetricKey } from './key-crypto';\nimport { typeByName as TYPES, type Parameter, resolveParameter } from '../data-type';\nimport Request from '../request';\nimport Connection from '../connection';\nimport RpcRequestPayload from '../rpcrequest-payload';\nimport { TYPE } from '../packet';\n\nexport const getParameterEncryptionMetadata = (connection: Connection, request: Request, callback: (error?: Error) => void) => {\n if (request.cryptoMetadataLoaded === true) {\n return callback();\n }\n\n const metadataRequest = new Request('sp_describe_parameter_encryption', (error) => {\n if (error) {\n return callback(error);\n }\n\n const decryptSymmetricKeyPromises: Promise<void>[] = [];\n const cekList: CEKEntry[] = [];\n let paramCount = 0;\n\n for (const columns of resultRows) {\n try {\n const isFirstRecordSet = columns.some((col: any) => (col && col.metadata && col.metadata.colName) === 'database_id');\n if (isFirstRecordSet === true) {\n const currentOrdinal = columns[DescribeParameterEncryptionResultSet1.KeyOrdinal].value;\n let cekEntry: CEKEntry;\n if (!cekList[currentOrdinal]) {\n cekEntry = new CEKEntry(currentOrdinal);\n cekList[cekEntry.ordinal] = cekEntry;\n } else {\n cekEntry = cekList[currentOrdinal];\n }\n cekEntry.add(columns[DescribeParameterEncryptionResultSet1.EncryptedKey].value,\n columns[DescribeParameterEncryptionResultSet1.DbId].value,\n columns[DescribeParameterEncryptionResultSet1.KeyId].value,\n columns[DescribeParameterEncryptionResultSet1.KeyVersion].value,\n columns[DescribeParameterEncryptionResultSet1.KeyMdVersion].value,\n columns[DescribeParameterEncryptionResultSet1.KeyPath].value,\n columns[DescribeParameterEncryptionResultSet1.ProviderName].value,\n columns[DescribeParameterEncryptionResultSet1.KeyEncryptionAlgorithm].value);\n } else {\n paramCount++;\n const paramName: string = columns[DescribeParameterEncryptionResultSet2.ParameterName].value;\n const paramIndex: number = request.parameters.findIndex((param: Parameter) => paramName === `@${param.name}`);\n const cekOrdinal: number = columns[DescribeParameterEncryptionResultSet2.ColumnEncryptionKeyOrdinal].value;\n const cekEntry: CEKEntry = cekList[cekOrdinal];\n\n if (cekEntry && cekList.length < cekOrdinal) {\n return callback(new Error(`Internal error. The referenced column encryption key ordinal \"${cekOrdinal}\" is missing in the encryption metadata returned by sp_describe_parameter_encryption. Max ordinal is \"${cekList.length}\".`));\n }\n\n const encType = columns[DescribeParameterEncryptionResultSet2.ColumnEncrytionType].value;\n if (SQLServerEncryptionType.PlainText !== encType) {\n request.parameters[paramIndex].cryptoMetadata = {\n cekEntry: cekEntry,\n ordinal: cekOrdinal,\n cipherAlgorithmId: columns[DescribeParameterEncryptionResultSet2.ColumnEncryptionAlgorithm].value,\n encryptionType: encType,\n normalizationRuleVersion: Buffer.from([columns[DescribeParameterEncryptionResultSet2.NormalizationRuleVersion].value]),\n };\n decryptSymmetricKeyPromises.push(decryptSymmetricKey(request.parameters[paramIndex].cryptoMetadata as CryptoMetadata, connection.config.options));\n } else if (request.parameters[paramIndex].forceEncrypt === true) {\n return callback(new Error(`Cannot execute statement or procedure ${request.sqlTextOrProcedure} because Force Encryption was set as true for parameter ${paramIndex + 1} and the database expects this parameter to be sent as plaintext. This may be due to a configuration error.`));\n }\n }\n } catch {\n return callback(new Error(`Internal error. Unable to parse parameter encryption metadata in statement or procedure \"${request.sqlTextOrProcedure}\"`));\n }\n }\n\n if (paramCount !== request.parameters.length) {\n return callback(new Error(`Internal error. Metadata for some parameters in statement or procedure \"${request.sqlTextOrProcedure}\" is missing in the resultset returned by sp_describe_parameter_encryption.`));\n }\n\n return Promise.all(decryptSymmetricKeyPromises).then(() => {\n request.cryptoMetadataLoaded = true;\n process.nextTick(callback);\n }, (error) => {\n process.nextTick(callback, error);\n });\n });\n\n metadataRequest.addParameter('tsql', TYPES.NVarChar, request.sqlTextOrProcedure);\n if (request.parameters.length) {\n metadataRequest.addParameter('params', TYPES.NVarChar, metadataRequest.makeParamsParameter(request.parameters));\n }\n\n const resultRows: any[] = [];\n\n metadataRequest.on('row', (columns: any) => {\n resultRows.push(columns);\n });\n\n // This request is built from raw `Parameter`s rather than a `Request`\n // that has been through `validateParameters`, so they are resolved inline.\n connection.makeRequest(metadataRequest, TYPE.RPC_REQUEST, new RpcRequestPayload(metadataRequest.sqlTextOrProcedure!, metadataRequest.parameters.map((parameter) => resolveParameter(parameter, connection.databaseCollation, connection.config.options)), connection.currentTransactionDescriptor(), connection.config.options));\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,40 @@
1
1
  import BulkLoad from './bulk-load';
2
+ export type Row = unknown[] | {
3
+ [colName: string]: unknown;
4
+ };
5
+ /**
6
+ * The TDS byte stream of a bulk load: COLMETADATA, a ROW token per row,
7
+ * and a DONE token at the end, serialized from the bulk load's row source.
8
+ *
9
+ * The payload owns the row source's iterator the way a `for await` loop
10
+ * would: it requests the first row as soon as it is created, so that a
11
+ * stream source is observed from the moment it is handed over, and it
12
+ * closes the source through the iterator's `return()` whenever the bulk
13
+ * load does not run to completion, whether the rows were being read
14
+ * ([[Symbol.asyncIterator]]) or never got to be ([[close]]).
15
+ *
16
+ * Rows are written into one buffer that lives for the whole bulk load.
17
+ * Its contents are yielded once it holds a chunk's worth
18
+ * (`WritableTrackingBuffer.CHUNK_SIZE`), checked after every cell, and at
19
+ * the end. Rows from a synchronous source are serialized without an
20
+ * event-loop turn in between; rows from an asynchronous source are awaited
21
+ * one at a time.
22
+ *
23
+ * @private
24
+ */
2
25
  export declare class BulkLoadPayload implements AsyncIterable<Buffer> {
3
26
  bulkLoad: BulkLoad;
4
- iterator: AsyncIterableIterator<Buffer>;
5
- constructor(bulkLoad: BulkLoad);
6
- [Symbol.asyncIterator](): AsyncIterableIterator<Buffer<ArrayBufferLike>>;
27
+ iterator: Iterator<Row> | AsyncIterator<Row>;
28
+ pending: IteratorResult<Row> | Promise<IteratorResult<Row>> | undefined;
29
+ constructor(bulkLoad: BulkLoad, rows: Iterable<Row> | AsyncIterable<Row>);
30
+ /**
31
+ * Closes the row source of a bulk load whose rows will not be read:
32
+ * the `INSERT BULK` statement was rejected, the bulk load was canceled,
33
+ * or the connection is no longer logged in. Best effort: a read still
34
+ * pending in the source cannot be interrupted, and a close that fails
35
+ * has nothing left to report to.
36
+ */
37
+ close(): void;
38
+ [Symbol.asyncIterator](): AsyncGenerator<Buffer<ArrayBufferLike>, void, unknown>;
7
39
  toString(indent?: string): string;
8
40
  }
@@ -4,20 +4,189 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.BulkLoadPayload = void 0;
7
+ var _writableTrackingBuffer = _interopRequireDefault(require("./tracking-buffer/writable-tracking-buffer"));
8
+ var _token = require("./token/token");
9
+ var _errors = require("./errors");
10
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
11
+ const rowTokenBuffer = Buffer.from([_token.TYPE.ROW]);
12
+ const textPointerAndTimestampBuffer = Buffer.from([
13
+ // TextPointer length
14
+ 0x10,
15
+ // TextPointer
16
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
17
+ // Timestamp
18
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
19
+ const textPointerNullBuffer = Buffer.from([0x00]);
20
+ function isPromiseLike(value) {
21
+ return value != null && typeof value.then === 'function';
22
+ }
23
+ function ignoreError() {}
24
+
25
+ /**
26
+ * The TDS byte stream of a bulk load: COLMETADATA, a ROW token per row,
27
+ * and a DONE token at the end, serialized from the bulk load's row source.
28
+ *
29
+ * The payload owns the row source's iterator the way a `for await` loop
30
+ * would: it requests the first row as soon as it is created, so that a
31
+ * stream source is observed from the moment it is handed over, and it
32
+ * closes the source through the iterator's `return()` whenever the bulk
33
+ * load does not run to completion, whether the rows were being read
34
+ * ([[Symbol.asyncIterator]]) or never got to be ([[close]]).
35
+ *
36
+ * Rows are written into one buffer that lives for the whole bulk load.
37
+ * Its contents are yielded once it holds a chunk's worth
38
+ * (`WritableTrackingBuffer.CHUNK_SIZE`), checked after every cell, and at
39
+ * the end. Rows from a synchronous source are serialized without an
40
+ * event-loop turn in between; rows from an asynchronous source are awaited
41
+ * one at a time.
42
+ *
43
+ * @private
44
+ */
7
45
  class BulkLoadPayload {
8
- constructor(bulkLoad) {
46
+ constructor(bulkLoad, rows) {
9
47
  this.bulkLoad = bulkLoad;
48
+ this.iterator = typeof rows[Symbol.asyncIterator] === 'function' ? rows[Symbol.asyncIterator]() : rows[Symbol.iterator]();
49
+
50
+ // The first row is requested now, before the `INSERT BULK` statement
51
+ // has gone out. For a stream source this is what attaches its
52
+ // iterator's listeners: an error it emits while the statement is in
53
+ // flight is kept and reported on the next read, instead of being an
54
+ // unhandled `'error'` event. The read is awaited when the rows are
55
+ // serialized; its rejection is not unhandled until then, and neither
56
+ // is a synchronous source's throw, which reaches the bulk load's
57
+ // callback the same way.
58
+ let first;
59
+ try {
60
+ first = this.iterator.next();
61
+ } catch (err) {
62
+ first = Promise.reject(err);
63
+ }
64
+ if (isPromiseLike(first)) {
65
+ const read = Promise.resolve(first);
66
+ read.then(undefined, ignoreError);
67
+ this.pending = read;
68
+ } else {
69
+ this.pending = first;
70
+ }
71
+ }
10
72
 
11
- // We need to grab the iterator here so that `error` event handlers are set up
12
- // as early as possible (and are not potentially lost).
13
- this.iterator = this.bulkLoad.rowToPacketTransform[Symbol.asyncIterator]();
73
+ /**
74
+ * Closes the row source of a bulk load whose rows will not be read:
75
+ * the `INSERT BULK` statement was rejected, the bulk load was canceled,
76
+ * or the connection is no longer logged in. Best effort: a read still
77
+ * pending in the source cannot be interrupted, and a close that fails
78
+ * has nothing left to report to.
79
+ */
80
+ close() {
81
+ const iterator = this.iterator;
82
+ if (typeof iterator.return !== 'function') {
83
+ return;
84
+ }
85
+ try {
86
+ const closing = iterator.return();
87
+ if (isPromiseLike(closing)) {
88
+ Promise.resolve(closing).then(undefined, ignoreError);
89
+ }
90
+ } catch {
91
+ // Nothing left to report to.
92
+ }
14
93
  }
15
- [Symbol.asyncIterator]() {
16
- return this.iterator;
94
+ async *[Symbol.asyncIterator]() {
95
+ const bulkLoad = this.bulkLoad;
96
+ const options = bulkLoad.options;
97
+ const columns = bulkLoad.columns;
98
+ const iterator = this.iterator;
99
+
100
+ // Per column, not per cell: a text type's value is written behind a
101
+ // text pointer and timestamp, or as a null pointer.
102
+ const isTextType = columns.map(c => c.type.name === 'Text' || c.type.name === 'Image' || c.type.name === 'NText');
103
+ const buffer = new _writableTrackingBuffer.default();
104
+ let done = false;
105
+ let closed = false;
106
+ try {
107
+ buffer.writeBuffer(bulkLoad.getColMetaData());
108
+ while (true) {
109
+ let result = this.pending ?? iterator.next();
110
+ this.pending = undefined;
111
+ if (isPromiseLike(result)) {
112
+ result = await result;
113
+ }
114
+ if (result.done) {
115
+ done = true;
116
+ break;
117
+ }
118
+
119
+ // A row given as a promise is settled first, as `Readable.from`
120
+ // settled it before handing it on.
121
+ let row = result.value;
122
+ if (isPromiseLike(row)) {
123
+ row = await row;
124
+ }
125
+ buffer.writeBuffer(rowTokenBuffer);
126
+ const isArray = Array.isArray(row);
127
+ for (let i = 0; i < columns.length; i++) {
128
+ const c = columns[i];
129
+ const value = c.type.validate(isArray ? row[i] : row[c.objName], c.collation);
130
+ const parameter = {
131
+ length: c.length,
132
+ scale: c.scale,
133
+ precision: c.precision,
134
+ value: value
135
+ };
136
+ if (isTextType[i] && value == null) {
137
+ buffer.writeBuffer(textPointerNullBuffer);
138
+ } else {
139
+ if (isTextType[i]) {
140
+ buffer.writeBuffer(textPointerAndTimestampBuffer);
141
+ }
142
+ try {
143
+ c.type.writeValue(buffer, parameter, options);
144
+ } catch (error) {
145
+ throw new _errors.InputError(`Column '${c.name}' could not be serialized`, {
146
+ cause: error
147
+ });
148
+ }
149
+ }
150
+
151
+ // Checked after every cell, not only after every row, so that a
152
+ // wide row of large cells goes downstream as it is serialized.
153
+ if (buffer.length >= _writableTrackingBuffer.default.CHUNK_SIZE) {
154
+ for (const chunk of buffer.getBuffers()) {
155
+ yield chunk;
156
+ }
157
+ buffer.consume(buffer.length);
158
+ }
159
+ }
160
+ }
161
+ } catch (err) {
162
+ // A failed row closes the source as a `for await` would. A close
163
+ // that fails must not replace the row error the bulk load is
164
+ // failing with.
165
+ closed = true;
166
+ if (typeof iterator.return === 'function') {
167
+ try {
168
+ await iterator.return();
169
+ } catch {
170
+ // The row error is what surfaces.
171
+ }
172
+ }
173
+ throw err;
174
+ } finally {
175
+ // The consumer stopped pulling (e.g. because the bulk load was
176
+ // canceled): close the source as a `for await` would.
177
+ if (!done && !closed && typeof iterator.return === 'function') {
178
+ await iterator.return();
179
+ }
180
+ }
181
+ buffer.writeBuffer(bulkLoad.createDoneToken());
182
+ for (const chunk of buffer.getBuffers()) {
183
+ yield chunk;
184
+ }
185
+ buffer.consume(buffer.length);
17
186
  }
18
187
  toString(indent = '') {
19
188
  return indent + 'BulkLoad';
20
189
  }
21
190
  }
22
191
  exports.BulkLoadPayload = BulkLoadPayload;
23
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCdWxrTG9hZFBheWxvYWQiLCJjb25zdHJ1Y3RvciIsImJ1bGtMb2FkIiwiaXRlcmF0b3IiLCJyb3dUb1BhY2tldFRyYW5zZm9ybSIsIlN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJ0b1N0cmluZyIsImluZGVudCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi9zcmMvYnVsay1sb2FkLXBheWxvYWQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1bGtMb2FkIGZyb20gJy4vYnVsay1sb2FkJztcblxuZXhwb3J0IGNsYXNzIEJ1bGtMb2FkUGF5bG9hZCBpbXBsZW1lbnRzIEFzeW5jSXRlcmFibGU8QnVmZmVyPiB7XG4gIGRlY2xhcmUgYnVsa0xvYWQ6IEJ1bGtMb2FkO1xuICBkZWNsYXJlIGl0ZXJhdG9yOiBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8QnVmZmVyPjtcblxuICBjb25zdHJ1Y3RvcihidWxrTG9hZDogQnVsa0xvYWQpIHtcbiAgICB0aGlzLmJ1bGtMb2FkID0gYnVsa0xvYWQ7XG5cbiAgICAvLyBXZSBuZWVkIHRvIGdyYWIgdGhlIGl0ZXJhdG9yIGhlcmUgc28gdGhhdCBgZXJyb3JgIGV2ZW50IGhhbmRsZXJzIGFyZSBzZXQgdXBcbiAgICAvLyBhcyBlYXJseSBhcyBwb3NzaWJsZSAoYW5kIGFyZSBub3QgcG90ZW50aWFsbHkgbG9zdCkuXG4gICAgdGhpcy5pdGVyYXRvciA9IHRoaXMuYnVsa0xvYWQucm93VG9QYWNrZXRUcmFuc2Zvcm1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG4gIH1cblxuICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkge1xuICAgIHJldHVybiB0aGlzLml0ZXJhdG9yO1xuICB9XG5cbiAgdG9TdHJpbmcoaW5kZW50ID0gJycpIHtcbiAgICByZXR1cm4gaW5kZW50ICsgKCdCdWxrTG9hZCcpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVPLE1BQU1BLGVBQWUsQ0FBa0M7RUFJNURDLFdBQVdBLENBQUNDLFFBQWtCLEVBQUU7SUFDOUIsSUFBSSxDQUFDQSxRQUFRLEdBQUdBLFFBQVE7O0lBRXhCO0lBQ0E7SUFDQSxJQUFJLENBQUNDLFFBQVEsR0FBRyxJQUFJLENBQUNELFFBQVEsQ0FBQ0Usb0JBQW9CLENBQUNDLE1BQU0sQ0FBQ0MsYUFBYSxDQUFDLENBQUMsQ0FBQztFQUM1RTtFQUVBLENBQUNELE1BQU0sQ0FBQ0MsYUFBYSxJQUFJO0lBQ3ZCLE9BQU8sSUFBSSxDQUFDSCxRQUFRO0VBQ3RCO0VBRUFJLFFBQVFBLENBQUNDLE1BQU0sR0FBRyxFQUFFLEVBQUU7SUFDcEIsT0FBT0EsTUFBTSxHQUFJLFVBQVc7RUFDOUI7QUFDRjtBQUFDQyxPQUFBLENBQUFULGVBQUEsR0FBQUEsZUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
192
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd3JpdGFibGVUcmFja2luZ0J1ZmZlciIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3Rva2VuIiwiX2Vycm9ycyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInJvd1Rva2VuQnVmZmVyIiwiQnVmZmVyIiwiZnJvbSIsIlRPS0VOX1RZUEUiLCJST1ciLCJ0ZXh0UG9pbnRlckFuZFRpbWVzdGFtcEJ1ZmZlciIsInRleHRQb2ludGVyTnVsbEJ1ZmZlciIsImlzUHJvbWlzZUxpa2UiLCJ2YWx1ZSIsInRoZW4iLCJpZ25vcmVFcnJvciIsIkJ1bGtMb2FkUGF5bG9hZCIsImNvbnN0cnVjdG9yIiwiYnVsa0xvYWQiLCJyb3dzIiwiaXRlcmF0b3IiLCJTeW1ib2wiLCJhc3luY0l0ZXJhdG9yIiwiZmlyc3QiLCJuZXh0IiwiZXJyIiwiUHJvbWlzZSIsInJlamVjdCIsInJlYWQiLCJyZXNvbHZlIiwidW5kZWZpbmVkIiwicGVuZGluZyIsImNsb3NlIiwicmV0dXJuIiwiY2xvc2luZyIsIm9wdGlvbnMiLCJjb2x1bW5zIiwiaXNUZXh0VHlwZSIsIm1hcCIsImMiLCJ0eXBlIiwibmFtZSIsImJ1ZmZlciIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJkb25lIiwiY2xvc2VkIiwid3JpdGVCdWZmZXIiLCJnZXRDb2xNZXRhRGF0YSIsInJlc3VsdCIsInJvdyIsImlzQXJyYXkiLCJBcnJheSIsImkiLCJsZW5ndGgiLCJ2YWxpZGF0ZSIsIm9iak5hbWUiLCJjb2xsYXRpb24iLCJwYXJhbWV0ZXIiLCJzY2FsZSIsInByZWNpc2lvbiIsIndyaXRlVmFsdWUiLCJlcnJvciIsIklucHV0RXJyb3IiLCJjYXVzZSIsIkNIVU5LX1NJWkUiLCJjaHVuayIsImdldEJ1ZmZlcnMiLCJjb25zdW1lIiwiY3JlYXRlRG9uZVRva2VuIiwidG9TdHJpbmciLCJpbmRlbnQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vc3JjL2J1bGstbG9hZC1wYXlsb2FkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWxrTG9hZCBmcm9tICcuL2J1bGstbG9hZCc7XG5pbXBvcnQgV3JpdGFibGVUcmFja2luZ0J1ZmZlciBmcm9tICcuL3RyYWNraW5nLWJ1ZmZlci93cml0YWJsZS10cmFja2luZy1idWZmZXInO1xuaW1wb3J0IHsgVFlQRSBhcyBUT0tFTl9UWVBFIH0gZnJvbSAnLi90b2tlbi90b2tlbic7XG5pbXBvcnQgeyBJbnB1dEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuXG5leHBvcnQgdHlwZSBSb3cgPSB1bmtub3duW10gfCB7IFtjb2xOYW1lOiBzdHJpbmddOiB1bmtub3duIH07XG5cbmNvbnN0IHJvd1Rva2VuQnVmZmVyID0gQnVmZmVyLmZyb20oWyBUT0tFTl9UWVBFLlJPVyBdKTtcbmNvbnN0IHRleHRQb2ludGVyQW5kVGltZXN0YW1wQnVmZmVyID0gQnVmZmVyLmZyb20oW1xuICAvLyBUZXh0UG9pbnRlciBsZW5ndGhcbiAgMHgxMCxcblxuICAvLyBUZXh0UG9pbnRlclxuICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLFxuXG4gIC8vIFRpbWVzdGFtcFxuICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwXG5dKTtcbmNvbnN0IHRleHRQb2ludGVyTnVsbEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFsweDAwXSk7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZUxpa2U8VD4odmFsdWU6IFQgfCBQcm9taXNlTGlrZTxUPik6IHZhbHVlIGlzIFByb21pc2VMaWtlPFQ+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mICh2YWx1ZSBhcyBQcm9taXNlTGlrZTxUPikudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaWdub3JlRXJyb3IoKSB7fVxuXG4vKipcbiAqIFRoZSBURFMgYnl0ZSBzdHJlYW0gb2YgYSBidWxrIGxvYWQ6IENPTE1FVEFEQVRBLCBhIFJPVyB0b2tlbiBwZXIgcm93LFxuICogYW5kIGEgRE9ORSB0b2tlbiBhdCB0aGUgZW5kLCBzZXJpYWxpemVkIGZyb20gdGhlIGJ1bGsgbG9hZCdzIHJvdyBzb3VyY2UuXG4gKlxuICogVGhlIHBheWxvYWQgb3ducyB0aGUgcm93IHNvdXJjZSdzIGl0ZXJhdG9yIHRoZSB3YXkgYSBgZm9yIGF3YWl0YCBsb29wXG4gKiB3b3VsZDogaXQgcmVxdWVzdHMgdGhlIGZpcnN0IHJvdyBhcyBzb29uIGFzIGl0IGlzIGNyZWF0ZWQsIHNvIHRoYXQgYVxuICogc3RyZWFtIHNvdXJjZSBpcyBvYnNlcnZlZCBmcm9tIHRoZSBtb21lbnQgaXQgaXMgaGFuZGVkIG92ZXIsIGFuZCBpdFxuICogY2xvc2VzIHRoZSBzb3VyY2UgdGhyb3VnaCB0aGUgaXRlcmF0b3IncyBgcmV0dXJuKClgIHdoZW5ldmVyIHRoZSBidWxrXG4gKiBsb2FkIGRvZXMgbm90IHJ1biB0byBjb21wbGV0aW9uLCB3aGV0aGVyIHRoZSByb3dzIHdlcmUgYmVpbmcgcmVhZFxuICogKFtbU3ltYm9sLmFzeW5jSXRlcmF0b3JdXSkgb3IgbmV2ZXIgZ290IHRvIGJlIChbW2Nsb3NlXV0pLlxuICpcbiAqIFJvd3MgYXJlIHdyaXR0ZW4gaW50byBvbmUgYnVmZmVyIHRoYXQgbGl2ZXMgZm9yIHRoZSB3aG9sZSBidWxrIGxvYWQuXG4gKiBJdHMgY29udGVudHMgYXJlIHlpZWxkZWQgb25jZSBpdCBob2xkcyBhIGNodW5rJ3Mgd29ydGhcbiAqIChgV3JpdGFibGVUcmFja2luZ0J1ZmZlci5DSFVOS19TSVpFYCksIGNoZWNrZWQgYWZ0ZXIgZXZlcnkgY2VsbCwgYW5kIGF0XG4gKiB0aGUgZW5kLiBSb3dzIGZyb20gYSBzeW5jaHJvbm91cyBzb3VyY2UgYXJlIHNlcmlhbGl6ZWQgd2l0aG91dCBhblxuICogZXZlbnQtbG9vcCB0dXJuIGluIGJldHdlZW47IHJvd3MgZnJvbSBhbiBhc3luY2hyb25vdXMgc291cmNlIGFyZSBhd2FpdGVkXG4gKiBvbmUgYXQgYSB0aW1lLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBjbGFzcyBCdWxrTG9hZFBheWxvYWQgaW1wbGVtZW50cyBBc3luY0l0ZXJhYmxlPEJ1ZmZlcj4ge1xuICBkZWNsYXJlIGJ1bGtMb2FkOiBCdWxrTG9hZDtcbiAgZGVjbGFyZSBpdGVyYXRvcjogSXRlcmF0b3I8Um93PiB8IEFzeW5jSXRlcmF0b3I8Um93PjtcbiAgZGVjbGFyZSBwZW5kaW5nOiBJdGVyYXRvclJlc3VsdDxSb3c+IHwgUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxSb3c+PiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihidWxrTG9hZDogQnVsa0xvYWQsIHJvd3M6IEl0ZXJhYmxlPFJvdz4gfCBBc3luY0l0ZXJhYmxlPFJvdz4pIHtcbiAgICB0aGlzLmJ1bGtMb2FkID0gYnVsa0xvYWQ7XG5cbiAgICB0aGlzLml0ZXJhdG9yID0gdHlwZW9mIChyb3dzIGFzIFBhcnRpYWw8QXN5bmNJdGVyYWJsZTxSb3c+PilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nID9cbiAgICAgIChyb3dzIGFzIEFzeW5jSXRlcmFibGU8Um93PilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCkgOlxuICAgICAgKHJvd3MgYXMgSXRlcmFibGU8Um93PilbU3ltYm9sLml0ZXJhdG9yXSgpO1xuXG4gICAgLy8gVGhlIGZpcnN0IHJvdyBpcyByZXF1ZXN0ZWQgbm93LCBiZWZvcmUgdGhlIGBJTlNFUlQgQlVMS2Agc3RhdGVtZW50XG4gICAgLy8gaGFzIGdvbmUgb3V0LiBGb3IgYSBzdHJlYW0gc291cmNlIHRoaXMgaXMgd2hhdCBhdHRhY2hlcyBpdHNcbiAgICAvLyBpdGVyYXRvcidzIGxpc3RlbmVyczogYW4gZXJyb3IgaXQgZW1pdHMgd2hpbGUgdGhlIHN0YXRlbWVudCBpcyBpblxuICAgIC8vIGZsaWdodCBpcyBrZXB0IGFuZCByZXBvcnRlZCBvbiB0aGUgbmV4dCByZWFkLCBpbnN0ZWFkIG9mIGJlaW5nIGFuXG4gICAgLy8gdW5oYW5kbGVkIGAnZXJyb3InYCBldmVudC4gVGhlIHJlYWQgaXMgYXdhaXRlZCB3aGVuIHRoZSByb3dzIGFyZVxuICAgIC8vIHNlcmlhbGl6ZWQ7IGl0cyByZWplY3Rpb24gaXMgbm90IHVuaGFuZGxlZCB1bnRpbCB0aGVuLCBhbmQgbmVpdGhlclxuICAgIC8vIGlzIGEgc3luY2hyb25vdXMgc291cmNlJ3MgdGhyb3csIHdoaWNoIHJlYWNoZXMgdGhlIGJ1bGsgbG9hZCdzXG4gICAgLy8gY2FsbGJhY2sgdGhlIHNhbWUgd2F5LlxuICAgIGxldCBmaXJzdDogSXRlcmF0b3JSZXN1bHQ8Um93PiB8IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8Um93Pj47XG4gICAgdHJ5IHtcbiAgICAgIGZpcnN0ID0gdGhpcy5pdGVyYXRvci5uZXh0KCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBmaXJzdCA9IFByb21pc2UucmVqZWN0KGVycik7XG4gICAgfVxuXG4gICAgaWYgKGlzUHJvbWlzZUxpa2UoZmlyc3QpKSB7XG4gICAgICBjb25zdCByZWFkID0gUHJvbWlzZS5yZXNvbHZlKGZpcnN0KTtcbiAgICAgIHJlYWQudGhlbih1bmRlZmluZWQsIGlnbm9yZUVycm9yKTtcbiAgICAgIHRoaXMucGVuZGluZyA9IHJlYWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGVuZGluZyA9IGZpcnN0O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIHJvdyBzb3VyY2Ugb2YgYSBidWxrIGxvYWQgd2hvc2Ugcm93cyB3aWxsIG5vdCBiZSByZWFkOlxuICAgKiB0aGUgYElOU0VSVCBCVUxLYCBzdGF0ZW1lbnQgd2FzIHJlamVjdGVkLCB0aGUgYnVsayBsb2FkIHdhcyBjYW5jZWxlZCxcbiAgICogb3IgdGhlIGNvbm5lY3Rpb24gaXMgbm8gbG9uZ2VyIGxvZ2dlZCBpbi4gQmVzdCBlZmZvcnQ6IGEgcmVhZCBzdGlsbFxuICAgKiBwZW5kaW5nIGluIHRoZSBzb3VyY2UgY2Fubm90IGJlIGludGVycnVwdGVkLCBhbmQgYSBjbG9zZSB0aGF0IGZhaWxzXG4gICAqIGhhcyBub3RoaW5nIGxlZnQgdG8gcmVwb3J0IHRvLlxuICAgKi9cbiAgY2xvc2UoKSB7XG4gICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yO1xuICAgIGlmICh0eXBlb2YgaXRlcmF0b3IucmV0dXJuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNsb3NpbmcgPSBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgIGlmIChpc1Byb21pc2VMaWtlKGNsb3NpbmcpKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZShjbG9zaW5nKS50aGVuKHVuZGVmaW5lZCwgaWdub3JlRXJyb3IpO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gTm90aGluZyBsZWZ0IHRvIHJlcG9ydCB0by5cbiAgICB9XG4gIH1cblxuICBhc3luYyAqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpIHtcbiAgICBjb25zdCBidWxrTG9hZCA9IHRoaXMuYnVsa0xvYWQ7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGJ1bGtMb2FkLm9wdGlvbnM7XG4gICAgY29uc3QgY29sdW1ucyA9IGJ1bGtMb2FkLmNvbHVtbnM7XG4gICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yO1xuXG4gICAgLy8gUGVyIGNvbHVtbiwgbm90IHBlciBjZWxsOiBhIHRleHQgdHlwZSdzIHZhbHVlIGlzIHdyaXR0ZW4gYmVoaW5kIGFcbiAgICAvLyB0ZXh0IHBvaW50ZXIgYW5kIHRpbWVzdGFtcCwgb3IgYXMgYSBudWxsIHBvaW50ZXIuXG4gICAgY29uc3QgaXNUZXh0VHlwZSA9IGNvbHVtbnMubWFwKChjKSA9PiBjLnR5cGUubmFtZSA9PT0gJ1RleHQnIHx8IGMudHlwZS5uYW1lID09PSAnSW1hZ2UnIHx8IGMudHlwZS5uYW1lID09PSAnTlRleHQnKTtcblxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKCk7XG5cbiAgICBsZXQgZG9uZSA9IGZhbHNlO1xuICAgIGxldCBjbG9zZWQgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgYnVmZmVyLndyaXRlQnVmZmVyKGJ1bGtMb2FkLmdldENvbE1ldGFEYXRhKCkpO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5wZW5kaW5nID8/IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoaXNQcm9taXNlTGlrZShyZXN1bHQpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gYXdhaXQgcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBIHJvdyBnaXZlbiBhcyBhIHByb21pc2UgaXMgc2V0dGxlZCBmaXJzdCwgYXMgYFJlYWRhYmxlLmZyb21gXG4gICAgICAgIC8vIHNldHRsZWQgaXQgYmVmb3JlIGhhbmRpbmcgaXQgb24uXG4gICAgICAgIGxldCByb3cgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmIChpc1Byb21pc2VMaWtlKHJvdykpIHtcbiAgICAgICAgICByb3cgPSBhd2FpdCByb3c7XG4gICAgICAgIH1cblxuICAgICAgICBidWZmZXIud3JpdGVCdWZmZXIocm93VG9rZW5CdWZmZXIpO1xuXG4gICAgICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KHJvdyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGMgPSBjb2x1bW5zW2ldO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gYy50eXBlLnZhbGlkYXRlKGlzQXJyYXkgPyAocm93IGFzIHVua25vd25bXSlbaV0gOiAocm93IGFzIHsgW2NvbE5hbWU6IHN0cmluZ106IHVua25vd24gfSlbYy5vYmpOYW1lXSwgYy5jb2xsYXRpb24pO1xuXG4gICAgICAgICAgY29uc3QgcGFyYW1ldGVyID0ge1xuICAgICAgICAgICAgbGVuZ3RoOiBjLmxlbmd0aCxcbiAgICAgICAgICAgIHNjYWxlOiBjLnNjYWxlLFxuICAgICAgICAgICAgcHJlY2lzaW9uOiBjLnByZWNpc2lvbixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAoaXNUZXh0VHlwZVtpXSAmJiB2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICBidWZmZXIud3JpdGVCdWZmZXIodGV4dFBvaW50ZXJOdWxsQnVmZmVyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzVGV4dFR5cGVbaV0pIHtcbiAgICAgICAgICAgICAgYnVmZmVyLndyaXRlQnVmZmVyKHRleHRQb2ludGVyQW5kVGltZXN0YW1wQnVmZmVyKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgYy50eXBlLndyaXRlVmFsdWUoYnVmZmVyLCBwYXJhbWV0ZXIsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IElucHV0RXJyb3IoYENvbHVtbiAnJHtjLm5hbWV9JyBjb3VsZCBub3QgYmUgc2VyaWFsaXplZGAsIHsgY2F1c2U6IGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIENoZWNrZWQgYWZ0ZXIgZXZlcnkgY2VsbCwgbm90IG9ubHkgYWZ0ZXIgZXZlcnkgcm93LCBzbyB0aGF0IGFcbiAgICAgICAgICAvLyB3aWRlIHJvdyBvZiBsYXJnZSBjZWxscyBnb2VzIGRvd25zdHJlYW0gYXMgaXQgaXMgc2VyaWFsaXplZC5cbiAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA+PSBXcml0YWJsZVRyYWNraW5nQnVmZmVyLkNIVU5LX1NJWkUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYnVmZmVyLmdldEJ1ZmZlcnMoKSkge1xuICAgICAgICAgICAgICB5aWVsZCBjaHVuaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZmZlci5jb25zdW1lKGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gQSBmYWlsZWQgcm93IGNsb3NlcyB0aGUgc291cmNlIGFzIGEgYGZvciBhd2FpdGAgd291bGQuIEEgY2xvc2VcbiAgICAgIC8vIHRoYXQgZmFpbHMgbXVzdCBub3QgcmVwbGFjZSB0aGUgcm93IGVycm9yIHRoZSBidWxrIGxvYWQgaXNcbiAgICAgIC8vIGZhaWxpbmcgd2l0aC5cbiAgICAgIGNsb3NlZCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yLnJldHVybiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBUaGUgcm93IGVycm9yIGlzIHdoYXQgc3VyZmFjZXMuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gVGhlIGNvbnN1bWVyIHN0b3BwZWQgcHVsbGluZyAoZS5nLiBiZWNhdXNlIHRoZSBidWxrIGxvYWQgd2FzXG4gICAgICAvLyBjYW5jZWxlZCk6IGNsb3NlIHRoZSBzb3VyY2UgYXMgYSBgZm9yIGF3YWl0YCB3b3VsZC5cbiAgICAgIGlmICghZG9uZSAmJiAhY2xvc2VkICYmIHR5cGVvZiBpdGVyYXRvci5yZXR1cm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYnVmZmVyLndyaXRlQnVmZmVyKGJ1bGtMb2FkLmNyZWF0ZURvbmVUb2tlbigpKTtcbiAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ1ZmZlci5nZXRCdWZmZXJzKCkpIHtcbiAgICAgIHlpZWxkIGNodW5rO1xuICAgIH1cbiAgICBidWZmZXIuY29uc3VtZShidWZmZXIubGVuZ3RoKTtcbiAgfVxuXG4gIHRvU3RyaW5nKGluZGVudCA9ICcnKSB7XG4gICAgcmV0dXJuIGluZGVudCArICgnQnVsa0xvYWQnKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxJQUFBQSx1QkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBQXNDLFNBQUFELHVCQUFBSSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBSXRDLE1BQU1HLGNBQWMsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBRUMsV0FBVSxDQUFDQyxHQUFHLENBQUUsQ0FBQztBQUN0RCxNQUFNQyw2QkFBNkIsR0FBR0osTUFBTSxDQUFDQyxJQUFJLENBQUM7QUFDaEQ7QUFDQSxJQUFJO0FBRUo7QUFDQSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0FBRTlGO0FBQ0EsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FDL0MsQ0FBQztBQUNG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
@@ -1 +1 @@
1
- {"version":3,"file":"bulk-load-payload.js","names":["BulkLoadPayload","constructor","bulkLoad","iterator","rowToPacketTransform","Symbol","asyncIterator","toString","indent","exports"],"sources":["../src/bulk-load-payload.ts"],"sourcesContent":["import BulkLoad from './bulk-load';\n\nexport class BulkLoadPayload implements AsyncIterable<Buffer> {\n declare bulkLoad: BulkLoad;\n declare iterator: AsyncIterableIterator<Buffer>;\n\n constructor(bulkLoad: BulkLoad) {\n this.bulkLoad = bulkLoad;\n\n // We need to grab the iterator here so that `error` event handlers are set up\n // as early as possible (and are not potentially lost).\n this.iterator = this.bulkLoad.rowToPacketTransform[Symbol.asyncIterator]();\n }\n\n [Symbol.asyncIterator]() {\n return this.iterator;\n }\n\n toString(indent = '') {\n return indent + ('BulkLoad');\n }\n}\n"],"mappings":";;;;;;AAEO,MAAMA,eAAe,CAAkC;EAI5DC,WAAWA,CAACC,QAAkB,EAAE;IAC9B,IAAI,CAACA,QAAQ,GAAGA,QAAQ;;IAExB;IACA;IACA,IAAI,CAACC,QAAQ,GAAG,IAAI,CAACD,QAAQ,CAACE,oBAAoB,CAACC,MAAM,CAACC,aAAa,CAAC,CAAC,CAAC;EAC5E;EAEA,CAACD,MAAM,CAACC,aAAa,IAAI;IACvB,OAAO,IAAI,CAACH,QAAQ;EACtB;EAEAI,QAAQA,CAACC,MAAM,GAAG,EAAE,EAAE;IACpB,OAAOA,MAAM,GAAI,UAAW;EAC9B;AACF;AAACC,OAAA,CAAAT,eAAA,GAAAA,eAAA","ignoreList":[]}
1
+ {"version":3,"file":"bulk-load-payload.js","names":["_writableTrackingBuffer","_interopRequireDefault","require","_token","_errors","e","__esModule","default","rowTokenBuffer","Buffer","from","TOKEN_TYPE","ROW","textPointerAndTimestampBuffer","textPointerNullBuffer","isPromiseLike","value","then","ignoreError","BulkLoadPayload","constructor","bulkLoad","rows","iterator","Symbol","asyncIterator","first","next","err","Promise","reject","read","resolve","undefined","pending","close","return","closing","options","columns","isTextType","map","c","type","name","buffer","WritableTrackingBuffer","done","closed","writeBuffer","getColMetaData","result","row","isArray","Array","i","length","validate","objName","collation","parameter","scale","precision","writeValue","error","InputError","cause","CHUNK_SIZE","chunk","getBuffers","consume","createDoneToken","toString","indent","exports"],"sources":["../src/bulk-load-payload.ts"],"sourcesContent":["import BulkLoad from './bulk-load';\nimport WritableTrackingBuffer from './tracking-buffer/writable-tracking-buffer';\nimport { TYPE as TOKEN_TYPE } from './token/token';\nimport { InputError } from './errors';\n\nexport type Row = unknown[] | { [colName: string]: unknown };\n\nconst rowTokenBuffer = Buffer.from([ TOKEN_TYPE.ROW ]);\nconst textPointerAndTimestampBuffer = Buffer.from([\n // TextPointer length\n 0x10,\n\n // TextPointer\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n\n // Timestamp\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\n]);\nconst textPointerNullBuffer = Buffer.from([0x00]);\n\nfunction isPromiseLike<T>(value: T | PromiseLike<T>): value is PromiseLike<T> {\n return value != null && typeof (value as PromiseLike<T>).then === 'function';\n}\n\nfunction ignoreError() {}\n\n/**\n * The TDS byte stream of a bulk load: COLMETADATA, a ROW token per row,\n * and a DONE token at the end, serialized from the bulk load's row source.\n *\n * The payload owns the row source's iterator the way a `for await` loop\n * would: it requests the first row as soon as it is created, so that a\n * stream source is observed from the moment it is handed over, and it\n * closes the source through the iterator's `return()` whenever the bulk\n * load does not run to completion, whether the rows were being read\n * ([[Symbol.asyncIterator]]) or never got to be ([[close]]).\n *\n * Rows are written into one buffer that lives for the whole bulk load.\n * Its contents are yielded once it holds a chunk's worth\n * (`WritableTrackingBuffer.CHUNK_SIZE`), checked after every cell, and at\n * the end. Rows from a synchronous source are serialized without an\n * event-loop turn in between; rows from an asynchronous source are awaited\n * one at a time.\n *\n * @private\n */\nexport class BulkLoadPayload implements AsyncIterable<Buffer> {\n declare bulkLoad: BulkLoad;\n declare iterator: Iterator<Row> | AsyncIterator<Row>;\n declare pending: IteratorResult<Row> | Promise<IteratorResult<Row>> | undefined;\n\n constructor(bulkLoad: BulkLoad, rows: Iterable<Row> | AsyncIterable<Row>) {\n this.bulkLoad = bulkLoad;\n\n this.iterator = typeof (rows as Partial<AsyncIterable<Row>>)[Symbol.asyncIterator] === 'function' ?\n (rows as AsyncIterable<Row>)[Symbol.asyncIterator]() :\n (rows as Iterable<Row>)[Symbol.iterator]();\n\n // The first row is requested now, before the `INSERT BULK` statement\n // has gone out. For a stream source this is what attaches its\n // iterator's listeners: an error it emits while the statement is in\n // flight is kept and reported on the next read, instead of being an\n // unhandled `'error'` event. The read is awaited when the rows are\n // serialized; its rejection is not unhandled until then, and neither\n // is a synchronous source's throw, which reaches the bulk load's\n // callback the same way.\n let first: IteratorResult<Row> | Promise<IteratorResult<Row>>;\n try {\n first = this.iterator.next();\n } catch (err) {\n first = Promise.reject(err);\n }\n\n if (isPromiseLike(first)) {\n const read = Promise.resolve(first);\n read.then(undefined, ignoreError);\n this.pending = read;\n } else {\n this.pending = first;\n }\n }\n\n /**\n * Closes the row source of a bulk load whose rows will not be read:\n * the `INSERT BULK` statement was rejected, the bulk load was canceled,\n * or the connection is no longer logged in. Best effort: a read still\n * pending in the source cannot be interrupted, and a close that fails\n * has nothing left to report to.\n */\n close() {\n const iterator = this.iterator;\n if (typeof iterator.return !== 'function') {\n return;\n }\n\n try {\n const closing = iterator.return();\n if (isPromiseLike(closing)) {\n Promise.resolve(closing).then(undefined, ignoreError);\n }\n } catch {\n // Nothing left to report to.\n }\n }\n\n async *[Symbol.asyncIterator]() {\n const bulkLoad = this.bulkLoad;\n const options = bulkLoad.options;\n const columns = bulkLoad.columns;\n const iterator = this.iterator;\n\n // Per column, not per cell: a text type's value is written behind a\n // text pointer and timestamp, or as a null pointer.\n const isTextType = columns.map((c) => c.type.name === 'Text' || c.type.name === 'Image' || c.type.name === 'NText');\n\n const buffer = new WritableTrackingBuffer();\n\n let done = false;\n let closed = false;\n try {\n buffer.writeBuffer(bulkLoad.getColMetaData());\n\n while (true) {\n let result = this.pending ?? iterator.next();\n this.pending = undefined;\n if (isPromiseLike(result)) {\n result = await result;\n }\n\n if (result.done) {\n done = true;\n break;\n }\n\n // A row given as a promise is settled first, as `Readable.from`\n // settled it before handing it on.\n let row = result.value;\n if (isPromiseLike(row)) {\n row = await row;\n }\n\n buffer.writeBuffer(rowTokenBuffer);\n\n const isArray = Array.isArray(row);\n for (let i = 0; i < columns.length; i++) {\n const c = columns[i];\n const value = c.type.validate(isArray ? (row as unknown[])[i] : (row as { [colName: string]: unknown })[c.objName], c.collation);\n\n const parameter = {\n length: c.length,\n scale: c.scale,\n precision: c.precision,\n value: value\n };\n\n if (isTextType[i] && value == null) {\n buffer.writeBuffer(textPointerNullBuffer);\n } else {\n if (isTextType[i]) {\n buffer.writeBuffer(textPointerAndTimestampBuffer);\n }\n\n try {\n c.type.writeValue(buffer, parameter, options);\n } catch (error) {\n throw new InputError(`Column '${c.name}' could not be serialized`, { cause: error });\n }\n }\n\n // Checked after every cell, not only after every row, so that a\n // wide row of large cells goes downstream as it is serialized.\n if (buffer.length >= WritableTrackingBuffer.CHUNK_SIZE) {\n for (const chunk of buffer.getBuffers()) {\n yield chunk;\n }\n buffer.consume(buffer.length);\n }\n }\n }\n } catch (err) {\n // A failed row closes the source as a `for await` would. A close\n // that fails must not replace the row error the bulk load is\n // failing with.\n closed = true;\n if (typeof iterator.return === 'function') {\n try {\n await iterator.return();\n } catch {\n // The row error is what surfaces.\n }\n }\n throw err;\n } finally {\n // The consumer stopped pulling (e.g. because the bulk load was\n // canceled): close the source as a `for await` would.\n if (!done && !closed && typeof iterator.return === 'function') {\n await iterator.return();\n }\n }\n\n buffer.writeBuffer(bulkLoad.createDoneToken());\n for (const chunk of buffer.getBuffers()) {\n yield chunk;\n }\n buffer.consume(buffer.length);\n }\n\n toString(indent = '') {\n return indent + ('BulkLoad');\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,6 +1,5 @@
1
1
  import { EventEmitter } from 'events';
2
2
  import Connection, { type InternalConnectionOptions } from './connection';
3
- import { Transform } from 'stream';
4
3
  import { type DataType, type Parameter } from './data-type';
5
4
  import { Collation } from './collation';
6
5
  /**
@@ -73,38 +72,6 @@ interface ColumnOptions {
73
72
  */
74
73
  nullable?: boolean;
75
74
  }
76
- declare class RowTransform extends Transform {
77
- /**
78
- * @private
79
- */
80
- columnMetadataWritten: boolean;
81
- /**
82
- * @private
83
- */
84
- bulkLoad: BulkLoad;
85
- /**
86
- * @private
87
- */
88
- mainOptions: BulkLoad['options'];
89
- /**
90
- * @private
91
- */
92
- columns: BulkLoad['columns'];
93
- /**
94
- * @private
95
- */
96
- constructor(bulkLoad: BulkLoad);
97
- /**
98
- * @private
99
- */
100
- _transform(row: Array<unknown> | {
101
- [colName: string]: unknown;
102
- }, _encoding: string, callback: (error?: Error) => void): void;
103
- /**
104
- * @private
105
- */
106
- _flush(callback: () => void): void;
107
- }
108
75
  /**
109
76
  * A BulkLoad instance is used to perform a bulk insert.
110
77
  *
@@ -148,7 +115,6 @@ declare class BulkLoad extends EventEmitter {
148
115
  /**
149
116
  * @private
150
117
  */
151
- streamingMode: boolean;
152
118
  /**
153
119
  * @private
154
120
  */
@@ -175,14 +141,6 @@ declare class BulkLoad extends EventEmitter {
175
141
  columnsByName: {
176
142
  [name: string]: Column;
177
143
  };
178
- /**
179
- * @private
180
- */
181
- firstRowWritten: boolean;
182
- /**
183
- * @private
184
- */
185
- rowToPacketTransform: RowTransform;
186
144
  /**
187
145
  * @private
188
146
  */