@bitgo/utxo-bin 2.49.9 → 3.0.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 (85) hide show
  1. package/dist/bin/index.js +4 -4
  2. package/dist/src/InputParser.d.ts.map +1 -1
  3. package/dist/src/InputParser.js +2 -2
  4. package/dist/src/OutputParser.d.ts +1 -1
  5. package/dist/src/OutputParser.d.ts.map +1 -1
  6. package/dist/src/OutputParser.js +1 -1
  7. package/dist/src/ScriptParser.d.ts +1 -1
  8. package/dist/src/ScriptParser.d.ts.map +1 -1
  9. package/dist/src/ScriptParser.js +2 -2
  10. package/dist/src/TxParser.d.ts.map +1 -1
  11. package/dist/src/TxParser.js +1 -1
  12. package/dist/src/args/format.d.ts +8 -0
  13. package/dist/src/args/format.d.ts.map +1 -0
  14. package/dist/src/args/format.js +15 -0
  15. package/dist/src/args/index.d.ts +5 -0
  16. package/dist/src/args/index.d.ts.map +1 -0
  17. package/dist/src/args/index.js +21 -0
  18. package/dist/src/args/parseNetwork.d.ts +22 -0
  19. package/dist/src/args/parseNetwork.d.ts.map +1 -0
  20. package/dist/src/args/parseNetwork.js +34 -0
  21. package/dist/src/args/parseString.d.ts +41 -0
  22. package/dist/src/args/parseString.d.ts.map +1 -0
  23. package/dist/src/args/parseString.js +120 -0
  24. package/dist/src/args/walletKeys.d.ts +38 -0
  25. package/dist/src/args/walletKeys.d.ts.map +1 -0
  26. package/dist/src/args/walletKeys.js +29 -0
  27. package/dist/src/bip32.d.ts +1 -1
  28. package/dist/src/bip32.d.ts.map +1 -1
  29. package/dist/src/bip32.js +13 -11
  30. package/dist/src/commands/cmdAddress/cmdGenerate.d.ts +21 -0
  31. package/dist/src/commands/cmdAddress/cmdGenerate.d.ts.map +1 -0
  32. package/dist/src/commands/cmdAddress/cmdGenerate.js +89 -0
  33. package/dist/src/commands/cmdAddress/cmdParse.d.ts +20 -0
  34. package/dist/src/commands/cmdAddress/cmdParse.d.ts.map +1 -0
  35. package/dist/src/commands/cmdAddress/cmdParse.js +28 -0
  36. package/dist/src/commands/cmdAddress/index.d.ts +3 -0
  37. package/dist/src/commands/cmdAddress/index.d.ts.map +1 -0
  38. package/dist/src/commands/cmdAddress/index.js +16 -0
  39. package/dist/src/commands/cmdBip32.d.ts +16 -0
  40. package/dist/src/commands/cmdBip32.d.ts.map +1 -0
  41. package/dist/src/commands/cmdBip32.js +45 -0
  42. package/dist/src/commands/cmdParseScript.d.ts +18 -0
  43. package/dist/src/commands/cmdParseScript.d.ts.map +1 -0
  44. package/dist/src/commands/cmdParseScript.js +27 -0
  45. package/dist/src/commands/cmdParseTx.d.ts +30 -0
  46. package/dist/src/commands/cmdParseTx.d.ts.map +1 -0
  47. package/dist/src/commands/cmdParseTx.js +120 -0
  48. package/dist/src/commands/formatString.d.ts +8 -0
  49. package/dist/src/commands/formatString.d.ts.map +1 -0
  50. package/dist/src/commands/formatString.js +15 -0
  51. package/dist/src/commands/index.d.ts +5 -0
  52. package/dist/src/commands/index.d.ts.map +1 -0
  53. package/dist/src/commands/index.js +21 -0
  54. package/dist/src/fetch.d.ts +3 -0
  55. package/dist/src/fetch.d.ts.map +1 -1
  56. package/dist/src/fetch.js +16 -3
  57. package/dist/src/format.d.ts.map +1 -1
  58. package/dist/src/format.js +1 -1
  59. package/dist/src/generateAddress.d.ts +24 -12
  60. package/dist/src/generateAddress.d.ts.map +1 -1
  61. package/dist/src/generateAddress.js +55 -19
  62. package/dist/test/args/stringToBuffer.d.ts.map +1 -0
  63. package/dist/test/args/stringToBuffer.js +16 -0
  64. package/dist/test/bip32.js +12 -11
  65. package/dist/test/bip32.util.d.ts.map +1 -1
  66. package/dist/test/bip32.util.js +2 -2
  67. package/dist/test/generateAddress.js +27 -10
  68. package/dist/test/parseAddress.d.ts.map +1 -1
  69. package/dist/test/parseAddress.js +4 -3
  70. package/dist/test/parseScript.js +2 -2
  71. package/dist/test/parseTransaction.js +3 -3
  72. package/dist/tsconfig.tsbuildinfo +1 -1
  73. package/package.json +6 -5
  74. package/dist/src/commands.d.ts +0 -96
  75. package/dist/src/commands.d.ts.map +0 -1
  76. package/dist/src/commands.js +0 -310
  77. package/dist/src/parseString.d.ts +0 -5
  78. package/dist/src/parseString.d.ts.map +0 -1
  79. package/dist/src/parseString.js +0 -29
  80. package/dist/src/readStdin.d.ts +0 -5
  81. package/dist/src/readStdin.d.ts.map +0 -1
  82. package/dist/src/readStdin.js +0 -42
  83. package/dist/test/stringToBuffer.d.ts.map +0 -1
  84. package/dist/test/stringToBuffer.js +0 -16
  85. /package/dist/test/{stringToBuffer.d.ts → args/stringToBuffer.d.ts} +0 -0
