tnp-core 13.2.17 → 13.2.18

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 (99) hide show
  1. package/README.md +20 -20
  2. package/assets/shared/shared_folder_info.txt +1 -1
  3. package/browser/README.md +24 -24
  4. package/browser/esm2020/lib/core-config.mjs +6 -6
  5. package/browser/esm2020/lib/core-imports.mjs +68 -68
  6. package/browser/esm2020/lib/core-models.mjs +3 -3
  7. package/browser/esm2020/lib/framework-name.mjs +9 -9
  8. package/browser/esm2020/lib/helpers-isomorphic.mjs +35 -35
  9. package/browser/esm2020/lib/helpers-messages.mjs +493 -493
  10. package/browser/esm2020/lib/helpers.mjs +1184 -1184
  11. package/browser/esm2020/lib/index.mjs +10 -10
  12. package/browser/esm2020/lib/node-path-mock.mjs +414 -414
  13. package/browser/esm2020/lib/progress-data.mjs +51 -51
  14. package/browser/esm2020/public-api.mjs +1 -1
  15. package/browser/esm2020/tnp-core.mjs +4 -4
  16. package/browser/fesm2015/tnp-core.mjs +2198 -2198
  17. package/browser/fesm2020/tnp-core.mjs +2196 -2196
  18. package/browser/lib/core-config.d.ts +4 -4
  19. package/browser/lib/core-imports.d.ts +7 -7
  20. package/browser/lib/core-models.d.ts +41 -41
  21. package/browser/lib/framework-name.d.ts +1 -1
  22. package/browser/lib/helpers-isomorphic.d.ts +5 -5
  23. package/browser/lib/helpers-messages.d.ts +16 -16
  24. package/browser/lib/helpers.d.ts +50 -50
  25. package/browser/lib/index.d.ts +7 -7
  26. package/browser/lib/node-path-mock.d.ts +24 -24
  27. package/browser/lib/progress-data.d.ts +17 -17
  28. package/browser/tnp-core.d.ts +4 -4
  29. package/cli.backend.js +3 -3
  30. package/client/README.md +24 -24
  31. package/client/esm2020/lib/core-config.mjs +6 -6
  32. package/client/esm2020/lib/core-imports.mjs +68 -68
  33. package/client/esm2020/lib/core-models.mjs +3 -3
  34. package/client/esm2020/lib/framework-name.mjs +9 -9
  35. package/client/esm2020/lib/helpers-isomorphic.mjs +35 -35
  36. package/client/esm2020/lib/helpers-messages.mjs +493 -493
  37. package/client/esm2020/lib/helpers.mjs +1184 -1184
  38. package/client/esm2020/lib/index.mjs +10 -10
  39. package/client/esm2020/lib/node-path-mock.mjs +414 -414
  40. package/client/esm2020/lib/progress-data.mjs +51 -51
  41. package/client/esm2020/public-api.mjs +1 -1
  42. package/client/esm2020/tnp-core.mjs +4 -4
  43. package/client/fesm2015/tnp-core.mjs +2198 -2198
  44. package/client/fesm2020/tnp-core.mjs +2196 -2196
  45. package/client/lib/core-config.d.ts +4 -4
  46. package/client/lib/core-imports.d.ts +7 -7
  47. package/client/lib/core-models.d.ts +41 -41
  48. package/client/lib/framework-name.d.ts +1 -1
  49. package/client/lib/helpers-isomorphic.d.ts +5 -5
  50. package/client/lib/helpers-messages.d.ts +16 -16
  51. package/client/lib/helpers.d.ts +50 -50
  52. package/client/lib/index.d.ts +7 -7
  53. package/client/lib/node-path-mock.d.ts +24 -24
  54. package/client/lib/progress-data.d.ts +17 -17
  55. package/client/package.json +8 -8
  56. package/client/tnp-core.d.ts +4 -4
  57. package/index.d.ts +1 -1
  58. package/lib/core-config.d.ts +5 -5
  59. package/lib/core-imports.d.ts +30 -30
  60. package/lib/core-models.d.ts +42 -42
  61. package/lib/framework-name.d.ts +2 -2
  62. package/lib/helpers-isomorphic.d.ts +6 -6
  63. package/lib/helpers-messages.d.ts +33 -33
  64. package/lib/helpers.d.ts +129 -129
  65. package/lib/index.d.ts +8 -8
  66. package/lib/node-path-mock.d.ts +24 -24
  67. package/lib/node-path-mock.js +3 -3
  68. package/lib/progress-data.d.ts +18 -18
  69. package/lib/public-api.d.ts +7 -7
  70. package/package.json +2 -2
  71. package/package.json_devDependencies.json +202 -202
  72. package/package.json_tnp.json5 +65 -65
  73. package/tmp-environment.json +12 -11
  74. package/websql/README.md +24 -24
  75. package/websql/esm2020/lib/core-config.mjs +6 -6
  76. package/websql/esm2020/lib/core-imports.mjs +68 -68
  77. package/websql/esm2020/lib/core-models.mjs +3 -3
  78. package/websql/esm2020/lib/framework-name.mjs +9 -9
  79. package/websql/esm2020/lib/helpers-isomorphic.mjs +34 -34
  80. package/websql/esm2020/lib/helpers-messages.mjs +493 -493
  81. package/websql/esm2020/lib/helpers.mjs +1182 -1182
  82. package/websql/esm2020/lib/index.mjs +10 -10
  83. package/websql/esm2020/lib/node-path-mock.mjs +414 -414
  84. package/websql/esm2020/lib/progress-data.mjs +51 -51
  85. package/websql/esm2020/public-api.mjs +1 -1
  86. package/websql/esm2020/tnp-core.mjs +4 -4
  87. package/websql/fesm2015/tnp-core.mjs +2195 -2195
  88. package/websql/fesm2020/tnp-core.mjs +2193 -2193
  89. package/websql/lib/core-config.d.ts +4 -4
  90. package/websql/lib/core-imports.d.ts +7 -7
  91. package/websql/lib/core-models.d.ts +41 -41
  92. package/websql/lib/framework-name.d.ts +1 -1
  93. package/websql/lib/helpers-isomorphic.d.ts +5 -5
  94. package/websql/lib/helpers-messages.d.ts +16 -16
  95. package/websql/lib/helpers.d.ts +50 -50
  96. package/websql/lib/index.d.ts +7 -7
  97. package/websql/lib/node-path-mock.d.ts +24 -24
  98. package/websql/lib/progress-data.d.ts +17 -17
  99. package/websql/tnp-core.d.ts +4 -4
