@bitgo/sdk-coin-flrp 1.1.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 (118) hide show
  1. package/.eslintignore +5 -0
  2. package/.eslintrc.json +7 -0
  3. package/.mocharc.yml +8 -0
  4. package/CHANGELOG.md +23 -0
  5. package/LICENSE +191 -0
  6. package/dist/src/flrp.d.ts +91 -0
  7. package/dist/src/flrp.d.ts.map +1 -0
  8. package/dist/src/flrp.js +343 -0
  9. package/dist/src/iface.d.ts +25 -0
  10. package/dist/src/iface.d.ts.map +1 -0
  11. package/dist/src/iface.js +3 -0
  12. package/dist/src/index.d.ts +6 -0
  13. package/dist/src/index.d.ts.map +1 -0
  14. package/dist/src/index.js +45 -0
  15. package/dist/src/lib/atomicInCTransactionBuilder.d.ts +26 -0
  16. package/dist/src/lib/atomicInCTransactionBuilder.d.ts.map +1 -0
  17. package/dist/src/lib/atomicInCTransactionBuilder.js +64 -0
  18. package/dist/src/lib/atomicTransactionBuilder.d.ts +96 -0
  19. package/dist/src/lib/atomicTransactionBuilder.d.ts.map +1 -0
  20. package/dist/src/lib/atomicTransactionBuilder.js +318 -0
  21. package/dist/src/lib/constants.d.ts +170 -0
  22. package/dist/src/lib/constants.d.ts.map +1 -0
  23. package/dist/src/lib/constants.js +227 -0
  24. package/dist/src/lib/delegatorTxBuilder.d.ts +58 -0
  25. package/dist/src/lib/delegatorTxBuilder.d.ts.map +1 -0
  26. package/dist/src/lib/delegatorTxBuilder.js +224 -0
  27. package/dist/src/lib/errors.d.ts +8 -0
  28. package/dist/src/lib/errors.d.ts.map +1 -0
  29. package/dist/src/lib/errors.js +19 -0
  30. package/dist/src/lib/exportInCTxBuilder.d.ts +77 -0
  31. package/dist/src/lib/exportInCTxBuilder.d.ts.map +1 -0
  32. package/dist/src/lib/exportInCTxBuilder.js +199 -0
  33. package/dist/src/lib/exportInPTxBuilder.d.ts +30 -0
  34. package/dist/src/lib/exportInPTxBuilder.d.ts.map +1 -0
  35. package/dist/src/lib/exportInPTxBuilder.js +120 -0
  36. package/dist/src/lib/iface.d.ts +119 -0
  37. package/dist/src/lib/iface.d.ts.map +1 -0
  38. package/dist/src/lib/iface.js +22 -0
  39. package/dist/src/lib/importInCTxBuilder.d.ts +67 -0
  40. package/dist/src/lib/importInCTxBuilder.d.ts.map +1 -0
  41. package/dist/src/lib/importInCTxBuilder.js +403 -0
  42. package/dist/src/lib/importInPTxBuilder.d.ts +73 -0
  43. package/dist/src/lib/importInPTxBuilder.d.ts.map +1 -0
  44. package/dist/src/lib/importInPTxBuilder.js +464 -0
  45. package/dist/src/lib/index.d.ts +12 -0
  46. package/dist/src/lib/index.d.ts.map +1 -0
  47. package/dist/src/lib/index.js +39 -0
  48. package/dist/src/lib/keyPair.d.ts +58 -0
  49. package/dist/src/lib/keyPair.d.ts.map +1 -0
  50. package/dist/src/lib/keyPair.js +142 -0
  51. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts +81 -0
  52. package/dist/src/lib/permissionlessValidatorTxBuilder.d.ts.map +1 -0
  53. package/dist/src/lib/permissionlessValidatorTxBuilder.js +248 -0
  54. package/dist/src/lib/transaction.d.ts +111 -0
  55. package/dist/src/lib/transaction.d.ts.map +1 -0
  56. package/dist/src/lib/transaction.js +322 -0
  57. package/dist/src/lib/transactionBuilder.d.ts +85 -0
  58. package/dist/src/lib/transactionBuilder.d.ts.map +1 -0
  59. package/dist/src/lib/transactionBuilder.js +167 -0
  60. package/dist/src/lib/transactionBuilderFactory.d.ts +37 -0
  61. package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -0
  62. package/dist/src/lib/transactionBuilderFactory.js +91 -0
  63. package/dist/src/lib/types.d.ts +78 -0
  64. package/dist/src/lib/types.d.ts.map +1 -0
  65. package/dist/src/lib/types.js +5 -0
  66. package/dist/src/lib/utils.d.ts +217 -0
  67. package/dist/src/lib/utils.d.ts.map +1 -0
  68. package/dist/src/lib/utils.js +498 -0
  69. package/dist/src/lib/validatorTxBuilder.d.ts +40 -0
  70. package/dist/src/lib/validatorTxBuilder.d.ts.map +1 -0
  71. package/dist/src/lib/validatorTxBuilder.js +180 -0
  72. package/dist/src/register.d.ts +3 -0
  73. package/dist/src/register.d.ts.map +1 -0
  74. package/dist/src/register.js +11 -0
  75. package/dist/src/tflrp.d.ts +8 -0
  76. package/dist/src/tflrp.d.ts.map +1 -0
  77. package/dist/src/tflrp.js +14 -0
  78. package/dist/test/unit/delegatorTxBuilder.test.d.ts +2 -0
  79. package/dist/test/unit/delegatorTxBuilder.test.d.ts.map +1 -0
  80. package/dist/test/unit/delegatorTxBuilder.test.js +233 -0
  81. package/dist/test/unit/flrp.d.ts +2 -0
  82. package/dist/test/unit/flrp.d.ts.map +1 -0
  83. package/dist/test/unit/flrp.js +118 -0
  84. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts +2 -0
  85. package/dist/test/unit/lib/atomicTransactionBuilder.d.ts.map +1 -0
  86. package/dist/test/unit/lib/atomicTransactionBuilder.js +222 -0
  87. package/dist/test/unit/lib/exportInCTxBuilder.d.ts +2 -0
  88. package/dist/test/unit/lib/exportInCTxBuilder.d.ts.map +1 -0
  89. package/dist/test/unit/lib/exportInCTxBuilder.js +584 -0
  90. package/dist/test/unit/lib/exportInPTxBuilder.d.ts +2 -0
  91. package/dist/test/unit/lib/exportInPTxBuilder.d.ts.map +1 -0
  92. package/dist/test/unit/lib/exportInPTxBuilder.js +377 -0
  93. package/dist/test/unit/lib/importInCTxBuilder.d.ts +2 -0
  94. package/dist/test/unit/lib/importInCTxBuilder.d.ts.map +1 -0
  95. package/dist/test/unit/lib/importInCTxBuilder.js +257 -0
  96. package/dist/test/unit/lib/importInPTxBuilder.d.ts +2 -0
  97. package/dist/test/unit/lib/importInPTxBuilder.d.ts.map +1 -0
  98. package/dist/test/unit/lib/importInPTxBuilder.js +500 -0
  99. package/dist/test/unit/lib/transaction.d.ts +2 -0
  100. package/dist/test/unit/lib/transaction.d.ts.map +1 -0
  101. package/dist/test/unit/lib/transaction.js +460 -0
  102. package/dist/test/unit/lib/utils.d.ts +2 -0
  103. package/dist/test/unit/lib/utils.d.ts.map +1 -0
  104. package/dist/test/unit/lib/utils.js +286 -0
  105. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts +2 -0
  106. package/dist/test/unit/permissionlessValidatorTxBuilder.test.d.ts.map +1 -0
  107. package/dist/test/unit/permissionlessValidatorTxBuilder.test.js +271 -0
  108. package/dist/test/unit/smoke.d.ts +2 -0
  109. package/dist/test/unit/smoke.d.ts.map +1 -0
  110. package/dist/test/unit/smoke.js +23 -0
  111. package/dist/test/unit/transactionBuilder.test.d.ts +2 -0
  112. package/dist/test/unit/transactionBuilder.test.d.ts.map +1 -0
  113. package/dist/test/unit/transactionBuilder.test.js +114 -0
  114. package/dist/test/unit/validatorTxBuilder.test.d.ts +2 -0
  115. package/dist/test/unit/validatorTxBuilder.test.d.ts.map +1 -0
  116. package/dist/test/unit/validatorTxBuilder.test.js +293 -0
  117. package/dist/tsconfig.tsbuildinfo +1 -0
  118. package/package.json +57 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=exportInPTxBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exportInPTxBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/exportInPTxBuilder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,377 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const statics_1 = require("@bitgo/statics");