@@ -1,310 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.cmdParseXpub = exports.cmdGenerateAddress = exports.cmdParseScript = exports.cmdParseAddress = exports.cmdParseTx = exports.getScriptParser = exports.getAddressParser = exports.getTxParser = void 0;
4
- const fs = require("fs");
5
- const process = require("process");
6
- const util_1 = require("util");
7
- const clipboardy_cjs_1 = require("clipboardy-cjs");
8
- const utxolib = require("@bitgo/utxo-lib");
9
- const Parser_1 = require("./Parser");
10
- const format_1 = require("./format");
11
- const fetch_1 = require("./fetch");
12
- const TxParser_1 = require("./TxParser");
13
- const AddressParser_1 = require("./AddressParser");
14
- const blockapis_1 = require("@bitgo/blockapis");
15
- const readStdin_1 = require("./readStdin");
16
- const parseUnknown_1 = require("./parseUnknown");
17
- const ParserTx_1 = require("./ParserTx");
18
- const ScriptParser_1 = require("./ScriptParser");
19
- const parseString_1 = require("./parseString");
20
- const generateAddress_1 = require("./generateAddress");
21
- const bip32_1 = require("./bip32");
22
- async function getClient({ cache }) {
23
- if (cache) {
24
- const mkdir = (0, util_1.promisify)(fs.mkdir);
25
- const dir = `${process.env.HOME}/.cache/utxo-bin/`;
26
- await mkdir(dir, { recursive: true });
27
- return new blockapis_1.CachingHttpClient(dir);
28
- }
29
- return new blockapis_1.BaseHttpClient();
30
- }
31
- function getNetworkForName(name) {
32
- const network = utxolib.networks[name];
33
- if (!network) {
34
- throw new Error(`invalid network ${name}`);
35
- }
36
- return network;
37
- }
38
- function getNetwork(argv) {
39
- return getNetworkForName(argv.network);
40
- }
41
- function formatString(parsed, argv) {
42
- switch (argv.format) {
43
- case 'json':
44
- return JSON.stringify(parsed, null, 2);
45
- case 'tree':
46
- return (0, format_1.formatTree)(parsed, { hide: argv.all ? [] : undefined });
47
- }
48
- throw new Error(`invalid format ${argv.format}`);
49
- }
50
- function resolveNetwork(args) {
51
- if (args.network) {
52
- return { ...args, network: getNetworkForName(args.network) };
53
- }
54
- return { ...args, network: undefined };
55
- }
56
- function getTxParser(argv) {
57
- if (argv.all) {
58
- return new TxParser_1.TxParser({ ...argv, ...TxParser_1.TxParser.PARSE_ALL });
59
- }
60
- return new TxParser_1.TxParser({
61
- ...argv,
62
- parseSignatureData: {
63
- script: argv.parseSignatureData,
64
- ecdsa: argv.parseSignatureData,
65
- schnorr: argv.parseSignatureData,
66
- },
67
- });
68
- }
69
- exports.getTxParser = getTxParser;
70
- function getAddressParser(argv) {
71
- return new AddressParser_1.AddressParser(resolveNetwork(argv));
72
- }
73
- exports.getAddressParser = getAddressParser;
74
- function getScriptParser(argv) {
75
- return new ScriptParser_1.ScriptParser(resolveNetwork(argv));
76
- }
77
- exports.getScriptParser = getScriptParser;
78
- exports.cmdParseTx = {
79
- command: 'parseTx [path]',
80
- aliases: ['parse', 'tx'],
81
- describe: 'Display transaction components in human-readable form. ' +
82
- 'Supported formats are Partially Signed Bitcoin Transaction (PSBT), ' +
83
- 'bitcoinjs-lib encoding (Legacy) or fully signed transaction. ' +
84
- 'Bytes must be encoded in hex or base64 format.',
85
- builder(b) {
86
- return b
87
- .option('path', { type: 'string', nargs: 1, default: '' })
88
- .option('stdin', { type: 'boolean', default: false })
89
- .option('data', { type: 'string', description: 'transaction bytes (hex or base64)', alias: 'hex' })
90
- .option('clipboard', { type: 'boolean', default: false })
91
- .option('txid', { type: 'string' })
92
- .option('blockHeight', { type: 'number' })
93
- .option('txIndex', { type: 'number' })
94
- .option('fetchAll', { type: 'boolean', default: false })
95
- .option('fetchStatus', { type: 'boolean', default: false })
96
- .option('fetchInputs', { type: 'boolean', default: false })
97
- .option('fetchSpends', { type: 'boolean', default: false })
98
- .option('network', { alias: 'n', type: 'string', demandOption: true })
99
- .option('parseScriptAsm', { alias: 'scriptasm', type: 'boolean', default: false })
100
- .option('parseScriptData', { alias: 'scriptdata', type: 'boolean', default: false })
101
- .option('parseSignatureData', { alias: 'sigdata', type: 'boolean', default: false })
102
- .option('parseOutputScript', { type: 'boolean', default: false })
103
- .option('parseAsUnknown', {
104
- type: 'boolean',
105
- default: false,
106
- description: 'show plain Javascript object without any post-processing',
107
- })
108
- .option('maxOutputs', { type: 'number' })
109
- .option('vin', { type: 'number' })
110
- .array('vin')
111
- .option('vout', { type: 'number' })
112
- .array('vout')
113
- .option('finalize', {
114
- type: 'boolean',
115
- default: false,
116
- description: 'finalize PSBT and parse result instead of PSBT',
117
- })
118
- .option('all', { type: 'boolean', default: false })
119
- .option('cache', {
120
- type: 'boolean',
121
- default: false,
122
- description: 'use local cache for http responses',
123
- })
124
- .option('format', { choices: ['tree', 'json'], default: 'tree' })
125
- .option('parseError', { choices: ['continue', 'throw'], default: 'continue' });
126
- },
127
- async handler(argv) {
128
- const network = getNetwork(argv);
129
- let data;
130
- const httpClient = await getClient({ cache: argv.cache });
131
- if (argv.txid || argv.blockHeight !== undefined || argv.txIndex !== undefined) {
132
- data = await (0, fetch_1.fetchTransactionHex)(httpClient, {
133
- txid: argv.txid,
134
- blockHeight: argv.blockHeight,
135
- txIndex: argv.txIndex,
136
- }, network);
137
- }
138
- if (argv.stdin || argv.path === '-') {
139
- if (data) {
140
- throw new Error(`conflicting arguments`);
141
- }
142
- console.log('Reading from stdin. Please paste hex-encoded transaction data.');
143
- console.log('After inserting data, press Ctrl-D to finish. Press Ctrl-C to cancel.');
144
- if (process.stdin.isTTY) {
145
- data = await (0, readStdin_1.readStdin)();
146
- }
147
- else {
148
- data = await fs.promises.readFile('/dev/stdin', 'utf8');
149
- }
150
- }
151
- if (argv.clipboard) {
152
- if (data) {
153
- throw new Error(`conflicting arguments`);
154
- }
155
- data = await clipboardy_cjs_1.default.read();
156
- }
157
- if (argv.path) {
158
- if (data) {
159
- throw new Error(`conflicting arguments`);
160
- }
161
- data = (await fs.promises.readFile(argv.path, 'utf8')).toString();
162
- }
163
- if (argv.data) {
164
- if (data) {
165
- throw new Error(`conflicting arguments`);
166
- }
167
- data = argv.data;
168
- }
169
- // strip whitespace
170
- if (!data) {
171
- throw new Error(`no txdata`);
172
- }
173
- const bytes = (0, parseString_1.stringToBuffer)(data, ['hex', 'base64']);
174
- let tx = utxolib.bitgo.isPsbt(bytes)
175
- ? utxolib.bitgo.createPsbtFromBuffer(bytes, network)
176
- : utxolib.bitgo.createTransactionFromBuffer(bytes, network, { amountType: 'bigint' });
177
- const { id: txid } = (0, ParserTx_1.getParserTxProperties)(tx, undefined);
178
- if (tx instanceof utxolib.bitgo.UtxoTransaction) {
179
- if (argv.txid && txid !== argv.txid) {
180
- throw new Error(`computed txid does not match txid argument`);
181
- }
182
- }
183
- else if (argv.finalize) {
184
- tx.finalizeAllInputs();
185
- tx = tx.extractTransaction();
186
- }
187
- if (argv.parseAsUnknown) {
188
- console.log(formatString((0, parseUnknown_1.parseUnknown)(new Parser_1.Parser(), 'tx', tx), argv));
189
- return;
190
- }
191
- if (argv.fetchAll) {
192
- argv.fetchStatus = true;
193
- argv.fetchInputs = true;
194
- argv.fetchSpends = true;
195
- }
196
- const parsed = getTxParser(argv).parse(tx, {
197
- status: argv.fetchStatus && txid ? await (0, fetch_1.fetchTransactionStatus)(httpClient, txid, network) : undefined,
198
- prevOutputs: argv.fetchInputs ? await (0, fetch_1.fetchPrevOutputs)(httpClient, tx) : undefined,
199
- prevOutputSpends: argv.fetchSpends ? await (0, fetch_1.fetchPrevOutputSpends)(httpClient, tx) : undefined,
200
- outputSpends: argv.fetchSpends && tx instanceof utxolib.bitgo.UtxoTransaction
201
- ? await (0, fetch_1.fetchOutputSpends)(httpClient, tx)
202
- : undefined,
203
- });
204
- console.log(formatString(parsed, argv));
205
- },
206
- };
207
- exports.cmdParseAddress = {
208
- command: 'parseAddress [address]',
209
- aliases: ['address'],
210
- describe: 'parse address',
211
- builder(b) {
212
- return b
213
- .option('network', { alias: 'n', type: 'string' })
214
- .option('format', { choices: ['tree', 'json'], default: 'tree' })
215
- .option('convert', { type: 'boolean', default: false })
216
- .option('all', { type: 'boolean', default: false })
217
- .positional('address', { type: 'string', demandOption: true });
218
- },
219
- handler(argv) {
220
- const parsed = getAddressParser(argv).parse(argv.address);
221
- console.log(formatString(parsed, argv));
222
- },
223
- };
224
- exports.cmdParseScript = {
225
- command: 'parseScript [script]',
226
- describe: 'parse script',
227
- builder(b) {
228
- return b
229
- .option('network', { alias: 'n', type: 'string' })
230
- .option('format', { choices: ['tree', 'json'], default: 'tree' })
231
- .option('all', { type: 'boolean', default: false })
232
- .positional('script', { type: 'string', demandOption: true });
233
- },
234
- handler(argv) {
235
- const script = (0, parseString_1.stringToBuffer)(argv.script, 'hex');
236
- const parsed = getScriptParser(argv).parse(script);
237
- console.log(formatString(parsed, { ...argv, all: true }));
238
- },
239
- };
240
- exports.cmdGenerateAddress = {
241
- command: 'generateAddresses',
242
- describe: 'generate addresses',
243
- builder(b) {
244
- return b
245
- .option('network', { alias: 'n', type: 'string' })
246
- .option('userKey', { type: 'string', demandOption: true })
247
- .option('userKeyPrefix', { type: 'string', default: '0/0' })
248
- .option('backupKey', { type: 'string', demandOption: true })
249
- .option('backupKeyPrefix', { type: 'string', default: '0/0' })
250
- .option('bitgoKey', { type: 'string', demandOption: true })
251
- .option('bitgoKeyPrefix', { type: 'string', default: '0/0' })
252
- .option('format', {
253
- type: 'string',
254
- default: '%p0\t%a',
255
- description: `Format string. Placeholders: ${(0, generateAddress_1.getAddressPlaceholderDescription)()}`,
256
- })
257
- .option('chain', { type: 'number', description: 'Address chain' })
258
- .array('chain')
259
- .option('index', {
260
- type: 'string',
261
- description: 'Address index. Can be given as a range (e.g. 0-99). Takes precedence over --limit.',
262
- })
263
- .array('index')
264
- .option('limit', {
265
- type: 'number',
266
- description: 'Alias for --index with range starting at 0 to limit-1.',
267
- default: 100,
268
- });
269
- },
270
- handler(argv) {
271
- var _a;
272
- let indexRange;
273
- if (argv.index) {
274
- indexRange = (0, generateAddress_1.parseIndexRange)(argv.index);
275
- }
276
- else if (argv.limit) {
277
- indexRange = (0, generateAddress_1.getRange)(0, argv.limit - 1);
278
- }
279
- else {
280
- throw new Error(`no index or limit`);
281
- }
282
- for (const address of (0, generateAddress_1.generateAddress)({
283
- ...argv,
284
- index: indexRange,
285
- network: getNetworkForName((_a = argv.network) !== null && _a !== void 0 ? _a : 'bitcoin'),
286
- })) {
287
- if (argv.format === 'tree') {
288
- console.log((0, generateAddress_1.formatAddressTree)(address));
289
- }
290
- else {
291
- console.log((0, generateAddress_1.formatAddressWithFormatString)(address, argv.format));
292
- }
293
- }
294
- },
295
- };
296
- exports.cmdParseXpub = {
297
- command: 'parseXpub [xpub]',
298
- describe: 'show xpub info',
299
- builder(b) {
300
- return b
301
- .positional('xpub', { type: 'string', demandOption: true })
302
- .option('format', { choices: ['tree', 'json'], default: 'tree' })
303
- .option('all', { type: 'boolean', default: false })
304
- .option('derive', { type: 'string', description: 'show xpub derived with path' });
305
- },
306
- handler(argv) {
307
- console.log(formatString((0, bip32_1.parseXpub)(argv.xpub, { derive: argv.derive }), argv));
308
- },
309
- };
310
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEseUJBQXlCO0FBQ3pCLG1DQUFtQztBQUNuQywrQkFBaUM7QUFFakMsbURBQXdDO0FBQ3hDLDJDQUEyQztBQUUzQyxxQ0FBOEM7QUFDOUMscUNBQXNDO0FBQ3RDLG1DQU1pQjtBQUNqQix5Q0FBb0Q7QUFDcEQsbURBQWdEO0FBQ2hELGdEQUFpRjtBQUNqRiwyQ0FBd0M7QUFDeEMsaURBQThDO0FBQzlDLHlDQUFtRDtBQUNuRCxpREFBOEM7QUFDOUMsK0NBQStDO0FBQy9DLHVEQU8yQjtBQUMzQixtQ0FBb0M7QUFvRHBDLEtBQUssVUFBVSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQXNCO0lBQ3BELElBQUksS0FBSyxFQUFFO1FBQ1QsTUFBTSxLQUFLLEdBQUcsSUFBQSxnQkFBUyxFQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsQyxNQUFNLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxtQkFBbUIsQ0FBQztRQUNuRCxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN0QyxPQUFPLElBQUksNkJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDbkM7SUFDRCxPQUFPLElBQUksMEJBQWMsRUFBRSxDQUFDO0FBQzlCLENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLElBQVk7SUFDckMsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUEyQixDQUFDLENBQUM7SUFDOUQsSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNaLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDLENBQUM7S0FDNUM7SUFDRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBUyxV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QUNMLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUMxRCxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQVcsQ0FBQzthQUN6RSxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDbEQsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLDZCQUE2QixFQUFFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBQ0QsT0FBTyxDQUFDLElBQTJFO1FBQ2pGLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUEsaUJBQVMsRUFBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDakYsQ0FBQztDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQgKiBhcyB5YXJncyBmcm9tICd5YXJncyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwcm9jZXNzIGZyb20gJ3Byb2Nlc3MnO1xuaW1wb3J0IHsgcHJvbWlzaWZ5IH0gZnJvbSAndXRpbCc7XG5cbmltcG9ydCBjbGlwYm9hcmR5IGZyb20gJ2NsaXBib2FyZHktY2pzJztcbmltcG9ydCAqIGFzIHV0eG9saWIgZnJvbSAnQGJpdGdvL3V0eG8tbGliJztcblxuaW1wb3J0IHsgUGFyc2VyLCBQYXJzZXJOb2RlIH0gZnJvbSAnLi9QYXJzZXInO1xuaW1wb3J0IHsgZm9ybWF0VHJlZSB9IGZyb20gJy4vZm9ybWF0JztcbmltcG9ydCB7XG4gIGZldGNoT3V0cHV0U3BlbmRzLFxuICBmZXRjaFByZXZPdXRwdXRzLFxuICBmZXRjaFByZXZPdXRwdXRTcGVuZHMsXG4gIGZldGNoVHJhbnNhY3Rpb25IZXgsXG4gIGZldGNoVHJhbnNhY3Rpb25TdGF0dXMsXG59IGZyb20gJy4vZmV0Y2gnO1xuaW1wb3J0IHsgVHhQYXJzZXIsIFR4UGFyc2VyQXJncyB9IGZyb20gJy4vVHhQYXJzZXInO1xuaW1wb3J0IHsgQWRkcmVzc1BhcnNlciB9IGZyb20gJy4vQWRkcmVzc1BhcnNlcic7XG5pbXBvcnQgeyBCYXNlSHR0cENsaWVudCwgQ2FjaGluZ0h0dHBDbGllbnQsIEh0dHBDbGllbnQgfSBmcm9tICdAYml0Z28vYmxvY2thcGlzJztcbmltcG9ydCB7IHJlYWRTdGRpbiB9IGZyb20gJy4vcmVhZFN0ZGluJztcbmltcG9ydCB7IHBhcnNlVW5rbm93biB9IGZyb20gJy4vcGFyc2VVbmtub3duJztcbmltcG9ydCB7IGdldFBhcnNlclR4UHJvcGVydGllcyB9IGZyb20gJy4vUGFyc2VyVHgnO1xuaW1wb3J0IHsgU2NyaXB0UGFyc2VyIH0gZnJvbSAnLi9TY3JpcHRQYXJzZXInO1xuaW1wb3J0IHsgc3RyaW5nVG9CdWZmZXIgfSBmcm9tICcuL3BhcnNlU3RyaW5nJztcbmltcG9ydCB7XG4gIGZvcm1hdEFkZHJlc3NUcmVlLFxuICBmb3JtYXRBZGRyZXNzV2l0aEZvcm1hdFN0cmluZyxcbiAgZ2VuZXJhdGVBZGRyZXNzLFxuICBnZXRBZGRyZXNzUGxhY2Vob2xkZXJEZXNjcmlwdGlvbixcbiAgZ2V0UmFuZ2UsXG4gIHBhcnNlSW5kZXhSYW5nZSxcbn0gZnJvbSAnLi9nZW5lcmF0ZUFkZHJlc3MnO1xuaW1wb3J0IHsgcGFyc2VYcHViIH0gZnJvbSAnLi9iaXAzMic7XG5cbnR5cGUgT3V0cHV0Rm9ybWF0ID0gJ3RyZWUnIHwgJ2pzb24nO1xuXG50eXBlIEFyZ3NQYXJzZVRyYW5zYWN0aW9uID0ge1xuICBuZXR3b3JrOiBzdHJpbmc7XG4gIHN0ZGluOiBib29sZWFuO1xuICBjbGlwYm9hcmQ6IGJvb2xlYW47XG4gIHBhdGg/OiBzdHJpbmc7XG4gIHR4aWQ/OiBzdHJpbmc7XG4gIGJsb2NrSGVpZ2h0PzogbnVtYmVyO1xuICB0eEluZGV4PzogbnVtYmVyO1xuICBkYXRhPzogc3RyaW5nO1xuICBhbGw6IGJvb2xlYW47XG4gIGNhY2hlOiBib29sZWFuO1xuICBmb3JtYXQ6IE91dHB1dEZvcm1hdDtcbiAgZmV0Y2hBbGw6IGJvb2xlYW47XG4gIGZldGNoU3RhdHVzOiBib29sZWFuO1xuICBmZXRjaElucHV0czogYm9vbGVhbjtcbiAgZmV0Y2hTcGVuZHM6IGJvb2xlYW47XG4gIGZpbmFsaXplOiBib29sZWFuO1xuICBwYXJzZVNpZ25hdHVyZURhdGE6IGJvb2xlYW47XG4gIHBhcnNlQXNVbmtub3duOiBib29sZWFuO1xuICBwYXJzZUVycm9yOiAndGhyb3cnIHwgJ2NvbnRpbnVlJztcbn0gJiBPbWl0PFR4UGFyc2VyQXJncywgJ3BhcnNlU2lnbmF0dXJlRGF0YSc+O1xuXG50eXBlIEFyZ3NQYXJzZUFkZHJlc3MgPSB7XG4gIG5ldHdvcms/OiBzdHJpbmc7XG4gIGFsbDogYm9vbGVhbjtcbiAgZm9ybWF0OiBPdXRwdXRGb3JtYXQ7XG4gIGNvbnZlcnQ6IGJvb2xlYW47XG4gIGFkZHJlc3M6IHN0cmluZztcbn07XG5cbnR5cGUgQXJnc1BhcnNlU2NyaXB0ID0ge1xuICBuZXR3b3JrPzogc3RyaW5nO1xuICBmb3JtYXQ6IE91dHB1dEZvcm1hdDtcbiAgYWxsOiBib29sZWFuO1xuICBzY3JpcHQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIEFyZ3NHZW5lcmF0ZUFkZHJlc3MgPSB7XG4gIG5ldHdvcms/OiBzdHJpbmc7XG4gIHVzZXJLZXk6IHN0cmluZztcbiAgYmFja3VwS2V5OiBzdHJpbmc7XG4gIGJpdGdvS2V5OiBzdHJpbmc7XG4gIGNoYWluPzogbnVtYmVyW107XG4gIGZvcm1hdDogc3RyaW5nO1xuICBpbmRleD86IHN0cmluZ1tdO1xuICBsaW1pdD86IG51bWJlcjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENsaWVudCh7IGNhY2hlIH06IHsgY2FjaGU6IGJvb2xlYW4gfSk6IFByb21pc2U8SHR0cENsaWVudD4ge1xuICBpZiAoY2FjaGUpIHtcbiAgICBjb25zdCBta2RpciA9IHByb21pc2lmeShmcy5ta2Rpcik7XG4gICAgY29uc3QgZGlyID0gYCR7cHJvY2Vzcy5lbnYuSE9NRX0vLmNhY2hlL3V0eG8tYmluL2A7XG4gICAgYXdhaXQgbWtkaXIoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gbmV3IENhY2hpbmdIdHRwQ2xpZW50KGRpcik7XG4gIH1cbiAgcmV0dXJuIG5ldyBCYXNlSHR0cENsaWVudCgpO1xufVxuXG5mdW5jdGlvbiBnZXROZXR3b3JrRm9yTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgY29uc3QgbmV0d29yayA9IHV0eG9saWIubmV0d29ya3NbbmFtZSBhcyB1dHhvbGliLk5ldHdvcmtOYW1lXTtcbiAgaWYgKCFuZXR3b3JrKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIG5ldHdvcmsgJHtuYW1lfWApO1xuICB9XG4gIHJldHVybiBuZXR3b3JrO1xufVxuXG5mdW5jdGlvbiBnZXROZXR3b3JrKGFyZ3Y6IHlhcmdzLkFyZ3VtZW50czx7IG5ldHdvcms6IHN0cmluZyB9Pik6IHV0eG9saWIuTmV0d29yayB7XG4gIHJldHVybiBnZXROZXR3b3JrRm9yTmFtZShhcmd2Lm5ldHdvcmspO1xufVxuXG50eXBlIEZvcm1hdFN0cmluZ0FyZ3MgPSB7XG4gIGZvcm1hdDogT3V0cHV0Rm9ybWF0O1xuICBhbGw6IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBmb3JtYXRTdHJpbmcocGFyc2VkOiBQYXJzZXJOb2RlLCBhcmd2OiB5YXJncy5Bcmd1bWVudHM8Rm9ybWF0U3RyaW5nQXJncz4pOiBzdHJpbmcge1xuICBzd2l0Y2ggKGFyZ3YuZm9ybWF0KSB7XG4gICAgY2FzZSAnanNvbic6XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCAyKTtcbiAgICBjYXNlICd0cmVlJzpcbiAgICAgIHJldHVybiBmb3JtYXRUcmVlKHBhcnNlZCwgeyBoaWRlOiBhcmd2LmFsbCA/IFtdIDogdW5kZWZpbmVkIH0pO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgaW52YWxpZCBmb3JtYXQgJHthcmd2LmZvcm1hdH1gKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU5ldHdvcms8VCBleHRlbmRzIHsgbmV0d29yaz86IHN0cmluZyB9PihcbiAgYXJnczogVFxuKTogVCAmIHtcbiAgbmV0d29yaz86IHV0eG9saWIuTmV0d29yaztcbn0ge1xuICBpZiAoYXJncy5uZXR3b3JrKSB7XG4gICAgcmV0dXJuIHsgLi4uYXJncywgbmV0d29yazogZ2V0TmV0d29ya0Zvck5hbWUoYXJncy5uZXR3b3JrKSB9O1xuICB9XG4gIHJldHVybiB7IC4uLmFyZ3MsIG5ldHdvcms6IHVuZGVmaW5lZCB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHhQYXJzZXIoYXJndjogeWFyZ3MuQXJndW1lbnRzPEFyZ3NQYXJzZVRyYW5zYWN0aW9uPik6IFR4UGFyc2VyIHtcbiAgaWYgKGFyZ3YuYWxsKSB7XG4gICAgcmV0dXJuIG5ldyBUeFBhcnNlcih7IC4uLmFyZ3YsIC4uLlR4UGFyc2VyLlBBUlNFX0FMTCB9KTtcbiAgfVxuICByZXR1cm4gbmV3IFR4UGFyc2VyKHtcbiAgICAuLi5hcmd2LFxuICAgIHBhcnNlU2lnbmF0dXJlRGF0YToge1xuICAgICAgc2NyaXB0OiBhcmd2LnBhcnNlU2lnbmF0dXJlRGF0YSxcbiAgICAgIGVjZHNhOiBhcmd2LnBhcnNlU2lnbmF0dXJlRGF0YSxcbiAgICAgIHNjaG5vcnI6IGFyZ3YucGFyc2VTaWduYXR1cmVEYXRhLFxuICAgIH0sXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkcmVzc1BhcnNlcihhcmd2OiBBcmdzUGFyc2VBZGRyZXNzKTogQWRkcmVzc1BhcnNlciB7XG4gIHJldHVybiBuZXcgQWRkcmVzc1BhcnNlcihyZXNvbHZlTmV0d29yayhhcmd2KSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY3JpcHRQYXJzZXIoYXJndjogQXJnc1BhcnNlU2NyaXB0KTogU2NyaXB0UGFyc2VyIHtcbiAgcmV0dXJuIG5ldyBTY3JpcHRQYXJzZXIocmVzb2x2ZU5ldHdvcmsoYXJndikpO1xufVxuXG5leHBvcnQgY29uc3QgY21kUGFyc2VUeCA9IHtcbiAgY29tbWFuZDogJ3BhcnNlVHggW3BhdGhdJyxcbiAgYWxpYXNlczogWydwYXJzZScsICd0eCddLFxuICBkZXNjcmliZTpcbiAgICAnRGlzcGxheSB0cmFuc2FjdGlvbiBjb21wb25lbnRzIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0uICcgK1xuICAgICdTdXBwb3J0ZWQgZm9ybWF0cyBhcmUgUGFydGlhbGx5IFNpZ25lZCBCaXRjb2luIFRyYW5zYWN0aW9uIChQU0JUKSwgJyArXG4gICAgJ2JpdGNvaW5qcy1saWIgZW5jb2RpbmcgKExlZ2FjeSkgb3IgZnVsbHkgc2lnbmVkIHRyYW5zYWN0aW9uLiAnICtcbiAgICAnQnl0ZXMgbXVzdCBiZSBlbmNvZGVkIGluIGhleCBvciBiYXNlNjQgZm9ybWF0LicsXG5cbiAgYnVpbGRlcihiOiB5YXJncy5Bcmd2PHVua25vd24+KTogeWFyZ3MuQXJndjxBcmdzUGFyc2VUcmFuc2FjdGlvbj4ge1xuICAgIHJldHVybiBiXG4gICAgICAub3B0aW9uKCdwYXRoJywgeyB0eXBlOiAnc3RyaW5nJywgbmFyZ3M6IDEsIGRlZmF1bHQ6ICcnIH0pXG4gICAgICAub3B0aW9uKCdzdGRpbicsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignZGF0YScsIHsgdHlwZTogJ3N0cmluZycsIGRlc2NyaXB0aW9uOiAndHJhbnNhY3Rpb24gYnl0ZXMgKGhleCBvciBiYXNlNjQpJywgYWxpYXM6ICdoZXgnIH0pXG4gICAgICAub3B0aW9uKCdjbGlwYm9hcmQnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ3R4aWQnLCB7IHR5cGU6ICdzdHJpbmcnIH0pXG4gICAgICAub3B0aW9uKCdibG9ja0hlaWdodCcsIHsgdHlwZTogJ251bWJlcicgfSlcbiAgICAgIC5vcHRpb24oJ3R4SW5kZXgnLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gICAgICAub3B0aW9uKCdmZXRjaEFsbCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignZmV0Y2hTdGF0dXMnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ2ZldGNoSW5wdXRzJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdmZXRjaFNwZW5kcycsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignbmV0d29yaycsIHsgYWxpYXM6ICduJywgdHlwZTogJ3N0cmluZycsIGRlbWFuZE9wdGlvbjogdHJ1ZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTY3JpcHRBc20nLCB7IGFsaWFzOiAnc2NyaXB0YXNtJywgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbigncGFyc2VTY3JpcHREYXRhJywgeyBhbGlhczogJ3NjcmlwdGRhdGEnLCB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdwYXJzZVNpZ25hdHVyZURhdGEnLCB7IGFsaWFzOiAnc2lnZGF0YScsIHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ3BhcnNlT3V0cHV0U2NyaXB0JywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdwYXJzZUFzVW5rbm93bicsIHtcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdzaG93IHBsYWluIEphdmFzY3JpcHQgb2JqZWN0IHdpdGhvdXQgYW55IHBvc3QtcHJvY2Vzc2luZycsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbignbWF4T3V0cHV0cycsIHsgdHlwZTogJ251bWJlcicgfSlcbiAgICAgIC5vcHRpb24oJ3ZpbicsIHsgdHlwZTogJ251bWJlcicgfSlcbiAgICAgIC5hcnJheSgndmluJylcbiAgICAgIC5vcHRpb24oJ3ZvdXQnLCB7IHR5cGU6ICdudW1iZXInIH0pXG4gICAgICAuYXJyYXkoJ3ZvdXQnKVxuICAgICAgLm9wdGlvbignZmluYWxpemUnLCB7XG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnZmluYWxpemUgUFNCVCBhbmQgcGFyc2UgcmVzdWx0IGluc3RlYWQgb2YgUFNCVCcsXG4gICAgICB9KVxuICAgICAgLm9wdGlvbignYWxsJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAub3B0aW9uKCdjYWNoZScsIHtcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgZGVzY3JpcHRpb246ICd1c2UgbG9jYWwgY2FjaGUgZm9yIGh0dHAgcmVzcG9uc2VzJyxcbiAgICAgIH0pXG4gICAgICAub3B0aW9uKCdmb3JtYXQnLCB7IGNob2ljZXM6IFsndHJlZScsICdqc29uJ10sIGRlZmF1bHQ6ICd0cmVlJyB9IGFzIGNvbnN0KVxuICAgICAgLm9wdGlvbigncGFyc2VFcnJvcicsIHsgY2hvaWNlczogWydjb250aW51ZScsICd0aHJvdyddLCBkZWZhdWx0OiAnY29udGludWUnIH0gYXMgY29uc3QpO1xuICB9LFxuXG4gIGFzeW5jIGhhbmRsZXIoYXJndjogeWFyZ3MuQXJndW1lbnRzPEFyZ3NQYXJzZVRyYW5zYWN0aW9uPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5ldHdvcmsgPSBnZXROZXR3b3JrKGFyZ3YpO1xuICAgIGxldCBkYXRhO1xuXG4gICAgY29uc3QgaHR0cENsaWVudCA9IGF3YWl0IGdldENsaWVudCh7IGNhY2hlOiBhcmd2LmNhY2hlIH0pO1xuXG4gICAgaWYgKGFyZ3YudHhpZCB8fCBhcmd2LmJsb2NrSGVpZ2h0ICE9PSB1bmRlZmluZWQgfHwgYXJndi50eEluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaFRyYW5zYWN0aW9uSGV4KFxuICAgICAgICBodHRwQ2xpZW50LFxuICAgICAgICB7XG4gICAgICAgICAgdHhpZDogYXJndi50eGlkLFxuICAgICAgICAgIGJsb2NrSGVpZ2h0OiBhcmd2LmJsb2NrSGVpZ2h0LFxuICAgICAgICAgIHR4SW5kZXg6IGFyZ3YudHhJbmRleCxcbiAgICAgICAgfSxcbiAgICAgICAgbmV0d29ya1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoYXJndi5zdGRpbiB8fCBhcmd2LnBhdGggPT09ICctJykge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb25mbGljdGluZyBhcmd1bWVudHNgKTtcbiAgICAgIH1cbiAgICAgIGNvbnNvbGUubG9nKCdSZWFkaW5nIGZyb20gc3RkaW4uIFBsZWFzZSBwYXN0ZSBoZXgtZW5jb2RlZCB0cmFuc2FjdGlvbiBkYXRhLicpO1xuICAgICAgY29uc29sZS5sb2coJ0FmdGVyIGluc2VydGluZyBkYXRhLCBwcmVzcyBDdHJsLUQgdG8gZmluaXNoLiBQcmVzcyBDdHJsLUMgdG8gY2FuY2VsLicpO1xuICAgICAgaWYgKHByb2Nlc3Muc3RkaW4uaXNUVFkpIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IHJlYWRTdGRpbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IGZzLnByb21pc2VzLnJlYWRGaWxlKCcvZGV2L3N0ZGluJywgJ3V0ZjgnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXJndi5jbGlwYm9hcmQpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29uZmxpY3RpbmcgYXJndW1lbnRzYCk7XG4gICAgICB9XG4gICAgICBkYXRhID0gYXdhaXQgY2xpcGJvYXJkeS5yZWFkKCk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3YucGF0aCkge1xuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb25mbGljdGluZyBhcmd1bWVudHNgKTtcbiAgICAgIH1cbiAgICAgIGRhdGEgPSAoYXdhaXQgZnMucHJvbWlzZXMucmVhZEZpbGUoYXJndi5wYXRoLCAndXRmOCcpKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmIChhcmd2LmRhdGEpIHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29uZmxpY3RpbmcgYXJndW1lbnRzYCk7XG4gICAgICB9XG4gICAgICBkYXRhID0gYXJndi5kYXRhO1xuICAgIH1cblxuICAgIC8vIHN0cmlwIHdoaXRlc3BhY2VcbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgbm8gdHhkYXRhYCk7XG4gICAgfVxuXG4gICAgY29uc3QgYnl0ZXMgPSBzdHJpbmdUb0J1ZmZlcihkYXRhLCBbJ2hleCcsICdiYXNlNjQnXSk7XG5cbiAgICBsZXQgdHggPSB1dHhvbGliLmJpdGdvLmlzUHNidChieXRlcylcbiAgICAgID8gdXR4b2xpYi5iaXRnby5jcmVhdGVQc2J0RnJvbUJ1ZmZlcihieXRlcywgbmV0d29yaylcbiAgICAgIDogdXR4b2xpYi5iaXRnby5jcmVhdGVUcmFuc2FjdGlvbkZyb21CdWZmZXIoYnl0ZXMsIG5ldHdvcmssIHsgYW1vdW50VHlwZTogJ2JpZ2ludCcgfSk7XG5cbiAgICBjb25zdCB7IGlkOiB0eGlkIH0gPSBnZXRQYXJzZXJUeFByb3BlcnRpZXModHgsIHVuZGVmaW5lZCk7XG4gICAgaWYgKHR4IGluc3RhbmNlb2YgdXR4b2xpYi5iaXRnby5VdHhvVHJhbnNhY3Rpb24pIHtcbiAgICAgIGlmIChhcmd2LnR4aWQgJiYgdHhpZCAhPT0gYXJndi50eGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29tcHV0ZWQgdHhpZCBkb2VzIG5vdCBtYXRjaCB0eGlkIGFyZ3VtZW50YCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChhcmd2LmZpbmFsaXplKSB7XG4gICAgICB0eC5maW5hbGl6ZUFsbElucHV0cygpO1xuICAgICAgdHggPSB0eC5leHRyYWN0VHJhbnNhY3Rpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoYXJndi5wYXJzZUFzVW5rbm93bikge1xuICAgICAgY29uc29sZS5sb2coZm9ybWF0U3RyaW5nKHBhcnNlVW5rbm93bihuZXcgUGFyc2VyKCksICd0eCcsIHR4KSwgYXJndikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChhcmd2LmZldGNoQWxsKSB7XG4gICAgICBhcmd2LmZldGNoU3RhdHVzID0gdHJ1ZTtcbiAgICAgIGFyZ3YuZmV0Y2hJbnB1dHMgPSB0cnVlO1xuICAgICAgYXJndi5mZXRjaFNwZW5kcyA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkID0gZ2V0VHhQYXJzZXIoYXJndikucGFyc2UodHgsIHtcbiAgICAgIHN0YXR1czogYXJndi5mZXRjaFN0YXR1cyAmJiB0eGlkID8gYXdhaXQgZmV0Y2hUcmFuc2FjdGlvblN0YXR1cyhodHRwQ2xpZW50LCB0eGlkLCBuZXR3b3JrKSA6IHVuZGVmaW5lZCxcbiAgICAgIHByZXZPdXRwdXRzOiBhcmd2LmZldGNoSW5wdXRzID8gYXdhaXQgZmV0Y2hQcmV2T3V0cHV0cyhodHRwQ2xpZW50LCB0eCkgOiB1bmRlZmluZWQsXG4gICAgICBwcmV2T3V0cHV0U3BlbmRzOiBhcmd2LmZldGNoU3BlbmRzID8gYXdhaXQgZmV0Y2hQcmV2T3V0cHV0U3BlbmRzKGh0dHBDbGllbnQsIHR4KSA6IHVuZGVmaW5lZCxcbiAgICAgIG91dHB1dFNwZW5kczpcbiAgICAgICAgYXJndi5mZXRjaFNwZW5kcyAmJiB0eCBpbnN0YW5jZW9mIHV0eG9saWIuYml0Z28uVXR4b1RyYW5zYWN0aW9uXG4gICAgICAgICAgPyBhd2FpdCBmZXRjaE91dHB1dFNwZW5kcyhodHRwQ2xpZW50LCB0eClcbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKGZvcm1hdFN0cmluZyhwYXJzZWQsIGFyZ3YpKTtcbiAgfSxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBjbWRQYXJzZUFkZHJlc3MgPSB7XG4gIGNvbW1hbmQ6ICdwYXJzZUFkZHJlc3MgW2FkZHJlc3NdJyxcbiAgYWxpYXNlczogWydhZGRyZXNzJ10sXG4gIGRlc2NyaWJlOiAncGFyc2UgYWRkcmVzcycsXG4gIGJ1aWxkZXIoYjogeWFyZ3MuQXJndjx1bmtub3duPik6IHlhcmdzLkFyZ3Y8QXJnc1BhcnNlQWRkcmVzcz4ge1xuICAgIHJldHVybiBiXG4gICAgICAub3B0aW9uKCduZXR3b3JrJywgeyBhbGlhczogJ24nLCB0eXBlOiAnc3RyaW5nJyB9KVxuICAgICAgLm9wdGlvbignZm9ybWF0JywgeyBjaG9pY2VzOiBbJ3RyZWUnLCAnanNvbiddLCBkZWZhdWx0OiAndHJlZScgfSBhcyBjb25zdClcbiAgICAgIC5vcHRpb24oJ2NvbnZlcnQnLCB7IHR5cGU6ICdib29sZWFuJywgZGVmYXVsdDogZmFsc2UgfSlcbiAgICAgIC5vcHRpb24oJ2FsbCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLnBvc2l0aW9uYWwoJ2FkZHJlc3MnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZW1hbmRPcHRpb246IHRydWUgfSk7XG4gIH0sXG5cbiAgaGFuZGxlcihhcmd2OiB5YXJncy5Bcmd1bWVudHM8QXJnc1BhcnNlQWRkcmVzcz4pOiB2b2lkIHtcbiAgICBjb25zdCBwYXJzZWQgPSBnZXRBZGRyZXNzUGFyc2VyKGFyZ3YpLnBhcnNlKGFyZ3YuYWRkcmVzcyk7XG4gICAgY29uc29sZS5sb2coZm9ybWF0U3RyaW5nKHBhcnNlZCwgYXJndikpO1xuICB9LFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGNvbnN0IGNtZFBhcnNlU2NyaXB0ID0ge1xuICBjb21tYW5kOiAncGFyc2VTY3JpcHQgW3NjcmlwdF0nLFxuICBkZXNjcmliZTogJ3BhcnNlIHNjcmlwdCcsXG4gIGJ1aWxkZXIoYjogeWFyZ3MuQXJndjx1bmtub3duPik6IHlhcmdzLkFyZ3Y8QXJnc1BhcnNlU2NyaXB0PiB7XG4gICAgcmV0dXJuIGJcbiAgICAgIC5vcHRpb24oJ25ldHdvcmsnLCB7IGFsaWFzOiAnbicsIHR5cGU6ICdzdHJpbmcnIH0pXG4gICAgICAub3B0aW9uKCdmb3JtYXQnLCB7IGNob2ljZXM6IFsndHJlZScsICdqc29uJ10sIGRlZmF1bHQ6ICd0cmVlJyB9IGFzIGNvbnN0KVxuICAgICAgLm9wdGlvbignYWxsJywgeyB0eXBlOiAnYm9vbGVhbicsIGRlZmF1bHQ6IGZhbHNlIH0pXG4gICAgICAucG9zaXRpb25hbCgnc2NyaXB0JywgeyB0eXBlOiAnc3RyaW5nJywgZGVtYW5kT3B0aW9uOiB0cnVlIH0pO1xuICB9LFxuICBoYW5kbGVyKGFyZ3Y6IHlhcmdzLkFyZ3VtZW50czxBcmdzUGFyc2VTY3JpcHQ+KTogdm9pZCB7XG4gICAgY29uc3Qgc2NyaXB0ID0gc3RyaW5nVG9CdWZmZXIoYXJndi5zY3JpcHQsICdoZXgnKTtcbiAgICBjb25zdCBwYXJzZWQgPSBnZXRTY3JpcHRQYXJzZXIoYXJndikucGFyc2Uoc2NyaXB0KTtcbiAgICBjb25zb2xlLmxvZyhmb3JtYXRTdHJpbmcocGFyc2VkLCB7IC4uLmFyZ3YsIGFsbDogdHJ1ZSB9KSk7XG4gIH0sXG59O1xuXG5leHBvcnQgY29uc3QgY21kR2VuZXJhdGVBZGRyZXNzID0ge1xuICBjb21tYW5kOiAnZ2VuZXJhdGVBZGRyZXNzZXMnLFxuICBkZXNjcmliZTogJ2dlbmVyYXRlIGFkZHJlc3NlcycsXG4gIGJ1aWxkZXIoYjogeWFyZ3MuQXJndjx1bmtub3duPik6IHlhcmdzLkFyZ3Y8QXJnc0dlbmVyYXRlQWRkcmVzcz4ge1xuICAgIHJldHVybiBiXG4gICAgICAub3B0aW9uKCduZXR3b3JrJywgeyBhbGlhczogJ24nLCB0eXBlOiAnc3RyaW5nJyB9KVxuICAgICAgLm9wdGlvbigndXNlcktleScsIHsgdHlwZTogJ3N0cmluZycsIGRlbWFuZE9wdGlvbjogdHJ1ZSB9KVxuICAgICAgLm9wdGlvbigndXNlcktleVByZWZpeCcsIHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6ICcwLzAnIH0pXG4gICAgICAub3B0aW9uKCdiYWNrdXBLZXknLCB7IHR5cGU6ICdzdHJpbmcnLCBkZW1hbmRPcHRpb246IHRydWUgfSlcbiAgICAgIC5vcHRpb24oJ2JhY2t1cEtleVByZWZpeCcsIHsgdHlwZTogJ3N0cmluZycsIGRlZmF1bHQ6ICcwLzAnIH0pXG4gICAgICAub3B0aW9uKCdiaXRnb0tleScsIHsgdHlwZTogJ3N0cmluZycsIGRlbWFuZE9wdGlvbjogdHJ1ZSB9KVxuICAgICAgLm9wdGlvbignYml0Z29LZXlQcmVmaXgnLCB7IHR5cGU6ICdzdHJpbmcnLCBkZWZhdWx0OiAnMC8wJyB9KVxuICAgICAgLm9wdGlvbignZm9ybWF0Jywge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVmYXVsdDogJyVwMFxcdCVhJyxcbiAgICAgICAgZGVzY3JpcHRpb246IGBGb3JtYXQgc3RyaW5nLiBQbGFjZWhvbGRlcnM6ICR7Z2V0QWRkcmVzc1BsYWNlaG9sZGVyRGVzY3JpcHRpb24oKX1gLFxuICAgICAgfSlcbiAgICAgIC5vcHRpb24oJ2NoYWluJywgeyB0eXBlOiAnbnVtYmVyJywgZGVzY3JpcHRpb246ICdBZGRyZXNzIGNoYWluJyB9KVxuICAgICAgLmFycmF5KCdjaGFpbicpXG4gICAgICAub3B0aW9uKCdpbmRleCcsIHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQWRkcmVzcyBpbmRleC4gQ2FuIGJlIGdpdmVuIGFzIGEgcmFuZ2UgKGUuZy4gMC05OSkuIFRha2VzIHByZWNlZGVuY2Ugb3ZlciAtLWxpbWl0LicsXG4gICAgICB9KVxuICAgICAgLmFycmF5KCdpbmRleCcpXG4gICAgICAub3B0aW9uKCdsaW1pdCcsIHtcbiAgICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQWxpYXMgZm9yIC0taW5kZXggd2l0aCByYW5nZSBzdGFydGluZyBhdCAwIHRvIGxpbWl0LTEuJyxcbiAgICAgICAgZGVmYXVsdDogMTAwLFxuICAgICAgfSk7XG4gIH0sXG4gIGhhbmRsZXIoYXJndjogeWFyZ3MuQXJndW1lbnRzPEFyZ3NHZW5lcmF0ZUFkZHJlc3M+KTogdm9pZCB7XG4gICAgbGV0IGluZGV4UmFuZ2U6IG51bWJlcltdO1xuICAgIGlmIChhcmd2LmluZGV4KSB7XG4gICAgICBpbmRleFJhbmdlID0gcGFyc2VJbmRleFJhbmdlKGFyZ3YuaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoYXJndi5saW1pdCkge1xuICAgICAgaW5kZXhSYW5nZSA9IGdldFJhbmdlKDAsIGFyZ3YubGltaXQgLSAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBubyBpbmRleCBvciBsaW1pdGApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFkZHJlc3Mgb2YgZ2VuZXJhdGVBZGRyZXNzKHtcbiAgICAgIC4uLmFyZ3YsXG4gICAgICBpbmRleDogaW5kZXhSYW5nZSxcbiAgICAgIG5ldHdvcms6IGdldE5ldHdvcmtGb3JOYW1lKGFyZ3YubmV0d29yayA/PyAnYml0Y29pbicpLFxuICAgIH0pKSB7XG4gICAgICBpZiAoYXJndi5mb3JtYXQgPT09ICd0cmVlJykge1xuICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXRBZGRyZXNzVHJlZShhZGRyZXNzKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXRBZGRyZXNzV2l0aEZvcm1hdFN0cmluZyhhZGRyZXNzLCBhcmd2LmZvcm1hdCkpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcbn07XG5cbmV4cG9ydCBjb25zdCBjbWRQYXJzZVhwdWIgPSB7XG4gIGNvbW1hbmQ6ICdwYXJzZVhwdWIgW3hwdWJdJyxcbiAgZGVzY3JpYmU6ICdzaG93IHhwdWIgaW5mbycsXG4gIGJ1aWxkZXIoYjogeWFyZ3MuQXJndjx1bmtub3duPik6IHlhcmdzLkFyZ3Y8eyB4cHViOiBzdHJpbmc7IGRlcml2ZT86IHN0cmluZyB9ICYgRm9ybWF0U3RyaW5nQXJncz4ge1xuICAgIHJldHVybiBiXG4gICAgICAucG9zaXRpb25hbCgneHB1YicsIHsgdHlwZTogJ3N0cmluZycsIGRlbWFuZE9wdGlvbjogdHJ1ZSB9KVxuICAgICAgLm9wdGlvbignZm9ybWF0JywgeyBjaG9pY2VzOiBbJ3RyZWUnLCAnanNvbiddLCBkZWZhdWx0OiAndHJlZScgfSBhcyBjb25zdClcbiAgICAgIC5vcHRpb24oJ2FsbCcsIHsgdHlwZTogJ2Jvb2xlYW4nLCBkZWZhdWx0OiBmYWxzZSB9KVxuICAgICAgLm9wdGlvbignZGVyaXZlJywgeyB0eXBlOiAnc3RyaW5nJywgZGVzY3JpcHRpb246ICdzaG93IHhwdWIgZGVyaXZlZCB3aXRoIHBhdGgnIH0pO1xuICB9LFxuICBoYW5kbGVyKGFyZ3Y6IHlhcmdzLkFyZ3VtZW50czx7IHhwdWI6IHN0cmluZzsgZGVyaXZlPzogc3RyaW5nIH0gJiBGb3JtYXRTdHJpbmdBcmdzPik6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKGZvcm1hdFN0cmluZyhwYXJzZVhwdWIoYXJndi54cHViLCB7IGRlcml2ZTogYXJndi5kZXJpdmUgfSksIGFyZ3YpKTtcbiAgfSxcbn07XG4iXX0=
@@ -1,5 +0,0 @@
1
- /// <reference types="node" />
2
- type Format = 'hex' | 'base64';
3
- export declare function stringToBuffer(data: string, format: Format | Format[]): Buffer;
4
- export {};
5
- //# sourceMappingURL=parseString.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseString.d.ts","sourceRoot":"","sources":["../../src/parseString.ts"],"names":[],"mappings":";AAAA,KAAK,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAC/B,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,CAyB9E"}
@@ -1,29 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.stringToBuffer = void 0;
4
- function stringToBuffer(data, format) {
5
- if (typeof format !== 'string') {
6
- for (const f of format) {
7
- try {
8
- return stringToBuffer(data, f);
9
- }
10
- catch (err) {
11
- // ignore, try next
12
- }
13
- }
14
- throw new Error(`could not parse data, formats: ${format}`);
15
- }
16
- // strip all whitespace
17
- data = data.replace(/\s*/g, '');
18
- if (format === 'hex') {
19
- data = data.toLowerCase();
20
- }
21
- const buf = Buffer.from(data, format);
22
- // make sure there were no decoding errors
23
- if (buf.toString(format) !== data) {
24
- throw new Error(`invalid ${format}`);
25
- }
26
- return buf;
27
- }
28
- exports.stringToBuffer = stringToBuffer;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2VTdHJpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGFyc2VTdHJpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsU0FBZ0IsY0FBYyxDQUFDLElBQVksRUFBRSxNQUF5QjtJQUNwRSxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRTtRQUM5QixLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sRUFBRTtZQUN0QixJQUFJO2dCQUNGLE9BQU8sY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNoQztZQUFDLE9BQU8sR0FBRyxFQUFFO2dCQUNaLG1CQUFtQjthQUNwQjtTQUNGO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUM3RDtJQUVELHVCQUF1QjtJQUN2QixJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFFaEMsSUFBSSxNQUFNLEtBQUssS0FBSyxFQUFFO1FBQ3BCLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7S0FDM0I7SUFFRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUN0QywwQ0FBMEM7SUFDMUMsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsTUFBTSxFQUFFLENBQUMsQ0FBQztLQUN0QztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQXpCRCx3Q0F5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIEZvcm1hdCA9ICdoZXgnIHwgJ2Jhc2U2NCc7XG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9CdWZmZXIoZGF0YTogc3RyaW5nLCBmb3JtYXQ6IEZvcm1hdCB8IEZvcm1hdFtdKTogQnVmZmVyIHtcbiAgaWYgKHR5cGVvZiBmb3JtYXQgIT09ICdzdHJpbmcnKSB7XG4gICAgZm9yIChjb25zdCBmIG9mIGZvcm1hdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ1RvQnVmZmVyKGRhdGEsIGYpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIGlnbm9yZSwgdHJ5IG5leHRcbiAgICAgIH1cbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjb3VsZCBub3QgcGFyc2UgZGF0YSwgZm9ybWF0czogJHtmb3JtYXR9YCk7XG4gIH1cblxuICAvLyBzdHJpcCBhbGwgd2hpdGVzcGFjZVxuICBkYXRhID0gZGF0YS5yZXBsYWNlKC9cXHMqL2csICcnKTtcblxuICBpZiAoZm9ybWF0ID09PSAnaGV4Jykge1xuICAgIGRhdGEgPSBkYXRhLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBjb25zdCBidWYgPSBCdWZmZXIuZnJvbShkYXRhLCBmb3JtYXQpO1xuICAvLyBtYWtlIHN1cmUgdGhlcmUgd2VyZSBubyBkZWNvZGluZyBlcnJvcnNcbiAgaWYgKGJ1Zi50b1N0cmluZyhmb3JtYXQpICE9PSBkYXRhKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkICR7Zm9ybWF0fWApO1xuICB9XG4gIHJldHVybiBidWY7XG59XG4iXX0=
@@ -1,5 +0,0 @@
1
- /**
2
- * Reads from stdin until Ctrl-D is pressed.
3
- */
4
- export declare function readStdin(): Promise<string>;
5
- //# sourceMappingURL=readStdin.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"readStdin.d.ts","sourceRoot":"","sources":["../../src/readStdin.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAgCjD"}
@@ -1,42 +0,0 @@
1
- "use strict";
2
- /*
3
- * Contains a high-performance implementation of reading from stdin.
4
- * Standard readline is extremely slow for long lines.
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.readStdin = void 0;
8
- /**
9
- * Reads from stdin until Ctrl-D is pressed.
10
- */
11
- async function readStdin() {
12
- return new Promise((resolve, reject) => {
13
- // Using readline is not an option because it is extremely slow for long lines.
14
- // By enabling raw mode, we can read more than 4096 bytes, but it requires manual Ctrl-C/Ctrl-D handling
15
- if (!process.stdin.setRawMode) {
16
- throw new Error('stdin is not a tty');
17
- }
18
- process.stdin.setRawMode(true);
19
- const buf = [];
20
- process.stdin.on('data', (chunk) => {
21
- if (chunk[0] === 0x03) {
22
- // Ctrl-C
23
- process.exit(130);
24
- }
25
- if (chunk[0] === 0x04) {
26
- // Ctrl-D
27
- process.stdin.emit('end');
28
- return;
29
- }
30
- buf.push(chunk);
31
- process.stdout.write(chunk);
32
- });
33
- process.stdin.on('end', () => {
34
- resolve(Buffer.concat(buf).toString('utf8'));
35
- });
36
- process.stdin.on('error', (err) => {
37
- reject(err);
38
- });
39
- });
40
- }
41
- exports.readStdin = readStdin;
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZFN0ZGluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlYWRTdGRpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSDs7R0FFRztBQUNJLEtBQUssVUFBVSxTQUFTO0lBQzdCLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDckMsK0VBQStFO1FBQy9FLHdHQUF3RztRQUN4RyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQWEsRUFBRSxDQUFDO1FBRXpCLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2pDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRTtnQkFDckIsU0FBUztnQkFDVCxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ25CO1lBQ0QsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFO2dCQUNyQixTQUFTO2dCQUNULE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMxQixPQUFPO2FBQ1I7WUFDRCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtZQUMzQixPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBaENELDhCQWdDQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb250YWlucyBhIGhpZ2gtcGVyZm9ybWFuY2UgaW1wbGVtZW50YXRpb24gb2YgcmVhZGluZyBmcm9tIHN0ZGluLlxuICogU3RhbmRhcmQgcmVhZGxpbmUgaXMgZXh0cmVtZWx5IHNsb3cgZm9yIGxvbmcgbGluZXMuXG4gKi9cblxuLyoqXG4gKiBSZWFkcyBmcm9tIHN0ZGluIHVudGlsIEN0cmwtRCBpcyBwcmVzc2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgLy8gVXNpbmcgcmVhZGxpbmUgaXMgbm90IGFuIG9wdGlvbiBiZWNhdXNlIGl0IGlzIGV4dHJlbWVseSBzbG93IGZvciBsb25nIGxpbmVzLlxuICAgIC8vIEJ5IGVuYWJsaW5nIHJhdyBtb2RlLCB3ZSBjYW4gcmVhZCBtb3JlIHRoYW4gNDA5NiBieXRlcywgYnV0IGl0IHJlcXVpcmVzIG1hbnVhbCBDdHJsLUMvQ3RybC1EIGhhbmRsaW5nXG4gICAgaWYgKCFwcm9jZXNzLnN0ZGluLnNldFJhd01vZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignc3RkaW4gaXMgbm90IGEgdHR5Jyk7XG4gICAgfVxuICAgIHByb2Nlc3Muc3RkaW4uc2V0UmF3TW9kZSh0cnVlKTtcbiAgICBjb25zdCBidWY6IEJ1ZmZlcltdID0gW107XG5cbiAgICBwcm9jZXNzLnN0ZGluLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICBpZiAoY2h1bmtbMF0gPT09IDB4MDMpIHtcbiAgICAgICAgLy8gQ3RybC1DXG4gICAgICAgIHByb2Nlc3MuZXhpdCgxMzApO1xuICAgICAgfVxuICAgICAgaWYgKGNodW5rWzBdID09PSAweDA0KSB7XG4gICAgICAgIC8vIEN0cmwtRFxuICAgICAgICBwcm9jZXNzLnN0ZGluLmVtaXQoJ2VuZCcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBidWYucHVzaChjaHVuayk7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShjaHVuayk7XG4gICAgfSk7XG5cbiAgICBwcm9jZXNzLnN0ZGluLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICByZXNvbHZlKEJ1ZmZlci5jb25jYXQoYnVmKS50b1N0cmluZygndXRmOCcpKTtcbiAgICB9KTtcblxuICAgIHByb2Nlc3Muc3RkaW4ub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgcmVqZWN0KGVycik7XG4gICAgfSk7XG4gIH0pO1xufVxuIl19
@@ -1 +0,0 @@
1
- {"version":3,"file":"stringToBuffer.d.ts","sourceRoot":"","sources":["../../test/stringToBuffer.ts"],"names":[],"mappings":""}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const assert = require("assert");
4
- const parseString_1 = require("../src/parseString");
5
- describe('stringToBuffer', function () {
6
- const bytes = Buffer.alloc(32, 42);
7
- it('converts hex and base64', function () {
8
- for (const e of ['hex', 'base64']) {
9
- const str = bytes.toString(e);
10
- assert.deepStrictEqual((0, parseString_1.stringToBuffer)(str, ['hex', 'base64']), bytes);
11
- const strNl = [str.slice(0, 4), str.slice(4)].join('\n');
12
- assert.deepStrictEqual((0, parseString_1.stringToBuffer)(strNl, ['hex', 'base64']), bytes);
13
- }
14
- });
15
- });
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nVG9CdWZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90ZXN0L3N0cmluZ1RvQnVmZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsaUNBQWlDO0FBRWpDLG9EQUFvRDtBQUVwRCxRQUFRLENBQUMsZ0JBQWdCLEVBQUU7SUFDekIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkMsRUFBRSxDQUFDLHlCQUF5QixFQUFFO1FBQzVCLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFxQixFQUFFO1lBQ3JELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUIsTUFBTSxDQUFDLGVBQWUsQ0FBQyxJQUFBLDRCQUFjLEVBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFdEUsTUFBTSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pELE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBQSw0QkFBYyxFQUFDLEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3pFO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuXG5pbXBvcnQgeyBzdHJpbmdUb0J1ZmZlciB9IGZyb20gJy4uL3NyYy9wYXJzZVN0cmluZyc7XG5cbmRlc2NyaWJlKCdzdHJpbmdUb0J1ZmZlcicsIGZ1bmN0aW9uICgpIHtcbiAgY29uc3QgYnl0ZXMgPSBCdWZmZXIuYWxsb2MoMzIsIDQyKTtcbiAgaXQoJ2NvbnZlcnRzIGhleCBhbmQgYmFzZTY0JywgZnVuY3Rpb24gKCkge1xuICAgIGZvciAoY29uc3QgZSBvZiBbJ2hleCcsICdiYXNlNjQnXSBhcyBCdWZmZXJFbmNvZGluZ1tdKSB7XG4gICAgICBjb25zdCBzdHIgPSBieXRlcy50b1N0cmluZyhlKTtcbiAgICAgIGFzc2VydC5kZWVwU3RyaWN0RXF1YWwoc3RyaW5nVG9CdWZmZXIoc3RyLCBbJ2hleCcsICdiYXNlNjQnXSksIGJ5dGVzKTtcblxuICAgICAgY29uc3Qgc3RyTmwgPSBbc3RyLnNsaWNlKDAsIDQpLCBzdHIuc2xpY2UoNCldLmpvaW4oJ1xcbicpO1xuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChzdHJpbmdUb0J1ZmZlcihzdHJObCwgWydoZXgnLCAnYmFzZTY0J10pLCBieXRlcyk7XG4gICAgfVxuICB9KTtcbn0pO1xuIl19