plugin-data-source-mssql 1.9.48 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +86 -72
- package/dist/node_modules/tedious/245.index.js +741 -0
- package/dist/node_modules/tedious/LICENSE +21 -0
- package/dist/node_modules/tedious/appveyor.yml +67 -0
- package/dist/node_modules/tedious/benchmarks/bulk-load/iterable.js +61 -0
- package/dist/node_modules/tedious/benchmarks/common.js +287 -0
- package/dist/node_modules/tedious/benchmarks/connection/open.js +26 -0
- package/dist/node_modules/tedious/benchmarks/package-lock.json +21173 -0
- package/dist/node_modules/tedious/benchmarks/package.json +11 -0
- package/dist/node_modules/tedious/benchmarks/query/call-tvp.js +105 -0
- package/dist/node_modules/tedious/benchmarks/query/insert-varbinary.js +46 -0
- package/dist/node_modules/tedious/benchmarks/query/select-many-rows.js +63 -0
- package/dist/node_modules/tedious/benchmarks/query/select-nvarchar.js +50 -0
- package/dist/node_modules/tedious/benchmarks/query/select-varbinary.js +50 -0
- package/dist/node_modules/tedious/benchmarks/request/rpcrequest-payload-tvp.js +45 -0
- package/dist/node_modules/tedious/benchmarks/request/rpcrequest-payload-varbinary.js +37 -0
- package/dist/node_modules/tedious/benchmarks/token-parser/colmetadata-token.js +27 -0
- package/dist/node_modules/tedious/benchmarks/token-parser/done-token.js +28 -0
- package/dist/node_modules/tedious/benchmarks/token-parser/simple-tokens.js +363 -0
- package/dist/node_modules/tedious/lib/all-headers.d.ts +2 -0
- package/dist/node_modules/tedious/lib/all-headers.js +24 -0
- package/dist/node_modules/tedious/lib/always-encrypted/aead-aes-256-cbc-hmac-algorithm.js +82 -0
- package/dist/node_modules/tedious/lib/always-encrypted/aead-aes-256-cbc-hmac-encryption-key.js +55 -0
- package/dist/node_modules/tedious/lib/always-encrypted/cek-entry.d.ts +11 -0
- package/dist/node_modules/tedious/lib/always-encrypted/cek-entry.js +42 -0
- package/dist/node_modules/tedious/lib/always-encrypted/get-parameter-encryption-metadata.js +90 -0
- package/dist/node_modules/tedious/lib/always-encrypted/key-crypto.js +94 -0
- package/dist/node_modules/tedious/lib/always-encrypted/keystore-provider-azure-key-vault.d.ts +21 -0
- package/dist/node_modules/tedious/lib/always-encrypted/keystore-provider-azure-key-vault.js +247 -0
- package/dist/node_modules/tedious/lib/always-encrypted/symmetric-key-cache.js +36 -0
- package/dist/node_modules/tedious/lib/always-encrypted/symmetric-key.js +25 -0
- package/dist/node_modules/tedious/lib/always-encrypted/types.d.ts +73 -0
- package/dist/node_modules/tedious/lib/always-encrypted/types.js +48 -0
- package/dist/node_modules/tedious/lib/always-encrypted/utils.js +23 -0
- package/dist/node_modules/tedious/lib/bulk-load-payload.d.ts +8 -0
- package/dist/node_modules/tedious/lib/bulk-load-payload.js +23 -0
- package/dist/node_modules/tedious/lib/bulk-load.d.ts +275 -0
- package/dist/node_modules/tedious/lib/bulk-load.js +516 -0
- package/dist/node_modules/tedious/lib/collation.d.ts +28 -0
- package/dist/node_modules/tedious/lib/collation.js +348 -0
- package/dist/node_modules/tedious/lib/connection.d.ts +1310 -0
- package/dist/node_modules/tedious/lib/connection.js +2730 -0
- package/dist/node_modules/tedious/lib/connector.d.ts +18 -0
- package/dist/node_modules/tedious/lib/connector.js +150 -0
- package/dist/node_modules/tedious/lib/data-type.d.ts +455 -0
- package/dist/node_modules/tedious/lib/data-type.js +428 -0
- package/dist/node_modules/tedious/lib/data-types/bigint.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/bigint.js +53 -0
- package/dist/node_modules/tedious/lib/data-types/binary.d.ts +5 -0
- package/dist/node_modules/tedious/lib/data-types/binary.js +67 -0
- package/dist/node_modules/tedious/lib/data-types/bit.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/bit.js +46 -0
- package/dist/node_modules/tedious/lib/data-types/bitn.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/bitn.js +29 -0
- package/dist/node_modules/tedious/lib/data-types/char.d.ts +5 -0
- package/dist/node_modules/tedious/lib/data-types/char.js +86 -0
- package/dist/node_modules/tedious/lib/data-types/date.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/date.js +72 -0
- package/dist/node_modules/tedious/lib/data-types/datetime.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/datetime.js +93 -0
- package/dist/node_modules/tedious/lib/data-types/datetime2.d.ts +5 -0
- package/dist/node_modules/tedious/lib/data-types/datetime2.js +118 -0
- package/dist/node_modules/tedious/lib/data-types/datetimen.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/datetimen.js +29 -0
- package/dist/node_modules/tedious/lib/data-types/datetimeoffset.d.ts +5 -0
- package/dist/node_modules/tedious/lib/data-types/datetimeoffset.js +111 -0
- package/dist/node_modules/tedious/lib/data-types/decimal.d.ts +6 -0
- package/dist/node_modules/tedious/lib/data-types/decimal.js +107 -0
- package/dist/node_modules/tedious/lib/data-types/decimaln.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/decimaln.js +29 -0
- package/dist/node_modules/tedious/lib/data-types/float.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/float.js +47 -0
- package/dist/node_modules/tedious/lib/data-types/floatn.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/floatn.js +29 -0
- package/dist/node_modules/tedious/lib/data-types/image.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/image.js +56 -0
- package/dist/node_modules/tedious/lib/data-types/int.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/int.js +53 -0
- package/dist/node_modules/tedious/lib/data-types/intn.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/intn.js +29 -0
- package/dist/node_modules/tedious/lib/data-types/money.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/money.js +59 -0
- package/dist/node_modules/tedious/lib/data-types/moneyn.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/moneyn.js +29 -0
- package/dist/node_modules/tedious/lib/data-types/nchar.d.ts +5 -0
- package/dist/node_modules/tedious/lib/data-types/nchar.js +100 -0
- package/dist/node_modules/tedious/lib/data-types/ntext.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/ntext.js +60 -0
- package/dist/node_modules/tedious/lib/data-types/null.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/null.js +29 -0
- package/dist/node_modules/tedious/lib/data-types/numeric.d.ts +6 -0
- package/dist/node_modules/tedious/lib/data-types/numeric.js +106 -0
- package/dist/node_modules/tedious/lib/data-types/numericn.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/numericn.js +29 -0
- package/dist/node_modules/tedious/lib/data-types/nvarchar.d.ts +5 -0
- package/dist/node_modules/tedious/lib/data-types/nvarchar.js +133 -0
- package/dist/node_modules/tedious/lib/data-types/real.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/real.js +48 -0
- package/dist/node_modules/tedious/lib/data-types/smalldatetime.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/smalldatetime.js +83 -0
- package/dist/node_modules/tedious/lib/data-types/smallint.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/smallint.js +53 -0
- package/dist/node_modules/tedious/lib/data-types/smallmoney.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/smallmoney.js +51 -0
- package/dist/node_modules/tedious/lib/data-types/sql-variant.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/sql-variant.js +29 -0
- package/dist/node_modules/tedious/lib/data-types/text.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/text.js +69 -0
- package/dist/node_modules/tedious/lib/data-types/time.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/time.js +96 -0
- package/dist/node_modules/tedious/lib/data-types/tinyint.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/tinyint.js +53 -0
- package/dist/node_modules/tedious/lib/data-types/tvp.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/tvp.js +117 -0
- package/dist/node_modules/tedious/lib/data-types/udt.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/udt.js +29 -0
- package/dist/node_modules/tedious/lib/data-types/uniqueidentifier.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/uniqueidentifier.js +50 -0
- package/dist/node_modules/tedious/lib/data-types/varbinary.d.ts +5 -0
- package/dist/node_modules/tedious/lib/data-types/varbinary.js +119 -0
- package/dist/node_modules/tedious/lib/data-types/varchar.d.ts +5 -0
- package/dist/node_modules/tedious/lib/data-types/varchar.js +112 -0
- package/dist/node_modules/tedious/lib/data-types/xml.d.ts +3 -0
- package/dist/node_modules/tedious/lib/data-types/xml.js +29 -0
- package/dist/node_modules/tedious/lib/debug.d.ts +25 -0
- package/dist/node_modules/tedious/lib/debug.js +67 -0
- package/dist/node_modules/tedious/lib/errors/abort-error.d.ts +4 -0
- package/dist/node_modules/tedious/lib/errors/abort-error.js +15 -0
- package/dist/node_modules/tedious/lib/errors/timeout-error.d.ts +4 -0
- package/dist/node_modules/tedious/lib/errors/timeout-error.js +15 -0
- package/dist/node_modules/tedious/lib/errors.d.ts +17 -0
- package/dist/node_modules/tedious/lib/errors.js +23 -0
- package/dist/node_modules/tedious/lib/guid-parser.d.ts +3 -0
- package/dist/node_modules/tedious/lib/guid-parser.js +30 -0
- package/dist/node_modules/tedious/lib/incoming-message-stream.d.ts +19 -0
- package/dist/node_modules/tedious/lib/incoming-message-stream.js +97 -0
- package/dist/node_modules/tedious/lib/instance-lookup.d.ts +13 -0
- package/dist/node_modules/tedious/lib/instance-lookup.js +96 -0
- package/dist/node_modules/tedious/lib/library.d.ts +1 -0
- package/dist/node_modules/tedious/lib/library.js +8 -0
- package/dist/node_modules/tedious/lib/login7-payload.d.ts +51 -0
- package/dist/node_modules/tedious/lib/login7-payload.js +402 -0
- package/dist/node_modules/tedious/lib/message-io.d.ts +28 -0
- package/dist/node_modules/tedious/lib/message-io.js +153 -0
- package/dist/node_modules/tedious/lib/message.d.ts +11 -0
- package/dist/node_modules/tedious/lib/message.js +21 -0
- package/dist/node_modules/tedious/lib/metadata-parser.d.ts +48 -0
- package/dist/node_modules/tedious/lib/metadata-parser.js +380 -0
- package/dist/node_modules/tedious/lib/ntlm-payload.d.ts +23 -0
- package/dist/node_modules/tedious/lib/ntlm-payload.js +136 -0
- package/dist/node_modules/tedious/lib/ntlm.d.ts +4 -0
- package/dist/node_modules/tedious/lib/ntlm.js +72 -0
- package/dist/node_modules/tedious/lib/outgoing-message-stream.d.ts +15 -0
- package/dist/node_modules/tedious/lib/outgoing-message-stream.js +81 -0
- package/dist/node_modules/tedious/lib/packet.d.ts +33 -0
- package/dist/node_modules/tedious/lib/packet.js +191 -0
- package/dist/node_modules/tedious/lib/prelogin-payload.d.ts +61 -0
- package/dist/node_modules/tedious/lib/prelogin-payload.js +209 -0
- package/dist/node_modules/tedious/lib/request.d.ts +370 -0
- package/dist/node_modules/tedious/lib/request.js +387 -0
- package/dist/node_modules/tedious/lib/rpcrequest-payload.d.ts +16 -0
- package/dist/node_modules/tedious/lib/rpcrequest-payload.js +109 -0
- package/dist/node_modules/tedious/lib/sender.d.ts +5 -0
- package/dist/node_modules/tedious/lib/sender.js +83 -0
- package/dist/node_modules/tedious/lib/special-stored-procedure.d.ts +18 -0
- package/dist/node_modules/tedious/lib/special-stored-procedure.js +26 -0
- package/dist/node_modules/tedious/lib/sqlbatch-payload.d.ts +13 -0
- package/dist/node_modules/tedious/lib/sqlbatch-payload.js +34 -0
- package/dist/node_modules/tedious/lib/tds-versions.d.ts +6 -0
- package/dist/node_modules/tedious/lib/tds-versions.js +19 -0
- package/dist/node_modules/tedious/lib/tedious.d.ts +13 -0
- package/dist/node_modules/tedious/lib/tedious.js +249 -0
- package/dist/node_modules/tedious/lib/token/colmetadata-token-parser.d.ts +12 -0
- package/dist/node_modules/tedious/lib/token/colmetadata-token-parser.js +124 -0
- package/dist/node_modules/tedious/lib/token/done-token-parser.d.ts +6 -0
- package/dist/node_modules/tedious/lib/token/done-token-parser.js +76 -0
- package/dist/node_modules/tedious/lib/token/env-change-token-parser.d.ts +5 -0
- package/dist/node_modules/tedious/lib/token/env-change-token-parser.js +190 -0
- package/dist/node_modules/tedious/lib/token/feature-ext-ack-parser.d.ts +5 -0
- package/dist/node_modules/tedious/lib/token/feature-ext-ack-parser.js +52 -0
- package/dist/node_modules/tedious/lib/token/fedauth-info-parser.d.ts +5 -0
- package/dist/node_modules/tedious/lib/token/fedauth-info-parser.js +62 -0
- package/dist/node_modules/tedious/lib/token/handler.d.ts +135 -0
- package/dist/node_modules/tedious/lib/token/handler.js +444 -0
- package/dist/node_modules/tedious/lib/token/helpers.d.ts +28 -0
- package/dist/node_modules/tedious/lib/token/helpers.js +205 -0
- package/dist/node_modules/tedious/lib/token/infoerror-token-parser.d.ts +5 -0
- package/dist/node_modules/tedious/lib/token/infoerror-token-parser.js +80 -0
- package/dist/node_modules/tedious/lib/token/loginack-token-parser.d.ts +5 -0
- package/dist/node_modules/tedious/lib/token/loginack-token-parser.js +75 -0
- package/dist/node_modules/tedious/lib/token/nbcrow-token-parser.d.ts +4 -0
- package/dist/node_modules/tedious/lib/token/nbcrow-token-parser.js +104 -0
- package/dist/node_modules/tedious/lib/token/order-token-parser.d.ts +5 -0
- package/dist/node_modules/tedious/lib/token/order-token-parser.js +34 -0
- package/dist/node_modules/tedious/lib/token/returnstatus-token-parser.d.ts +5 -0
- package/dist/node_modules/tedious/lib/token/returnstatus-token-parser.js +21 -0
- package/dist/node_modules/tedious/lib/token/returnvalue-token-parser.d.ts +4 -0
- package/dist/node_modules/tedious/lib/token/returnvalue-token-parser.js +94 -0
- package/dist/node_modules/tedious/lib/token/row-token-parser.d.ts +4 -0
- package/dist/node_modules/tedious/lib/token/row-token-parser.js +77 -0
- package/dist/node_modules/tedious/lib/token/sspi-token-parser.d.ts +5 -0
- package/dist/node_modules/tedious/lib/token/sspi-token-parser.js +42 -0
- package/dist/node_modules/tedious/lib/token/stream-parser.d.ts +34 -0
- package/dist/node_modules/tedious/lib/token/stream-parser.js +341 -0
- package/dist/node_modules/tedious/lib/token/token-stream-parser.d.ts +15 -0
- package/dist/node_modules/tedious/lib/token/token-stream-parser.js +36 -0
- package/dist/node_modules/tedious/lib/token/token.d.ts +312 -0
- package/dist/node_modules/tedious/lib/token/token.js +328 -0
- package/dist/node_modules/tedious/lib/tracking-buffer/writable-tracking-buffer.d.ts +47 -0
- package/dist/node_modules/tedious/lib/tracking-buffer/writable-tracking-buffer.js +249 -0
- package/dist/node_modules/tedious/lib/transaction.d.ts +39 -0
- package/dist/node_modules/tedious/lib/transaction.js +137 -0
- package/dist/node_modules/tedious/lib/transient-error-lookup.d.ts +3 -0
- package/dist/node_modules/tedious/lib/transient-error-lookup.js +19 -0
- package/dist/node_modules/tedious/lib/utils/with-timeout.d.ts +7 -0
- package/dist/node_modules/tedious/lib/utils/with-timeout.js +36 -0
- package/dist/node_modules/tedious/lib/value-parser.d.ts +7 -0
- package/dist/node_modules/tedious/lib/value-parser.js +813 -0
- package/dist/node_modules/tedious/node_modules/@types/node/assert/strict.d.ts +105 -0
- package/dist/node_modules/tedious/node_modules/@types/node/assert.d.ts +955 -0
- package/dist/node_modules/tedious/node_modules/@types/node/async_hooks.d.ts +623 -0
- package/dist/node_modules/tedious/node_modules/@types/node/buffer.buffer.d.ts +466 -0
- package/dist/node_modules/tedious/node_modules/@types/node/buffer.d.ts +1810 -0
- package/dist/node_modules/tedious/node_modules/@types/node/child_process.d.ts +1428 -0
- package/dist/node_modules/tedious/node_modules/@types/node/cluster.d.ts +486 -0
- package/dist/node_modules/tedious/node_modules/@types/node/compatibility/iterators.d.ts +21 -0
- package/dist/node_modules/tedious/node_modules/@types/node/console.d.ts +151 -0
- package/dist/node_modules/tedious/node_modules/@types/node/constants.d.ts +20 -0
- package/dist/node_modules/tedious/node_modules/@types/node/crypto.d.ts +4065 -0
- package/dist/node_modules/tedious/node_modules/@types/node/dgram.d.ts +564 -0
- package/dist/node_modules/tedious/node_modules/@types/node/diagnostics_channel.d.ts +576 -0
- package/dist/node_modules/tedious/node_modules/@types/node/dns/promises.d.ts +503 -0
- package/dist/node_modules/tedious/node_modules/@types/node/dns.d.ts +922 -0
- package/dist/node_modules/tedious/node_modules/@types/node/domain.d.ts +166 -0
- package/dist/node_modules/tedious/node_modules/@types/node/events.d.ts +1054 -0
- package/dist/node_modules/tedious/node_modules/@types/node/fs/promises.d.ts +1329 -0
- package/dist/node_modules/tedious/node_modules/@types/node/fs.d.ts +4676 -0
- package/dist/node_modules/tedious/node_modules/@types/node/globals.d.ts +150 -0
- package/dist/node_modules/tedious/node_modules/@types/node/globals.typedarray.d.ts +101 -0
- package/dist/node_modules/tedious/node_modules/@types/node/http.d.ts +2167 -0
- package/dist/node_modules/tedious/node_modules/@types/node/http2.d.ts +2480 -0
- package/dist/node_modules/tedious/node_modules/@types/node/https.d.ts +405 -0
- package/dist/node_modules/tedious/node_modules/@types/node/index.d.ts +115 -0
- package/dist/node_modules/tedious/node_modules/@types/node/inspector/promises.d.ts +41 -0
- package/dist/node_modules/tedious/node_modules/@types/node/inspector.d.ts +224 -0
- package/dist/node_modules/tedious/node_modules/@types/node/inspector.generated.d.ts +4226 -0
- package/dist/node_modules/tedious/node_modules/@types/node/module.d.ts +819 -0
- package/dist/node_modules/tedious/node_modules/@types/node/net.d.ts +933 -0
- package/dist/node_modules/tedious/node_modules/@types/node/os.d.ts +507 -0
- package/dist/node_modules/tedious/node_modules/@types/node/package.json +155 -0
- package/dist/node_modules/tedious/node_modules/@types/node/path/posix.d.ts +8 -0
- package/dist/node_modules/tedious/node_modules/@types/node/path/win32.d.ts +8 -0
- package/dist/node_modules/tedious/node_modules/@types/node/path.d.ts +187 -0
- package/dist/node_modules/tedious/node_modules/@types/node/perf_hooks.d.ts +643 -0
- package/dist/node_modules/tedious/node_modules/@types/node/process.d.ts +2161 -0
- package/dist/node_modules/tedious/node_modules/@types/node/punycode.d.ts +117 -0
- package/dist/node_modules/tedious/node_modules/@types/node/querystring.d.ts +152 -0
- package/dist/node_modules/tedious/node_modules/@types/node/quic.d.ts +910 -0
- package/dist/node_modules/tedious/node_modules/@types/node/readline/promises.d.ts +161 -0
- package/dist/node_modules/tedious/node_modules/@types/node/readline.d.ts +541 -0
- package/dist/node_modules/tedious/node_modules/@types/node/repl.d.ts +415 -0
- package/dist/node_modules/tedious/node_modules/@types/node/sea.d.ts +162 -0
- package/dist/node_modules/tedious/node_modules/@types/node/sqlite.d.ts +955 -0
- package/dist/node_modules/tedious/node_modules/@types/node/stream/consumers.d.ts +38 -0
- package/dist/node_modules/tedious/node_modules/@types/node/stream/promises.d.ts +211 -0
- package/dist/node_modules/tedious/node_modules/@types/node/stream/web.d.ts +296 -0
- package/dist/node_modules/tedious/node_modules/@types/node/stream.d.ts +1760 -0
- package/dist/node_modules/tedious/node_modules/@types/node/string_decoder.d.ts +67 -0
- package/dist/node_modules/tedious/node_modules/@types/node/test/reporters.d.ts +96 -0
- package/dist/node_modules/tedious/node_modules/@types/node/test.d.ts +2240 -0
- package/dist/node_modules/tedious/node_modules/@types/node/timers/promises.d.ts +108 -0
- package/dist/node_modules/tedious/node_modules/@types/node/timers.d.ts +159 -0
- package/dist/node_modules/tedious/node_modules/@types/node/tls.d.ts +1198 -0
- package/dist/node_modules/tedious/node_modules/@types/node/trace_events.d.ts +197 -0
- package/dist/node_modules/tedious/node_modules/@types/node/ts5.6/buffer.buffer.d.ts +462 -0
- package/dist/node_modules/tedious/node_modules/@types/node/ts5.6/compatibility/float16array.d.ts +71 -0
- package/dist/node_modules/tedious/node_modules/@types/node/ts5.6/globals.typedarray.d.ts +36 -0
- package/dist/node_modules/tedious/node_modules/@types/node/ts5.6/index.d.ts +117 -0
- package/dist/node_modules/tedious/node_modules/@types/node/ts5.7/compatibility/float16array.d.ts +72 -0
- package/dist/node_modules/tedious/node_modules/@types/node/ts5.7/index.d.ts +117 -0
- package/dist/node_modules/tedious/node_modules/@types/node/tty.d.ts +250 -0
- package/dist/node_modules/tedious/node_modules/@types/node/url.d.ts +519 -0
- package/dist/node_modules/tedious/node_modules/@types/node/util/types.d.ts +558 -0
- package/dist/node_modules/tedious/node_modules/@types/node/util.d.ts +1662 -0
- package/dist/node_modules/tedious/node_modules/@types/node/v8.d.ts +983 -0
- package/dist/node_modules/tedious/node_modules/@types/node/vm.d.ts +1208 -0
- package/dist/node_modules/tedious/node_modules/@types/node/wasi.d.ts +202 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/abortcontroller.d.ts +59 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/blob.d.ts +23 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/console.d.ts +9 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/crypto.d.ts +39 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/domexception.d.ts +68 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/encoding.d.ts +11 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/events.d.ts +106 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/fetch.d.ts +69 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/importmeta.d.ts +13 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/messaging.d.ts +23 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/navigator.d.ts +25 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/performance.d.ts +45 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/storage.d.ts +24 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/streams.d.ts +115 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/timers.d.ts +44 -0
- package/dist/node_modules/tedious/node_modules/@types/node/web-globals/url.d.ts +24 -0
- package/dist/node_modules/tedious/node_modules/@types/node/worker_threads.d.ts +717 -0
- package/dist/node_modules/tedious/node_modules/@types/node/zlib.d.ts +618 -0
- package/dist/node_modules/tedious/node_modules/bl/.github/dependabot.yml +16 -0
- package/dist/node_modules/tedious/node_modules/bl/.github/workflows/test-and-release.yml +61 -0
- package/dist/node_modules/tedious/node_modules/bl/BufferList.d.ts +431 -0
- package/dist/node_modules/tedious/node_modules/bl/BufferList.js +421 -0
- package/dist/node_modules/tedious/node_modules/bl/bl.js +84 -0
- package/dist/node_modules/tedious/node_modules/bl/index.d.ts +88 -0
- package/dist/node_modules/tedious/node_modules/bl/package.json +123 -0
- package/dist/node_modules/tedious/node_modules/bl/test/convert.js +21 -0
- package/dist/node_modules/tedious/node_modules/bl/test/indexOf.js +492 -0
- package/dist/node_modules/tedious/node_modules/bl/test/isBufferList.js +32 -0
- package/dist/node_modules/tedious/node_modules/bl/test/test.js +1032 -0
- package/dist/node_modules/tedious/node_modules/buffer/index.d.ts +194 -0
- package/dist/node_modules/tedious/node_modules/buffer/index.js +2106 -0
- package/dist/node_modules/tedious/node_modules/buffer/package.json +93 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/_stream_duplex.js +4 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/_stream_passthrough.js +4 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/_stream_readable.js +4 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/_stream_transform.js +4 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/_stream_writable.js +4 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/add-abort-signal.js +52 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/buffer_list.js +157 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/compose.js +194 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/destroy.js +290 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/duplex.js +143 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/duplexify.js +378 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +286 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/from.js +98 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/lazy_transform.js +51 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/legacy.js +89 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/operators.js +457 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/passthrough.js +39 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/pipeline.js +471 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/readable.js +1290 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/state.js +39 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/transform.js +180 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/utils.js +327 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/streams/writable.js +819 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/internal/validators.js +530 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/ours/browser.js +35 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/ours/errors.js +343 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/ours/index.js +65 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/ours/primordials.js +124 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/ours/util/inspect.js +55 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/ours/util.js +148 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/stream/promises.js +43 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/lib/stream.js +143 -0
- package/dist/node_modules/tedious/node_modules/readable-stream/package.json +88 -0
- package/dist/node_modules/tedious/node_modules/sprintf-js/dist/.gitattributes +4 -0
- package/dist/node_modules/tedious/node_modules/sprintf-js/dist/angular-sprintf.min.js +3 -0
- package/dist/node_modules/tedious/node_modules/sprintf-js/dist/sprintf.min.js +3 -0
- package/dist/node_modules/tedious/node_modules/sprintf-js/package.json +35 -0
- package/dist/node_modules/tedious/node_modules/sprintf-js/src/angular-sprintf.js +24 -0
- package/dist/node_modules/tedious/node_modules/sprintf-js/src/sprintf.js +231 -0
- package/dist/node_modules/tedious/node_modules/undici-types/agent.d.ts +32 -0
- package/dist/node_modules/tedious/node_modules/undici-types/api.d.ts +43 -0
- package/dist/node_modules/tedious/node_modules/undici-types/balanced-pool.d.ts +29 -0
- package/dist/node_modules/tedious/node_modules/undici-types/cache-interceptor.d.ts +172 -0
- package/dist/node_modules/tedious/node_modules/undici-types/cache.d.ts +36 -0
- package/dist/node_modules/tedious/node_modules/undici-types/client-stats.d.ts +15 -0
- package/dist/node_modules/tedious/node_modules/undici-types/client.d.ts +108 -0
- package/dist/node_modules/tedious/node_modules/undici-types/connector.d.ts +34 -0
- package/dist/node_modules/tedious/node_modules/undici-types/content-type.d.ts +21 -0
- package/dist/node_modules/tedious/node_modules/undici-types/cookies.d.ts +30 -0
- package/dist/node_modules/tedious/node_modules/undici-types/diagnostics-channel.d.ts +74 -0
- package/dist/node_modules/tedious/node_modules/undici-types/dispatcher.d.ts +276 -0
- package/dist/node_modules/tedious/node_modules/undici-types/env-http-proxy-agent.d.ts +22 -0
- package/dist/node_modules/tedious/node_modules/undici-types/errors.d.ts +161 -0
- package/dist/node_modules/tedious/node_modules/undici-types/eventsource.d.ts +66 -0
- package/dist/node_modules/tedious/node_modules/undici-types/fetch.d.ts +211 -0
- package/dist/node_modules/tedious/node_modules/undici-types/formdata.d.ts +108 -0
- package/dist/node_modules/tedious/node_modules/undici-types/global-dispatcher.d.ts +9 -0
- package/dist/node_modules/tedious/node_modules/undici-types/global-origin.d.ts +7 -0
- package/dist/node_modules/tedious/node_modules/undici-types/h2c-client.d.ts +73 -0
- package/dist/node_modules/tedious/node_modules/undici-types/handlers.d.ts +15 -0
- package/dist/node_modules/tedious/node_modules/undici-types/header.d.ts +160 -0
- package/dist/node_modules/tedious/node_modules/undici-types/index.d.ts +80 -0
- package/dist/node_modules/tedious/node_modules/undici-types/interceptors.d.ts +39 -0
- package/dist/node_modules/tedious/node_modules/undici-types/mock-agent.d.ts +68 -0
- package/dist/node_modules/tedious/node_modules/undici-types/mock-call-history.d.ts +111 -0
- package/dist/node_modules/tedious/node_modules/undici-types/mock-client.d.ts +27 -0
- package/dist/node_modules/tedious/node_modules/undici-types/mock-errors.d.ts +12 -0
- package/dist/node_modules/tedious/node_modules/undici-types/mock-interceptor.d.ts +94 -0
- package/dist/node_modules/tedious/node_modules/undici-types/mock-pool.d.ts +27 -0
- package/dist/node_modules/tedious/node_modules/undici-types/package.json +55 -0
- package/dist/node_modules/tedious/node_modules/undici-types/patch.d.ts +29 -0
- package/dist/node_modules/tedious/node_modules/undici-types/pool-stats.d.ts +19 -0
- package/dist/node_modules/tedious/node_modules/undici-types/pool.d.ts +41 -0
- package/dist/node_modules/tedious/node_modules/undici-types/proxy-agent.d.ts +29 -0
- package/dist/node_modules/tedious/node_modules/undici-types/readable.d.ts +68 -0
- package/dist/node_modules/tedious/node_modules/undici-types/retry-agent.d.ts +8 -0
- package/dist/node_modules/tedious/node_modules/undici-types/retry-handler.d.ts +125 -0
- package/dist/node_modules/tedious/node_modules/undici-types/snapshot-agent.d.ts +109 -0
- package/dist/node_modules/tedious/node_modules/undici-types/util.d.ts +18 -0
- package/dist/node_modules/tedious/node_modules/undici-types/utility.d.ts +7 -0
- package/dist/node_modules/tedious/node_modules/undici-types/webidl.d.ts +341 -0
- package/dist/node_modules/tedious/node_modules/undici-types/websocket.d.ts +186 -0
- package/dist/node_modules/tedious/package.json +1 -0
- package/dist/node_modules/tedious/tsconfig.build-types.json +15 -0
- package/dist/node_modules/tedious/tsconfig.json +29 -0
- package/dist/node_modules/tedious/types/js-md4.d.ts +7 -0
- package/dist/node_modules/tedious/types/native-duplexpair.d.ts +12 -0
- package/dist/server/data-source/MssqlExternalDataSource.js +35 -4
- package/package.json +2 -2
|
@@ -0,0 +1,516 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _events = require("events");
|
|
8
|
+
var _writableTrackingBuffer = _interopRequireDefault(require("./tracking-buffer/writable-tracking-buffer"));
|
|
9
|
+
var _stream = require("stream");
|
|
10
|
+
var _token = require("./token/token");
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
/**
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
15
|
+
const FLAGS = {
|
|
16
|
+
nullable: 1 << 0,
|
|
17
|
+
caseSen: 1 << 1,
|
|
18
|
+
updateableReadWrite: 1 << 2,
|
|
19
|
+
updateableUnknown: 1 << 3,
|
|
20
|
+
identity: 1 << 4,
|
|
21
|
+
computed: 1 << 5,
|
|
22
|
+
// introduced in TDS 7.2
|
|
23
|
+
fixedLenCLRType: 1 << 8,
|
|
24
|
+
// introduced in TDS 7.2
|
|
25
|
+
sparseColumnSet: 1 << 10,
|
|
26
|
+
// introduced in TDS 7.3.B
|
|
27
|
+
hidden: 1 << 13,
|
|
28
|
+
// introduced in TDS 7.2
|
|
29
|
+
key: 1 << 14,
|
|
30
|
+
// introduced in TDS 7.2
|
|
31
|
+
nullableUnknown: 1 << 15 // introduced in TDS 7.2
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @private
|
|
36
|
+
*/
|
|
37
|
+
const DONE_STATUS = {
|
|
38
|
+
FINAL: 0x00,
|
|
39
|
+
MORE: 0x1,
|
|
40
|
+
ERROR: 0x2,
|
|
41
|
+
INXACT: 0x4,
|
|
42
|
+
COUNT: 0x10,
|
|
43
|
+
ATTN: 0x20,
|
|
44
|
+
SRVERROR: 0x100
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* @private
|
|
49
|
+
*/
|
|
50
|
+
|
|
51
|
+
const rowTokenBuffer = Buffer.from([_token.TYPE.ROW]);
|
|
52
|
+
const textPointerAndTimestampBuffer = Buffer.from([
|
|
53
|
+
// TextPointer length
|
|
54
|
+
0x10,
|
|
55
|
+
// TextPointer
|
|
56
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
57
|
+
// Timestamp
|
|
58
|
+
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]);
|
|
59
|
+
const textPointerNullBuffer = Buffer.from([0x00]);
|
|
60
|
+
|
|
61
|
+
// A transform that converts rows to packets.
|
|
62
|
+
class RowTransform extends _stream.Transform {
|
|
63
|
+
/**
|
|
64
|
+
* @private
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* @private
|
|
69
|
+
*/
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* @private
|
|
73
|
+
*/
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* @private
|
|
77
|
+
*/
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* @private
|
|
81
|
+
*/
|
|
82
|
+
constructor(bulkLoad) {
|
|
83
|
+
super({
|
|
84
|
+
writableObjectMode: true
|
|
85
|
+
});
|
|
86
|
+
this.bulkLoad = bulkLoad;
|
|
87
|
+
this.mainOptions = bulkLoad.options;
|
|
88
|
+
this.columns = bulkLoad.columns;
|
|
89
|
+
this.columnMetadataWritten = false;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* @private
|
|
94
|
+
*/
|
|
95
|
+
_transform(row, _encoding, callback) {
|
|
96
|
+
if (!this.columnMetadataWritten) {
|
|
97
|
+
this.push(this.bulkLoad.getColMetaData());
|
|
98
|
+
this.columnMetadataWritten = true;
|
|
99
|
+
}
|
|
100
|
+
this.push(rowTokenBuffer);
|
|
101
|
+
for (let i = 0; i < this.columns.length; i++) {
|
|
102
|
+
const c = this.columns[i];
|
|
103
|
+
let value = Array.isArray(row) ? row[i] : row[c.objName];
|
|
104
|
+
if (!this.bulkLoad.firstRowWritten) {
|
|
105
|
+
try {
|
|
106
|
+
value = c.type.validate(value, c.collation);
|
|
107
|
+
} catch (error) {
|
|
108
|
+
return callback(error);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const parameter = {
|
|
112
|
+
length: c.length,
|
|
113
|
+
scale: c.scale,
|
|
114
|
+
precision: c.precision,
|
|
115
|
+
value: value
|
|
116
|
+
};
|
|
117
|
+
if (c.type.name === 'Text' || c.type.name === 'Image' || c.type.name === 'NText') {
|
|
118
|
+
if (value == null) {
|
|
119
|
+
this.push(textPointerNullBuffer);
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
this.push(textPointerAndTimestampBuffer);
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
this.push(c.type.generateParameterLength(parameter, this.mainOptions));
|
|
126
|
+
for (const chunk of c.type.generateParameterData(parameter, this.mainOptions)) {
|
|
127
|
+
this.push(chunk);
|
|
128
|
+
}
|
|
129
|
+
} catch (error) {
|
|
130
|
+
return callback(error);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
process.nextTick(callback);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* @private
|
|
138
|
+
*/
|
|
139
|
+
_flush(callback) {
|
|
140
|
+
this.push(this.bulkLoad.createDoneToken());
|
|
141
|
+
process.nextTick(callback);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* A BulkLoad instance is used to perform a bulk insert.
|
|
147
|
+
*
|
|
148
|
+
* Use [[Connection.newBulkLoad]] to create a new instance, and [[Connection.execBulkLoad]] to execute it.
|
|
149
|
+
*
|
|
150
|
+
* Example of BulkLoad Usages:
|
|
151
|
+
*
|
|
152
|
+
* ```js
|
|
153
|
+
* // optional BulkLoad options
|
|
154
|
+
* const options = { keepNulls: true };
|
|
155
|
+
*
|
|
156
|
+
* // instantiate - provide the table where you'll be inserting to, options and a callback
|
|
157
|
+
* const bulkLoad = connection.newBulkLoad('MyTable', options, (error, rowCount) => {
|
|
158
|
+
* console.log('inserted %d rows', rowCount);
|
|
159
|
+
* });
|
|
160
|
+
*
|
|
161
|
+
* // setup your columns - always indicate whether the column is nullable
|
|
162
|
+
* bulkLoad.addColumn('myInt', TYPES.Int, { nullable: false });
|
|
163
|
+
* bulkLoad.addColumn('myString', TYPES.NVarChar, { length: 50, nullable: true });
|
|
164
|
+
*
|
|
165
|
+
* // execute
|
|
166
|
+
* connection.execBulkLoad(bulkLoad, [
|
|
167
|
+
* { myInt: 7, myString: 'hello' },
|
|
168
|
+
* { myInt: 23, myString: 'world' }
|
|
169
|
+
* ]);
|
|
170
|
+
* ```
|
|
171
|
+
*/
|
|
172
|
+
class BulkLoad extends _events.EventEmitter {
|
|
173
|
+
/**
|
|
174
|
+
* @private
|
|
175
|
+
*/
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* @private
|
|
179
|
+
*/
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* @private
|
|
183
|
+
*/
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* @private
|
|
187
|
+
*/
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* @private
|
|
191
|
+
*/
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* @private
|
|
195
|
+
*/
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* @private
|
|
199
|
+
*/
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* @private
|
|
203
|
+
*/
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* @private
|
|
207
|
+
*/
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* @private
|
|
211
|
+
*/
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* @private
|
|
215
|
+
*/
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* @private
|
|
219
|
+
*/
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* @private
|
|
223
|
+
*/
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* @private
|
|
227
|
+
*/
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* @private
|
|
231
|
+
*/
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* @private
|
|
235
|
+
*/
|
|
236
|
+
|
|
237
|
+
/**
|
|
238
|
+
* @private
|
|
239
|
+
*/
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* @private
|
|
243
|
+
*/
|
|
244
|
+
constructor(table, collation, connectionOptions, {
|
|
245
|
+
checkConstraints = false,
|
|
246
|
+
fireTriggers = false,
|
|
247
|
+
keepNulls = false,
|
|
248
|
+
lockTable = false,
|
|
249
|
+
order = {}
|
|
250
|
+
}, callback) {
|
|
251
|
+
if (typeof checkConstraints !== 'boolean') {
|
|
252
|
+
throw new TypeError('The "options.checkConstraints" property must be of type boolean.');
|
|
253
|
+
}
|
|
254
|
+
if (typeof fireTriggers !== 'boolean') {
|
|
255
|
+
throw new TypeError('The "options.fireTriggers" property must be of type boolean.');
|
|
256
|
+
}
|
|
257
|
+
if (typeof keepNulls !== 'boolean') {
|
|
258
|
+
throw new TypeError('The "options.keepNulls" property must be of type boolean.');
|
|
259
|
+
}
|
|
260
|
+
if (typeof lockTable !== 'boolean') {
|
|
261
|
+
throw new TypeError('The "options.lockTable" property must be of type boolean.');
|
|
262
|
+
}
|
|
263
|
+
if (typeof order !== 'object' || order === null) {
|
|
264
|
+
throw new TypeError('The "options.order" property must be of type object.');
|
|
265
|
+
}
|
|
266
|
+
for (const [column, direction] of Object.entries(order)) {
|
|
267
|
+
if (direction !== 'ASC' && direction !== 'DESC') {
|
|
268
|
+
throw new TypeError('The value of the "' + column + '" key in the "options.order" object must be either "ASC" or "DESC".');
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
super();
|
|
272
|
+
this.error = undefined;
|
|
273
|
+
this.canceled = false;
|
|
274
|
+
this.executionStarted = false;
|
|
275
|
+
this.collation = collation;
|
|
276
|
+
this.table = table;
|
|
277
|
+
this.options = connectionOptions;
|
|
278
|
+
this.callback = callback;
|
|
279
|
+
this.columns = [];
|
|
280
|
+
this.columnsByName = {};
|
|
281
|
+
this.firstRowWritten = false;
|
|
282
|
+
this.streamingMode = false;
|
|
283
|
+
this.rowToPacketTransform = new RowTransform(this); // eslint-disable-line no-use-before-define
|
|
284
|
+
|
|
285
|
+
this.bulkOptions = {
|
|
286
|
+
checkConstraints,
|
|
287
|
+
fireTriggers,
|
|
288
|
+
keepNulls,
|
|
289
|
+
lockTable,
|
|
290
|
+
order
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Adds a column to the bulk load.
|
|
296
|
+
*
|
|
297
|
+
* The column definitions should match the table you are trying to insert into.
|
|
298
|
+
* Attempting to call addColumn after the first row has been added will throw an exception.
|
|
299
|
+
*
|
|
300
|
+
* ```js
|
|
301
|
+
* bulkLoad.addColumn('MyIntColumn', TYPES.Int, { nullable: false });
|
|
302
|
+
* ```
|
|
303
|
+
*
|
|
304
|
+
* @param name The name of the column.
|
|
305
|
+
* @param type One of the supported `data types`.
|
|
306
|
+
* @param __namedParameters Additional column type information. At a minimum, `nullable` must be set to true or false.
|
|
307
|
+
* @param length For VarChar, NVarChar, VarBinary. Use length as `Infinity` for VarChar(max), NVarChar(max) and VarBinary(max).
|
|
308
|
+
* @param nullable Indicates whether the column accepts NULL values.
|
|
309
|
+
* @param objName If the name of the column is different from the name of the property found on `rowObj` arguments passed to [[addRow]] or [[Connection.execBulkLoad]], then you can use this option to specify the property name.
|
|
310
|
+
* @param precision For Numeric, Decimal.
|
|
311
|
+
* @param scale For Numeric, Decimal, Time, DateTime2, DateTimeOffset.
|
|
312
|
+
*/
|
|
313
|
+
addColumn(name, type, {
|
|
314
|
+
output = false,
|
|
315
|
+
length,
|
|
316
|
+
precision,
|
|
317
|
+
scale,
|
|
318
|
+
objName = name,
|
|
319
|
+
nullable = true
|
|
320
|
+
}) {
|
|
321
|
+
if (this.firstRowWritten) {
|
|
322
|
+
throw new Error('Columns cannot be added to bulk insert after the first row has been written.');
|
|
323
|
+
}
|
|
324
|
+
if (this.executionStarted) {
|
|
325
|
+
throw new Error('Columns cannot be added to bulk insert after execution has started.');
|
|
326
|
+
}
|
|
327
|
+
const column = {
|
|
328
|
+
type: type,
|
|
329
|
+
name: name,
|
|
330
|
+
value: null,
|
|
331
|
+
output: output,
|
|
332
|
+
length: length,
|
|
333
|
+
precision: precision,
|
|
334
|
+
scale: scale,
|
|
335
|
+
objName: objName,
|
|
336
|
+
nullable: nullable,
|
|
337
|
+
collation: this.collation
|
|
338
|
+
};
|
|
339
|
+
if ((type.id & 0x30) === 0x20) {
|
|
340
|
+
if (column.length == null && type.resolveLength) {
|
|
341
|
+
column.length = type.resolveLength(column);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
if (type.resolvePrecision && column.precision == null) {
|
|
345
|
+
column.precision = type.resolvePrecision(column);
|
|
346
|
+
}
|
|
347
|
+
if (type.resolveScale && column.scale == null) {
|
|
348
|
+
column.scale = type.resolveScale(column);
|
|
349
|
+
}
|
|
350
|
+
this.columns.push(column);
|
|
351
|
+
this.columnsByName[name] = column;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/**
|
|
355
|
+
* @private
|
|
356
|
+
*/
|
|
357
|
+
getOptionsSql() {
|
|
358
|
+
const addOptions = [];
|
|
359
|
+
if (this.bulkOptions.checkConstraints) {
|
|
360
|
+
addOptions.push('CHECK_CONSTRAINTS');
|
|
361
|
+
}
|
|
362
|
+
if (this.bulkOptions.fireTriggers) {
|
|
363
|
+
addOptions.push('FIRE_TRIGGERS');
|
|
364
|
+
}
|
|
365
|
+
if (this.bulkOptions.keepNulls) {
|
|
366
|
+
addOptions.push('KEEP_NULLS');
|
|
367
|
+
}
|
|
368
|
+
if (this.bulkOptions.lockTable) {
|
|
369
|
+
addOptions.push('TABLOCK');
|
|
370
|
+
}
|
|
371
|
+
if (this.bulkOptions.order) {
|
|
372
|
+
const orderColumns = [];
|
|
373
|
+
for (const [column, direction] of Object.entries(this.bulkOptions.order)) {
|
|
374
|
+
orderColumns.push(`${column} ${direction}`);
|
|
375
|
+
}
|
|
376
|
+
if (orderColumns.length) {
|
|
377
|
+
addOptions.push(`ORDER (${orderColumns.join(', ')})`);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
if (addOptions.length > 0) {
|
|
381
|
+
return ` WITH (${addOptions.join(',')})`;
|
|
382
|
+
} else {
|
|
383
|
+
return '';
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* @private
|
|
389
|
+
*/
|
|
390
|
+
getBulkInsertSql() {
|
|
391
|
+
let sql = 'insert bulk ' + this.table + '(';
|
|
392
|
+
for (let i = 0, len = this.columns.length; i < len; i++) {
|
|
393
|
+
const c = this.columns[i];
|
|
394
|
+
if (i !== 0) {
|
|
395
|
+
sql += ', ';
|
|
396
|
+
}
|
|
397
|
+
sql += '[' + c.name + '] ' + c.type.declaration(c);
|
|
398
|
+
}
|
|
399
|
+
sql += ')';
|
|
400
|
+
sql += this.getOptionsSql();
|
|
401
|
+
return sql;
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
/**
|
|
405
|
+
* This is simply a helper utility function which returns a `CREATE TABLE SQL` statement based on the columns added to the bulkLoad object.
|
|
406
|
+
* This may be particularly handy when you want to insert into a temporary table (a table which starts with `#`).
|
|
407
|
+
*
|
|
408
|
+
* ```js
|
|
409
|
+
* var sql = bulkLoad.getTableCreationSql();
|
|
410
|
+
* ```
|
|
411
|
+
*
|
|
412
|
+
* A side note on bulk inserting into temporary tables: if you want to access a local temporary table after executing the bulk load,
|
|
413
|
+
* you'll need to use the same connection and execute your requests using [[Connection.execSqlBatch]] instead of [[Connection.execSql]]
|
|
414
|
+
*/
|
|
415
|
+
getTableCreationSql() {
|
|
416
|
+
let sql = 'CREATE TABLE ' + this.table + '(\n';
|
|
417
|
+
for (let i = 0, len = this.columns.length; i < len; i++) {
|
|
418
|
+
const c = this.columns[i];
|
|
419
|
+
if (i !== 0) {
|
|
420
|
+
sql += ',\n';
|
|
421
|
+
}
|
|
422
|
+
sql += '[' + c.name + '] ' + c.type.declaration(c);
|
|
423
|
+
if (c.nullable !== undefined) {
|
|
424
|
+
sql += ' ' + (c.nullable ? 'NULL' : 'NOT NULL');
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
sql += '\n)';
|
|
428
|
+
return sql;
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
/**
|
|
432
|
+
* @private
|
|
433
|
+
*/
|
|
434
|
+
getColMetaData() {
|
|
435
|
+
const tBuf = new _writableTrackingBuffer.default(100, null, true);
|
|
436
|
+
// TokenType
|
|
437
|
+
tBuf.writeUInt8(_token.TYPE.COLMETADATA);
|
|
438
|
+
// Count
|
|
439
|
+
tBuf.writeUInt16LE(this.columns.length);
|
|
440
|
+
for (let j = 0, len = this.columns.length; j < len; j++) {
|
|
441
|
+
const c = this.columns[j];
|
|
442
|
+
// UserType
|
|
443
|
+
if (this.options.tdsVersion < '7_2') {
|
|
444
|
+
tBuf.writeUInt16LE(0);
|
|
445
|
+
} else {
|
|
446
|
+
tBuf.writeUInt32LE(0);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
// Flags
|
|
450
|
+
let flags = FLAGS.updateableReadWrite;
|
|
451
|
+
if (c.nullable) {
|
|
452
|
+
flags |= FLAGS.nullable;
|
|
453
|
+
} else if (c.nullable === undefined && this.options.tdsVersion >= '7_2') {
|
|
454
|
+
flags |= FLAGS.nullableUnknown;
|
|
455
|
+
}
|
|
456
|
+
tBuf.writeUInt16LE(flags);
|
|
457
|
+
|
|
458
|
+
// TYPE_INFO
|
|
459
|
+
tBuf.writeBuffer(c.type.generateTypeInfo(c, this.options));
|
|
460
|
+
|
|
461
|
+
// TableName
|
|
462
|
+
if (c.type.hasTableName) {
|
|
463
|
+
tBuf.writeUsVarchar(this.table, 'ucs2');
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
// ColName
|
|
467
|
+
tBuf.writeBVarchar(c.name, 'ucs2');
|
|
468
|
+
}
|
|
469
|
+
return tBuf.data;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Sets a timeout for this bulk load.
|
|
474
|
+
*
|
|
475
|
+
* ```js
|
|
476
|
+
* bulkLoad.setTimeout(timeout);
|
|
477
|
+
* ```
|
|
478
|
+
*
|
|
479
|
+
* @param timeout The number of milliseconds before the bulk load is considered failed, or 0 for no timeout.
|
|
480
|
+
* When no timeout is set for the bulk load, the [[ConnectionOptions.requestTimeout]] of the Connection is used.
|
|
481
|
+
*/
|
|
482
|
+
setTimeout(timeout) {
|
|
483
|
+
this.timeout = timeout;
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/**
|
|
487
|
+
* @private
|
|
488
|
+
*/
|
|
489
|
+
createDoneToken() {
|
|
490
|
+
// It might be nice to make DoneToken a class if anything needs to create them, but for now, just do it here
|
|
491
|
+
const tBuf = new _writableTrackingBuffer.default(this.options.tdsVersion < '7_2' ? 9 : 13);
|
|
492
|
+
tBuf.writeUInt8(_token.TYPE.DONE);
|
|
493
|
+
const status = DONE_STATUS.FINAL;
|
|
494
|
+
tBuf.writeUInt16LE(status);
|
|
495
|
+
tBuf.writeUInt16LE(0); // CurCmd (TDS ignores this)
|
|
496
|
+
tBuf.writeUInt32LE(0); // row count - doesn't really matter
|
|
497
|
+
if (this.options.tdsVersion >= '7_2') {
|
|
498
|
+
tBuf.writeUInt32LE(0); // row count is 64 bits in >= TDS 7.2
|
|
499
|
+
}
|
|
500
|
+
return tBuf.data;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/**
|
|
504
|
+
* @private
|
|
505
|
+
*/
|
|
506
|
+
cancel() {
|
|
507
|
+
if (this.canceled) {
|
|
508
|
+
return;
|
|
509
|
+
}
|
|
510
|
+
this.canceled = true;
|
|
511
|
+
this.emit('cancel');
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
var _default = exports.default = BulkLoad;
|
|
515
|
+
module.exports = BulkLoad;
|
|
516
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZXZlbnRzIiwicmVxdWlyZSIsIl93cml0YWJsZVRyYWNraW5nQnVmZmVyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9zdHJlYW0iLCJfdG9rZW4iLCJvYmoiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkZMQUdTIiwibnVsbGFibGUiLCJjYXNlU2VuIiwidXBkYXRlYWJsZVJlYWRXcml0ZSIsInVwZGF0ZWFibGVVbmtub3duIiwiaWRlbnRpdHkiLCJjb21wdXRlZCIsImZpeGVkTGVuQ0xSVHlwZSIsInNwYXJzZUNvbHVtblNldCIsImhpZGRlbiIsImtleSIsIm51bGxhYmxlVW5rbm93biIsIkRPTkVfU1RBVFVTIiwiRklOQUwiLCJNT1JFIiwiRVJST1IiLCJJTlhBQ1QiLCJDT1VOVCIsIkFUVE4iLCJTUlZFUlJPUiIsInJvd1Rva2VuQnVmZmVyIiwiQnVmZmVyIiwiZnJvbSIsIlRPS0VOX1RZUEUiLCJST1ciLCJ0ZXh0UG9pbnRlckFuZFRpbWVzdGFtcEJ1ZmZlciIsInRleHRQb2ludGVyTnVsbEJ1ZmZlciIsIlJvd1RyYW5zZm9ybSIsIlRyYW5zZm9ybSIsImNvbnN0cnVjdG9yIiwiYnVsa0xvYWQiLCJ3cml0YWJsZU9iamVjdE1vZGUiLCJtYWluT3B0aW9ucyIsIm9wdGlvbnMiLCJjb2x1bW5zIiwiY29sdW1uTWV0YWRhdGFXcml0dGVuIiwiX3RyYW5zZm9ybSIsInJvdyIsIl9lbmNvZGluZyIsImNhbGxiYWNrIiwicHVzaCIsImdldENvbE1ldGFEYXRhIiwiaSIsImxlbmd0aCIsImMiLCJ2YWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsIm9iak5hbWUiLCJmaXJzdFJvd1dyaXR0ZW4iLCJ0eXBlIiwidmFsaWRhdGUiLCJjb2xsYXRpb24iLCJlcnJvciIsInBhcmFtZXRlciIsInNjYWxlIiwicHJlY2lzaW9uIiwibmFtZSIsImdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoIiwiY2h1bmsiLCJnZW5lcmF0ZVBhcmFtZXRlckRhdGEiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJfZmx1c2giLCJjcmVhdGVEb25lVG9rZW4iLCJCdWxrTG9hZCIsIkV2ZW50RW1pdHRlciIsInRhYmxlIiwiY29ubmVjdGlvbk9wdGlvbnMiLCJjaGVja0NvbnN0cmFpbnRzIiwiZmlyZVRyaWdnZXJzIiwia2VlcE51bGxzIiwibG9ja1RhYmxlIiwib3JkZXIiLCJUeXBlRXJyb3IiLCJjb2x1bW4iLCJkaXJlY3Rpb24iLCJPYmplY3QiLCJlbnRyaWVzIiwidW5kZWZpbmVkIiwiY2FuY2VsZWQiLCJleGVjdXRpb25TdGFydGVkIiwiY29sdW1uc0J5TmFtZSIsInN0cmVhbWluZ01vZGUiLCJyb3dUb1BhY2tldFRyYW5zZm9ybSIsImJ1bGtPcHRpb25zIiwiYWRkQ29sdW1uIiwib3V0cHV0IiwiRXJyb3IiLCJpZCIsInJlc29sdmVMZW5ndGgiLCJyZXNvbHZlUHJlY2lzaW9uIiwicmVzb2x2ZVNjYWxlIiwiZ2V0T3B0aW9uc1NxbCIsImFkZE9wdGlvbnMiLCJvcmRlckNvbHVtbnMiLCJqb2luIiwiZ2V0QnVsa0luc2VydFNxbCIsInNxbCIsImxlbiIsImRlY2xhcmF0aW9uIiwiZ2V0VGFibGVDcmVhdGlvblNxbCIsInRCdWYiLCJXcml0YWJsZVRyYWNraW5nQnVmZmVyIiwid3JpdGVVSW50OCIsIkNPTE1FVEFEQVRBIiwid3JpdGVVSW50MTZMRSIsImoiLCJ0ZHNWZXJzaW9uIiwid3JpdGVVSW50MzJMRSIsImZsYWdzIiwid3JpdGVCdWZmZXIiLCJnZW5lcmF0ZVR5cGVJbmZvIiwiaGFzVGFibGVOYW1lIiwid3JpdGVVc1ZhcmNoYXIiLCJ3cml0ZUJWYXJjaGFyIiwiZGF0YSIsInNldFRpbWVvdXQiLCJ0aW1lb3V0IiwiRE9ORSIsInN0YXR1cyIsImNhbmNlbCIsImVtaXQiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi9zcmMvYnVsay1sb2FkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgV3JpdGFibGVUcmFja2luZ0J1ZmZlciBmcm9tICcuL3RyYWNraW5nLWJ1ZmZlci93cml0YWJsZS10cmFja2luZy1idWZmZXInO1xuaW1wb3J0IENvbm5lY3Rpb24sIHsgdHlwZSBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zIH0gZnJvbSAnLi9jb25uZWN0aW9uJztcblxuaW1wb3J0IHsgVHJhbnNmb3JtIH0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCB7IFRZUEUgYXMgVE9LRU5fVFlQRSB9IGZyb20gJy4vdG9rZW4vdG9rZW4nO1xuXG5pbXBvcnQgeyB0eXBlIERhdGFUeXBlLCB0eXBlIFBhcmFtZXRlciB9IGZyb20gJy4vZGF0YS10eXBlJztcbmltcG9ydCB7IENvbGxhdGlvbiB9IGZyb20gJy4vY29sbGF0aW9uJztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBGTEFHUyA9IHtcbiAgbnVsbGFibGU6IDEgPDwgMCxcbiAgY2FzZVNlbjogMSA8PCAxLFxuICB1cGRhdGVhYmxlUmVhZFdyaXRlOiAxIDw8IDIsXG4gIHVwZGF0ZWFibGVVbmtub3duOiAxIDw8IDMsXG4gIGlkZW50aXR5OiAxIDw8IDQsXG4gIGNvbXB1dGVkOiAxIDw8IDUsIC8vIGludHJvZHVjZWQgaW4gVERTIDcuMlxuICBmaXhlZExlbkNMUlR5cGU6IDEgPDwgOCwgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4yXG4gIHNwYXJzZUNvbHVtblNldDogMSA8PCAxMCwgLy8gaW50cm9kdWNlZCBpbiBURFMgNy4zLkJcbiAgaGlkZGVuOiAxIDw8IDEzLCAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbiAga2V5OiAxIDw8IDE0LCAvLyBpbnRyb2R1Y2VkIGluIFREUyA3LjJcbiAgbnVsbGFibGVVbmtub3duOiAxIDw8IDE1IC8vIGludHJvZHVjZWQgaW4gVERTIDcuMlxufTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5jb25zdCBET05FX1NUQVRVUyA9IHtcbiAgRklOQUw6IDB4MDAsXG4gIE1PUkU6IDB4MSxcbiAgRVJST1I6IDB4MixcbiAgSU5YQUNUOiAweDQsXG4gIENPVU5UOiAweDEwLFxuICBBVFROOiAweDIwLFxuICBTUlZFUlJPUjogMHgxMDBcbn07XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuaW50ZXJmYWNlIEludGVybmFsT3B0aW9ucyB7XG4gIGNoZWNrQ29uc3RyYWludHM6IGJvb2xlYW47XG4gIGZpcmVUcmlnZ2VyczogYm9vbGVhbjtcbiAga2VlcE51bGxzOiBib29sZWFuO1xuICBsb2NrVGFibGU6IGJvb2xlYW47XG4gIG9yZGVyOiB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiAnQVNDJyB8ICdERVNDJyB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICAvKipcbiAgICogSG9ub3JzIGNvbnN0cmFpbnRzIGR1cmluZyBidWxrIGxvYWQsIHVzaW5nIFQtU1FMXG4gICAqIFtDSEVDS19DT05TVFJBSU5UU10oaHR0cHM6Ly90ZWNobmV0Lm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczE4NjI0Nyh2PXNxbC4xMDUpLmFzcHgpLlxuICAgKiAoZGVmYXVsdDogYGZhbHNlYClcbiAgICovXG4gIGNoZWNrQ29uc3RyYWludHM/OiBJbnRlcm5hbE9wdGlvbnNbJ2NoZWNrQ29uc3RyYWludHMnXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogSG9ub3JzIGluc2VydCB0cmlnZ2VycyBkdXJpbmcgYnVsayBsb2FkLCB1c2luZyB0aGUgVC1TUUwgW0ZJUkVfVFJJR0dFUlNdKGh0dHBzOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODc2NDAodj1zcWwuMTA1KS5hc3B4KS4gKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBmaXJlVHJpZ2dlcnM/OiBJbnRlcm5hbE9wdGlvbnNbJ2ZpcmVUcmlnZ2VycyddIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBIb25vcnMgbnVsbCB2YWx1ZSBwYXNzZWQsIGlnbm9yZXMgdGhlIGRlZmF1bHQgdmFsdWVzIHNldCBvbiB0YWJsZSwgdXNpbmcgVC1TUUwgW0tFRVBfTlVMTFNdKGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODc4ODcodj1zcWwuMTIwKS5hc3B4KS4gKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBrZWVwTnVsbHM/OiBJbnRlcm5hbE9wdGlvbnNbJ2tlZXBOdWxscyddIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBQbGFjZXMgYSBidWxrIHVwZGF0ZShCVSkgbG9jayBvbiB0YWJsZSB3aGlsZSBwZXJmb3JtaW5nIGJ1bGsgbG9hZCwgdXNpbmcgVC1TUUwgW1RBQkxPQ0tdKGh0dHBzOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXMxODA4NzYodj1zcWwuMTA1KS5hc3B4KS4gKGRlZmF1bHQ6IGBmYWxzZWApXG4gICAqL1xuICBsb2NrVGFibGU/OiBJbnRlcm5hbE9wdGlvbnNbJ2xvY2tUYWJsZSddIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG9yZGVyaW5nIG9mIHRoZSBkYXRhIHRvIHBvc3NpYmx5IGluY3JlYXNlIGJ1bGsgaW5zZXJ0IHBlcmZvcm1hbmNlLCB1c2luZyBULVNRTCBbT1JERVJdKGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3ByZXZpb3VzLXZlcnNpb25zL3NxbC9zcWwtc2VydmVyLTIwMDgtcjIvbXMxNzc0Njgodj1zcWwuMTA1KSkuIChkZWZhdWx0OiBge31gKVxuICAgKi9cbiAgb3JkZXI/OiBJbnRlcm5hbE9wdGlvbnNbJ29yZGVyJ10gfCB1bmRlZmluZWQ7XG59XG5cblxuZXhwb3J0IHR5cGUgQ2FsbGJhY2sgPVxuICAvKipcbiAgICogQSBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgW1tCdWxrTG9hZF1dIGZpbmlzaGVzIGV4ZWN1dGluZy5cbiAgICpcbiAgICogQHBhcmFtIHJvd0NvdW50IHRoZSBudW1iZXIgb2Ygcm93cyBpbnNlcnRlZFxuICAgKi9cbiAgKGVycjogRXJyb3IgfCB1bmRlZmluZWQgfCBudWxsLCByb3dDb3VudD86IG51bWJlcikgPT4gdm9pZDtcblxuaW50ZXJmYWNlIENvbHVtbiBleHRlbmRzIFBhcmFtZXRlciB7XG4gIG9iak5hbWU6IHN0cmluZztcbiAgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQ7XG59XG5cbmludGVyZmFjZSBDb2x1bW5PcHRpb25zIHtcbiAgb3V0cHV0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRm9yIFZhckNoYXIsIE5WYXJDaGFyLCBWYXJCaW5hcnkuIFVzZSBsZW5ndGggYXMgYEluZmluaXR5YCBmb3IgVmFyQ2hhcihtYXgpLCBOVmFyQ2hhcihtYXgpIGFuZCBWYXJCaW5hcnkobWF4KS5cbiAgICovXG4gIGxlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogRm9yIE51bWVyaWMsIERlY2ltYWwuXG4gICAqL1xuICBwcmVjaXNpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZvciBOdW1lcmljLCBEZWNpbWFsLCBUaW1lLCBEYXRlVGltZTIsIERhdGVUaW1lT2Zmc2V0LlxuICAgKi9cbiAgc2NhbGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIElmIHRoZSBuYW1lIG9mIHRoZSBjb2x1bW4gaXMgZGlmZmVyZW50IGZyb20gdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IGZvdW5kIG9uIGByb3dPYmpgIGFyZ3VtZW50cyBwYXNzZWQgdG8gW1thZGRSb3ddXSwgdGhlbiB5b3UgY2FuIHVzZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBwcm9wZXJ0eSBuYW1lLlxuICAgKi9cbiAgb2JqTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbHVtbiBhY2NlcHRzIE5VTEwgdmFsdWVzLlxuICAgKi9cbiAgbnVsbGFibGU/OiBib29sZWFuO1xufVxuXG5jb25zdCByb3dUb2tlbkJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFsgVE9LRU5fVFlQRS5ST1cgXSk7XG5jb25zdCB0ZXh0UG9pbnRlckFuZFRpbWVzdGFtcEJ1ZmZlciA9IEJ1ZmZlci5mcm9tKFtcbiAgLy8gVGV4dFBvaW50ZXIgbGVuZ3RoXG4gIDB4MTAsXG5cbiAgLy8gVGV4dFBvaW50ZXJcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCxcblxuICAvLyBUaW1lc3RhbXBcbiAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMFxuXSk7XG5jb25zdCB0ZXh0UG9pbnRlck51bGxCdWZmZXIgPSBCdWZmZXIuZnJvbShbMHgwMF0pO1xuXG4vLyBBIHRyYW5zZm9ybSB0aGF0IGNvbnZlcnRzIHJvd3MgdG8gcGFja2V0cy5cbmNsYXNzIFJvd1RyYW5zZm9ybSBleHRlbmRzIFRyYW5zZm9ybSB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb2x1bW5NZXRhZGF0YVdyaXR0ZW46IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBidWxrTG9hZDogQnVsa0xvYWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBtYWluT3B0aW9uczogQnVsa0xvYWRbJ29wdGlvbnMnXTtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNvbHVtbnM6IEJ1bGtMb2FkWydjb2x1bW5zJ107XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3RvcihidWxrTG9hZDogQnVsa0xvYWQpIHtcbiAgICBzdXBlcih7IHdyaXRhYmxlT2JqZWN0TW9kZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMuYnVsa0xvYWQgPSBidWxrTG9hZDtcbiAgICB0aGlzLm1haW5PcHRpb25zID0gYnVsa0xvYWQub3B0aW9ucztcbiAgICB0aGlzLmNvbHVtbnMgPSBidWxrTG9hZC5jb2x1bW5zO1xuXG4gICAgdGhpcy5jb2x1bW5NZXRhZGF0YVdyaXR0ZW4gPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3RyYW5zZm9ybShyb3c6IEFycmF5PHVua25vd24+IHwgeyBbY29sTmFtZTogc3RyaW5nXTogdW5rbm93biB9LCBfZW5jb2Rpbmc6IHN0cmluZywgY2FsbGJhY2s6IChlcnJvcj86IEVycm9yKSA9PiB2b2lkKSB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbk1ldGFkYXRhV3JpdHRlbikge1xuICAgICAgdGhpcy5wdXNoKHRoaXMuYnVsa0xvYWQuZ2V0Q29sTWV0YURhdGEoKSk7XG4gICAgICB0aGlzLmNvbHVtbk1ldGFkYXRhV3JpdHRlbiA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5wdXNoKHJvd1Rva2VuQnVmZmVyKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBjID0gdGhpcy5jb2x1bW5zW2ldO1xuICAgICAgbGV0IHZhbHVlID0gQXJyYXkuaXNBcnJheShyb3cpID8gcm93W2ldIDogcm93W2Mub2JqTmFtZV07XG5cbiAgICAgIGlmICghdGhpcy5idWxrTG9hZC5maXJzdFJvd1dyaXR0ZW4pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB2YWx1ZSA9IGMudHlwZS52YWxpZGF0ZSh2YWx1ZSwgYy5jb2xsYXRpb24pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSB7XG4gICAgICAgIGxlbmd0aDogYy5sZW5ndGgsXG4gICAgICAgIHNjYWxlOiBjLnNjYWxlLFxuICAgICAgICBwcmVjaXNpb246IGMucHJlY2lzaW9uLFxuICAgICAgICB2YWx1ZTogdmFsdWVcbiAgICAgIH07XG5cbiAgICAgIGlmIChjLnR5cGUubmFtZSA9PT0gJ1RleHQnIHx8IGMudHlwZS5uYW1lID09PSAnSW1hZ2UnIHx8IGMudHlwZS5uYW1lID09PSAnTlRleHQnKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5wdXNoKHRleHRQb2ludGVyTnVsbEJ1ZmZlcik7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnB1c2godGV4dFBvaW50ZXJBbmRUaW1lc3RhbXBCdWZmZXIpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnB1c2goYy50eXBlLmdlbmVyYXRlUGFyYW1ldGVyTGVuZ3RoKHBhcmFtZXRlciwgdGhpcy5tYWluT3B0aW9ucykpO1xuICAgICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGMudHlwZS5nZW5lcmF0ZVBhcmFtZXRlckRhdGEocGFyYW1ldGVyLCB0aGlzLm1haW5PcHRpb25zKSkge1xuICAgICAgICAgIHRoaXMucHVzaChjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2ZsdXNoKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy5wdXNoKHRoaXMuYnVsa0xvYWQuY3JlYXRlRG9uZVRva2VuKCkpO1xuXG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjayk7XG4gIH1cbn1cblxuLyoqXG4gKiBBIEJ1bGtMb2FkIGluc3RhbmNlIGlzIHVzZWQgdG8gcGVyZm9ybSBhIGJ1bGsgaW5zZXJ0LlxuICpcbiAqIFVzZSBbW0Nvbm5lY3Rpb24ubmV3QnVsa0xvYWRdXSB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2UsIGFuZCBbW0Nvbm5lY3Rpb24uZXhlY0J1bGtMb2FkXV0gdG8gZXhlY3V0ZSBpdC5cbiAqXG4gKiBFeGFtcGxlIG9mIEJ1bGtMb2FkIFVzYWdlczpcbiAqXG4gKiBgYGBqc1xuICogLy8gb3B0aW9uYWwgQnVsa0xvYWQgb3B0aW9uc1xuICogY29uc3Qgb3B0aW9ucyA9IHsga2VlcE51bGxzOiB0cnVlIH07XG4gKlxuICogLy8gaW5zdGFudGlhdGUgLSBwcm92aWRlIHRoZSB0YWJsZSB3aGVyZSB5b3UnbGwgYmUgaW5zZXJ0aW5nIHRvLCBvcHRpb25zIGFuZCBhIGNhbGxiYWNrXG4gKiBjb25zdCBidWxrTG9hZCA9IGNvbm5lY3Rpb24ubmV3QnVsa0xvYWQoJ015VGFibGUnLCBvcHRpb25zLCAoZXJyb3IsIHJvd0NvdW50KSA9PiB7XG4gKiAgIGNvbnNvbGUubG9nKCdpbnNlcnRlZCAlZCByb3dzJywgcm93Q291bnQpO1xuICogfSk7XG4gKlxuICogLy8gc2V0dXAgeW91ciBjb2x1bW5zIC0gYWx3YXlzIGluZGljYXRlIHdoZXRoZXIgdGhlIGNvbHVtbiBpcyBudWxsYWJsZVxuICogYnVsa0xvYWQuYWRkQ29sdW1uKCdteUludCcsIFRZUEVTLkludCwgeyBudWxsYWJsZTogZmFsc2UgfSk7XG4gKiBidWxrTG9hZC5hZGRDb2x1bW4oJ215U3RyaW5nJywgVFlQRVMuTlZhckNoYXIsIHsgbGVuZ3RoOiA1MCwgbnVsbGFibGU6IHRydWUgfSk7XG4gKlxuICogLy8gZXhlY3V0ZVxuICogY29ubmVjdGlvbi5leGVjQnVsa0xvYWQoYnVsa0xvYWQsIFtcbiAqICAgeyBteUludDogNywgbXlTdHJpbmc6ICdoZWxsbycgfSxcbiAqICAgeyBteUludDogMjMsIG15U3RyaW5nOiAnd29ybGQnIH1cbiAqIF0pO1xuICogYGBgXG4gKi9cbmNsYXNzIEJ1bGtMb2FkIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNhbmNlbGVkOiBib29sZWFuO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgZXhlY3V0aW9uU3RhcnRlZDogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHN0cmVhbWluZ01vZGU6IGJvb2xlYW47XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSB0YWJsZTogc3RyaW5nO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgdGltZW91dDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBvcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY2FsbGJhY2s6IENhbGxiYWNrO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSBjb2x1bW5zOiBBcnJheTxDb2x1bW4+O1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgY29sdW1uc0J5TmFtZTogeyBbbmFtZTogc3RyaW5nXTogQ29sdW1uIH07XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGZpcnN0Um93V3JpdHRlbjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIHJvd1RvUGFja2V0VHJhbnNmb3JtOiBSb3dUcmFuc2Zvcm07XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGJ1bGtPcHRpb25zOiBJbnRlcm5hbE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBkZWNsYXJlIGNvbm5lY3Rpb246IENvbm5lY3Rpb24gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZGVjbGFyZSByb3dzOiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcnN0OiBBcnJheTxhbnk+IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGRlY2xhcmUgcm93Q291bnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICBkZWNsYXJlIGNvbGxhdGlvbjogQ29sbGF0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IodGFibGU6IHN0cmluZywgY29sbGF0aW9uOiBDb2xsYXRpb24gfCB1bmRlZmluZWQsIGNvbm5lY3Rpb25PcHRpb25zOiBJbnRlcm5hbENvbm5lY3Rpb25PcHRpb25zLCB7XG4gICAgY2hlY2tDb25zdHJhaW50cyA9IGZhbHNlLFxuICAgIGZpcmVUcmlnZ2VycyA9IGZhbHNlLFxuICAgIGtlZXBOdWxscyA9IGZhbHNlLFxuICAgIGxvY2tUYWJsZSA9IGZhbHNlLFxuICAgIG9yZGVyID0ge30sXG4gIH06IE9wdGlvbnMsIGNhbGxiYWNrOiBDYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2hlY2tDb25zdHJhaW50cyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLmNoZWNrQ29uc3RyYWludHNcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZpcmVUcmlnZ2VycyAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJvcHRpb25zLmZpcmVUcmlnZ2Vyc1wiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBib29sZWFuLicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Yga2VlcE51bGxzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcIm9wdGlvbnMua2VlcE51bGxzXCIgcHJvcGVydHkgbXVzdCBiZSBvZiB0eXBlIGJvb2xlYW4uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBsb2NrVGFibGUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5sb2NrVGFibGVcIiBwcm9wZXJ0eSBtdXN0IGJlIG9mIHR5cGUgYm9vbGVhbi4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9yZGVyICE9PSAnb2JqZWN0JyB8fCBvcmRlciA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwib3B0aW9ucy5vcmRlclwiIHByb3BlcnR5IG11c3QgYmUgb2YgdHlwZSBvYmplY3QuJyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbY29sdW1uLCBkaXJlY3Rpb25dIG9mIE9iamVjdC5lbnRyaWVzKG9yZGVyKSkge1xuICAgICAgaWYgKGRpcmVjdGlvbiAhPT0gJ0FTQycgJiYgZGlyZWN0aW9uICE9PSAnREVTQycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlIG9mIHRoZSBcIicgKyBjb2x1bW4gKyAnXCIga2V5IGluIHRoZSBcIm9wdGlvbnMub3JkZXJcIiBvYmplY3QgbXVzdCBiZSBlaXRoZXIgXCJBU0NcIiBvciBcIkRFU0NcIi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5lcnJvciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNhbmNlbGVkID0gZmFsc2U7XG4gICAgdGhpcy5leGVjdXRpb25TdGFydGVkID0gZmFsc2U7XG5cbiAgICB0aGlzLmNvbGxhdGlvbiA9IGNvbGxhdGlvbjtcblxuICAgIHRoaXMudGFibGUgPSB0YWJsZTtcbiAgICB0aGlzLm9wdGlvbnMgPSBjb25uZWN0aW9uT3B0aW9ucztcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgdGhpcy5jb2x1bW5zID0gW107XG4gICAgdGhpcy5jb2x1bW5zQnlOYW1lID0ge307XG4gICAgdGhpcy5maXJzdFJvd1dyaXR0ZW4gPSBmYWxzZTtcbiAgICB0aGlzLnN0cmVhbWluZ01vZGUgPSBmYWxzZTtcblxuICAgIHRoaXMucm93VG9QYWNrZXRUcmFuc2Zvcm0gPSBuZXcgUm93VHJhbnNmb3JtKHRoaXMpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG5cbiAgICB0aGlzLmJ1bGtPcHRpb25zID0geyBjaGVja0NvbnN0cmFpbnRzLCBmaXJlVHJpZ2dlcnMsIGtlZXBOdWxscywgbG9ja1RhYmxlLCBvcmRlciB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBjb2x1bW4gdG8gdGhlIGJ1bGsgbG9hZC5cbiAgICpcbiAgICogVGhlIGNvbHVtbiBkZWZpbml0aW9ucyBzaG91bGQgbWF0Y2ggdGhlIHRhYmxlIHlvdSBhcmUgdHJ5aW5nIHRvIGluc2VydCBpbnRvLlxuICAgKiBBdHRlbXB0aW5nIHRvIGNhbGwgYWRkQ29sdW1uIGFmdGVyIHRoZSBmaXJzdCByb3cgaGFzIGJlZW4gYWRkZWQgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGJ1bGtMb2FkLmFkZENvbHVtbignTXlJbnRDb2x1bW4nLCBUWVBFUy5JbnQsIHsgbnVsbGFibGU6IGZhbHNlIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIGNvbHVtbi5cbiAgICogQHBhcmFtIHR5cGUgT25lIG9mIHRoZSBzdXBwb3J0ZWQgYGRhdGEgdHlwZXNgLlxuICAgKiBAcGFyYW0gX19uYW1lZFBhcmFtZXRlcnMgQWRkaXRpb25hbCBjb2x1bW4gdHlwZSBpbmZvcm1hdGlvbi4gQXQgYSBtaW5pbXVtLCBgbnVsbGFibGVgIG11c3QgYmUgc2V0IHRvIHRydWUgb3IgZmFsc2UuXG4gICAqIEBwYXJhbSBsZW5ndGggRm9yIFZhckNoYXIsIE5WYXJDaGFyLCBWYXJCaW5hcnkuIFVzZSBsZW5ndGggYXMgYEluZmluaXR5YCBmb3IgVmFyQ2hhcihtYXgpLCBOVmFyQ2hhcihtYXgpIGFuZCBWYXJCaW5hcnkobWF4KS5cbiAgICogQHBhcmFtIG51bGxhYmxlIEluZGljYXRlcyB3aGV0aGVyIHRoZSBjb2x1bW4gYWNjZXB0cyBOVUxMIHZhbHVlcy5cbiAgICogQHBhcmFtIG9iak5hbWUgSWYgdGhlIG5hbWUgb2YgdGhlIGNvbHVtbiBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgZm91bmQgb24gYHJvd09iamAgYXJndW1lbnRzIHBhc3NlZCB0byBbW2FkZFJvd11dIG9yIFtbQ29ubmVjdGlvbi5leGVjQnVsa0xvYWRdXSwgdGhlbiB5b3UgY2FuIHVzZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSBwcm9wZXJ0eSBuYW1lLlxuICAgKiBAcGFyYW0gcHJlY2lzaW9uIEZvciBOdW1lcmljLCBEZWNpbWFsLlxuICAgKiBAcGFyYW0gc2NhbGUgRm9yIE51bWVyaWMsIERlY2ltYWwsIFRpbWUsIERhdGVUaW1lMiwgRGF0ZVRpbWVPZmZzZXQuXG4gICovXG4gIGFkZENvbHVtbihuYW1lOiBzdHJpbmcsIHR5cGU6IERhdGFUeXBlLCB7IG91dHB1dCA9IGZhbHNlLCBsZW5ndGgsIHByZWNpc2lvbiwgc2NhbGUsIG9iak5hbWUgPSBuYW1lLCBudWxsYWJsZSA9IHRydWUgfTogQ29sdW1uT3B0aW9ucykge1xuICAgIGlmICh0aGlzLmZpcnN0Um93V3JpdHRlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2x1bW5zIGNhbm5vdCBiZSBhZGRlZCB0byBidWxrIGluc2VydCBhZnRlciB0aGUgZmlyc3Qgcm93IGhhcyBiZWVuIHdyaXR0ZW4uJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmV4ZWN1dGlvblN0YXJ0ZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29sdW1ucyBjYW5ub3QgYmUgYWRkZWQgdG8gYnVsayBpbnNlcnQgYWZ0ZXIgZXhlY3V0aW9uIGhhcyBzdGFydGVkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbjogQ29sdW1uID0ge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIG91dHB1dDogb3V0cHV0LFxuICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvbixcbiAgICAgIHNjYWxlOiBzY2FsZSxcbiAgICAgIG9iak5hbWU6IG9iak5hbWUsXG4gICAgICBudWxsYWJsZTogbnVsbGFibGUsXG4gICAgICBjb2xsYXRpb246IHRoaXMuY29sbGF0aW9uXG4gICAgfTtcblxuICAgIGlmICgodHlwZS5pZCAmIDB4MzApID09PSAweDIwKSB7XG4gICAgICBpZiAoY29sdW1uLmxlbmd0aCA9PSBudWxsICYmIHR5cGUucmVzb2x2ZUxlbmd0aCkge1xuICAgICAgICBjb2x1bW4ubGVuZ3RoID0gdHlwZS5yZXNvbHZlTGVuZ3RoKGNvbHVtbik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUucmVzb2x2ZVByZWNpc2lvbiAmJiBjb2x1bW4ucHJlY2lzaW9uID09IG51bGwpIHtcbiAgICAgIGNvbHVtbi5wcmVjaXNpb24gPSB0eXBlLnJlc29sdmVQcmVjaXNpb24oY29sdW1uKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZS5yZXNvbHZlU2NhbGUgJiYgY29sdW1uLnNjYWxlID09IG51bGwpIHtcbiAgICAgIGNvbHVtbi5zY2FsZSA9IHR5cGUucmVzb2x2ZVNjYWxlKGNvbHVtbik7XG4gICAgfVxuXG4gICAgdGhpcy5jb2x1bW5zLnB1c2goY29sdW1uKTtcblxuICAgIHRoaXMuY29sdW1uc0J5TmFtZVtuYW1lXSA9IGNvbHVtbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0T3B0aW9uc1NxbCgpIHtcbiAgICBjb25zdCBhZGRPcHRpb25zID0gW107XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5jaGVja0NvbnN0cmFpbnRzKSB7XG4gICAgICBhZGRPcHRpb25zLnB1c2goJ0NIRUNLX0NPTlNUUkFJTlRTJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMuZmlyZVRyaWdnZXJzKSB7XG4gICAgICBhZGRPcHRpb25zLnB1c2goJ0ZJUkVfVFJJR0dFUlMnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5idWxrT3B0aW9ucy5rZWVwTnVsbHMpIHtcbiAgICAgIGFkZE9wdGlvbnMucHVzaCgnS0VFUF9OVUxMUycpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJ1bGtPcHRpb25zLmxvY2tUYWJsZSkge1xuICAgICAgYWRkT3B0aW9ucy5wdXNoKCdUQUJMT0NLJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYnVsa09wdGlvbnMub3JkZXIpIHtcbiAgICAgIGNvbnN0IG9yZGVyQ29sdW1ucyA9IFtdO1xuXG4gICAgICBmb3IgKGNvbnN0IFtjb2x1bW4sIGRpcmVjdGlvbl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5idWxrT3B0aW9ucy5vcmRlcikpIHtcbiAgICAgICAgb3JkZXJDb2x1bW5zLnB1c2goYCR7Y29sdW1ufSAke2RpcmVjdGlvbn1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9yZGVyQ29sdW1ucy5sZW5ndGgpIHtcbiAgICAgICAgYWRkT3B0aW9ucy5wdXNoKGBPUkRFUiAoJHtvcmRlckNvbHVtbnMuam9pbignLCAnKX0pYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFkZE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGAgV0lUSCAoJHthZGRPcHRpb25zLmpvaW4oJywnKX0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0QnVsa0luc2VydFNxbCgpIHtcbiAgICBsZXQgc3FsID0gJ2luc2VydCBidWxrICcgKyB0aGlzLnRhYmxlICsgJygnO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICBzcWwgKz0gJywgJztcbiAgICAgIH1cbiAgICAgIHNxbCArPSAnWycgKyBjLm5hbWUgKyAnXSAnICsgKGMudHlwZS5kZWNsYXJhdGlvbihjKSk7XG4gICAgfVxuICAgIHNxbCArPSAnKSc7XG5cbiAgICBzcWwgKz0gdGhpcy5nZXRPcHRpb25zU3FsKCk7XG4gICAgcmV0dXJuIHNxbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGlzIHNpbXBseSBhIGhlbHBlciB1dGlsaXR5IGZ1bmN0aW9uIHdoaWNoIHJldHVybnMgYSBgQ1JFQVRFIFRBQkxFIFNRTGAgc3RhdGVtZW50IGJhc2VkIG9uIHRoZSBjb2x1bW5zIGFkZGVkIHRvIHRoZSBidWxrTG9hZCBvYmplY3QuXG4gICAqIFRoaXMgbWF5IGJlIHBhcnRpY3VsYXJseSBoYW5keSB3aGVuIHlvdSB3YW50IHRvIGluc2VydCBpbnRvIGEgdGVtcG9yYXJ5IHRhYmxlIChhIHRhYmxlIHdoaWNoIHN0YXJ0cyB3aXRoIGAjYCkuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIHZhciBzcWwgPSBidWxrTG9hZC5nZXRUYWJsZUNyZWF0aW9uU3FsKCk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBBIHNpZGUgbm90ZSBvbiBidWxrIGluc2VydGluZyBpbnRvIHRlbXBvcmFyeSB0YWJsZXM6IGlmIHlvdSB3YW50IHRvIGFjY2VzcyBhIGxvY2FsIHRlbXBvcmFyeSB0YWJsZSBhZnRlciBleGVjdXRpbmcgdGhlIGJ1bGsgbG9hZCxcbiAgICogeW91J2xsIG5lZWQgdG8gdXNlIHRoZSBzYW1lIGNvbm5lY3Rpb24gYW5kIGV4ZWN1dGUgeW91ciByZXF1ZXN0cyB1c2luZyBbW0Nvbm5lY3Rpb24uZXhlY1NxbEJhdGNoXV0gaW5zdGVhZCBvZiBbW0Nvbm5lY3Rpb24uZXhlY1NxbF1dXG4gICAqL1xuICBnZXRUYWJsZUNyZWF0aW9uU3FsKCkge1xuICAgIGxldCBzcWwgPSAnQ1JFQVRFIFRBQkxFICcgKyB0aGlzLnRhYmxlICsgJyhcXG4nO1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNvbHVtbnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSB0aGlzLmNvbHVtbnNbaV07XG4gICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICBzcWwgKz0gJyxcXG4nO1xuICAgICAgfVxuICAgICAgc3FsICs9ICdbJyArIGMubmFtZSArICddICcgKyAoYy50eXBlLmRlY2xhcmF0aW9uKGMpKTtcbiAgICAgIGlmIChjLm51bGxhYmxlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc3FsICs9ICcgJyArIChjLm51bGxhYmxlID8gJ05VTEwnIDogJ05PVCBOVUxMJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHNxbCArPSAnXFxuKSc7XG4gICAgcmV0dXJuIHNxbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgZ2V0Q29sTWV0YURhdGEoKSB7XG4gICAgY29uc3QgdEJ1ZiA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDEwMCwgbnVsbCwgdHJ1ZSk7XG4gICAgLy8gVG9rZW5UeXBlXG4gICAgdEJ1Zi53cml0ZVVJbnQ4KFRPS0VOX1RZUEUuQ09MTUVUQURBVEEpO1xuICAgIC8vIENvdW50XG4gICAgdEJ1Zi53cml0ZVVJbnQxNkxFKHRoaXMuY29sdW1ucy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaiA9IDAsIGxlbiA9IHRoaXMuY29sdW1ucy5sZW5ndGg7IGogPCBsZW47IGorKykge1xuICAgICAgY29uc3QgYyA9IHRoaXMuY29sdW1uc1tqXTtcbiAgICAgIC8vIFVzZXJUeXBlXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJykge1xuICAgICAgICB0QnVmLndyaXRlVUludDE2TEUoMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0QnVmLndyaXRlVUludDMyTEUoMCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEZsYWdzXG4gICAgICBsZXQgZmxhZ3MgPSBGTEFHUy51cGRhdGVhYmxlUmVhZFdyaXRlO1xuICAgICAgaWYgKGMubnVsbGFibGUpIHtcbiAgICAgICAgZmxhZ3MgfD0gRkxBR1MubnVsbGFibGU7XG4gICAgICB9IGVsc2UgaWYgKGMubnVsbGFibGUgPT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMudGRzVmVyc2lvbiA+PSAnN18yJykge1xuICAgICAgICBmbGFncyB8PSBGTEFHUy5udWxsYWJsZVVua25vd247XG4gICAgICB9XG4gICAgICB0QnVmLndyaXRlVUludDE2TEUoZmxhZ3MpO1xuXG4gICAgICAvLyBUWVBFX0lORk9cbiAgICAgIHRCdWYud3JpdGVCdWZmZXIoYy50eXBlLmdlbmVyYXRlVHlwZUluZm8oYywgdGhpcy5vcHRpb25zKSk7XG5cbiAgICAgIC8vIFRhYmxlTmFtZVxuICAgICAgaWYgKGMudHlwZS5oYXNUYWJsZU5hbWUpIHtcbiAgICAgICAgdEJ1Zi53cml0ZVVzVmFyY2hhcih0aGlzLnRhYmxlLCAndWNzMicpO1xuICAgICAgfVxuXG4gICAgICAvLyBDb2xOYW1lXG4gICAgICB0QnVmLndyaXRlQlZhcmNoYXIoYy5uYW1lLCAndWNzMicpO1xuICAgIH1cbiAgICByZXR1cm4gdEJ1Zi5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgYSB0aW1lb3V0IGZvciB0aGlzIGJ1bGsgbG9hZC5cbiAgICpcbiAgICogYGBganNcbiAgICogYnVsa0xvYWQuc2V0VGltZW91dCh0aW1lb3V0KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSB0aW1lb3V0IFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIGJlZm9yZSB0aGUgYnVsayBsb2FkIGlzIGNvbnNpZGVyZWQgZmFpbGVkLCBvciAwIGZvciBubyB0aW1lb3V0LlxuICAgKiAgIFdoZW4gbm8gdGltZW91dCBpcyBzZXQgZm9yIHRoZSBidWxrIGxvYWQsIHRoZSBbW0Nvbm5lY3Rpb25PcHRpb25zLnJlcXVlc3RUaW1lb3V0XV0gb2YgdGhlIENvbm5lY3Rpb24gaXMgdXNlZC5cbiAgICovXG4gIHNldFRpbWVvdXQodGltZW91dD86IG51bWJlcikge1xuICAgIHRoaXMudGltZW91dCA9IHRpbWVvdXQ7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZURvbmVUb2tlbigpIHtcbiAgICAvLyBJdCBtaWdodCBiZSBuaWNlIHRvIG1ha2UgRG9uZVRva2VuIGEgY2xhc3MgaWYgYW55dGhpbmcgbmVlZHMgdG8gY3JlYXRlIHRoZW0sIGJ1dCBmb3Igbm93LCBqdXN0IGRvIGl0IGhlcmVcbiAgICBjb25zdCB0QnVmID0gbmV3IFdyaXRhYmxlVHJhY2tpbmdCdWZmZXIodGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPCAnN18yJyA/IDkgOiAxMyk7XG4gICAgdEJ1Zi53cml0ZVVJbnQ4KFRPS0VOX1RZUEUuRE9ORSk7XG4gICAgY29uc3Qgc3RhdHVzID0gRE9ORV9TVEFUVVMuRklOQUw7XG4gICAgdEJ1Zi53cml0ZVVJbnQxNkxFKHN0YXR1cyk7XG4gICAgdEJ1Zi53cml0ZVVJbnQxNkxFKDApOyAvLyBDdXJDbWQgKFREUyBpZ25vcmVzIHRoaXMpXG4gICAgdEJ1Zi53cml0ZVVJbnQzMkxFKDApOyAvLyByb3cgY291bnQgLSBkb2Vzbid0IHJlYWxseSBtYXR0ZXJcbiAgICBpZiAodGhpcy5vcHRpb25zLnRkc1ZlcnNpb24gPj0gJzdfMicpIHtcbiAgICAgIHRCdWYud3JpdGVVSW50MzJMRSgwKTsgLy8gcm93IGNvdW50IGlzIDY0IGJpdHMgaW4gPj0gVERTIDcuMlxuICAgIH1cbiAgICByZXR1cm4gdEJ1Zi5kYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5jZWwoKSB7XG4gICAgaWYgKHRoaXMuY2FuY2VsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNhbmNlbGVkID0gdHJ1ZTtcbiAgICB0aGlzLmVtaXQoJ2NhbmNlbCcpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1bGtMb2FkO1xubW9kdWxlLmV4cG9ydHMgPSBCdWxrTG9hZDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsT0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsdUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUdBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUFtRCxTQUFBRSx1QkFBQUcsR0FBQSxXQUFBQSxHQUFBLElBQUFBLEdBQUEsQ0FBQUMsVUFBQSxHQUFBRCxHQUFBLEtBQUFFLE9BQUEsRUFBQUYsR0FBQTtBQUtuRDtBQUNBO0FBQ0E7QUFDQSxNQUFNRyxLQUFLLEdBQUc7RUFDWkMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ2hCQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDZkMsbUJBQW1CLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDM0JDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDO0VBQ3pCQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFDaEJDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQztFQUFFO0VBQ2xCQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLENBQUM7RUFBRTtFQUN6QkMsZUFBZSxFQUFFLENBQUMsSUFBSSxFQUFFO0VBQUU7RUFDMUJDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRTtFQUFFO0VBQ2pCQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUU7RUFBRTtFQUNkQyxlQUFlLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUMzQixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLE1BQU1DLFdBQVcs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
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
type Encoding = 'utf-8' | 'CP437' | 'CP850' | 'CP874' | 'CP932' | 'CP936' | 'CP949' | 'CP950' | 'CP1250' | 'CP1251' | 'CP1252' | 'CP1253' | 'CP1254' | 'CP1255' | 'CP1256' | 'CP1257' | 'CP1258';
|
|
2
|
+
export declare const codepageByLanguageId: {
|
|
3
|
+
[key: number]: Encoding;
|
|
4
|
+
};
|
|
5
|
+
export declare const codepageBySortId: {
|
|
6
|
+
[key: number]: Encoding;
|
|
7
|
+
};
|
|
8
|
+
export declare const Flags: {
|
|
9
|
+
IGNORE_CASE: number;
|
|
10
|
+
IGNORE_ACCENT: number;
|
|
11
|
+
IGNORE_KANA: number;
|
|
12
|
+
IGNORE_WIDTH: number;
|
|
13
|
+
BINARY: number;
|
|
14
|
+
BINARY2: number;
|
|
15
|
+
UTF8: number;
|
|
16
|
+
};
|
|
17
|
+
export declare class Collation {
|
|
18
|
+
readonly lcid: number;
|
|
19
|
+
readonly flags: number;
|
|
20
|
+
readonly version: number;
|
|
21
|
+
readonly sortId: number;
|
|
22
|
+
readonly codepage: Encoding | undefined;
|
|
23
|
+
private buffer;
|
|
24
|
+
static fromBuffer(buffer: Buffer, offset?: number): Collation;
|
|
25
|
+
constructor(lcid: number, flags: number, version: number, sortId: number);
|
|
26
|
+
toBuffer(): Buffer;
|
|
27
|
+
}
|
|
28
|
+
export {};
|