37
+ const assert = __importStar(require("assert"));
38
+ const exportInPTxBuilder_1 = require("../../../src/lib/exportInPTxBuilder");
39
+ describe('ExportInPTxBuilder', function () {
40
+ const coinConfig = statics_1.coins.get('tflrp');
41
+ let builder;
42
+ beforeEach(function () {
43
+ builder = new exportInPTxBuilder_1.ExportInPTxBuilder(coinConfig);
44
+ });
45
+ describe('Constructor', function () {
46
+ it('should initialize with coin config', function () {
47
+ assert.ok(builder);
48
+ assert.ok(builder instanceof exportInPTxBuilder_1.ExportInPTxBuilder);
49
+ });
50
+ it('should extend AtomicTransactionBuilder', function () {
51
+ // Test inheritance
52
+ assert.ok(builder);
53
+ });
54
+ it('should initialize with default amount', function () {
55
+ // Default amount should be 0n
56
+ assert.ok(builder);
57
+ });
58
+ });
59
+ describe('Amount Management', function () {
60
+ it('should set valid bigint amounts', function () {
61
+ const validAmounts = [1000n, 1000000000000000000n, 999999999999999999n]; // Removed 0n
62
+ validAmounts.forEach((amount) => {
63
+ assert.doesNotThrow(() => {
64
+ builder.amount(amount);
65
+ }, `Should accept bigint amount: ${amount}`);
66
+ });
67
+ });
68
+ it('should set string amounts', function () {
69
+ const stringAmounts = ['1000', '1000000000000000000', '999999999999999999']; // Removed '0'
70
+ stringAmounts.forEach((amount) => {
71
+ assert.doesNotThrow(() => {
72
+ builder.amount(amount);
73
+ }, `Should accept string amount: ${amount}`);
74
+ });
75
+ });
76
+ it('should set numeric amounts', function () {
77
+ const numericAmounts = [1000, 2000000, 999999999]; // Removed 0
78
+ numericAmounts.forEach((amount) => {
79
+ assert.doesNotThrow(() => {
80
+ builder.amount(amount);
81
+ }, `Should accept numeric amount: ${amount}`);
82
+ });
83
+ });
84
+ it('should reject zero amount', function () {
85
+ assert.throws(() => {
86
+ builder.amount(0n);
87
+ }, /Amount must be positive/);
88
+ assert.throws(() => {
89
+ builder.amount('0');
90
+ }, /Amount must be positive/);
91
+ assert.throws(() => {
92
+ builder.amount(0);
93
+ }, /Amount must be positive/);
94
+ });
95
+ it('should handle large amounts', function () {
96
+ const largeAmounts = [
97
+ '100000000000000000000000', // Very large amount
98
+ '18446744073709551615', // Near uint64 max
99
+ BigInt('999999999999999999999999999999'),
100
+ 999999999999999999n,
101
+ ];
102
+ largeAmounts.forEach((amount) => {
103
+ assert.doesNotThrow(() => {
104
+ builder.amount(amount);
105
+ }, `Should handle large amount: ${amount}`);
106
+ });
107
+ });
108
+ it('should reject negative amounts', function () {
109
+ const negativeAmounts = ['-1000', '-1'];
110
+ negativeAmounts.forEach((amount) => {
111
+ assert.throws(() => {
112
+ builder.amount(amount);
113
+ }, Error, // validateAmount should throw error for negative amounts
114
+ `Should reject negative amount: ${amount}`);
115
+ });
116
+ });
117
+ it('should reject negative bigint amounts', function () {
118
+ const negativeBigints = [-1n, -1000n, -999999999999n];
119
+ negativeBigints.forEach((amount) => {
120
+ assert.throws(() => {
121
+ builder.amount(amount);
122
+ }, Error, `Should reject negative bigint amount: ${amount}`);
123
+ });
124
+ });
125
+ it('should chain amount setting with other methods', function () {
126
+ const amount = 1000000000000000000n; // 1 FLR
127
+ assert.doesNotThrow(() => {
128
+ builder.amount(amount);
129
+ });
130
+ });
131
+ });
132
+ describe('Transaction Type', function () {
133
+ it('should return Export transaction type', function () {
134
+ // Can't access protected method directly, but test doesn't throw
135
+ assert.ok(builder);
136
+ });
137
+ });
138
+ describe('Transaction Initialization', function () {
139
+ it('should initialize builder from transaction', function () {
140
+ const mockTx = { type: 'export', data: 'placeholder' };
141
+ assert.doesNotThrow(() => {
142
+ builder.initBuilder(mockTx);
143
+ });
144
+ });
145
+ it('should handle null transaction initialization', function () {
146
+ assert.doesNotThrow(() => {
147
+ builder.initBuilder(null);
148
+ });
149
+ });
150
+ it('should handle undefined transaction initialization', function () {
151
+ assert.doesNotThrow(() => {
152
+ builder.initBuilder(undefined);
153
+ });
154
+ });
155
+ it('should handle object transaction initialization', function () {
156
+ const mockTx = {
157
+ id: 'test-tx',
158
+ type: 'export',
159
+ amount: '1000000000000000000',
160
+ from: 'P-flare1source',
161
+ to: 'C-flare1dest',
162
+ };
163
+ assert.doesNotThrow(() => {
164
+ builder.initBuilder(mockTx);
165
+ });
166
+ });
167
+ });
168
+ describe('Transaction Type Verification', function () {
169
+ it('should verify transaction type (returns false - not implemented)', function () {
170
+ const mockTx = { type: 'export' };
171
+ const result = exportInPTxBuilder_1.ExportInPTxBuilder.verifyTxType(mockTx);
172
+ assert.strictEqual(result, false); // Not implemented yet
173
+ });
174
+ it('should handle different transaction objects', function () {
175
+ const testCases = [{}, null, undefined, { type: 'import' }, { data: 'test' }];
176
+ testCases.forEach((testCase, index) => {
177
+ const result = exportInPTxBuilder_1.ExportInPTxBuilder.verifyTxType(testCase);
178
+ assert.strictEqual(result, false, `Test case ${index} should return false (not implemented)`);
179
+ });
180
+ });
181
+ it('should verify via instance method', function () {
182
+ const mockTx = { type: 'export' };
183
+ const result = builder.verifyTxType(mockTx);
184
+ assert.strictEqual(result, false); // Not implemented
185
+ });
186
+ it('should verify static and instance methods return same result', function () {
187
+ const mockTx = { type: 'export' };
188
+ const staticResult = exportInPTxBuilder_1.ExportInPTxBuilder.verifyTxType(mockTx);
189
+ const instanceResult = builder.verifyTxType(mockTx);
190
+ assert.strictEqual(staticResult, instanceResult);
191
+ });
192
+ });
193
+ describe('Transaction Building', function () {
194
+ it('should throw error when building (not implemented)', function () {
195
+ builder.amount(1000000000000000000n);
196
+ assert.throws(() => {
197
+ // Access protected method for testing
198
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
199
+ builder.buildFlareTransaction();
200
+ }, Error);
201
+ });
202
+ it('should throw specific error message', function () {
203
+ assert.throws(() => {
204
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
205
+ builder.buildFlareTransaction();
206
+ }, /Flare P-chain export transaction build not implemented/);
207
+ });
208
+ });
209
+ describe('Exported Outputs', function () {
210
+ it('should return empty array for exported outputs', function () {
211
+ // Access protected method for testing
212
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
213
+ const result = builder.exportedOutputs();
214
+ assert.ok(Array.isArray(result));
215
+ assert.strictEqual(result.length, 0);
216
+ });
217
+ it('should consistently return empty array', function () {
218
+ // Call multiple times to ensure consistency
219
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
220
+ const result1 = builder.exportedOutputs();
221
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
222
+ const result2 = builder.exportedOutputs();
223
+ assert.deepStrictEqual(result1, result2);
224
+ });
225
+ });
226
+ describe('Amount Validation', function () {
227
+ it('should validate positive amounts', function () {
228
+ const positiveAmounts = [1n, 1000n, 1000000000000000000n];
229
+ positiveAmounts.forEach((amount) => {
230
+ assert.doesNotThrow(() => {
231
+ builder.amount(amount);
232
+ }, `Should validate positive amount: ${amount}`);
233
+ });
234
+ });
235
+ it('should reject zero amount', function () {
236
+ assert.throws(() => {
237
+ builder.amount(0n);
238
+ }, /Amount must be positive/);
239
+ });
240
+ it('should validate large amounts', function () {
241
+ const largeAmounts = [
242
+ BigInt('18446744073709551615'), // Max uint64
243
+ BigInt('999999999999999999999999999999'), // Very large
244
+ ];
245
+ largeAmounts.forEach((amount) => {
246
+ assert.doesNotThrow(() => {
247
+ builder.amount(amount);
248
+ }, `Should validate large amount: ${amount}`);
249
+ });
250
+ });
251
+ });
252
+ describe('Integration Tests', function () {
253
+ it('should handle basic P-chain export setup', function () {
254
+ const amount = 5000000000000000000n; // 5 FLR
255
+ // Basic setup
256
+ builder.amount(amount);
257
+ // Should not throw during setup
258
+ assert.ok(true);
259
+ });
260
+ it('should handle amount conversion from different types', function () {
261
+ // Test conversion from string
262
+ builder.amount('1000000000000000000');
263
+ // Test conversion from number
264
+ builder.amount(1000000);
265
+ // Test direct bigint
266
+ builder.amount(2000000000000000000n);
267
+ // All conversions should work
268
+ assert.ok(true);
269
+ });
270
+ it('should maintain state across operations', function () {
271
+ // Set amount
272
+ builder.amount(1000000000000000000n);
273
+ // Initialize with transaction
274
+ const mockTx = { type: 'export' };
275
+ builder.initBuilder(mockTx);
276
+ // State should be maintained
277
+ assert.ok(true);
278
+ });
279
+ it('should handle sequential amount updates', function () {
280
+ // Update amount multiple times
281
+ builder.amount(1000n);
282
+ builder.amount(2000n);
283
+ builder.amount(3000n);
284
+ // Should handle updates without issues
285
+ assert.ok(true);
286
+ });
287
+ });
288
+ describe('Error Handling', function () {
289
+ it('should handle invalid amount types gracefully', function () {
290
+ const invalidAmounts = [null, undefined, {}, [], 'invalid'];
291
+ invalidAmounts.forEach((amount) => {
292
+ assert.throws(() => {
293
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
294
+ builder.amount(amount);
295
+ }, `Should throw for invalid amount: ${amount}`);
296
+ });
297
+ });
298
+ it('should handle edge case string amounts', function () {
299
+ const edgeCaseAmounts = ['', ' ', 'abc', '1.5', 'infinity', 'NaN'];
300
+ edgeCaseAmounts.forEach((amount) => {
301
+ assert.throws(() => {
302
+ builder.amount(amount);
303
+ }, `Should throw for edge case amount: ${amount}`);
304
+ });
305
+ });
306
+ });
307
+ describe('Inheritance Tests', function () {
308
+ it('should inherit from AtomicTransactionBuilder', function () {
309
+ // Test that builder has expected inherited functionality
310
+ assert.ok(builder);
311
+ // Should have initBuilder method
312
+ assert.ok(typeof builder.initBuilder === 'function');
313
+ // Should have verifyTxType method
314
+ assert.ok(typeof builder.verifyTxType === 'function');
315
+ });
316
+ it('should have access to inherited UTXO methods', function () {
317
+ // Should inherit utxos method from parent
318
+ assert.ok(typeof builder.utxos === 'function');
319
+ });
320
+ });
321
+ describe('Edge Cases', function () {
322
+ it('should handle rapid consecutive operations', function () {
323
+ // Rapid amount changes (start from 1 since 0 is not valid)
324
+ for (let i = 1; i <= 100; i++) {
325
+ builder.amount(BigInt(i * 1000));
326
+ }
327
+ // Should handle rapid operations
328
+ assert.ok(true);
329
+ });
330
+ it('should handle maximum bigint values', function () {
331
+ const maxValues = [
332
+ BigInt(Number.MAX_SAFE_INTEGER),
333
+ BigInt('18446744073709551615'), // Max uint64
334
+ ];
335
+ maxValues.forEach((value) => {
336
+ assert.doesNotThrow(() => {
337
+ builder.amount(value);
338
+ }, `Should handle max value: ${value}`);
339
+ });
340
+ });
341
+ it('should handle minimum valid values', function () {
342
+ const minValues = [1n]; // Removed 0n since it's not valid
343
+ minValues.forEach((value) => {
344
+ assert.doesNotThrow(() => {
345
+ builder.amount(value);
346
+ }, `Should handle min value: ${value}`);
347
+ });
348
+ });
349
+ });
350
+ describe('Future Implementation Readiness', function () {
351
+ it('should be ready for future buildFlareTransaction implementation', function () {
352
+ // Setup valid state
353
+ builder.amount(1000000000000000000n);
354
+ // Current implementation throws, but structure is in place
355
+ assert.throws(() => {
356
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
357
+ builder.buildFlareTransaction();
358
+ }, /not implemented/);
359
+ });
360
+ it('should be ready for future verifyTxType implementation', function () {
361
+ // Current implementation returns false
362
+ const result = builder.verifyTxType({ type: 'export' });
363
+ assert.strictEqual(result, false);
364
+ // But method signature is ready for implementation
365
+ assert.ok(typeof builder.verifyTxType === 'function');
366
+ });
367
+ it('should be ready for future exportedOutputs implementation', function () {
368
+ // Current implementation returns empty array
369
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
370
+ const result = builder.exportedOutputs();
371
+ assert.ok(Array.isArray(result));
372
+ // But method exists and is ready for implementation
373
+ assert.strictEqual(result.length, 0);
374
+ });
375
+ });
376
+ });
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0SW5QVHhCdWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGVzdC91bml0L2xpYi9leHBvcnRJblBUeEJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw0Q0FBdUM7QUFDdkMsK0NBQWlDO0FBQ2pDLDRFQUF5RTtBQUV6RSxRQUFRLENBQUMsb0JBQW9CLEVBQUU7SUFDN0IsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0QyxJQUFJLE9BQTJCLENBQUM7SUFFaEMsVUFBVSxDQUFDO1FBQ1QsT0FBTyxHQUFHLElBQUksdUNBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsYUFBYSxFQUFFO1FBQ3RCLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRTtZQUN2QyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxZQUFZLHVDQUFrQixDQUFDLENBQUM7UUFDbkQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0NBQXdDLEVBQUU7WUFDM0MsbUJBQW1CO1lBQ25CLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdUNBQXVDLEVBQUU7WUFDMUMsOEJBQThCO1lBQzlCLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtRQUM1QixFQUFFLENBQUMsaUNBQWlDLEVBQUU7WUFDcEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUFLLEVBQUUsb0JBQW9CLEVB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LENBQUMsQ0FBQztZQUVsQyxtREFBbUQ7WUFDbkQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLE9BQU8sQ0FBQyxZQUFZLEtBQUssVUFBVSxDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkRBQTJELEVBQUU7WUFDOUQsNkNBQTZDO1lBQzdDLDhEQUE4RDtZQUM5RCxNQUFNLE1BQU0sR0FBSSxPQUFlLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbEQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFFakMsb0RBQW9EO1lBQ3BELE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2lucyB9IGZyb20gJ0BiaXRnby9zdGF0aWNzJztcbmltcG9ydCAqIGFzIGFzc2VydCBmcm9tICdhc3NlcnQnO1xuaW1wb3J0IHsgRXhwb3J0SW5QVHhCdWlsZGVyIH0gZnJvbSAnLi4vLi4vLi4vc3JjL2xpYi9leHBvcnRJblBUeEJ1aWxkZXInO1xuXG5kZXNjcmliZSgnRXhwb3J0SW5QVHhCdWlsZGVyJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBjb2luQ29uZmlnID0gY29pbnMuZ2V0KCd0ZmxycCcpO1xuICBsZXQgYnVpbGRlcjogRXhwb3J0SW5QVHhCdWlsZGVyO1xuXG4gIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkge1xuICAgIGJ1aWxkZXIgPSBuZXcgRXhwb3J0SW5QVHhCdWlsZGVyKGNvaW5Db25maWcpO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ29uc3RydWN0b3InLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIHdpdGggY29pbiBjb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQub2soYnVpbGRlcik7XG4gICAgICBhc3NlcnQub2soYnVpbGRlciBpbnN0YW5jZW9mIEV4cG9ydEluUFR4QnVpbGRlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGV4dGVuZCBBdG9taWNUcmFuc2FjdGlvbkJ1aWxkZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUZXN0IGluaGVyaXRhbmNlXG4gICAgICBhc3NlcnQub2soYnVpbGRlcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGluaXRpYWxpemUgd2l0aCBkZWZhdWx0IGFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIERlZmF1bHQgYW1vdW50IHNob3VsZCBiZSAwblxuICAgICAgYXNzZXJ0Lm9rKGJ1aWxkZXIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQW1vdW50IE1hbmFnZW1lbnQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBzZXQgdmFsaWQgYmlnaW50IGFtb3VudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWxpZEFtb3VudHMgPSBbMTAwMG4sIDEwMDAwMDAwMDAwMDAwMDAwMDBuLCA5OTk5OTk5OTk5OTk5OTk5OTluXTsgLy8gUmVtb3ZlZCAwblxuXG4gICAgICB2YWxpZEFtb3VudHMuZm9yRWFjaCgoYW1vdW50KSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgICAgIH0sIGBTaG91bGQgYWNjZXB0IGJpZ2ludCBhbW91bnQ6ICR7YW1vdW50fWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNldCBzdHJpbmcgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHN0cmluZ0Ftb3VudHMgPSBbJzEwMDAnLCAnMTAwMDAwMDAwMDAwMDAwMDAwMCcsICc5OTk5OTk5OTk5OTk5OTk5OTknXTsgLy8gUmVtb3ZlZCAnMCdcblxuICAgICAgc3RyaW5nQW1vdW50cy5mb3JFYWNoKChhbW91bnQpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5hbW91bnQoYW1vdW50KTtcbiAgICAgICAgfSwgYFNob3VsZCBhY2NlcHQgc3RyaW5nIGFtb3VudDogJHthbW91bnR9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgc2V0IG51bWVyaWMgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG51bWVyaWNBbW91bnRzID0gWzEwMDAsIDIwMDAwMDAsIDk5OTk5OTk5OV07IC8vIFJlbW92ZWQgMFxuXG4gICAgICBudW1lcmljQW1vdW50cy5mb3JFYWNoKChhbW91bnQpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5hbW91bnQoYW1vdW50KTtcbiAgICAgICAgfSwgYFNob3VsZCBhY2NlcHQgbnVtZXJpYyBhbW91bnQ6ICR7YW1vdW50fWApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCB6ZXJvIGFtb3VudCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC50aHJvd3MoKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmFtb3VudCgwbik7XG4gICAgICB9LCAvQW1vdW50IG11c3QgYmUgcG9zaXRpdmUvKTtcblxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuYW1vdW50KCcwJyk7XG4gICAgICB9LCAvQW1vdW50IG11c3QgYmUgcG9zaXRpdmUvKTtcblxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuYW1vdW50KDApO1xuICAgICAgfSwgL0Ftb3VudCBtdXN0IGJlIHBvc2l0aXZlLyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBsYXJnZSBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbGFyZ2VBbW91bnRzID0gW1xuICAgICAgICAnMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwJywgLy8gVmVyeSBsYXJnZSBhbW91bnRcbiAgICAgICAgJzE4NDQ2NzQ0MDczNzA5NTUxNjE1JywgLy8gTmVhciB1aW50NjQgbWF4XG4gICAgICAgIEJpZ0ludCgnOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5JyksXG4gICAgICAgIDk5OTk5OTk5OTk5OTk5OTk5OW4sXG4gICAgICBdO1xuXG4gICAgICBsYXJnZUFtb3VudHMuZm9yRWFjaCgoYW1vdW50KSA9PiB7XG4gICAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICAgIGJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgICAgIH0sIGBTaG91bGQgaGFuZGxlIGxhcmdlIGFtb3VudDogJHthbW91bnR9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IG5lZ2F0aXZlIGFtb3VudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBuZWdhdGl2ZUFtb3VudHMgPSBbJy0xMDAwJywgJy0xJ107XG5cbiAgICAgIG5lZ2F0aXZlQW1vdW50cy5mb3JFYWNoKChhbW91bnQpID0+IHtcbiAgICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICBidWlsZGVyLmFtb3VudChhbW91bnQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgRXJyb3IsIC8vIHZhbGlkYXRlQW1vdW50IHNob3VsZCB0aHJvdyBlcnJvciBmb3IgbmVnYXRpdmUgYW1vdW50c1xuICAgICAgICAgIGBTaG91bGQgcmVqZWN0IG5lZ2F0aXZlIGFtb3VudDogJHthbW91bnR9YFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlamVjdCBuZWdhdGl2ZSBiaWdpbnQgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG5lZ2F0aXZlQmlnaW50cyA9IFstMW4sIC0xMDAwbiwgLTk5OTk5OTk5OTk5OW5dO1xuXG4gICAgICBuZWdhdGl2ZUJpZ2ludHMuZm9yRWFjaCgoYW1vdW50KSA9PiB7XG4gICAgICAgIGFzc2VydC50aHJvd3MoXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgYnVpbGRlci5hbW91bnQoYW1vdW50KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIEVycm9yLFxuICAgICAgICAgIGBTaG91bGQgcmVqZWN0IG5lZ2F0aXZlIGJpZ2ludCBhbW91bnQ6ICR7YW1vdW50fWBcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjaGFpbiBhbW91bnQgc2V0dGluZyB3aXRoIG90aGVyIG1ldGhvZHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBhbW91bnQgPSAxMDAwMDAwMDAwMDAwMDAwMDAwbjsgLy8gMSBGTFJcblxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuYW1vdW50KGFtb3VudCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIFR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gRXhwb3J0IHRyYW5zYWN0aW9uIHR5cGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBDYW4ndCBhY2Nlc3MgcHJvdGVjdGVkIG1ldGhvZCBkaXJlY3RseSwgYnV0IHRlc3QgZG9lc24ndCB0aHJvd1xuICAgICAgYXNzZXJ0Lm9rKGJ1aWxkZXIpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gSW5pdGlhbGl6YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBpbml0aWFsaXplIGJ1aWxkZXIgZnJvbSB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tUeCA9IHsgdHlwZTogJ2V4cG9ydCcsIGRhdGE6ICdwbGFjZWhvbGRlcicgfTtcblxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuaW5pdEJ1aWxkZXIobW9ja1R4KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgbnVsbCB0cmFuc2FjdGlvbiBpbml0aWFsaXphdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4ge1xuICAgICAgICBidWlsZGVyLmluaXRCdWlsZGVyKG51bGwpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSB1bmRlZmluZWQgdHJhbnNhY3Rpb24gaW5pdGlhbGl6YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgYnVpbGRlci5pbml0QnVpbGRlcih1bmRlZmluZWQpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBvYmplY3QgdHJhbnNhY3Rpb24gaW5pdGlhbGl6YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtb2NrVHggPSB7XG4gICAgICAgIGlkOiAndGVzdC10eCcsXG4gICAgICAgIHR5cGU6ICdleHBvcnQnLFxuICAgICAgICBhbW91bnQ6ICcxMDAwMDAwMDAwMDAwMDAwMDAwJyxcbiAgICAgICAgZnJvbTogJ1AtZmxhcmUxc291cmNlJyxcbiAgICAgICAgdG86ICdDLWZsYXJlMWRlc3QnLFxuICAgICAgfTtcblxuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuaW5pdEJ1aWxkZXIobW9ja1R4KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnVHJhbnNhY3Rpb24gVHlwZSBWZXJpZmljYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgdHJhbnNhY3Rpb24gdHlwZSAocmV0dXJucyBmYWxzZSAtIG5vdCBpbXBsZW1lbnRlZCknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBtb2NrVHggPSB7IHR5cGU6ICdleHBvcnQnIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBFeHBvcnRJblBUeEJ1aWxkZXIudmVyaWZ5VHhUeXBlKG1vY2tUeCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCBmYWxzZSk7IC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXRcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGRpZmZlcmVudCB0cmFuc2FjdGlvbiBvYmplY3RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdGVzdENhc2VzID0gW3t9LCBudWxsLCB1bmRlZmluZWQsIHsgdHlwZTogJ2ltcG9ydCcgfSwgeyBkYXRhOiAndGVzdCcgfV07XG5cbiAgICAgIHRlc3RDYXNlcy5mb3JFYWNoKCh0ZXN0Q2FzZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gRXhwb3J0SW5QVHhCdWlsZGVyLnZlcmlmeVR4VHlwZSh0ZXN0Q2FzZSk7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChyZXN1bHQsIGZhbHNlLCBgVGVzdCBjYXNlICR7aW5kZXh9IHNob3VsZCByZXR1cm4gZmFsc2UgKG5vdCBpbXBsZW1lbnRlZClgKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgdmlhIGluc3RhbmNlIG1ldGhvZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tUeCA9IHsgdHlwZTogJ2V4cG9ydCcgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIudmVyaWZ5VHhUeXBlKG1vY2tUeCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCBmYWxzZSk7IC8vIE5vdCBpbXBsZW1lbnRlZFxuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2ZXJpZnkgc3RhdGljIGFuZCBpbnN0YW5jZSBtZXRob2RzIHJldHVybiBzYW1lIHJlc3VsdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1vY2tUeCA9IHsgdHlwZTogJ2V4cG9ydCcgfTtcbiAgICAgIGNvbnN0IHN0YXRpY1Jlc3VsdCA9IEV4cG9ydEluUFR4QnVpbGRlci52ZXJpZnlUeFR5cGUobW9ja1R4KTtcbiAgICAgIGNvbnN0IGluc3RhbmNlUmVzdWx0ID0gYnVpbGRlci52ZXJpZnlUeFR5cGUobW9ja1R4KTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChzdGF0aWNSZXN1bHQsIGluc3RhbmNlUmVzdWx0KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ1RyYW5zYWN0aW9uIEJ1aWxkaW5nJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdGhyb3cgZXJyb3Igd2hlbiBidWlsZGluZyAobm90IGltcGxlbWVudGVkKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGJ1aWxkZXIuYW1vdW50KDEwMDAwMDAwMDAwMDAwMDAwMDBuKTtcblxuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIC8vIEFjY2VzcyBwcm90ZWN0ZWQgbWV0aG9kIGZvciB0ZXN0aW5nXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICAgIChidWlsZGVyIGFzIGFueSkuYnVpbGRGbGFyZVRyYW5zYWN0aW9uKCk7XG4gICAgICB9LCBFcnJvcik7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHRocm93IHNwZWNpZmljIGVycm9yIG1lc3NhZ2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgKGJ1aWxkZXIgYXMgYW55KS5idWlsZEZsYXJlVHJhbnNhY3Rpb24oKTtcbiAgICAgIH0sIC9GbGFyZSBQLWNoYWluIGV4cG9ydCB0cmFuc2FjdGlvbiBidWlsZCBub3QgaW1wbGVtZW50ZWQvKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0V4cG9ydGVkIE91dHB1dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZW1wdHkgYXJyYXkgZm9yIGV4cG9ydGVkIG91dHB1dHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBBY2Nlc3MgcHJvdGVjdGVkIG1ldGhvZCBmb3IgdGVzdGluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIGNvbnN0IHJlc3VsdCA9IChidWlsZGVyIGFzIGFueSkuZXhwb3J0ZWRPdXRwdXRzKCk7XG5cbiAgICAgIGFzc2VydC5vayhBcnJheS5pc0FycmF5KHJlc3VsdCkpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKHJlc3VsdC5sZW5ndGgsIDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb25zaXN0ZW50bHkgcmV0dXJuIGVtcHR5IGFycmF5JywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQ2FsbCBtdWx0aXBsZSB0aW1lcyB0byBlbnN1cmUgY29uc2lzdGVuY3lcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBjb25zdCByZXN1bHQxID0gKGJ1aWxkZXIgYXMgYW55KS5leHBvcnRlZE91dHB1dHMoKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBjb25zdCByZXN1bHQyID0gKGJ1aWxkZXIgYXMgYW55KS5leHBvcnRlZE91dHB1dHMoKTtcblxuICAgICAgYXNzZXJ0LmRlZXBTdHJpY3RFcXVhbChyZXN1bHQxLCByZXN1bHQyKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0Ftb3VudCBWYWxpZGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgdmFsaWRhdGUgcG9zaXRpdmUgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBvc2l0aXZlQW1vdW50cyA9IFsxbiwgMTAwMG4sIDEwMDAwMDAwMDAwMDAwMDAwMDBuXTtcblxuICAgICAgcG9zaXRpdmVBbW91bnRzLmZvckVhY2goKGFtb3VudCkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLmFtb3VudChhbW91bnQpO1xuICAgICAgICB9LCBgU2hvdWxkIHZhbGlkYXRlIHBvc2l0aXZlIGFtb3VudDogJHthbW91bnR9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVqZWN0IHplcm8gYW1vdW50JywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgIGJ1aWxkZXIuYW1vdW50KDBuKTtcbiAgICAgIH0sIC9BbW91bnQgbXVzdCBiZSBwb3NpdGl2ZS8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBsYXJnZSBhbW91bnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbGFyZ2VBbW91bnRzID0gW1xuICAgICAgICBCaWdJbnQoJzE4NDQ2NzQ0MDczNzA5NTUxNjE1JyksIC8vIE1heCB1aW50NjRcbiAgICAgICAgQmlnSW50KCc5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTknKSwgLy8gVmVyeSBsYXJnZVxuICAgICAgXTtcblxuICAgICAgbGFyZ2VBbW91bnRzLmZvckVhY2goKGFtb3VudCkgPT4ge1xuICAgICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHtcbiAgICAgICAgICBidWlsZGVyLmFtb3VudChhbW91bnQpO1xuICAgICAgICB9LCBgU2hvdWxkIHZhbGlkYXRlIGxhcmdlIGFtb3VudDogJHthbW91bnR9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0ludGVncmF0aW9uIFRlc3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgaGFuZGxlIGJhc2ljIFAtY2hhaW4gZXhwb3J0IHNldHVwJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgYW1vdW50ID0gNTAwMDAwMDAwMDAwMDAwMDAwMG47IC8vIDUgRkxSXG5cbiAgICAgIC8vIEJhc2ljIHNldHVwXG4gICAgICBidWlsZGVyLmFtb3VudChhbW91bnQpO1xuXG4gICAgICAvLyBTaG91bGQgbm90IHRocm93IGR1cmluZyBzZXR1cFxuICAgICAgYXNzZXJ0Lm9rKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgYW1vdW50IGNvbnZlcnNpb24gZnJvbSBkaWZmZXJlbnQgdHlwZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBUZXN0IGNvbnZlcnNpb24gZnJvbSBzdHJpbmdcbiAgICAgIGJ1aWxkZXIuYW1vdW50KCcxMDAwMDAwMDAwMDAwMDAwMDAwJyk7XG5cbiAgICAgIC8vIFRlc3QgY29udmVyc2lvbiBmcm9tIG51bWJlclxuICAgICAgYnVpbGRlci5hbW91bnQoMTAwMDAwMCk7XG5cbiAgICAgIC8vIFRlc3QgZGlyZWN0IGJpZ2ludFxuICAgICAgYnVpbGRlci5hbW91bnQoMjAwMDAwMDAwMDAwMDAwMDAwMG4pO1xuXG4gICAgICAvLyBBbGwgY29udmVyc2lvbnMgc2hvdWxkIHdvcmtcbiAgICAgIGFzc2VydC5vayh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgbWFpbnRhaW4gc3RhdGUgYWNyb3NzIG9wZXJhdGlvbnMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBTZXQgYW1vdW50XG4gICAgICBidWlsZGVyLmFtb3VudCgxMDAwMDAwMDAwMDAwMDAwMDAwbik7XG5cbiAgICAgIC8vIEluaXRpYWxpemUgd2l0aCB0cmFuc2FjdGlvblxuICAgICAgY29uc3QgbW9ja1R4ID0geyB0eXBlOiAnZXhwb3J0JyB9O1xuICAgICAgYnVpbGRlci5pbml0QnVpbGRlcihtb2NrVHgpO1xuXG4gICAgICAvLyBTdGF0ZSBzaG91bGQgYmUgbWFpbnRhaW5lZFxuICAgICAgYXNzZXJ0Lm9rKHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc2VxdWVudGlhbCBhbW91bnQgdXBkYXRlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFVwZGF0ZSBhbW91bnQgbXVsdGlwbGUgdGltZXNcbiAgICAgIGJ1aWxkZXIuYW1vdW50KDEwMDBuKTtcbiAgICAgIGJ1aWxkZXIuYW1vdW50KDIwMDBuKTtcbiAgICAgIGJ1aWxkZXIuYW1vdW50KDMwMDBuKTtcblxuICAgICAgLy8gU2hvdWxkIGhhbmRsZSB1cGRhdGVzIHdpdGhvdXQgaXNzdWVzXG4gICAgICBhc3NlcnQub2sodHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFcnJvciBIYW5kbGluZycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBpbnZhbGlkIGFtb3VudCB0eXBlcyBncmFjZWZ1bGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaW52YWxpZEFtb3VudHMgPSBbbnVsbCwgdW5kZWZpbmVkLCB7fSwgW10sICdpbnZhbGlkJ107XG5cbiAgICAgIGludmFsaWRBbW91bnRzLmZvckVhY2goKGFtb3VudCkgPT4ge1xuICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgICAgIGJ1aWxkZXIuYW1vdW50KGFtb3VudCBhcyBhbnkpO1xuICAgICAgICB9LCBgU2hvdWxkIHRocm93IGZvciBpbnZhbGlkIGFtb3VudDogJHthbW91bnR9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGVkZ2UgY2FzZSBzdHJpbmcgYW1vdW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGVkZ2VDYXNlQW1vdW50cyA9IFsnJywgJyAgJywgJ2FiYycsICcxLjUnLCAnaW5maW5pdHknLCAnTmFOJ107XG5cbiAgICAgIGVkZ2VDYXNlQW1vdW50cy5mb3JFYWNoKChhbW91bnQpID0+IHtcbiAgICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5hbW91bnQoYW1vdW50KTtcbiAgICAgICAgfSwgYFNob3VsZCB0aHJvdyBmb3IgZWRnZSBjYXNlIGFtb3VudDogJHthbW91bnR9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0luaGVyaXRhbmNlIFRlc3RzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgaW5oZXJpdCBmcm9tIEF0b21pY1RyYW5zYWN0aW9uQnVpbGRlcicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFRlc3QgdGhhdCBidWlsZGVyIGhhcyBleHBlY3RlZCBpbmhlcml0ZWQgZnVuY3Rpb25hbGl0eVxuICAgICAgYXNzZXJ0Lm9rKGJ1aWxkZXIpO1xuXG4gICAgICAvLyBTaG91bGQgaGF2ZSBpbml0QnVpbGRlciBtZXRob2RcbiAgICAgIGFzc2VydC5vayh0eXBlb2YgYnVpbGRlci5pbml0QnVpbGRlciA9PT0gJ2Z1bmN0aW9uJyk7XG5cbiAgICAgIC8vIFNob3VsZCBoYXZlIHZlcmlmeVR4VHlwZSBtZXRob2RcbiAgICAgIGFzc2VydC5vayh0eXBlb2YgYnVpbGRlci52ZXJpZnlUeFR5cGUgPT09ICdmdW5jdGlvbicpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYXZlIGFjY2VzcyB0byBpbmhlcml0ZWQgVVRYTyBtZXRob2RzJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gU2hvdWxkIGluaGVyaXQgdXR4b3MgbWV0aG9kIGZyb20gcGFyZW50XG4gICAgICBhc3NlcnQub2sodHlwZW9mIGJ1aWxkZXIudXR4b3MgPT09ICdmdW5jdGlvbicpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnRWRnZSBDYXNlcycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGhhbmRsZSByYXBpZCBjb25zZWN1dGl2ZSBvcGVyYXRpb25zJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUmFwaWQgYW1vdW50IGNoYW5nZXMgKHN0YXJ0IGZyb20gMSBzaW5jZSAwIGlzIG5vdCB2YWxpZClcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEwMDsgaSsrKSB7XG4gICAgICAgIGJ1aWxkZXIuYW1vdW50KEJpZ0ludChpICogMTAwMCkpO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG91bGQgaGFuZGxlIHJhcGlkIG9wZXJhdGlvbnNcbiAgICAgIGFzc2VydC5vayh0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIG1heGltdW0gYmlnaW50IHZhbHVlcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IG1heFZhbHVlcyA9IFtcbiAgICAgICAgQmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSxcbiAgICAgICAgQmlnSW50KCcxODQ0Njc0NDA3MzcwOTU1MTYxNScpLCAvLyBNYXggdWludDY0XG4gICAgICBdO1xuXG4gICAgICBtYXhWYWx1ZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5hbW91bnQodmFsdWUpO1xuICAgICAgICB9LCBgU2hvdWxkIGhhbmRsZSBtYXggdmFsdWU6ICR7dmFsdWV9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIG1pbmltdW0gdmFsaWQgdmFsdWVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgbWluVmFsdWVzID0gWzFuXTsgLy8gUmVtb3ZlZCAwbiBzaW5jZSBpdCdzIG5vdCB2YWxpZFxuXG4gICAgICBtaW5WYWx1ZXMuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB7XG4gICAgICAgICAgYnVpbGRlci5hbW91bnQodmFsdWUpO1xuICAgICAgICB9LCBgU2hvdWxkIGhhbmRsZSBtaW4gdmFsdWU6ICR7dmFsdWV9YCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0Z1dHVyZSBJbXBsZW1lbnRhdGlvbiBSZWFkaW5lc3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBiZSByZWFkeSBmb3IgZnV0dXJlIGJ1aWxkRmxhcmVUcmFuc2FjdGlvbiBpbXBsZW1lbnRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFNldHVwIHZhbGlkIHN0YXRlXG4gICAgICBidWlsZGVyLmFtb3VudCgxMDAwMDAwMDAwMDAwMDAwMDAwbik7XG5cbiAgICAgIC8vIEN1cnJlbnQgaW1wbGVtZW50YXRpb24gdGhyb3dzLCBidXQgc3RydWN0dXJlIGlzIGluIHBsYWNlXG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgICAgKGJ1aWxkZXIgYXMgYW55KS5idWlsZEZsYXJlVHJhbnNhY3Rpb24oKTtcbiAgICAgIH0sIC9ub3QgaW1wbGVtZW50ZWQvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYmUgcmVhZHkgZm9yIGZ1dHVyZSB2ZXJpZnlUeFR5cGUgaW1wbGVtZW50YXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBDdXJyZW50IGltcGxlbWVudGF0aW9uIHJldHVybnMgZmFsc2VcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkZXIudmVyaWZ5VHhUeXBlKHsgdHlwZTogJ2V4cG9ydCcgfSk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0LCBmYWxzZSk7XG5cbiAgICAgIC8vIEJ1dCBtZXRob2Qgc2lnbmF0dXJlIGlzIHJlYWR5IGZvciBpbXBsZW1lbnRhdGlvblxuICAgICAgYXNzZXJ0Lm9rKHR5cGVvZiBidWlsZGVyLnZlcmlmeVR4VHlwZSA9PT0gJ2Z1bmN0aW9uJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIHJlYWR5IGZvciBmdXR1cmUgZXhwb3J0ZWRPdXRwdXRzIGltcGxlbWVudGF0aW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgLy8gQ3VycmVudCBpbXBsZW1lbnRhdGlvbiByZXR1cm5zIGVtcHR5IGFycmF5XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgY29uc3QgcmVzdWx0ID0gKGJ1aWxkZXIgYXMgYW55KS5leHBvcnRlZE91dHB1dHMoKTtcbiAgICAgIGFzc2VydC5vayhBcnJheS5pc0FycmF5KHJlc3VsdCkpO1xuXG4gICAgICAvLyBCdXQgbWV0aG9kIGV4aXN0cyBhbmQgaXMgcmVhZHkgZm9yIGltcGxlbWVudGF0aW9uXG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwocmVzdWx0Lmxlbmd0aCwgMCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=importInCTxBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importInCTxBuilder.d.ts","sourceRoot":"","sources":["../../../../test/unit/lib/importInCTxBuilder.ts"],"names":[],"mappings":""}