@@ -1,415 +1,415 @@
1
- function assertPath(path) {
2
- if (typeof path !== 'string') {
3
- throw new TypeError('[firedev-core] Path must be a string. Received ' + JSON.stringify(path));
4
- }
5
- }
6
- function normalizeStringPosix(path, allowAboveRoot) {
7
- var res = '';
8
- var lastSegmentLength = 0;
9
- var lastSlash = -1;
10
- var dots = 0;
11
- var code;
12
- for (var i = 0; i <= path.length; ++i) {
13
- if (i < path.length)
14
- code = path.charCodeAt(i);
15
- else if (code === 47 /*/*/)
16
- break;
17
- else
18
- code = 47 /*/*/;
19
- if (code === 47 /*/*/) {
20
- if (lastSlash === i - 1 || dots === 1) {
21
- }
22
- else if (lastSlash !== i - 1 && dots === 2) {
23
- if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {
24
- if (res.length > 2) {
25
- var lastSlashIndex = res.lastIndexOf('/');
26
- if (lastSlashIndex !== res.length - 1) {
27
- if (lastSlashIndex === -1) {
28
- res = '';
29
- lastSegmentLength = 0;
30
- }
31
- else {
32
- res = res.slice(0, lastSlashIndex);
33
- lastSegmentLength = res.length - 1 - res.lastIndexOf('/');
34
- }
35
- lastSlash = i;
36
- dots = 0;
37
- continue;
38
- }
39
- }
40
- else if (res.length === 2 || res.length === 1) {
41
- res = '';
42
- lastSegmentLength = 0;
43
- lastSlash = i;
44
- dots = 0;
45
- continue;
46
- }
47
- }
48
- if (allowAboveRoot) {
49
- if (res.length > 0)
50
- res += '/..';
51
- else
52
- res = '..';
53
- lastSegmentLength = 2;
54
- }
55
- }
56
- else {
57
- if (res.length > 0)
58
- res += '/' + path.slice(lastSlash + 1, i);
59
- else
60
- res = path.slice(lastSlash + 1, i);
61
- lastSegmentLength = i - lastSlash - 1;
62
- }
63
- lastSlash = i;
64
- dots = 0;
65
- }
66
- else if (code === 46 /*.*/ && dots !== -1) {
67
- ++dots;
68
- }
69
- else {
70
- dots = -1;
71
- }
72
- }
73
- return res;
74
- }
75
- function _format(sep, pathObject) {
76
- var dir = pathObject.dir || pathObject.root;
77
- var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');
78
- if (!dir) {
79
- return base;
80
- }
81
- if (dir === pathObject.root) {
82
- return dir + base;
83
- }
84
- return dir + sep + base;
85
- }
86
- export const path = {
87
- resolve: function resolve(pathToResovle) {
88
- return pathToResovle;
89
- },
90
- normalize: function normalize(pathArg) {
91
- assertPath(pathArg);
92
- if (pathArg.length === 0)
93
- return '.';
94
- var isAbsolute = pathArg.charCodeAt(0) === 47 /*/*/;
95
- var trailingSeparator = pathArg.charCodeAt(pathArg.length - 1) === 47 /*/*/;
96
- pathArg = normalizeStringPosix(pathArg, !isAbsolute);
97
- if (pathArg.length === 0 && !isAbsolute)
98
- pathArg = '.';
99
- if (pathArg.length > 0 && trailingSeparator)
100
- pathArg += '/';
101
- if (isAbsolute)
102
- return '/' + pathArg;
103
- return pathArg;
104
- },
105
- isAbsolute: function isAbsolute(pathArg) {
106
- assertPath(pathArg);
107
- return pathArg.length > 0 && pathArg.charCodeAt(0) === 47 /*/*/;
108
- },
109
- join: function join() {
110
- if (arguments.length === 0)
111
- return '.';
112
- var joined;
113
- for (var i = 0; i < arguments.length; ++i) {
114
- var arg = arguments[i];
115
- assertPath(arg);
116
- if (arg.length > 0) {
117
- if (joined === undefined)
118
- joined = arg;
119
- else
120
- joined += '/' + arg;
121
- }
122
- }
123
- if (joined === undefined)
124
- return '.';
125
- return path.normalize(joined);
126
- },
127
- relative: function relative(from, to) {
128
- assertPath(from);
129
- assertPath(to);
130
- if (from === to)
131
- return '';
132
- from = path.resolve(from);
133
- to = path.resolve(to);
134
- if (from === to)
135
- return '';
136
- var fromStart = 1;
137
- for (; fromStart < from.length; ++fromStart) {
138
- if (from.charCodeAt(fromStart) !== 47 /*/*/)
139
- break;
140
- }
141
- var fromEnd = from.length;
142
- var fromLen = fromEnd - fromStart;
143
- var toStart = 1;
144
- for (; toStart < to.length; ++toStart) {
145
- if (to.charCodeAt(toStart) !== 47 /*/*/)
146
- break;
147
- }
148
- var toEnd = to.length;
149
- var toLen = toEnd - toStart;
150
- var length = fromLen < toLen ? fromLen : toLen;
151
- var lastCommonSep = -1;
152
- var i = 0;
153
- for (; i <= length; ++i) {
154
- if (i === length) {
155
- if (toLen > length) {
156
- if (to.charCodeAt(toStart + i) === 47 /*/*/) {
157
- return to.slice(toStart + i + 1);
158
- }
159
- else if (i === 0) {
160
- return to.slice(toStart + i);
161
- }
162
- }
163
- else if (fromLen > length) {
164
- if (from.charCodeAt(fromStart + i) === 47 /*/*/) {
165
- lastCommonSep = i;
166
- }
167
- else if (i === 0) {
168
- lastCommonSep = 0;
169
- }
170
- }
171
- break;
172
- }
173
- var fromCode = from.charCodeAt(fromStart + i);
174
- var toCode = to.charCodeAt(toStart + i);
175
- if (fromCode !== toCode)
176
- break;
177
- else if (fromCode === 47 /*/*/)
178
- lastCommonSep = i;
179
- }
180
- var out = '';
181
- for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
182
- if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {
183
- if (out.length === 0)
184
- out += '..';
185
- else
186
- out += '/..';
187
- }
188
- }
189
- if (out.length > 0)
190
- return out + to.slice(toStart + lastCommonSep);
191
- else {
192
- toStart += lastCommonSep;
193
- if (to.charCodeAt(toStart) === 47 /*/*/)
194
- ++toStart;
195
- return to.slice(toStart);
196
- }
197
- },
198
- _makeLong: function _makeLong(path) {
199
- return path;
200
- },
201
- dirname: function dirname(path) {
202
- assertPath(path);
203
- if (path.length === 0)
204
- return '.';
205
- var code = path.charCodeAt(0);
206
- var hasRoot = code === 47 /*/*/;
207
- var end = -1;
208
- var matchedSlash = true;
209
- for (var i = path.length - 1; i >= 1; --i) {
210
- code = path.charCodeAt(i);
211
- if (code === 47 /*/*/) {
212
- if (!matchedSlash) {
213
- end = i;
214
- break;
215
- }
216
- }
217
- else {
218
- matchedSlash = false;
219
- }
220
- }
221
- if (end === -1)
222
- return hasRoot ? '/' : '.';
223
- if (hasRoot && end === 1)
224
- return '//';
225
- return path.slice(0, end);
226
- },
227
- basename: function basename(pathArg, ext) {
228
- if (ext !== undefined && typeof ext !== 'string')
229
- throw new TypeError('"ext" argument must be a string');
230
- assertPath(pathArg);
231
- var start = 0;
232
- var end = -1;
233
- var matchedSlash = true;
234
- var i;
235
- if (ext !== undefined && ext.length > 0 && ext.length <= pathArg.length) {
236
- if (ext.length === pathArg.length && ext === pathArg)
237
- return '';
238
- var extIdx = ext.length - 1;
239
- var firstNonSlashEnd = -1;
240
- for (i = pathArg.length - 1; i >= 0; --i) {
241
- var code = pathArg.charCodeAt(i);
242
- if (code === 47 /*/*/) {
243
- if (!matchedSlash) {
244
- start = i + 1;
245
- break;
246
- }
247
- }
248
- else {
249
- if (firstNonSlashEnd === -1) {
250
- matchedSlash = false;
251
- firstNonSlashEnd = i + 1;
252
- }
253
- if (extIdx >= 0) {
254
- if (code === ext.charCodeAt(extIdx)) {
255
- if (--extIdx === -1) {
256
- end = i;
257
- }
258
- }
259
- else {
260
- extIdx = -1;
261
- end = firstNonSlashEnd;
262
- }
263
- }
264
- }
265
- }
266
- if (start === end)
267
- end = firstNonSlashEnd;
268
- else if (end === -1)
269
- end = pathArg.length;
270
- return pathArg.slice(start, end);
271
- }
272
- else {
273
- for (i = pathArg.length - 1; i >= 0; --i) {
274
- if (pathArg.charCodeAt(i) === 47 /*/*/) {
275
- if (!matchedSlash) {
276
- start = i + 1;
277
- break;
278
- }
279
- }
280
- else if (end === -1) {
281
- matchedSlash = false;
282
- end = i + 1;
283
- }
284
- }
285
- if (end === -1)
286
- return '';
287
- return pathArg.slice(start, end);
288
- }
289
- },
290
- extname: function extname(pathArg) {
291
- assertPath(pathArg);
292
- var startDot = -1;
293
- var startPart = 0;
294
- var end = -1;
295
- var matchedSlash = true;
296
- var preDotState = 0;
297
- for (var i = pathArg.length - 1; i >= 0; --i) {
298
- var code = pathArg.charCodeAt(i);
299
- if (code === 47 /*/*/) {
300
- if (!matchedSlash) {
301
- startPart = i + 1;
302
- break;
303
- }
304
- continue;
305
- }
306
- if (end === -1) {
307
- matchedSlash = false;
308
- end = i + 1;
309
- }
310
- if (code === 46 /*.*/) {
311
- if (startDot === -1)
312
- startDot = i;
313
- else if (preDotState !== 1)
314
- preDotState = 1;
315
- }
316
- else if (startDot !== -1) {
317
- preDotState = -1;
318
- }
319
- }
320
- if (startDot === -1 || end === -1 ||
321
- preDotState === 0 ||
322
- preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
323
- return '';
324
- }
325
- return pathArg.slice(startDot, end);
326
- },
327
- format: function format(pathObject) {
328
- if (pathObject === null || typeof pathObject !== 'object') {
329
- throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof pathObject);
330
- }
331
- return _format('/', pathObject);
332
- },
333
- parse: function parse(pathArg) {
334
- assertPath(pathArg);
335
- var ret = { root: '', dir: '', base: '', ext: '', name: '' };
336
- if (pathArg.length === 0)
337
- return ret;
338
- var code = pathArg.charCodeAt(0);
339
- var isAbsolute = code === 47 /*/*/;
340
- var start;
341
- if (isAbsolute) {
342
- ret.root = '/';
343
- start = 1;
344
- }
345
- else {
346
- start = 0;
347
- }
348
- var startDot = -1;
349
- var startPart = 0;
350
- var end = -1;
351
- var matchedSlash = true;
352
- var i = pathArg.length - 1;
353
- var preDotState = 0;
354
- for (; i >= start; --i) {
355
- code = pathArg.charCodeAt(i);
356
- if (code === 47 /*/*/) {
357
- if (!matchedSlash) {
358
- startPart = i + 1;
359
- break;
360
- }
361
- continue;
362
- }
363
- if (end === -1) {
364
- matchedSlash = false;
365
- end = i + 1;
366
- }
367
- if (code === 46 /*.*/) {
368
- if (startDot === -1)
369
- startDot = i;
370
- else if (preDotState !== 1)
371
- preDotState = 1;
372
- }
373
- else if (startDot !== -1) {
374
- preDotState = -1;
375
- }
376
- }
377
- if (startDot === -1 || end === -1 ||
378
- preDotState === 0 ||
379
- preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
380
- if (end !== -1) {
381
- if (startPart === 0 && isAbsolute)
382
- ret.base = ret.name = pathArg.slice(1, end);
383
- else
384
- ret.base = ret.name = pathArg.slice(startPart, end);
385
- }
386
- }
387
- else {
388
- if (startPart === 0 && isAbsolute) {
389
- ret.name = pathArg.slice(1, startDot);
390
- ret.base = pathArg.slice(1, end);
391
- }
392
- else {
393
- ret.name = pathArg.slice(startPart, startDot);
394
- ret.base = pathArg.slice(startPart, end);
395
- }
396
- ret.ext = pathArg.slice(startDot, end);
397
- }
398
- if (startPart > 0)
399
- ret.dir = pathArg.slice(0, startPart - 1);
400
- else if (isAbsolute)
401
- ret.dir = '/';
402
- return ret;
403
- },
404
- sep: '/',
405
- delimiter: ':',
406
- win32: {
407
- normalize: (p) => {
408
- return p;
409
- }
410
- },
411
- posix: null
412
- };
413
- ;
414
- ({}); // @--end-of-file-for-module=tnp-core lib/node-path-mock.ts
1
+ function assertPath(path) {
2
+ if (typeof path !== 'string') {
3
+ throw new TypeError('[firedev-core] Path must be a string. Received ' + JSON.stringify(path));
4
+ }
5
+ }
6
+ function normalizeStringPosix(path, allowAboveRoot) {
7
+ var res = '';
8
+ var lastSegmentLength = 0;
9
+ var lastSlash = -1;
10
+ var dots = 0;
11
+ var code;
12
+ for (var i = 0; i <= path.length; ++i) {
13
+ if (i < path.length)
14
+ code = path.charCodeAt(i);
15
+ else if (code === 47 /*/*/)
16
+ break;
17
+ else
18
+ code = 47 /*/*/;
19
+ if (code === 47 /*/*/) {
20
+ if (lastSlash === i - 1 || dots === 1) {
21
+ }
22
+ else if (lastSlash !== i - 1 && dots === 2) {
23
+ if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== 46 /*.*/ || res.charCodeAt(res.length - 2) !== 46 /*.*/) {
24
+ if (res.length > 2) {
25
+ var lastSlashIndex = res.lastIndexOf('/');
26
+ if (lastSlashIndex !== res.length - 1) {
27
+ if (lastSlashIndex === -1) {
28
+ res = '';
29
+ lastSegmentLength = 0;
30
+ }
31
+ else {
32
+ res = res.slice(0, lastSlashIndex);
33
+ lastSegmentLength = res.length - 1 - res.lastIndexOf('/');
34
+ }
35
+ lastSlash = i;
36
+ dots = 0;
37
+ continue;
38
+ }
39
+ }
40
+ else if (res.length === 2 || res.length === 1) {
41
+ res = '';
42
+ lastSegmentLength = 0;
43
+ lastSlash = i;
44
+ dots = 0;
45
+ continue;
46
+ }
47
+ }
48
+ if (allowAboveRoot) {
49
+ if (res.length > 0)
50
+ res += '/..';
51
+ else
52
+ res = '..';
53
+ lastSegmentLength = 2;
54
+ }
55
+ }
56
+ else {
57
+ if (res.length > 0)
58
+ res += '/' + path.slice(lastSlash + 1, i);
59
+ else
60
+ res = path.slice(lastSlash + 1, i);
61
+ lastSegmentLength = i - lastSlash - 1;
62
+ }
63
+ lastSlash = i;
64
+ dots = 0;
65
+ }
66
+ else if (code === 46 /*.*/ && dots !== -1) {
67
+ ++dots;
68
+ }
69
+ else {
70
+ dots = -1;
71
+ }
72
+ }
73
+ return res;
74
+ }
75
+ function _format(sep, pathObject) {
76
+ var dir = pathObject.dir || pathObject.root;
77
+ var base = pathObject.base || (pathObject.name || '') + (pathObject.ext || '');
78
+ if (!dir) {
79
+ return base;
80
+ }
81
+ if (dir === pathObject.root) {
82
+ return dir + base;
83
+ }
84
+ return dir + sep + base;
85
+ }
86
+ export const path = {
87
+ resolve: function resolve(pathToResovle) {
88
+ return pathToResovle;
89
+ },
90
+ normalize: function normalize(pathArg) {
91
+ assertPath(pathArg);
92
+ if (pathArg.length === 0)
93
+ return '.';
94
+ var isAbsolute = pathArg.charCodeAt(0) === 47 /*/*/;
95
+ var trailingSeparator = pathArg.charCodeAt(pathArg.length - 1) === 47 /*/*/;
96
+ pathArg = normalizeStringPosix(pathArg, !isAbsolute);
97
+ if (pathArg.length === 0 && !isAbsolute)
98
+ pathArg = '.';
99
+ if (pathArg.length > 0 && trailingSeparator)
100
+ pathArg += '/';
101
+ if (isAbsolute)
102
+ return '/' + pathArg;
103
+ return pathArg;
104
+ },
105
+ isAbsolute: function isAbsolute(pathArg) {
106
+ assertPath(pathArg);
107
+ return pathArg.length > 0 && pathArg.charCodeAt(0) === 47 /*/*/;
108
+ },
109
+ join: function join() {
110
+ if (arguments.length === 0)
111
+ return '.';
112
+ var joined;
113
+ for (var i = 0; i < arguments.length; ++i) {
114
+ var arg = arguments[i];
115
+ assertPath(arg);
116
+ if (arg.length > 0) {
117
+ if (joined === undefined)
118
+ joined = arg;
119
+ else
120
+ joined += '/' + arg;
121
+ }
122
+ }
123
+ if (joined === undefined)
124
+ return '.';
125
+ return path.normalize(joined);
126
+ },
127
+ relative: function relative(from, to) {
128
+ assertPath(from);
129
+ assertPath(to);
130
+ if (from === to)
131
+ return '';
132
+ from = path.resolve(from);
133
+ to = path.resolve(to);
134
+ if (from === to)
135
+ return '';
136
+ var fromStart = 1;
137
+ for (; fromStart < from.length; ++fromStart) {
138
+ if (from.charCodeAt(fromStart) !== 47 /*/*/)
139
+ break;
140
+ }
141
+ var fromEnd = from.length;
142
+ var fromLen = fromEnd - fromStart;
143
+ var toStart = 1;
144
+ for (; toStart < to.length; ++toStart) {
145
+ if (to.charCodeAt(toStart) !== 47 /*/*/)
146
+ break;
147
+ }
148
+ var toEnd = to.length;
149
+ var toLen = toEnd - toStart;
150
+ var length = fromLen < toLen ? fromLen : toLen;
151
+ var lastCommonSep = -1;
152
+ var i = 0;
153
+ for (; i <= length; ++i) {
154
+ if (i === length) {
155
+ if (toLen > length) {
156
+ if (to.charCodeAt(toStart + i) === 47 /*/*/) {
157
+ return to.slice(toStart + i + 1);
158
+ }
159
+ else if (i === 0) {
160
+ return to.slice(toStart + i);
161
+ }
162
+ }
163
+ else if (fromLen > length) {
164
+ if (from.charCodeAt(fromStart + i) === 47 /*/*/) {
165
+ lastCommonSep = i;
166
+ }
167
+ else if (i === 0) {
168
+ lastCommonSep = 0;
169
+ }
170
+ }
171
+ break;
172
+ }
173
+ var fromCode = from.charCodeAt(fromStart + i);
174
+ var toCode = to.charCodeAt(toStart + i);
175
+ if (fromCode !== toCode)
176
+ break;
177
+ else if (fromCode === 47 /*/*/)
178
+ lastCommonSep = i;
179
+ }
180
+ var out = '';
181
+ for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
182
+ if (i === fromEnd || from.charCodeAt(i) === 47 /*/*/) {
183
+ if (out.length === 0)
184
+ out += '..';
185
+ else
186
+ out += '/..';
187
+ }
188
+ }
189
+ if (out.length > 0)
190
+ return out + to.slice(toStart + lastCommonSep);
191
+ else {
192
+ toStart += lastCommonSep;
193
+ if (to.charCodeAt(toStart) === 47 /*/*/)
194
+ ++toStart;
195
+ return to.slice(toStart);
196
+ }
197
+ },
198
+ _makeLong: function _makeLong(path) {
199
+ return path;
200
+ },
201
+ dirname: function dirname(path) {
202
+ assertPath(path);
203
+ if (path.length === 0)
204
+ return '.';
205
+ var code = path.charCodeAt(0);
206
+ var hasRoot = code === 47 /*/*/;
207
+ var end = -1;
208
+ var matchedSlash = true;
209
+ for (var i = path.length - 1; i >= 1; --i) {
210
+ code = path.charCodeAt(i);
211
+ if (code === 47 /*/*/) {
212
+ if (!matchedSlash) {
213
+ end = i;
214
+ break;
215
+ }
216
+ }
217
+ else {
218
+ matchedSlash = false;
219
+ }
220
+ }
221
+ if (end === -1)
222
+ return hasRoot ? '/' : '.';
223
+ if (hasRoot && end === 1)
224
+ return '//';
225
+ return path.slice(0, end);
226
+ },
227
+ basename: function basename(pathArg, ext) {
228
+ if (ext !== undefined && typeof ext !== 'string')
229
+ throw new TypeError('"ext" argument must be a string');
230
+ assertPath(pathArg);
231
+ var start = 0;
232
+ var end = -1;
233
+ var matchedSlash = true;
234
+ var i;
235
+ if (ext !== undefined && ext.length > 0 && ext.length <= pathArg.length) {
236
+ if (ext.length === pathArg.length && ext === pathArg)
237
+ return '';
238
+ var extIdx = ext.length - 1;
239
+ var firstNonSlashEnd = -1;
240
+ for (i = pathArg.length - 1; i >= 0; --i) {
241
+ var code = pathArg.charCodeAt(i);
242
+ if (code === 47 /*/*/) {
243
+ if (!matchedSlash) {
244
+ start = i + 1;
245
+ break;
246
+ }
247
+ }
248
+ else {
249
+ if (firstNonSlashEnd === -1) {
250
+ matchedSlash = false;
251
+ firstNonSlashEnd = i + 1;
252
+ }
253
+ if (extIdx >= 0) {
254
+ if (code === ext.charCodeAt(extIdx)) {
255
+ if (--extIdx === -1) {
256
+ end = i;
257
+ }
258
+ }
259
+ else {
260
+ extIdx = -1;
261
+ end = firstNonSlashEnd;
262
+ }
263
+ }
264
+ }
265
+ }
266
+ if (start === end)
267
+ end = firstNonSlashEnd;
268
+ else if (end === -1)
269
+ end = pathArg.length;
270
+ return pathArg.slice(start, end);
271
+ }
272
+ else {
273
+ for (i = pathArg.length - 1; i >= 0; --i) {
274
+ if (pathArg.charCodeAt(i) === 47 /*/*/) {
275
+ if (!matchedSlash) {
276
+ start = i + 1;
277
+ break;
278
+ }
279
+ }
280
+ else if (end === -1) {
281
+ matchedSlash = false;
282
+ end = i + 1;
283
+ }
284
+ }
285
+ if (end === -1)
286
+ return '';
287
+ return pathArg.slice(start, end);
288
+ }
289
+ },
290
+ extname: function extname(pathArg) {
291
+ assertPath(pathArg);
292
+ var startDot = -1;
293
+ var startPart = 0;
294
+ var end = -1;
295
+ var matchedSlash = true;
296
+ var preDotState = 0;
297
+ for (var i = pathArg.length - 1; i >= 0; --i) {
298
+ var code = pathArg.charCodeAt(i);
299
+ if (code === 47 /*/*/) {
300
+ if (!matchedSlash) {
301
+ startPart = i + 1;
302
+ break;
303
+ }
304
+ continue;
305
+ }
306
+ if (end === -1) {
307
+ matchedSlash = false;
308
+ end = i + 1;
309
+ }
310
+ if (code === 46 /*.*/) {
311
+ if (startDot === -1)
312
+ startDot = i;
313
+ else if (preDotState !== 1)
314
+ preDotState = 1;
315
+ }
316
+ else if (startDot !== -1) {
317
+ preDotState = -1;
318
+ }
319
+ }
320
+ if (startDot === -1 || end === -1 ||
321
+ preDotState === 0 ||
322
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
323
+ return '';
324
+ }
325
+ return pathArg.slice(startDot, end);
326
+ },
327
+ format: function format(pathObject) {
328
+ if (pathObject === null || typeof pathObject !== 'object') {
329
+ throw new TypeError('The "pathObject" argument must be of type Object. Received type ' + typeof pathObject);
330
+ }
331
+ return _format('/', pathObject);
332
+ },
333
+ parse: function parse(pathArg) {
334
+ assertPath(pathArg);
335
+ var ret = { root: '', dir: '', base: '', ext: '', name: '' };
336
+ if (pathArg.length === 0)
337
+ return ret;
338
+ var code = pathArg.charCodeAt(0);
339
+ var isAbsolute = code === 47 /*/*/;
340
+ var start;
341
+ if (isAbsolute) {
342
+ ret.root = '/';
343
+ start = 1;
344
+ }
345
+ else {
346
+ start = 0;
347
+ }
348
+ var startDot = -1;
349
+ var startPart = 0;
350
+ var end = -1;
351
+ var matchedSlash = true;
352
+ var i = pathArg.length - 1;
353
+ var preDotState = 0;
354
+ for (; i >= start; --i) {
355
+ code = pathArg.charCodeAt(i);
356
+ if (code === 47 /*/*/) {
357
+ if (!matchedSlash) {
358
+ startPart = i + 1;
359
+ break;
360
+ }
361
+ continue;
362
+ }
363
+ if (end === -1) {
364
+ matchedSlash = false;
365
+ end = i + 1;
366
+ }
367
+ if (code === 46 /*.*/) {
368
+ if (startDot === -1)
369
+ startDot = i;
370
+ else if (preDotState !== 1)
371
+ preDotState = 1;
372
+ }
373
+ else if (startDot !== -1) {
374
+ preDotState = -1;
375
+ }
376
+ }
377
+ if (startDot === -1 || end === -1 ||
378
+ preDotState === 0 ||
379
+ preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
380
+ if (end !== -1) {
381
+ if (startPart === 0 && isAbsolute)
382
+ ret.base = ret.name = pathArg.slice(1, end);
383
+ else
384
+ ret.base = ret.name = pathArg.slice(startPart, end);
385
+ }
386
+ }
387
+ else {
388
+ if (startPart === 0 && isAbsolute) {
389
+ ret.name = pathArg.slice(1, startDot);
390
+ ret.base = pathArg.slice(1, end);
391
+ }
392
+ else {
393
+ ret.name = pathArg.slice(startPart, startDot);
394
+ ret.base = pathArg.slice(startPart, end);
395
+ }
396
+ ret.ext = pathArg.slice(startDot, end);
397
+ }
398
+ if (startPart > 0)
399
+ ret.dir = pathArg.slice(0, startPart - 1);
400
+ else if (isAbsolute)
401
+ ret.dir = '/';
402
+ return ret;
403
+ },
404
+ sep: '/',
405
+ delimiter: ':',
406
+ win32: {
407
+ normalize: (p) => {
408
+ return p;
409
+ }
410
+ },
411
+ posix: null
412
+ };
413
+ ;
414
+ ({}); // @--end-of-file-for-module=tnp-core lib/node-path-mock.ts
415
415
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1wYXRoLW1vY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90bXAtbGlicy1mb3ItYnVuZGxlL3RucC1jb3JlL3Byb2plY3RzL3RucC1jb3JlL3NyYy9saWIvbm9kZS1wYXRoLW1vY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsU0FBUyxVQUFVLENBQUMsSUFBSTtJQUN0QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM1QixNQUFNLElBQUksU0FBUyxDQUFDLGlEQUFpRCxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztLQUMvRjtBQUNILENBQUM7QUFHRCxTQUFTLG9CQUFvQixDQUFDLElBQUksRUFBRSxjQUFjO0lBQ2hELElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUNiLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQzFCLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ25CLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztJQUNiLElBQUksSUFBSSxDQUFDO0lBQ1QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUU7UUFDckMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU07WUFDakIsSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDdkIsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDLEtBQUs7WUFDeEIsTUFBTTs7WUFFTixJQUFJLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUNsQixJQUFJLElBQUksS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFO1lBQ3JCLElBQUksU0FBUyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsRUFBRTthQUV0QztpQkFBTSxJQUFJLFNBQVMsS0FBSyxD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UUFBUSxDQUFDLENBQUM7Z0JBQzlDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDMUM7WUFDRCxHQUFHLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxTQUFTLEdBQUcsQ0FBQztZQUFFLEdBQUcsQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQU0sSUFBSSxVQUFVO1lBQUUsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFFakcsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRUQsR0FBRyxFQUFFLEdBQUc7SUFDUixTQUFTLEVBQUUsR0FBRztJQUNkLEtBQUssRUFBRTtRQUNMLFNBQVMsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ2YsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO0tBQ0Y7SUFDRCxLQUFLLEVBQUUsSUFBSTtDQUNaLENBQUM7QUFHRCxDQUFDO0FBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLDJEQUEyRCIsInNvdXJjZXNDb250ZW50IjpbIlxuZnVuY3Rpb24gYXNzZXJ0UGF0aChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdbZmlyZWRldi1jb3JlXSBQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkICcgKyBKU09OLnN0cmluZ2lmeShwYXRoKSk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBub3JtYWxpemVTdHJpbmdQb3NpeChwYXRoLCBhbGxvd0Fib3ZlUm9vdCkge1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gIHZhciBsYXN0U2xhc2ggPSAtMTtcbiAgdmFyIGRvdHMgPSAwO1xuICB2YXIgY29kZTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPD0gcGF0aC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChpIDwgcGF0aC5sZW5ndGgpXG4gICAgICBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KGkpO1xuICAgIGVsc2UgaWYgKGNvZGUgPT09IDQ3IC8qLyovKVxuICAgICAgYnJlYWs7XG4gICAgZWxzZVxuICAgICAgY29kZSA9IDQ3IC8qLyovO1xuICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgaWYgKGxhc3RTbGFzaCA9PT0gaSAtIDEgfHwgZG90cyA9PT0gMSkge1xuXG4gICAgICB9IGVsc2UgaWYgKGxhc3RTbGFzaCAhPT0gaSAtIDEgJiYgZG90cyA9PT0gMikge1xuICAgICAgICBpZiAocmVzLmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDEpICE9PSA0NiAvKi4qLyB8fCByZXMuY2hhckNvZGVBdChyZXMubGVuZ3RoIC0gMikgIT09IDQ2IC8qLiovKSB7XG4gICAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YXIgbGFzdFNsYXNoSW5kZXggPSByZXMubGFzdEluZGV4T2YoJy8nKTtcbiAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCAhPT0gcmVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJlcyA9ICcnO1xuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXMgPSByZXMuc2xpY2UoMCwgbGFzdFNsYXNoSW5kZXgpO1xuICAgICAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gcmVzLmxlbmd0aCAtIDEgLSByZXMubGFzdEluZGV4T2YoJy8nKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgICAgICAgICBkb3RzID0gMDtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID09PSAyIHx8IHJlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJlcyA9ICcnO1xuICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICAgICAgICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgICAgICAgIGRvdHMgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhbGxvd0Fib3ZlUm9vdCkge1xuICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHJlcyArPSAnLy4uJztcbiAgICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXMgPSAnLi4nO1xuICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPiAwKVxuICAgICAgICAgIHJlcyArPSAnLycgKyBwYXRoLnNsaWNlKGxhc3RTbGFzaCArIDEsIGkpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgcmVzID0gcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpKTtcbiAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSBpIC0gbGFzdFNsYXNoIC0gMTtcbiAgICAgIH1cbiAgICAgIGxhc3RTbGFzaCA9IGk7XG4gICAgICBkb3RzID0gMDtcbiAgICB9IGVsc2UgaWYgKGNvZGUgPT09IDQ2IC8qLiovICYmIGRvdHMgIT09IC0xKSB7XG4gICAgICArK2RvdHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRvdHMgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gX2Zvcm1hdChzZXAsIHBhdGhPYmplY3QpIHtcbiAgdmFyIGRpciA9IHBhdGhPYmplY3QuZGlyIHx8IHBhdGhPYmplY3Qucm9vdDtcbiAgdmFyIGJhc2UgPSBwYXRoT2JqZWN0LmJhc2UgfHwgKHBhdGhPYmplY3QubmFtZSB8fCAnJykgKyAocGF0aE9iamVjdC5leHQgfHwgJycpO1xuICBpZiAoIWRpcikge1xuICAgIHJldHVybiBiYXNlO1xuICB9XG4gIGlmIChkaXIgPT09IHBhdGhPYmplY3Qucm9vdCkge1xuICAgIHJldHVybiBkaXIgKyBiYXNlO1xuICB9XG4gIHJldHVybiBkaXIgKyBzZXAgKyBiYXNlO1xufVxuXG5leHBvcnQgY29uc3QgcGF0aCA9IHtcblxuICByZXNvbHZlOiBmdW5jdGlvbiByZXNvbHZlKHBhdGhUb1Jlc292bGUpIHtcbiAgICByZXR1cm4gcGF0aFRvUmVzb3ZsZTtcbiAgfSxcblxuICBub3JtYWxpemU6IGZ1bmN0aW9uIG5vcm1hbGl6ZShwYXRoQXJnKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoQXJnKTtcblxuICAgIGlmIChwYXRoQXJnLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcuJztcblxuICAgIHZhciBpc0Fic29sdXRlID0gcGF0aEFyZy5jaGFyQ29kZUF0KDApID09PSA0NyAvKi8qLztcbiAgICB2YXIgdHJhaWxpbmdTZXBhcmF0b3IgPSBwYXRoQXJnLmNoYXJDb2RlQXQocGF0aEFyZy5sZW5ndGggLSAxKSA9PT0gNDcgLyovKi87XG5cblxuICAgIHBhdGhBcmcgPSBub3JtYWxpemVTdHJpbmdQb3NpeChwYXRoQXJnLCAhaXNBYnNvbHV0ZSk7XG5cbiAgICBpZiAocGF0aEFyZy5sZW5ndGggPT09IDAgJiYgIWlzQWJzb2x1dGUpIHBhdGhBcmcgPSAnLic7XG4gICAgaWYgKHBhdGhBcmcubGVuZ3RoID4gMCAmJiB0cmFpbGluZ1NlcGFyYXRvcikgcGF0aEFyZyArPSAnLyc7XG5cbiAgICBpZiAoaXNBYnNvbHV0ZSkgcmV0dXJuICcvJyArIHBhdGhBcmc7XG4gICAgcmV0dXJuIHBhdGhBcmc7XG4gIH0sXG5cbiAgaXNBYnNvbHV0ZTogZnVuY3Rpb24gaXNBYnNvbHV0ZShwYXRoQXJnKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoQXJnKTtcbiAgICByZXR1cm4gcGF0aEFyZy5sZW5ndGggPiAwICYmIHBhdGhBcmcuY2hhckNvZGVBdCgwKSA9PT0gNDcgLyovKi87XG4gIH0sXG5cbiAgam9pbjogZnVuY3Rpb24gam9pbigpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiAnLic7XG4gICAgdmFyIGpvaW5lZDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGFzc2VydFBhdGgoYXJnKTtcbiAgICAgIGlmIChhcmcubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoam9pbmVkID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgam9pbmVkID0gYXJnO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgam9pbmVkICs9ICcvJyArIGFyZztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGpvaW5lZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuICcuJztcbiAgICByZXR1cm4gcGF0aC5ub3JtYWxpemUoam9pbmVkKTtcbiAgfSxcblxuICByZWxhdGl2ZTogZnVuY3Rpb24gcmVsYXRpdmUoZnJvbSwgdG8pIHtcbiAgICBhc3NlcnRQYXRoKGZyb20pO1xuICAgIGFzc2VydFBhdGgodG8pO1xuXG4gICAgaWYgKGZyb20gPT09IHRvKSByZXR1cm4gJyc7XG5cbiAgICBmcm9tID0gcGF0aC5yZXNvbHZlKGZyb20pO1xuICAgIHRvID0gcGF0aC5yZXNvbHZlKHRvKTtcblxuICAgIGlmIChmcm9tID09PSB0bykgcmV0dXJuICcnO1xuXG5cbiAgICB2YXIgZnJvbVN0YXJ0ID0gMTtcbiAgICBmb3IgKDsgZnJvbVN0YXJ0IDwgZnJvbS5sZW5ndGg7ICsrZnJvbVN0YXJ0KSB7XG4gICAgICBpZiAoZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCkgIT09IDQ3IC8qLyovKVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIGZyb21FbmQgPSBmcm9tLmxlbmd0aDtcbiAgICB2YXIgZnJvbUxlbiA9IGZyb21FbmQgLSBmcm9tU3RhcnQ7XG5cblxuICAgIHZhciB0b1N0YXJ0ID0gMTtcbiAgICBmb3IgKDsgdG9TdGFydCA8IHRvLmxlbmd0aDsgKyt0b1N0YXJ0KSB7XG4gICAgICBpZiAodG8uY2hhckNvZGVBdCh0b1N0YXJ0KSAhPT0gNDcgLyovKi8pXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgdG9FbmQgPSB0by5sZW5ndGg7XG4gICAgdmFyIHRvTGVuID0gdG9FbmQgLSB0b1N0YXJ0O1xuXG5cbiAgICB2YXIgbGVuZ3RoID0gZnJvbUxlbiA8IHRvTGVuID8gZnJvbUxlbiA6IHRvTGVuO1xuICAgIHZhciBsYXN0Q29tbW9uU2VwID0gLTE7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDw9IGxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoaSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgIGlmICh0b0xlbiA+IGxlbmd0aCkge1xuICAgICAgICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpKSA9PT0gNDcgLyovKi8pIHtcblxuXG4gICAgICAgICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCArIGkgKyAxKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDApIHtcblxuXG4gICAgICAgICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCArIGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChmcm9tTGVuID4gbGVuZ3RoKSB7XG4gICAgICAgICAgaWYgKGZyb20uY2hhckNvZGVBdChmcm9tU3RhcnQgKyBpKSA9PT0gNDcgLyovKi8pIHtcblxuXG4gICAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDApIHtcblxuXG4gICAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICB2YXIgZnJvbUNvZGUgPSBmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSk7XG4gICAgICB2YXIgdG9Db2RlID0gdG8uY2hhckNvZGVBdCh0b1N0YXJ0ICsgaSk7XG4gICAgICBpZiAoZnJvbUNvZGUgIT09IHRvQ29kZSlcbiAgICAgICAgYnJlYWs7XG4gICAgICBlbHNlIGlmIChmcm9tQ29kZSA9PT0gNDcgLyovKi8pXG4gICAgICAgIGxhc3RDb21tb25TZXAgPSBpO1xuICAgIH1cblxuICAgIHZhciBvdXQgPSAnJztcblxuXG4gICAgZm9yIChpID0gZnJvbVN0YXJ0ICsgbGFzdENvbW1vblNlcCArIDE7IGkgPD0gZnJvbUVuZDsgKytpKSB7XG4gICAgICBpZiAoaSA9PT0gZnJvbUVuZCB8fCBmcm9tLmNoYXJDb2RlQXQoaSkgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgIGlmIChvdXQubGVuZ3RoID09PSAwKVxuICAgICAgICAgIG91dCArPSAnLi4nO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgb3V0ICs9ICcvLi4nO1xuICAgICAgfVxuICAgIH1cblxuXG5cbiAgICBpZiAob3V0Lmxlbmd0aCA+IDApXG4gICAgICByZXR1cm4gb3V0ICsgdG8uc2xpY2UodG9TdGFydCArIGxhc3RDb21tb25TZXApO1xuICAgIGVsc2Uge1xuICAgICAgdG9TdGFydCArPSBsYXN0Q29tbW9uU2VwO1xuICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCkgPT09IDQ3IC8qLyovKVxuICAgICAgICArK3RvU3RhcnQ7XG4gICAgICByZXR1cm4gdG8uc2xpY2UodG9TdGFydCk7XG4gICAgfVxuICB9LFxuXG4gIF9tYWtlTG9uZzogZnVuY3Rpb24gX21ha2VMb25nKHBhdGgpIHtcbiAgICByZXR1cm4gcGF0aDtcbiAgfSxcblxuICBkaXJuYW1lOiBmdW5jdGlvbiBkaXJuYW1lKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuICAgIGlmIChwYXRoLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcuJztcbiAgICB2YXIgY29kZSA9IHBhdGguY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgaGFzUm9vdCA9IGNvZGUgPT09IDQ3IC8qLyovO1xuICAgIHZhciBlbmQgPSAtMTtcbiAgICB2YXIgbWF0Y2hlZFNsYXNoID0gdHJ1ZTtcbiAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDE7IC0taSkge1xuICAgICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgIGVuZCA9IGk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVuZCA9PT0gLTEpIHJldHVybiBoYXNSb290ID8gJy8nIDogJy4nO1xuICAgIGlmIChoYXNSb290ICYmIGVuZCA9PT0gMSkgcmV0dXJuICcvLyc7XG4gICAgcmV0dXJuIHBhdGguc2xpY2UoMCwgZW5kKTtcbiAgfSxcblxuICBiYXNlbmFtZTogZnVuY3Rpb24gYmFzZW5hbWUocGF0aEFyZywgZXh0KSB7XG4gICAgaWYgKGV4dCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBleHQgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV4dFwiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICBhc3NlcnRQYXRoKHBhdGhBcmcpO1xuXG4gICAgdmFyIHN0YXJ0ID0gMDtcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gICAgdmFyIGk7XG5cbiAgICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgZXh0Lmxlbmd0aCA+IDAgJiYgZXh0Lmxlbmd0aCA8PSBwYXRoQXJnLmxlbmd0aCkge1xuICAgICAgaWYgKGV4dC5sZW5ndGggPT09IHBhdGhBcmcubGVuZ3RoICYmIGV4dCA9PT0gcGF0aEFyZykgcmV0dXJuICcnO1xuICAgICAgdmFyIGV4dElkeCA9IGV4dC5sZW5ndGggLSAxO1xuICAgICAgdmFyIGZpcnN0Tm9uU2xhc2hFbmQgPSAtMTtcbiAgICAgIGZvciAoaSA9IHBhdGhBcmcubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGNvZGUgPSBwYXRoQXJnLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuXG5cbiAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlyc3ROb25TbGFzaEVuZCA9PT0gLTEpIHtcblxuXG4gICAgICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgICAgIGZpcnN0Tm9uU2xhc2hFbmQgPSBpICsgMTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGV4dElkeCA+PSAwKSB7XG5cbiAgICAgICAgICAgIGlmIChjb2RlID09PSBleHQuY2hhckNvZGVBdChleHRJZHgpKSB7XG4gICAgICAgICAgICAgIGlmICgtLWV4dElkeCA9PT0gLTEpIHtcblxuXG4gICAgICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcblxuXG4gICAgICAgICAgICAgIGV4dElkeCA9IC0xO1xuICAgICAgICAgICAgICBlbmQgPSBmaXJzdE5vblNsYXNoRW5kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3RhcnQgPT09IGVuZCkgZW5kID0gZmlyc3ROb25TbGFzaEVuZDsgZWxzZSBpZiAoZW5kID09PSAtMSkgZW5kID0gcGF0aEFyZy5sZW5ndGg7XG4gICAgICByZXR1cm4gcGF0aEFyZy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gcGF0aEFyZy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICBpZiAocGF0aEFyZy5jaGFyQ29kZUF0KGkpID09PSA0NyAvKi8qLykge1xuXG5cbiAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbmQgPT09IC0xKSB7XG5cblxuICAgICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgICAgIGVuZCA9IGkgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmQgPT09IC0xKSByZXR1cm4gJyc7XG4gICAgICByZXR1cm4gcGF0aEFyZy5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9XG4gIH0sXG5cbiAgZXh0bmFtZTogZnVuY3Rpb24gZXh0bmFtZShwYXRoQXJnKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoQXJnKTtcbiAgICB2YXIgc3RhcnREb3QgPSAtMTtcbiAgICB2YXIgc3RhcnRQYXJ0ID0gMDtcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG5cblxuICAgIHZhciBwcmVEb3RTdGF0ZSA9IDA7XG4gICAgZm9yICh2YXIgaSA9IHBhdGhBcmcubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgIHZhciBjb2RlID0gcGF0aEFyZy5jaGFyQ29kZUF0KGkpO1xuICAgICAgaWYgKGNvZGUgPT09IDQ3IC8qLyovKSB7XG5cblxuICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgIHN0YXJ0UGFydCA9IGkgKyAxO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGVuZCA9PT0gLTEpIHtcblxuXG4gICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgICBlbmQgPSBpICsgMTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2RlID09PSA0NiAvKi4qLykge1xuXG4gICAgICAgIGlmIChzdGFydERvdCA9PT0gLTEpXG4gICAgICAgICAgc3RhcnREb3QgPSBpO1xuICAgICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSlcbiAgICAgICAgICBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkge1xuXG5cbiAgICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhcnREb3QgPT09IC0xIHx8IGVuZCA9PT0gLTEgfHxcblxuICAgICAgcHJlRG90U3RhdGUgPT09IDAgfHxcblxuICAgICAgcHJlRG90U3RhdGUgPT09IDEgJiYgc3RhcnREb3QgPT09IGVuZCAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHBhdGhBcmcuc2xpY2Uoc3RhcnREb3QsIGVuZCk7XG4gIH0sXG5cbiAgZm9ybWF0OiBmdW5jdGlvbiBmb3JtYXQocGF0aE9iamVjdCkge1xuICAgIGlmIChwYXRoT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiBwYXRoT2JqZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwicGF0aE9iamVjdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBwYXRoT2JqZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIF9mb3JtYXQoJy8nLCBwYXRoT2JqZWN0KTtcbiAgfSxcblxuICBwYXJzZTogZnVuY3Rpb24gcGFyc2UocGF0aEFyZykge1xuICAgIGFzc2VydFBhdGgocGF0aEFyZyk7XG5cbiAgICB2YXIgcmV0ID0geyByb290OiAnJywgZGlyOiAnJywgYmFzZTogJycsIGV4dDogJycsIG5hbWU6ICcnIH07XG4gICAgaWYgKHBhdGhBcmcubGVuZ3RoID09PSAwKSByZXR1cm4gcmV0O1xuICAgIHZhciBjb2RlID0gcGF0aEFyZy5jaGFyQ29kZUF0KDApO1xuICAgIHZhciBpc0Fic29sdXRlID0gY29kZSA9PT0gNDcgLyovKi87XG4gICAgdmFyIHN0YXJ0O1xuICAgIGlmIChpc0Fic29sdXRlKSB7XG4gICAgICByZXQucm9vdCA9ICcvJztcbiAgICAgIHN0YXJ0ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICB2YXIgc3RhcnREb3QgPSAtMTtcbiAgICB2YXIgc3RhcnRQYXJ0ID0gMDtcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gICAgdmFyIGkgPSBwYXRoQXJnLmxlbmd0aCAtIDE7XG5cblxuXG4gICAgdmFyIHByZURvdFN0YXRlID0gMDtcblxuXG4gICAgZm9yICg7IGkgPj0gc3RhcnQ7IC0taSkge1xuICAgICAgY29kZSA9IHBhdGhBcmcuY2hhckNvZGVBdChpKTtcbiAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuXG5cbiAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICBzdGFydFBhcnQgPSBpICsgMTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPT09IC0xKSB7XG5cblxuICAgICAgICBtYXRjaGVkU2xhc2ggPSBmYWxzZTtcbiAgICAgICAgZW5kID0gaSArIDE7XG4gICAgICB9XG4gICAgICBpZiAoY29kZSA9PT0gNDYgLyouKi8pIHtcblxuICAgICAgICBpZiAoc3RhcnREb3QgPT09IC0xKSBzdGFydERvdCA9IGk7IGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ICE9PSAtMSkge1xuXG5cbiAgICAgICAgcHJlRG90U3RhdGUgPSAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhcnREb3QgPT09IC0xIHx8IGVuZCA9PT0gLTEgfHxcblxuICAgICAgcHJlRG90U3RhdGUgPT09IDAgfHxcblxuICAgICAgcHJlRG90U3RhdGUgPT09IDEgJiYgc3RhcnREb3QgPT09IGVuZCAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpIHtcbiAgICAgIGlmIChlbmQgIT09IC0xKSB7XG4gICAgICAgIGlmIChzdGFydFBhcnQgPT09IDAgJiYgaXNBYnNvbHV0ZSkgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGhBcmcuc2xpY2UoMSwgZW5kKTsgZWxzZSByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aEFyZy5zbGljZShzdGFydFBhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChzdGFydFBhcnQgPT09IDAgJiYgaXNBYnNvbHV0ZSkge1xuICAgICAgICByZXQubmFtZSA9IHBhdGhBcmcuc2xpY2UoMSwgc3RhcnREb3QpO1xuICAgICAgICByZXQuYmFzZSA9IHBhdGhBcmcuc2xpY2UoMSwgZW5kKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldC5uYW1lID0gcGF0aEFyZy5zbGljZShzdGFydFBhcnQsIHN0YXJ0RG90KTtcbiAgICAgICAgcmV0LmJhc2UgPSBwYXRoQXJnLnNsaWNlKHN0YXJ0UGFydCwgZW5kKTtcbiAgICAgIH1cbiAgICAgIHJldC5leHQgPSBwYXRoQXJnLnNsaWNlKHN0YXJ0RG90LCBlbmQpO1xuICAgIH1cblxuICAgIGlmIChzdGFydFBhcnQgPiAwKSByZXQuZGlyID0gcGF0aEFyZy5zbGljZSgwLCBzdGFydFBhcnQgLSAxKTsgZWxzZSBpZiAoaXNBYnNvbHV0ZSkgcmV0LmRpciA9ICcvJztcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgc2VwOiAnLycsXG4gIGRlbGltaXRlcjogJzonLFxuICB3aW4zMjogeyAvLyBAdHMtaWdub3JlXG4gICAgbm9ybWFsaXplOiAocCkgPT4ge1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9LFxuICBwb3NpeDogbnVsbFxufTtcblxuXG4gOyh7fSk7IC8vIEAtLWVuZC1vZi1maWxlLWZvci1tb2R1bGU9dG5wLWNvcmUgbGliL25vZGUtcGF0aC1tb2NrLnRzIl19