tangled
alpha
login
or
join now
buttplug.io
/
buttplug
20
fork
atom
Buttplug sex toy control library
20
fork
atom
overview
issues
pulls
pipelines
build: Remove .pnp.* files
qdot.tngl.sh
2 years ago
115d15a4
173f4c0e
+3
-14266
3 changed files
expand all
collapse all
unified
split
.gitignore
buttplug
buttplug-device-config
.pnp.cjs
.pnp.loader.mjs
+3
-1
.gitignore
···
18
**/*-ignore
19
**/tasks.json
20
21
-
.yarn*
0
0
···
18
**/*-ignore
19
**/tasks.json
20
21
+
.yarn*
22
+
23
+
**/.pnp.*
-12225
buttplug/buttplug-device-config/.pnp.cjs
···
1
-
#!/usr/bin/env node
2
-
/* eslint-disable */
3
-
"use strict";
4
-
5
-
function $$SETUP_STATE(hydrateRuntimeState, basePath) {
6
-
return hydrateRuntimeState(JSON.parse('{\
7
-
"__info": [\
8
-
"This file is automatically generated. Do not touch it, or risk",\
9
-
"your modifications being lost. We also recommend you not to read",\
10
-
"it either without using the @yarnpkg/pnp package, as the data layout",\
11
-
"is entirely unspecified and WILL change from a version to another."\
12
-
],\
13
-
"dependencyTreeRoots": [\
14
-
{\
15
-
"name": "buttplug-device-config",\
16
-
"reference": "workspace:."\
17
-
}\
18
-
],\
19
-
"enableTopLevelFallback": true,\
20
-
"ignorePatternData": "(^(?:\\\\.yarn\\\\/sdks(?:\\\\/(?!\\\\.{1,2}(?:\\\\/|$))(?:(?:(?!(?:^|\\\\/)\\\\.{1,2}(?:\\\\/|$)).)*?)|$))$)",\
21
-
"fallbackExclusionList": [\
22
-
["buttplug-device-config", ["workspace:."]]\
23
-
],\
24
-
"fallbackPool": [\
25
-
],\
26
-
"packageRegistryData": [\
27
-
[null, [\
28
-
[null, {\
29
-
"packageLocation": "./",\
30
-
"packageDependencies": [\
31
-
["ajv", "npm:8.11.2"],\
32
-
["ajv-cli", "virtual:171da54c57eee9c0b786e3da865a3e92eeb08e48749a971f406d389229e7ef63f3a8618cc44b1e2eac16187e1821567993b8e3d78e6bb9a4fc3848263d235f69#npm:5.0.0"],\
33
-
["js-yaml", "npm:4.1.0"],\
34
-
["trash-cli", "npm:5.0.0"]\
35
-
],\
36
-
"linkType": "SOFT"\
37
-
}]\
38
-
]],\
39
-
["@babel/code-frame", [\
40
-
["npm:7.14.5", {\
41
-
"packageLocation": "./.yarn/cache/@babel-code-frame-npm-7.14.5-4dc9115988-0adbe4f8d9.zip/node_modules/@babel/code-frame/",\
42
-
"packageDependencies": [\
43
-
["@babel/code-frame", "npm:7.14.5"],\
44
-
["@babel/highlight", "npm:7.14.5"]\
45
-
],\
46
-
"linkType": "HARD"\
47
-
}]\
48
-
]],\
49
-
["@babel/helper-validator-identifier", [\
50
-
["npm:7.14.5", {\
51
-
"packageLocation": "./.yarn/cache/@babel-helper-validator-identifier-npm-7.14.5-d29d30a813-6366bceab4.zip/node_modules/@babel/helper-validator-identifier/",\
52
-
"packageDependencies": [\
53
-
["@babel/helper-validator-identifier", "npm:7.14.5"]\
54
-
],\
55
-
"linkType": "HARD"\
56
-
}]\
57
-
]],\
58
-
["@babel/highlight", [\
59
-
["npm:7.14.5", {\
60
-
"packageLocation": "./.yarn/cache/@babel-highlight-npm-7.14.5-4a18106cbc-4e4b22fb88.zip/node_modules/@babel/highlight/",\
61
-
"packageDependencies": [\
62
-
["@babel/highlight", "npm:7.14.5"],\
63
-
["@babel/helper-validator-identifier", "npm:7.14.5"],\
64
-
["chalk", "npm:2.4.2"],\
65
-
["js-tokens", "npm:4.0.0"]\
66
-
],\
67
-
"linkType": "HARD"\
68
-
}]\
69
-
]],\
70
-
["@sindresorhus/chunkify", [\
71
-
["npm:0.2.0", {\
72
-
"packageLocation": "./.yarn/cache/@sindresorhus-chunkify-npm-0.2.0-abd3dba6c5-a17d8a385f.zip/node_modules/@sindresorhus/chunkify/",\
73
-
"packageDependencies": [\
74
-
["@sindresorhus/chunkify", "npm:0.2.0"]\
75
-
],\
76
-
"linkType": "HARD"\
77
-
}]\
78
-
]],\
79
-
["@sindresorhus/df", [\
80
-
["npm:1.0.1", {\
81
-
"packageLocation": "./.yarn/cache/@sindresorhus-df-npm-1.0.1-0588918928-0cb43b4ed9.zip/node_modules/@sindresorhus/df/",\
82
-
"packageDependencies": [\
83
-
["@sindresorhus/df", "npm:1.0.1"]\
84
-
],\
85
-
"linkType": "HARD"\
86
-
}],\
87
-
["npm:3.1.1", {\
88
-
"packageLocation": "./.yarn/cache/@sindresorhus-df-npm-3.1.1-bdd4bd6cbf-6378a8c62a.zip/node_modules/@sindresorhus/df/",\
89
-
"packageDependencies": [\
90
-
["@sindresorhus/df", "npm:3.1.1"],\
91
-
["execa", "npm:2.1.0"]\
92
-
],\
93
-
"linkType": "HARD"\
94
-
}]\
95
-
]],\
96
-
["@stroncium/procfs", [\
97
-
["npm:1.2.1", {\
98
-
"packageLocation": "./.yarn/cache/@stroncium-procfs-npm-1.2.1-c5daf856f1-cb09a4a478.zip/node_modules/@stroncium/procfs/",\
99
-
"packageDependencies": [\
100
-
["@stroncium/procfs", "npm:1.2.1"]\
101
-
],\
102
-
"linkType": "HARD"\
103
-
}]\
104
-
]],\
105
-
["@types/minimist", [\
106
-
["npm:1.2.2", {\
107
-
"packageLocation": "./.yarn/cache/@types-minimist-npm-1.2.2-a445de65da-b8da83c66e.zip/node_modules/@types/minimist/",\
108
-
"packageDependencies": [\
109
-
["@types/minimist", "npm:1.2.2"]\
110
-
],\
111
-
"linkType": "HARD"\
112
-
}]\
113
-
]],\
114
-
["@types/normalize-package-data", [\
115
-
["npm:2.4.0", {\
116
-
"packageLocation": "./.yarn/cache/@types-normalize-package-data-npm-2.4.0-ed928aaaa8-fd22ba86a1.zip/node_modules/@types/normalize-package-data/",\
117
-
"packageDependencies": [\
118
-
["@types/normalize-package-data", "npm:2.4.0"]\
119
-
],\
120
-
"linkType": "HARD"\
121
-
}]\
122
-
]],\
123
-
["aggregate-error", [\
124
-
["npm:4.0.1", {\
125
-
"packageLocation": "./.yarn/cache/aggregate-error-npm-4.0.1-12d0501fb7-bb3ffdfd13.zip/node_modules/aggregate-error/",\
126
-
"packageDependencies": [\
127
-
["aggregate-error", "npm:4.0.1"],\
128
-
["clean-stack", "npm:4.2.0"],\
129
-
["indent-string", "npm:5.0.0"]\
130
-
],\
131
-
"linkType": "HARD"\
132
-
}]\
133
-
]],\
134
-
["ajv", [\
135
-
["npm:8.11.2", {\
136
-
"packageLocation": "./.yarn/cache/ajv-npm-8.11.2-96b35a945e-53435bf79e.zip/node_modules/ajv/",\
137
-
"packageDependencies": [\
138
-
["ajv", "npm:8.11.2"],\
139
-
["fast-deep-equal", "npm:3.1.3"],\
140
-
["json-schema-traverse", "npm:1.0.0"],\
141
-
["require-from-string", "npm:2.0.2"],\
142
-
["uri-js", "npm:4.2.2"]\
143
-
],\
144
-
"linkType": "HARD"\
145
-
}],\
146
-
["npm:8.6.1", {\
147
-
"packageLocation": "./.yarn/cache/ajv-npm-8.6.1-cc38a5d5d7-e091264ff6.zip/node_modules/ajv/",\
148
-
"packageDependencies": [\
149
-
["ajv", "npm:8.6.1"],\
150
-
["fast-deep-equal", "npm:3.1.3"],\
151
-
["json-schema-traverse", "npm:1.0.0"],\
152
-
["require-from-string", "npm:2.0.2"],\
153
-
["uri-js", "npm:4.2.2"]\
154
-
],\
155
-
"linkType": "HARD"\
156
-
}]\
157
-
]],\
158
-
["ajv-cli", [\
159
-
["npm:5.0.0", {\
160
-
"packageLocation": "./.yarn/cache/ajv-cli-npm-5.0.0-e12d6f3c52-e8ba29f618.zip/node_modules/ajv-cli/",\
161
-
"packageDependencies": [\
162
-
["ajv-cli", "npm:5.0.0"]\
163
-
],\
164
-
"linkType": "SOFT"\
165
-
}],\
166
-
["virtual:171da54c57eee9c0b786e3da865a3e92eeb08e48749a971f406d389229e7ef63f3a8618cc44b1e2eac16187e1821567993b8e3d78e6bb9a4fc3848263d235f69#npm:5.0.0", {\
167
-
"packageLocation": "./.yarn/__virtual__/ajv-cli-virtual-f71f534614/0/cache/ajv-cli-npm-5.0.0-e12d6f3c52-e8ba29f618.zip/node_modules/ajv-cli/",\
168
-
"packageDependencies": [\
169
-
["ajv-cli", "virtual:171da54c57eee9c0b786e3da865a3e92eeb08e48749a971f406d389229e7ef63f3a8618cc44b1e2eac16187e1821567993b8e3d78e6bb9a4fc3848263d235f69#npm:5.0.0"],\
170
-
["@types/ts-node", null],\
171
-
["ajv", "npm:8.6.1"],\
172
-
["fast-json-patch", "npm:2.2.1"],\
173
-
["glob", "npm:7.1.7"],\
174
-
["js-yaml", "npm:3.14.1"],\
175
-
["json-schema-migrate", "npm:2.0.0"],\
176
-
["json5", "npm:2.2.2"],\
177
-
["minimist", "npm:1.2.6"],\
178
-
["ts-node", null]\
179
-
],\
180
-
"packagePeers": [\
181
-
"@types/ts-node",\
182
-
"ts-node"\
183
-
],\
184
-
"linkType": "HARD"\
185
-
}]\
186
-
]],\
187
-
["ansi-styles", [\
188
-
["npm:3.2.1", {\
189
-
"packageLocation": "./.yarn/cache/ansi-styles-npm-3.2.1-8cb8107983-d85ade01c1.zip/node_modules/ansi-styles/",\
190
-
"packageDependencies": [\
191
-
["ansi-styles", "npm:3.2.1"],\
192
-
["color-convert", "npm:1.9.3"]\
193
-
],\
194
-
"linkType": "HARD"\
195
-
}]\
196
-
]],\
197
-
["argparse", [\
198
-
["npm:1.0.10", {\
199
-
"packageLocation": "./.yarn/cache/argparse-npm-1.0.10-528934e59d-7ca6e45583.zip/node_modules/argparse/",\
200
-
"packageDependencies": [\
201
-
["argparse", "npm:1.0.10"],\
202
-
["sprintf-js", "npm:1.0.3"]\
203
-
],\
204
-
"linkType": "HARD"\
205
-
}],\
206
-
["npm:2.0.1", {\
207
-
"packageLocation": "./.yarn/cache/argparse-npm-2.0.1-faff7999e6-83644b5649.zip/node_modules/argparse/",\
208
-
"packageDependencies": [\
209
-
["argparse", "npm:2.0.1"]\
210
-
],\
211
-
"linkType": "HARD"\
212
-
}]\
213
-
]],\
214
-
["array-union", [\
215
-
["npm:1.0.2", {\
216
-
"packageLocation": "./.yarn/cache/array-union-npm-1.0.2-cc61ee268f-82cec6421b.zip/node_modules/array-union/",\
217
-
"packageDependencies": [\
218
-
["array-union", "npm:1.0.2"],\
219
-
["array-uniq", "npm:1.0.3"]\
220
-
],\
221
-
"linkType": "HARD"\
222
-
}]\
223
-
]],\
224
-
["array-uniq", [\
225
-
["npm:1.0.3", {\
226
-
"packageLocation": "./.yarn/cache/array-uniq-npm-1.0.3-e7f5d6f3a1-1625f06b09.zip/node_modules/array-uniq/",\
227
-
"packageDependencies": [\
228
-
["array-uniq", "npm:1.0.3"]\
229
-
],\
230
-
"linkType": "HARD"\
231
-
}]\
232
-
]],\
233
-
["arrify", [\
234
-
["npm:1.0.1", {\
235
-
"packageLocation": "./.yarn/cache/arrify-npm-1.0.1-affafba9fe-745075dd4a.zip/node_modules/arrify/",\
236
-
"packageDependencies": [\
237
-
["arrify", "npm:1.0.1"]\
238
-
],\
239
-
"linkType": "HARD"\
240
-
}]\
241
-
]],\
242
-
["balanced-match", [\
243
-
["npm:1.0.2", {\
244
-
"packageLocation": "./.yarn/cache/balanced-match-npm-1.0.2-a53c126459-9706c088a2.zip/node_modules/balanced-match/",\
245
-
"packageDependencies": [\
246
-
["balanced-match", "npm:1.0.2"]\
247
-
],\
248
-
"linkType": "HARD"\
249
-
}]\
250
-
]],\
251
-
["brace-expansion", [\
252
-
["npm:1.1.11", {\
253
-
"packageLocation": "./.yarn/cache/brace-expansion-npm-1.1.11-fb95eb05ad-faf34a7bb0.zip/node_modules/brace-expansion/",\
254
-
"packageDependencies": [\
255
-
["brace-expansion", "npm:1.1.11"],\
256
-
["balanced-match", "npm:1.0.2"],\
257
-
["concat-map", "npm:0.0.1"]\
258
-
],\
259
-
"linkType": "HARD"\
260
-
}]\
261
-
]],\
262
-
["buttplug-device-config", [\
263
-
["workspace:.", {\
264
-
"packageLocation": "./",\
265
-
"packageDependencies": [\
266
-
["buttplug-device-config", "workspace:."],\
267
-
["ajv", "npm:8.11.2"],\
268
-
["ajv-cli", "virtual:171da54c57eee9c0b786e3da865a3e92eeb08e48749a971f406d389229e7ef63f3a8618cc44b1e2eac16187e1821567993b8e3d78e6bb9a4fc3848263d235f69#npm:5.0.0"],\
269
-
["js-yaml", "npm:4.1.0"],\
270
-
["trash-cli", "npm:5.0.0"]\
271
-
],\
272
-
"linkType": "SOFT"\
273
-
}]\
274
-
]],\
275
-
["camelcase", [\
276
-
["npm:6.3.0", {\
277
-
"packageLocation": "./.yarn/cache/camelcase-npm-6.3.0-e5e42a0d15-8c96818a90.zip/node_modules/camelcase/",\
278
-
"packageDependencies": [\
279
-
["camelcase", "npm:6.3.0"]\
280
-
],\
281
-
"linkType": "HARD"\
282
-
}]\
283
-
]],\
284
-
["camelcase-keys", [\
285
-
["npm:7.0.2", {\
286
-
"packageLocation": "./.yarn/cache/camelcase-keys-npm-7.0.2-36fbc5a8f7-b5821cc48d.zip/node_modules/camelcase-keys/",\
287
-
"packageDependencies": [\
288
-
["camelcase-keys", "npm:7.0.2"],\
289
-
["camelcase", "npm:6.3.0"],\
290
-
["map-obj", "npm:4.3.0"],\
291
-
["quick-lru", "npm:5.1.1"],\
292
-
["type-fest", "npm:1.4.0"]\
293
-
],\
294
-
"linkType": "HARD"\
295
-
}]\
296
-
]],\
297
-
["chalk", [\
298
-
["npm:2.4.2", {\
299
-
"packageLocation": "./.yarn/cache/chalk-npm-2.4.2-3ea16dd91e-ec3661d38f.zip/node_modules/chalk/",\
300
-
"packageDependencies": [\
301
-
["chalk", "npm:2.4.2"],\
302
-
["ansi-styles", "npm:3.2.1"],\
303
-
["escape-string-regexp", "npm:1.0.5"],\
304
-
["supports-color", "npm:5.5.0"]\
305
-
],\
306
-
"linkType": "HARD"\
307
-
}]\
308
-
]],\
309
-
["clean-stack", [\
310
-
["npm:4.2.0", {\
311
-
"packageLocation": "./.yarn/cache/clean-stack-npm-4.2.0-bb0dff47b2-373f656a31.zip/node_modules/clean-stack/",\
312
-
"packageDependencies": [\
313
-
["clean-stack", "npm:4.2.0"],\
314
-
["escape-string-regexp", "npm:5.0.0"]\
315
-
],\
316
-
"linkType": "HARD"\
317
-
}]\
318
-
]],\
319
-
["color-convert", [\
320
-
["npm:1.9.3", {\
321
-
"packageLocation": "./.yarn/cache/color-convert-npm-1.9.3-1fe690075e-fd7a64a17c.zip/node_modules/color-convert/",\
322
-
"packageDependencies": [\
323
-
["color-convert", "npm:1.9.3"],\
324
-
["color-name", "npm:1.1.3"]\
325
-
],\
326
-
"linkType": "HARD"\
327
-
}]\
328
-
]],\
329
-
["color-name", [\
330
-
["npm:1.1.3", {\
331
-
"packageLocation": "./.yarn/cache/color-name-npm-1.1.3-728b7b5d39-09c5d3e33d.zip/node_modules/color-name/",\
332
-
"packageDependencies": [\
333
-
["color-name", "npm:1.1.3"]\
334
-
],\
335
-
"linkType": "HARD"\
336
-
}]\
337
-
]],\
338
-
["concat-map", [\
339
-
["npm:0.0.1", {\
340
-
"packageLocation": "./.yarn/cache/concat-map-npm-0.0.1-85a921b7ee-902a9f5d89.zip/node_modules/concat-map/",\
341
-
"packageDependencies": [\
342
-
["concat-map", "npm:0.0.1"]\
343
-
],\
344
-
"linkType": "HARD"\
345
-
}]\
346
-
]],\
347
-
["cross-spawn", [\
348
-
["npm:7.0.3", {\
349
-
"packageLocation": "./.yarn/cache/cross-spawn-npm-7.0.3-e4ff3e65b3-671cc7c728.zip/node_modules/cross-spawn/",\
350
-
"packageDependencies": [\
351
-
["cross-spawn", "npm:7.0.3"],\
352
-
["path-key", "npm:3.1.1"],\
353
-
["shebang-command", "npm:2.0.0"],\
354
-
["which", "npm:2.0.2"]\
355
-
],\
356
-
"linkType": "HARD"\
357
-
}]\
358
-
]],\
359
-
["decamelize", [\
360
-
["npm:1.2.0", {\
361
-
"packageLocation": "./.yarn/cache/decamelize-npm-1.2.0-c5a2fdc622-ad8c51a7e7.zip/node_modules/decamelize/",\
362
-
"packageDependencies": [\
363
-
["decamelize", "npm:1.2.0"]\
364
-
],\
365
-
"linkType": "HARD"\
366
-
}],\
367
-
["npm:5.0.1", {\
368
-
"packageLocation": "./.yarn/cache/decamelize-npm-5.0.1-2fde8c926c-7c3b1ed4b3.zip/node_modules/decamelize/",\
369
-
"packageDependencies": [\
370
-
["decamelize", "npm:5.0.1"]\
371
-
],\
372
-
"linkType": "HARD"\
373
-
}]\
374
-
]],\
375
-
["decamelize-keys", [\
376
-
["npm:1.1.0", {\
377
-
"packageLocation": "./.yarn/cache/decamelize-keys-npm-1.1.0-75168ffadd-8bc5d32e03.zip/node_modules/decamelize-keys/",\
378
-
"packageDependencies": [\
379
-
["decamelize-keys", "npm:1.1.0"],\
380
-
["decamelize", "npm:1.2.0"],\
381
-
["map-obj", "npm:1.0.1"]\
382
-
],\
383
-
"linkType": "HARD"\
384
-
}]\
385
-
]],\
386
-
["dir-glob", [\
387
-
["npm:2.2.2", {\
388
-
"packageLocation": "./.yarn/cache/dir-glob-npm-2.2.2-932e08b501-3aa48714a9.zip/node_modules/dir-glob/",\
389
-
"packageDependencies": [\
390
-
["dir-glob", "npm:2.2.2"],\
391
-
["path-type", "npm:3.0.0"]\
392
-
],\
393
-
"linkType": "HARD"\
394
-
}]\
395
-
]],\
396
-
["end-of-stream", [\
397
-
["npm:1.4.4", {\
398
-
"packageLocation": "./.yarn/cache/end-of-stream-npm-1.4.4-497fc6dee1-530a5a5a1e.zip/node_modules/end-of-stream/",\
399
-
"packageDependencies": [\
400
-
["end-of-stream", "npm:1.4.4"],\
401
-
["once", "npm:1.4.0"]\
402
-
],\
403
-
"linkType": "HARD"\
404
-
}]\
405
-
]],\
406
-
["error-ex", [\
407
-
["npm:1.3.2", {\
408
-
"packageLocation": "./.yarn/cache/error-ex-npm-1.3.2-5654f80c0f-c1c2b8b65f.zip/node_modules/error-ex/",\
409
-
"packageDependencies": [\
410
-
["error-ex", "npm:1.3.2"],\
411
-
["is-arrayish", "npm:0.2.1"]\
412
-
],\
413
-
"linkType": "HARD"\
414
-
}]\
415
-
]],\
416
-
["escape-string-regexp", [\
417
-
["npm:1.0.5", {\
418
-
"packageLocation": "./.yarn/cache/escape-string-regexp-npm-1.0.5-3284de402f-6092fda75c.zip/node_modules/escape-string-regexp/",\
419
-
"packageDependencies": [\
420
-
["escape-string-regexp", "npm:1.0.5"]\
421
-
],\
422
-
"linkType": "HARD"\
423
-
}],\
424
-
["npm:5.0.0", {\
425
-
"packageLocation": "./.yarn/cache/escape-string-regexp-npm-5.0.0-a663e825ce-20daabe197.zip/node_modules/escape-string-regexp/",\
426
-
"packageDependencies": [\
427
-
["escape-string-regexp", "npm:5.0.0"]\
428
-
],\
429
-
"linkType": "HARD"\
430
-
}]\
431
-
]],\
432
-
["esprima", [\
433
-
["npm:4.0.1", {\
434
-
"packageLocation": "./.yarn/cache/esprima-npm-4.0.1-1084e98778-b45bc805a6.zip/node_modules/esprima/",\
435
-
"packageDependencies": [\
436
-
["esprima", "npm:4.0.1"]\
437
-
],\
438
-
"linkType": "HARD"\
439
-
}]\
440
-
]],\
441
-
["execa", [\
442
-
["npm:2.1.0", {\
443
-
"packageLocation": "./.yarn/cache/execa-npm-2.1.0-9c7d62b9ab-93af9b816a.zip/node_modules/execa/",\
444
-
"packageDependencies": [\
445
-
["execa", "npm:2.1.0"],\
446
-
["cross-spawn", "npm:7.0.3"],\
447
-
["get-stream", "npm:5.2.0"],\
448
-
["is-stream", "npm:2.0.0"],\
449
-
["merge-stream", "npm:2.0.0"],\
450
-
["npm-run-path", "npm:3.1.0"],\
451
-
["onetime", "npm:5.1.2"],\
452
-
["p-finally", "npm:2.0.1"],\
453
-
["signal-exit", "npm:3.0.3"],\
454
-
["strip-final-newline", "npm:2.0.0"]\
455
-
],\
456
-
"linkType": "HARD"\
457
-
}]\
458
-
]],\
459
-
["fast-deep-equal", [\
460
-
["npm:2.0.1", {\
461
-
"packageLocation": "./.yarn/cache/fast-deep-equal-npm-2.0.1-9c01e08a62-b701835a87.zip/node_modules/fast-deep-equal/",\
462
-
"packageDependencies": [\
463
-
["fast-deep-equal", "npm:2.0.1"]\
464
-
],\
465
-
"linkType": "HARD"\
466
-
}],\
467
-
["npm:3.1.3", {\
468
-
"packageLocation": "./.yarn/cache/fast-deep-equal-npm-3.1.3-790edcfcf5-e21a9d8d84.zip/node_modules/fast-deep-equal/",\
469
-
"packageDependencies": [\
470
-
["fast-deep-equal", "npm:3.1.3"]\
471
-
],\
472
-
"linkType": "HARD"\
473
-
}]\
474
-
]],\
475
-
["fast-json-patch", [\
476
-
["npm:2.2.1", {\
477
-
"packageLocation": "./.yarn/cache/fast-json-patch-npm-2.2.1-63b021bb37-955aebb3f8.zip/node_modules/fast-json-patch/",\
478
-
"packageDependencies": [\
479
-
["fast-json-patch", "npm:2.2.1"],\
480
-
["fast-deep-equal", "npm:2.0.1"]\
481
-
],\
482
-
"linkType": "HARD"\
483
-
}]\
484
-
]],\
485
-
["find-up", [\
486
-
["npm:5.0.0", {\
487
-
"packageLocation": "./.yarn/cache/find-up-npm-5.0.0-e03e9b796d-07955e3573.zip/node_modules/find-up/",\
488
-
"packageDependencies": [\
489
-
["find-up", "npm:5.0.0"],\
490
-
["locate-path", "npm:6.0.0"],\
491
-
["path-exists", "npm:4.0.0"]\
492
-
],\
493
-
"linkType": "HARD"\
494
-
}]\
495
-
]],\
496
-
["fs.realpath", [\
497
-
["npm:1.0.0", {\
498
-
"packageLocation": "./.yarn/cache/fs.realpath-npm-1.0.0-c8f05d8126-99ddea01a7.zip/node_modules/fs.realpath/",\
499
-
"packageDependencies": [\
500
-
["fs.realpath", "npm:1.0.0"]\
501
-
],\
502
-
"linkType": "HARD"\
503
-
}]\
504
-
]],\
505
-
["function-bind", [\
506
-
["npm:1.1.1", {\
507
-
"packageLocation": "./.yarn/cache/function-bind-npm-1.1.1-b56b322ae9-b32fbaebb3.zip/node_modules/function-bind/",\
508
-
"packageDependencies": [\
509
-
["function-bind", "npm:1.1.1"]\
510
-
],\
511
-
"linkType": "HARD"\
512
-
}]\
513
-
]],\
514
-
["get-stream", [\
515
-
["npm:5.2.0", {\
516
-
"packageLocation": "./.yarn/cache/get-stream-npm-5.2.0-2cfd3b452b-8bc1a23174.zip/node_modules/get-stream/",\
517
-
"packageDependencies": [\
518
-
["get-stream", "npm:5.2.0"],\
519
-
["pump", "npm:3.0.0"]\
520
-
],\
521
-
"linkType": "HARD"\
522
-
}]\
523
-
]],\
524
-
["glob", [\
525
-
["npm:7.1.3", {\
526
-
"packageLocation": "./.yarn/cache/glob-npm-7.1.3-c65cc4bde2-d72a834a39.zip/node_modules/glob/",\
527
-
"packageDependencies": [\
528
-
["glob", "npm:7.1.3"],\
529
-
["fs.realpath", "npm:1.0.0"],\
530
-
["inflight", "npm:1.0.6"],\
531
-
["inherits", "npm:2.0.3"],\
532
-
["minimatch", "npm:3.1.2"],\
533
-
["once", "npm:1.4.0"],\
534
-
["path-is-absolute", "npm:1.0.1"]\
535
-
],\
536
-
"linkType": "HARD"\
537
-
}],\
538
-
["npm:7.1.7", {\
539
-
"packageLocation": "./.yarn/cache/glob-npm-7.1.7-5698ad9c48-b61f48973b.zip/node_modules/glob/",\
540
-
"packageDependencies": [\
541
-
["glob", "npm:7.1.7"],\
542
-
["fs.realpath", "npm:1.0.0"],\
543
-
["inflight", "npm:1.0.6"],\
544
-
["inherits", "npm:2.0.3"],\
545
-
["minimatch", "npm:3.1.2"],\
546
-
["once", "npm:1.4.0"],\
547
-
["path-is-absolute", "npm:1.0.1"]\
548
-
],\
549
-
"linkType": "HARD"\
550
-
}]\
551
-
]],\
552
-
["globby", [\
553
-
["npm:7.1.1", {\
554
-
"packageLocation": "./.yarn/cache/globby-npm-7.1.1-6c96505a27-f0eba08a08.zip/node_modules/globby/",\
555
-
"packageDependencies": [\
556
-
["globby", "npm:7.1.1"],\
557
-
["array-union", "npm:1.0.2"],\
558
-
["dir-glob", "npm:2.2.2"],\
559
-
["glob", "npm:7.1.3"],\
560
-
["ignore", "npm:3.3.10"],\
561
-
["pify", "npm:3.0.0"],\
562
-
["slash", "npm:1.0.0"]\
563
-
],\
564
-
"linkType": "HARD"\
565
-
}]\
566
-
]],\
567
-
["hard-rejection", [\
568
-
["npm:2.1.0", {\
569
-
"packageLocation": "./.yarn/cache/hard-rejection-npm-2.1.0-a80f2a977d-7baaf80a0c.zip/node_modules/hard-rejection/",\
570
-
"packageDependencies": [\
571
-
["hard-rejection", "npm:2.1.0"]\
572
-
],\
573
-
"linkType": "HARD"\
574
-
}]\
575
-
]],\
576
-
["has", [\
577
-
["npm:1.0.3", {\
578
-
"packageLocation": "./.yarn/cache/has-npm-1.0.3-b7f00631c1-b9ad53d53b.zip/node_modules/has/",\
579
-
"packageDependencies": [\
580
-
["has", "npm:1.0.3"],\
581
-
["function-bind", "npm:1.1.1"]\
582
-
],\
583
-
"linkType": "HARD"\
584
-
}]\
585
-
]],\
586
-
["has-flag", [\
587
-
["npm:3.0.0", {\
588
-
"packageLocation": "./.yarn/cache/has-flag-npm-3.0.0-16ac11fe05-4a15638b45.zip/node_modules/has-flag/",\
589
-
"packageDependencies": [\
590
-
["has-flag", "npm:3.0.0"]\
591
-
],\
592
-
"linkType": "HARD"\
593
-
}]\
594
-
]],\
595
-
["hosted-git-info", [\
596
-
["npm:4.0.2", {\
597
-
"packageLocation": "./.yarn/cache/hosted-git-info-npm-4.0.2-7330924e0c-d1b2d77203.zip/node_modules/hosted-git-info/",\
598
-
"packageDependencies": [\
599
-
["hosted-git-info", "npm:4.0.2"],\
600
-
["lru-cache", "npm:6.0.0"]\
601
-
],\
602
-
"linkType": "HARD"\
603
-
}]\
604
-
]],\
605
-
["ignore", [\
606
-
["npm:3.3.10", {\
607
-
"packageLocation": "./.yarn/cache/ignore-npm-3.3.10-baaf3519b5-23e8cc776e.zip/node_modules/ignore/",\
608
-
"packageDependencies": [\
609
-
["ignore", "npm:3.3.10"]\
610
-
],\
611
-
"linkType": "HARD"\
612
-
}]\
613
-
]],\
614
-
["indent-string", [\
615
-
["npm:5.0.0", {\
616
-
"packageLocation": "./.yarn/cache/indent-string-npm-5.0.0-35eaa3b052-e466c27b63.zip/node_modules/indent-string/",\
617
-
"packageDependencies": [\
618
-
["indent-string", "npm:5.0.0"]\
619
-
],\
620
-
"linkType": "HARD"\
621
-
}]\
622
-
]],\
623
-
["inflight", [\
624
-
["npm:1.0.6", {\
625
-
"packageLocation": "./.yarn/cache/inflight-npm-1.0.6-ccedb4b908-f4f76aa072.zip/node_modules/inflight/",\
626
-
"packageDependencies": [\
627
-
["inflight", "npm:1.0.6"],\
628
-
["once", "npm:1.4.0"],\
629
-
["wrappy", "npm:1.0.2"]\
630
-
],\
631
-
"linkType": "HARD"\
632
-
}]\
633
-
]],\
634
-
["inherits", [\
635
-
["npm:2.0.3", {\
636
-
"packageLocation": "./.yarn/cache/inherits-npm-2.0.3-401e64b080-78cb8d7d85.zip/node_modules/inherits/",\
637
-
"packageDependencies": [\
638
-
["inherits", "npm:2.0.3"]\
639
-
],\
640
-
"linkType": "HARD"\
641
-
}]\
642
-
]],\
643
-
["is-arrayish", [\
644
-
["npm:0.2.1", {\
645
-
"packageLocation": "./.yarn/cache/is-arrayish-npm-0.2.1-23927dfb15-eef4417e3c.zip/node_modules/is-arrayish/",\
646
-
"packageDependencies": [\
647
-
["is-arrayish", "npm:0.2.1"]\
648
-
],\
649
-
"linkType": "HARD"\
650
-
}]\
651
-
]],\
652
-
["is-core-module", [\
653
-
["npm:2.11.0", {\
654
-
"packageLocation": "./.yarn/cache/is-core-module-npm-2.11.0-70061e141a-f96fd490c6.zip/node_modules/is-core-module/",\
655
-
"packageDependencies": [\
656
-
["is-core-module", "npm:2.11.0"],\
657
-
["has", "npm:1.0.3"]\
658
-
],\
659
-
"linkType": "HARD"\
660
-
}]\
661
-
]],\
662
-
["is-path-inside", [\
663
-
["npm:4.0.0", {\
664
-
"packageLocation": "./.yarn/cache/is-path-inside-npm-4.0.0-2af2bde69d-8810fa11c5.zip/node_modules/is-path-inside/",\
665
-
"packageDependencies": [\
666
-
["is-path-inside", "npm:4.0.0"]\
667
-
],\
668
-
"linkType": "HARD"\
669
-
}]\
670
-
]],\
671
-
["is-plain-obj", [\
672
-
["npm:1.1.0", {\
673
-
"packageLocation": "./.yarn/cache/is-plain-obj-npm-1.1.0-1046f64c0b-0ee0480779.zip/node_modules/is-plain-obj/",\
674
-
"packageDependencies": [\
675
-
["is-plain-obj", "npm:1.1.0"]\
676
-
],\
677
-
"linkType": "HARD"\
678
-
}]\
679
-
]],\
680
-
["is-stream", [\
681
-
["npm:2.0.0", {\
682
-
"packageLocation": "./.yarn/cache/is-stream-npm-2.0.0-1401f82ad7-4dc47738e2.zip/node_modules/is-stream/",\
683
-
"packageDependencies": [\
684
-
["is-stream", "npm:2.0.0"]\
685
-
],\
686
-
"linkType": "HARD"\
687
-
}]\
688
-
]],\
689
-
["isexe", [\
690
-
["npm:2.0.0", {\
691
-
"packageLocation": "./.yarn/cache/isexe-npm-2.0.0-b58870bd2e-26bf6c5480.zip/node_modules/isexe/",\
692
-
"packageDependencies": [\
693
-
["isexe", "npm:2.0.0"]\
694
-
],\
695
-
"linkType": "HARD"\
696
-
}]\
697
-
]],\
698
-
["js-tokens", [\
699
-
["npm:4.0.0", {\
700
-
"packageLocation": "./.yarn/cache/js-tokens-npm-4.0.0-0ac852e9e2-8a95213a5a.zip/node_modules/js-tokens/",\
701
-
"packageDependencies": [\
702
-
["js-tokens", "npm:4.0.0"]\
703
-
],\
704
-
"linkType": "HARD"\
705
-
}]\
706
-
]],\
707
-
["js-yaml", [\
708
-
["npm:3.14.1", {\
709
-
"packageLocation": "./.yarn/cache/js-yaml-npm-3.14.1-b968c6095e-bef146085f.zip/node_modules/js-yaml/",\
710
-
"packageDependencies": [\
711
-
["js-yaml", "npm:3.14.1"],\
712
-
["argparse", "npm:1.0.10"],\
713
-
["esprima", "npm:4.0.1"]\
714
-
],\
715
-
"linkType": "HARD"\
716
-
}],\
717
-
["npm:4.1.0", {\
718
-
"packageLocation": "./.yarn/cache/js-yaml-npm-4.1.0-3606f32312-c7830dfd45.zip/node_modules/js-yaml/",\
719
-
"packageDependencies": [\
720
-
["js-yaml", "npm:4.1.0"],\
721
-
["argparse", "npm:2.0.1"]\
722
-
],\
723
-
"linkType": "HARD"\
724
-
}]\
725
-
]],\
726
-
["json-parse-even-better-errors", [\
727
-
["npm:2.3.1", {\
728
-
"packageLocation": "./.yarn/cache/json-parse-even-better-errors-npm-2.3.1-144d62256e-798ed4cf33.zip/node_modules/json-parse-even-better-errors/",\
729
-
"packageDependencies": [\
730
-
["json-parse-even-better-errors", "npm:2.3.1"]\
731
-
],\
732
-
"linkType": "HARD"\
733
-
}]\
734
-
]],\
735
-
["json-schema-migrate", [\
736
-
["npm:2.0.0", {\
737
-
"packageLocation": "./.yarn/cache/json-schema-migrate-npm-2.0.0-87745c8332-21537305f3.zip/node_modules/json-schema-migrate/",\
738
-
"packageDependencies": [\
739
-
["json-schema-migrate", "npm:2.0.0"],\
740
-
["ajv", "npm:8.6.1"]\
741
-
],\
742
-
"linkType": "HARD"\
743
-
}]\
744
-
]],\
745
-
["json-schema-traverse", [\
746
-
["npm:1.0.0", {\
747
-
"packageLocation": "./.yarn/cache/json-schema-traverse-npm-1.0.0-fb3684f4f0-02f2f466cd.zip/node_modules/json-schema-traverse/",\
748
-
"packageDependencies": [\
749
-
["json-schema-traverse", "npm:1.0.0"]\
750
-
],\
751
-
"linkType": "HARD"\
752
-
}]\
753
-
]],\
754
-
["json5", [\
755
-
["npm:2.2.2", {\
756
-
"packageLocation": "./.yarn/cache/json5-npm-2.2.2-b047c53fcb-9a878d66b7.zip/node_modules/json5/",\
757
-
"packageDependencies": [\
758
-
["json5", "npm:2.2.2"]\
759
-
],\
760
-
"linkType": "HARD"\
761
-
}]\
762
-
]],\
763
-
["kind-of", [\
764
-
["npm:6.0.3", {\
765
-
"packageLocation": "./.yarn/cache/kind-of-npm-6.0.3-ab15f36220-3ab01e7b1d.zip/node_modules/kind-of/",\
766
-
"packageDependencies": [\
767
-
["kind-of", "npm:6.0.3"]\
768
-
],\
769
-
"linkType": "HARD"\
770
-
}]\
771
-
]],\
772
-
["lines-and-columns", [\
773
-
["npm:1.1.6", {\
774
-
"packageLocation": "./.yarn/cache/lines-and-columns-npm-1.1.6-23e74fab67-198a5436b1.zip/node_modules/lines-and-columns/",\
775
-
"packageDependencies": [\
776
-
["lines-and-columns", "npm:1.1.6"]\
777
-
],\
778
-
"linkType": "HARD"\
779
-
}]\
780
-
]],\
781
-
["locate-path", [\
782
-
["npm:6.0.0", {\
783
-
"packageLocation": "./.yarn/cache/locate-path-npm-6.0.0-06a1e4c528-72eb661788.zip/node_modules/locate-path/",\
784
-
"packageDependencies": [\
785
-
["locate-path", "npm:6.0.0"],\
786
-
["p-locate", "npm:5.0.0"]\
787
-
],\
788
-
"linkType": "HARD"\
789
-
}]\
790
-
]],\
791
-
["lru-cache", [\
792
-
["npm:6.0.0", {\
793
-
"packageLocation": "./.yarn/cache/lru-cache-npm-6.0.0-b4c8668fe1-f97f499f89.zip/node_modules/lru-cache/",\
794
-
"packageDependencies": [\
795
-
["lru-cache", "npm:6.0.0"],\
796
-
["yallist", "npm:4.0.0"]\
797
-
],\
798
-
"linkType": "HARD"\
799
-
}]\
800
-
]],\
801
-
["map-obj", [\
802
-
["npm:1.0.1", {\
803
-
"packageLocation": "./.yarn/cache/map-obj-npm-1.0.1-fa55100fac-9949e7baec.zip/node_modules/map-obj/",\
804
-
"packageDependencies": [\
805
-
["map-obj", "npm:1.0.1"]\
806
-
],\
807
-
"linkType": "HARD"\
808
-
}],\
809
-
["npm:4.3.0", {\
810
-
"packageLocation": "./.yarn/cache/map-obj-npm-4.3.0-d53e32935d-fbc554934d.zip/node_modules/map-obj/",\
811
-
"packageDependencies": [\
812
-
["map-obj", "npm:4.3.0"]\
813
-
],\
814
-
"linkType": "HARD"\
815
-
}]\
816
-
]],\
817
-
["meow", [\
818
-
["npm:10.1.5", {\
819
-
"packageLocation": "./.yarn/cache/meow-npm-10.1.5-a1bab640d1-dd5f0caa4a.zip/node_modules/meow/",\
820
-
"packageDependencies": [\
821
-
["meow", "npm:10.1.5"],\
822
-
["@types/minimist", "npm:1.2.2"],\
823
-
["camelcase-keys", "npm:7.0.2"],\
824
-
["decamelize", "npm:5.0.1"],\
825
-
["decamelize-keys", "npm:1.1.0"],\
826
-
["hard-rejection", "npm:2.1.0"],\
827
-
["minimist-options", "npm:4.1.0"],\
828
-
["normalize-package-data", "npm:3.0.3"],\
829
-
["read-pkg-up", "npm:8.0.0"],\
830
-
["redent", "npm:4.0.0"],\
831
-
["trim-newlines", "npm:4.0.2"],\
832
-
["type-fest", "npm:1.4.0"],\
833
-
["yargs-parser", "npm:20.2.9"]\
834
-
],\
835
-
"linkType": "HARD"\
836
-
}]\
837
-
]],\
838
-
["merge-stream", [\
839
-
["npm:2.0.0", {\
840
-
"packageLocation": "./.yarn/cache/merge-stream-npm-2.0.0-2ac83efea5-6fa4dcc8d8.zip/node_modules/merge-stream/",\
841
-
"packageDependencies": [\
842
-
["merge-stream", "npm:2.0.0"]\
843
-
],\
844
-
"linkType": "HARD"\
845
-
}]\
846
-
]],\
847
-
["mimic-fn", [\
848
-
["npm:2.1.0", {\
849
-
"packageLocation": "./.yarn/cache/mimic-fn-npm-2.1.0-4fbeb3abb4-d2421a3444.zip/node_modules/mimic-fn/",\
850
-
"packageDependencies": [\
851
-
["mimic-fn", "npm:2.1.0"]\
852
-
],\
853
-
"linkType": "HARD"\
854
-
}]\
855
-
]],\
856
-
["min-indent", [\
857
-
["npm:1.0.1", {\
858
-
"packageLocation": "./.yarn/cache/min-indent-npm-1.0.1-77031f50e1-bfc6dd03c5.zip/node_modules/min-indent/",\
859
-
"packageDependencies": [\
860
-
["min-indent", "npm:1.0.1"]\
861
-
],\
862
-
"linkType": "HARD"\
863
-
}]\
864
-
]],\
865
-
["minimatch", [\
866
-
["npm:3.1.2", {\
867
-
"packageLocation": "./.yarn/cache/minimatch-npm-3.1.2-9405269906-c154e56640.zip/node_modules/minimatch/",\
868
-
"packageDependencies": [\
869
-
["minimatch", "npm:3.1.2"],\
870
-
["brace-expansion", "npm:1.1.11"]\
871
-
],\
872
-
"linkType": "HARD"\
873
-
}]\
874
-
]],\
875
-
["minimist", [\
876
-
["npm:1.2.6", {\
877
-
"packageLocation": "./.yarn/cache/minimist-npm-1.2.6-f4cee4b4af-d15428cd1e.zip/node_modules/minimist/",\
878
-
"packageDependencies": [\
879
-
["minimist", "npm:1.2.6"]\
880
-
],\
881
-
"linkType": "HARD"\
882
-
}]\
883
-
]],\
884
-
["minimist-options", [\
885
-
["npm:4.1.0", {\
886
-
"packageLocation": "./.yarn/cache/minimist-options-npm-4.1.0-64ca250fc1-8c040b3068.zip/node_modules/minimist-options/",\
887
-
"packageDependencies": [\
888
-
["minimist-options", "npm:4.1.0"],\
889
-
["arrify", "npm:1.0.1"],\
890
-
["is-plain-obj", "npm:1.1.0"],\
891
-
["kind-of", "npm:6.0.3"]\
892
-
],\
893
-
"linkType": "HARD"\
894
-
}]\
895
-
]],\
896
-
["mount-point", [\
897
-
["npm:3.0.0", {\
898
-
"packageLocation": "./.yarn/cache/mount-point-npm-3.0.0-4a214c8cd1-edb588e613.zip/node_modules/mount-point/",\
899
-
"packageDependencies": [\
900
-
["mount-point", "npm:3.0.0"],\
901
-
["@sindresorhus/df", "npm:1.0.1"],\
902
-
["pify", "npm:2.3.0"],\
903
-
["pinkie-promise", "npm:2.0.1"]\
904
-
],\
905
-
"linkType": "HARD"\
906
-
}]\
907
-
]],\
908
-
["move-file", [\
909
-
["npm:3.0.0", {\
910
-
"packageLocation": "./.yarn/cache/move-file-npm-3.0.0-60fa241416-18b0a542b4.zip/node_modules/move-file/",\
911
-
"packageDependencies": [\
912
-
["move-file", "npm:3.0.0"],\
913
-
["path-exists", "npm:5.0.0"]\
914
-
],\
915
-
"linkType": "HARD"\
916
-
}]\
917
-
]],\
918
-
["normalize-package-data", [\
919
-
["npm:3.0.3", {\
920
-
"packageLocation": "./.yarn/cache/normalize-package-data-npm-3.0.3-1a49056685-bbcee00339.zip/node_modules/normalize-package-data/",\
921
-
"packageDependencies": [\
922
-
["normalize-package-data", "npm:3.0.3"],\
923
-
["hosted-git-info", "npm:4.0.2"],\
924
-
["is-core-module", "npm:2.11.0"],\
925
-
["semver", "npm:7.5.3"],\
926
-
["validate-npm-package-license", "npm:3.0.4"]\
927
-
],\
928
-
"linkType": "HARD"\
929
-
}]\
930
-
]],\
931
-
["npm-run-path", [\
932
-
["npm:3.1.0", {\
933
-
"packageLocation": "./.yarn/cache/npm-run-path-npm-3.1.0-dd7b0fa1be-141e0b8f0e.zip/node_modules/npm-run-path/",\
934
-
"packageDependencies": [\
935
-
["npm-run-path", "npm:3.1.0"],\
936
-
["path-key", "npm:3.1.1"]\
937
-
],\
938
-
"linkType": "HARD"\
939
-
}]\
940
-
]],\
941
-
["once", [\
942
-
["npm:1.4.0", {\
943
-
"packageLocation": "./.yarn/cache/once-npm-1.4.0-ccf03ef07a-cd0a885013.zip/node_modules/once/",\
944
-
"packageDependencies": [\
945
-
["once", "npm:1.4.0"],\
946
-
["wrappy", "npm:1.0.2"]\
947
-
],\
948
-
"linkType": "HARD"\
949
-
}]\
950
-
]],\
951
-
["onetime", [\
952
-
["npm:5.1.2", {\
953
-
"packageLocation": "./.yarn/cache/onetime-npm-5.1.2-3ed148fa42-2478859ef8.zip/node_modules/onetime/",\
954
-
"packageDependencies": [\
955
-
["onetime", "npm:5.1.2"],\
956
-
["mimic-fn", "npm:2.1.0"]\
957
-
],\
958
-
"linkType": "HARD"\
959
-
}]\
960
-
]],\
961
-
["os-homedir", [\
962
-
["npm:1.0.2", {\
963
-
"packageLocation": "./.yarn/cache/os-homedir-npm-1.0.2-01f82faa88-af609f5a7a.zip/node_modules/os-homedir/",\
964
-
"packageDependencies": [\
965
-
["os-homedir", "npm:1.0.2"]\
966
-
],\
967
-
"linkType": "HARD"\
968
-
}]\
969
-
]],\
970
-
["p-finally", [\
971
-
["npm:2.0.1", {\
972
-
"packageLocation": "./.yarn/cache/p-finally-npm-2.0.1-b59964aa17-6306a2851c.zip/node_modules/p-finally/",\
973
-
"packageDependencies": [\
974
-
["p-finally", "npm:2.0.1"]\
975
-
],\
976
-
"linkType": "HARD"\
977
-
}]\
978
-
]],\
979
-
["p-limit", [\
980
-
["npm:3.1.0", {\
981
-
"packageLocation": "./.yarn/cache/p-limit-npm-3.1.0-05d2ede37f-7c3690c4db.zip/node_modules/p-limit/",\
982
-
"packageDependencies": [\
983
-
["p-limit", "npm:3.1.0"],\
984
-
["yocto-queue", "npm:0.1.0"]\
985
-
],\
986
-
"linkType": "HARD"\
987
-
}]\
988
-
]],\
989
-
["p-locate", [\
990
-
["npm:5.0.0", {\
991
-
"packageLocation": "./.yarn/cache/p-locate-npm-5.0.0-92cc7c7a3e-1623088f36.zip/node_modules/p-locate/",\
992
-
"packageDependencies": [\
993
-
["p-locate", "npm:5.0.0"],\
994
-
["p-limit", "npm:3.1.0"]\
995
-
],\
996
-
"linkType": "HARD"\
997
-
}]\
998
-
]],\
999
-
["p-map", [\
1000
-
["npm:5.5.0", {\
1001
-
"packageLocation": "./.yarn/cache/p-map-npm-5.5.0-9758eb14ee-065cb6fca6.zip/node_modules/p-map/",\
1002
-
"packageDependencies": [\
1003
-
["p-map", "npm:5.5.0"],\
1004
-
["aggregate-error", "npm:4.0.1"]\
1005
-
],\
1006
-
"linkType": "HARD"\
1007
-
}]\
1008
-
]],\
1009
-
["parse-json", [\
1010
-
["npm:5.2.0", {\
1011
-
"packageLocation": "./.yarn/cache/parse-json-npm-5.2.0-00a63b1199-62085b17d6.zip/node_modules/parse-json/",\
1012
-
"packageDependencies": [\
1013
-
["parse-json", "npm:5.2.0"],\
1014
-
["@babel/code-frame", "npm:7.14.5"],\
1015
-
["error-ex", "npm:1.3.2"],\
1016
-
["json-parse-even-better-errors", "npm:2.3.1"],\
1017
-
["lines-and-columns", "npm:1.1.6"]\
1018
-
],\
1019
-
"linkType": "HARD"\
1020
-
}]\
1021
-
]],\
1022
-
["path-exists", [\
1023
-
["npm:4.0.0", {\
1024
-
"packageLocation": "./.yarn/cache/path-exists-npm-4.0.0-e9e4f63eb0-505807199d.zip/node_modules/path-exists/",\
1025
-
"packageDependencies": [\
1026
-
["path-exists", "npm:4.0.0"]\
1027
-
],\
1028
-
"linkType": "HARD"\
1029
-
}],\
1030
-
["npm:5.0.0", {\
1031
-
"packageLocation": "./.yarn/cache/path-exists-npm-5.0.0-0bf403c56c-8ca842868c.zip/node_modules/path-exists/",\
1032
-
"packageDependencies": [\
1033
-
["path-exists", "npm:5.0.0"]\
1034
-
],\
1035
-
"linkType": "HARD"\
1036
-
}]\
1037
-
]],\
1038
-
["path-is-absolute", [\
1039
-
["npm:1.0.1", {\
1040
-
"packageLocation": "./.yarn/cache/path-is-absolute-npm-1.0.1-31bc695ffd-060840f92c.zip/node_modules/path-is-absolute/",\
1041
-
"packageDependencies": [\
1042
-
["path-is-absolute", "npm:1.0.1"]\
1043
-
],\
1044
-
"linkType": "HARD"\
1045
-
}]\
1046
-
]],\
1047
-
["path-key", [\
1048
-
["npm:3.1.1", {\
1049
-
"packageLocation": "./.yarn/cache/path-key-npm-3.1.1-0e66ea8321-55cd7a9dd4.zip/node_modules/path-key/",\
1050
-
"packageDependencies": [\
1051
-
["path-key", "npm:3.1.1"]\
1052
-
],\
1053
-
"linkType": "HARD"\
1054
-
}]\
1055
-
]],\
1056
-
["path-type", [\
1057
-
["npm:3.0.0", {\
1058
-
"packageLocation": "./.yarn/cache/path-type-npm-3.0.0-252361a0eb-735b35e256.zip/node_modules/path-type/",\
1059
-
"packageDependencies": [\
1060
-
["path-type", "npm:3.0.0"],\
1061
-
["pify", "npm:3.0.0"]\
1062
-
],\
1063
-
"linkType": "HARD"\
1064
-
}]\
1065
-
]],\
1066
-
["pify", [\
1067
-
["npm:2.3.0", {\
1068
-
"packageLocation": "./.yarn/cache/pify-npm-2.3.0-8b63310934-9503aaeaf4.zip/node_modules/pify/",\
1069
-
"packageDependencies": [\
1070
-
["pify", "npm:2.3.0"]\
1071
-
],\
1072
-
"linkType": "HARD"\
1073
-
}],\
1074
-
["npm:3.0.0", {\
1075
-
"packageLocation": "./.yarn/cache/pify-npm-3.0.0-679ee405c8-6cdcbc3567.zip/node_modules/pify/",\
1076
-
"packageDependencies": [\
1077
-
["pify", "npm:3.0.0"]\
1078
-
],\
1079
-
"linkType": "HARD"\
1080
-
}]\
1081
-
]],\
1082
-
["pinkie", [\
1083
-
["npm:2.0.4", {\
1084
-
"packageLocation": "./.yarn/cache/pinkie-npm-2.0.4-cffce4fb09-b12b10afea.zip/node_modules/pinkie/",\
1085
-
"packageDependencies": [\
1086
-
["pinkie", "npm:2.0.4"]\
1087
-
],\
1088
-
"linkType": "HARD"\
1089
-
}]\
1090
-
]],\
1091
-
["pinkie-promise", [\
1092
-
["npm:2.0.1", {\
1093
-
"packageLocation": "./.yarn/cache/pinkie-promise-npm-2.0.1-095439b8c5-b53a4a2e73.zip/node_modules/pinkie-promise/",\
1094
-
"packageDependencies": [\
1095
-
["pinkie-promise", "npm:2.0.1"],\
1096
-
["pinkie", "npm:2.0.4"]\
1097
-
],\
1098
-
"linkType": "HARD"\
1099
-
}]\
1100
-
]],\
1101
-
["pump", [\
1102
-
["npm:3.0.0", {\
1103
-
"packageLocation": "./.yarn/cache/pump-npm-3.0.0-0080bf6a7a-e42e9229fb.zip/node_modules/pump/",\
1104
-
"packageDependencies": [\
1105
-
["pump", "npm:3.0.0"],\
1106
-
["end-of-stream", "npm:1.4.4"],\
1107
-
["once", "npm:1.4.0"]\
1108
-
],\
1109
-
"linkType": "HARD"\
1110
-
}]\
1111
-
]],\
1112
-
["punycode", [\
1113
-
["npm:2.1.1", {\
1114
-
"packageLocation": "./.yarn/cache/punycode-npm-2.1.1-26eb3e15cf-823bf443c6.zip/node_modules/punycode/",\
1115
-
"packageDependencies": [\
1116
-
["punycode", "npm:2.1.1"]\
1117
-
],\
1118
-
"linkType": "HARD"\
1119
-
}]\
1120
-
]],\
1121
-
["quick-lru", [\
1122
-
["npm:5.1.1", {\
1123
-
"packageLocation": "./.yarn/cache/quick-lru-npm-5.1.1-e38e0edce3-a516faa255.zip/node_modules/quick-lru/",\
1124
-
"packageDependencies": [\
1125
-
["quick-lru", "npm:5.1.1"]\
1126
-
],\
1127
-
"linkType": "HARD"\
1128
-
}]\
1129
-
]],\
1130
-
["read-pkg", [\
1131
-
["npm:6.0.0", {\
1132
-
"packageLocation": "./.yarn/cache/read-pkg-npm-6.0.0-d89ce14684-0cebdff381.zip/node_modules/read-pkg/",\
1133
-
"packageDependencies": [\
1134
-
["read-pkg", "npm:6.0.0"],\
1135
-
["@types/normalize-package-data", "npm:2.4.0"],\
1136
-
["normalize-package-data", "npm:3.0.3"],\
1137
-
["parse-json", "npm:5.2.0"],\
1138
-
["type-fest", "npm:1.4.0"]\
1139
-
],\
1140
-
"linkType": "HARD"\
1141
-
}]\
1142
-
]],\
1143
-
["read-pkg-up", [\
1144
-
["npm:8.0.0", {\
1145
-
"packageLocation": "./.yarn/cache/read-pkg-up-npm-8.0.0-6f39941cc9-fe4c804016.zip/node_modules/read-pkg-up/",\
1146
-
"packageDependencies": [\
1147
-
["read-pkg-up", "npm:8.0.0"],\
1148
-
["find-up", "npm:5.0.0"],\
1149
-
["read-pkg", "npm:6.0.0"],\
1150
-
["type-fest", "npm:1.4.0"]\
1151
-
],\
1152
-
"linkType": "HARD"\
1153
-
}]\
1154
-
]],\
1155
-
["redent", [\
1156
-
["npm:4.0.0", {\
1157
-
"packageLocation": "./.yarn/cache/redent-npm-4.0.0-67da39f156-6944e7b1d8.zip/node_modules/redent/",\
1158
-
"packageDependencies": [\
1159
-
["redent", "npm:4.0.0"],\
1160
-
["indent-string", "npm:5.0.0"],\
1161
-
["strip-indent", "npm:4.0.0"]\
1162
-
],\
1163
-
"linkType": "HARD"\
1164
-
}]\
1165
-
]],\
1166
-
["require-from-string", [\
1167
-
["npm:2.0.2", {\
1168
-
"packageLocation": "./.yarn/cache/require-from-string-npm-2.0.2-8557e0db12-a03ef68954.zip/node_modules/require-from-string/",\
1169
-
"packageDependencies": [\
1170
-
["require-from-string", "npm:2.0.2"]\
1171
-
],\
1172
-
"linkType": "HARD"\
1173
-
}]\
1174
-
]],\
1175
-
["semver", [\
1176
-
["npm:7.5.3", {\
1177
-
"packageLocation": "./.yarn/cache/semver-npm-7.5.3-275095dbf3-9d58db1652.zip/node_modules/semver/",\
1178
-
"packageDependencies": [\
1179
-
["semver", "npm:7.5.3"],\
1180
-
["lru-cache", "npm:6.0.0"]\
1181
-
],\
1182
-
"linkType": "HARD"\
1183
-
}]\
1184
-
]],\
1185
-
["shebang-command", [\
1186
-
["npm:2.0.0", {\
1187
-
"packageLocation": "./.yarn/cache/shebang-command-npm-2.0.0-eb2b01921d-6b52fe8727.zip/node_modules/shebang-command/",\
1188
-
"packageDependencies": [\
1189
-
["shebang-command", "npm:2.0.0"],\
1190
-
["shebang-regex", "npm:3.0.0"]\
1191
-
],\
1192
-
"linkType": "HARD"\
1193
-
}]\
1194
-
]],\
1195
-
["shebang-regex", [\
1196
-
["npm:3.0.0", {\
1197
-
"packageLocation": "./.yarn/cache/shebang-regex-npm-3.0.0-899a0cd65e-1a2bcae50d.zip/node_modules/shebang-regex/",\
1198
-
"packageDependencies": [\
1199
-
["shebang-regex", "npm:3.0.0"]\
1200
-
],\
1201
-
"linkType": "HARD"\
1202
-
}]\
1203
-
]],\
1204
-
["signal-exit", [\
1205
-
["npm:3.0.3", {\
1206
-
"packageLocation": "./.yarn/cache/signal-exit-npm-3.0.3-5a2d797648-f0169d3f12.zip/node_modules/signal-exit/",\
1207
-
"packageDependencies": [\
1208
-
["signal-exit", "npm:3.0.3"]\
1209
-
],\
1210
-
"linkType": "HARD"\
1211
-
}]\
1212
-
]],\
1213
-
["slash", [\
1214
-
["npm:1.0.0", {\
1215
-
"packageLocation": "./.yarn/cache/slash-npm-1.0.0-a244873c30-4b6e21b1fb.zip/node_modules/slash/",\
1216
-
"packageDependencies": [\
1217
-
["slash", "npm:1.0.0"]\
1218
-
],\
1219
-
"linkType": "HARD"\
1220
-
}]\
1221
-
]],\
1222
-
["spdx-correct", [\
1223
-
["npm:3.1.0", {\
1224
-
"packageLocation": "./.yarn/cache/spdx-correct-npm-3.1.0-9ad640b3ef-fda9fc191e.zip/node_modules/spdx-correct/",\
1225
-
"packageDependencies": [\
1226
-
["spdx-correct", "npm:3.1.0"],\
1227
-
["spdx-expression-parse", "npm:3.0.0"],\
1228
-
["spdx-license-ids", "npm:3.0.3"]\
1229
-
],\
1230
-
"linkType": "HARD"\
1231
-
}]\
1232
-
]],\
1233
-
["spdx-exceptions", [\
1234
-
["npm:2.2.0", {\
1235
-
"packageLocation": "./.yarn/cache/spdx-exceptions-npm-2.2.0-a19a6b5050-29189de3f6.zip/node_modules/spdx-exceptions/",\
1236
-
"packageDependencies": [\
1237
-
["spdx-exceptions", "npm:2.2.0"]\
1238
-
],\
1239
-
"linkType": "HARD"\
1240
-
}]\
1241
-
]],\
1242
-
["spdx-expression-parse", [\
1243
-
["npm:3.0.0", {\
1244
-
"packageLocation": "./.yarn/cache/spdx-expression-parse-npm-3.0.0-704f8535ae-308c8c4925.zip/node_modules/spdx-expression-parse/",\
1245
-
"packageDependencies": [\
1246
-
["spdx-expression-parse", "npm:3.0.0"],\
1247
-
["spdx-exceptions", "npm:2.2.0"],\
1248
-
["spdx-license-ids", "npm:3.0.3"]\
1249
-
],\
1250
-
"linkType": "HARD"\
1251
-
}]\
1252
-
]],\
1253
-
["spdx-license-ids", [\
1254
-
["npm:3.0.3", {\
1255
-
"packageLocation": "./.yarn/cache/spdx-license-ids-npm-3.0.3-dd83ff3650-ec7bfab530.zip/node_modules/spdx-license-ids/",\
1256
-
"packageDependencies": [\
1257
-
["spdx-license-ids", "npm:3.0.3"]\
1258
-
],\
1259
-
"linkType": "HARD"\
1260
-
}]\
1261
-
]],\
1262
-
["sprintf-js", [\
1263
-
["npm:1.0.3", {\
1264
-
"packageLocation": "./.yarn/cache/sprintf-js-npm-1.0.3-73f0a322fa-19d79aec21.zip/node_modules/sprintf-js/",\
1265
-
"packageDependencies": [\
1266
-
["sprintf-js", "npm:1.0.3"]\
1267
-
],\
1268
-
"linkType": "HARD"\
1269
-
}]\
1270
-
]],\
1271
-
["strip-final-newline", [\
1272
-
["npm:2.0.0", {\
1273
-
"packageLocation": "./.yarn/cache/strip-final-newline-npm-2.0.0-340c4f7c66-69412b5e25.zip/node_modules/strip-final-newline/",\
1274
-
"packageDependencies": [\
1275
-
["strip-final-newline", "npm:2.0.0"]\
1276
-
],\
1277
-
"linkType": "HARD"\
1278
-
}]\
1279
-
]],\
1280
-
["strip-indent", [\
1281
-
["npm:4.0.0", {\
1282
-
"packageLocation": "./.yarn/cache/strip-indent-npm-4.0.0-12c489be86-06cbcd93da.zip/node_modules/strip-indent/",\
1283
-
"packageDependencies": [\
1284
-
["strip-indent", "npm:4.0.0"],\
1285
-
["min-indent", "npm:1.0.1"]\
1286
-
],\
1287
-
"linkType": "HARD"\
1288
-
}]\
1289
-
]],\
1290
-
["supports-color", [\
1291
-
["npm:5.5.0", {\
1292
-
"packageLocation": "./.yarn/cache/supports-color-npm-5.5.0-183ac537bc-95f6f4ba5a.zip/node_modules/supports-color/",\
1293
-
"packageDependencies": [\
1294
-
["supports-color", "npm:5.5.0"],\
1295
-
["has-flag", "npm:3.0.0"]\
1296
-
],\
1297
-
"linkType": "HARD"\
1298
-
}]\
1299
-
]],\
1300
-
["trash", [\
1301
-
["npm:8.1.0", {\
1302
-
"packageLocation": "./.yarn/unplugged/trash-npm-8.1.0-e8271d1f12/node_modules/trash/",\
1303
-
"packageDependencies": [\
1304
-
["trash", "npm:8.1.0"],\
1305
-
["@sindresorhus/chunkify", "npm:0.2.0"],\
1306
-
["@stroncium/procfs", "npm:1.2.1"],\
1307
-
["globby", "npm:7.1.1"],\
1308
-
["is-path-inside", "npm:4.0.0"],\
1309
-
["move-file", "npm:3.0.0"],\
1310
-
["p-map", "npm:5.5.0"],\
1311
-
["uuid", "npm:8.3.2"],\
1312
-
["xdg-trashdir", "npm:3.1.0"]\
1313
-
],\
1314
-
"linkType": "HARD"\
1315
-
}]\
1316
-
]],\
1317
-
["trash-cli", [\
1318
-
["npm:5.0.0", {\
1319
-
"packageLocation": "./.yarn/cache/trash-cli-npm-5.0.0-172c9c6b9e-b987156abb.zip/node_modules/trash-cli/",\
1320
-
"packageDependencies": [\
1321
-
["trash-cli", "npm:5.0.0"],\
1322
-
["meow", "npm:10.1.5"],\
1323
-
["trash", "npm:8.1.0"]\
1324
-
],\
1325
-
"linkType": "HARD"\
1326
-
}]\
1327
-
]],\
1328
-
["trim-newlines", [\
1329
-
["npm:4.0.2", {\
1330
-
"packageLocation": "./.yarn/cache/trim-newlines-npm-4.0.2-e01f9adaf9-1eef206eb7.zip/node_modules/trim-newlines/",\
1331
-
"packageDependencies": [\
1332
-
["trim-newlines", "npm:4.0.2"]\
1333
-
],\
1334
-
"linkType": "HARD"\
1335
-
}]\
1336
-
]],\
1337
-
["type-fest", [\
1338
-
["npm:1.4.0", {\
1339
-
"packageLocation": "./.yarn/cache/type-fest-npm-1.4.0-7dd848962a-b011c33886.zip/node_modules/type-fest/",\
1340
-
"packageDependencies": [\
1341
-
["type-fest", "npm:1.4.0"]\
1342
-
],\
1343
-
"linkType": "HARD"\
1344
-
}]\
1345
-
]],\
1346
-
["uri-js", [\
1347
-
["npm:4.2.2", {\
1348
-
"packageLocation": "./.yarn/cache/uri-js-npm-4.2.2-e6ac2fca26-5a91c55d8a.zip/node_modules/uri-js/",\
1349
-
"packageDependencies": [\
1350
-
["uri-js", "npm:4.2.2"],\
1351
-
["punycode", "npm:2.1.1"]\
1352
-
],\
1353
-
"linkType": "HARD"\
1354
-
}]\
1355
-
]],\
1356
-
["user-home", [\
1357
-
["npm:2.0.0", {\
1358
-
"packageLocation": "./.yarn/cache/user-home-npm-2.0.0-a7b3877168-a3329faa95.zip/node_modules/user-home/",\
1359
-
"packageDependencies": [\
1360
-
["user-home", "npm:2.0.0"],\
1361
-
["os-homedir", "npm:1.0.2"]\
1362
-
],\
1363
-
"linkType": "HARD"\
1364
-
}]\
1365
-
]],\
1366
-
["uuid", [\
1367
-
["npm:8.3.2", {\
1368
-
"packageLocation": "./.yarn/cache/uuid-npm-8.3.2-eca0baba53-5575a8a75c.zip/node_modules/uuid/",\
1369
-
"packageDependencies": [\
1370
-
["uuid", "npm:8.3.2"]\
1371
-
],\
1372
-
"linkType": "HARD"\
1373
-
}]\
1374
-
]],\
1375
-
["validate-npm-package-license", [\
1376
-
["npm:3.0.4", {\
1377
-
"packageLocation": "./.yarn/cache/validate-npm-package-license-npm-3.0.4-7af8adc7a8-35703ac889.zip/node_modules/validate-npm-package-license/",\
1378
-
"packageDependencies": [\
1379
-
["validate-npm-package-license", "npm:3.0.4"],\
1380
-
["spdx-correct", "npm:3.1.0"],\
1381
-
["spdx-expression-parse", "npm:3.0.0"]\
1382
-
],\
1383
-
"linkType": "HARD"\
1384
-
}]\
1385
-
]],\
1386
-
["which", [\
1387
-
["npm:2.0.2", {\
1388
-
"packageLocation": "./.yarn/cache/which-npm-2.0.2-320ddf72f7-1a5c563d3c.zip/node_modules/which/",\
1389
-
"packageDependencies": [\
1390
-
["which", "npm:2.0.2"],\
1391
-
["isexe", "npm:2.0.0"]\
1392
-
],\
1393
-
"linkType": "HARD"\
1394
-
}]\
1395
-
]],\
1396
-
["wrappy", [\
1397
-
["npm:1.0.2", {\
1398
-
"packageLocation": "./.yarn/cache/wrappy-npm-1.0.2-916de4d4b3-159da4805f.zip/node_modules/wrappy/",\
1399
-
"packageDependencies": [\
1400
-
["wrappy", "npm:1.0.2"]\
1401
-
],\
1402
-
"linkType": "HARD"\
1403
-
}]\
1404
-
]],\
1405
-
["xdg-basedir", [\
1406
-
["npm:4.0.0", {\
1407
-
"packageLocation": "./.yarn/cache/xdg-basedir-npm-4.0.0-ed08d380e2-0073d5b59a.zip/node_modules/xdg-basedir/",\
1408
-
"packageDependencies": [\
1409
-
["xdg-basedir", "npm:4.0.0"]\
1410
-
],\
1411
-
"linkType": "HARD"\
1412
-
}]\
1413
-
]],\
1414
-
["xdg-trashdir", [\
1415
-
["npm:3.1.0", {\
1416
-
"packageLocation": "./.yarn/cache/xdg-trashdir-npm-3.1.0-4867489077-1b8ed9229a.zip/node_modules/xdg-trashdir/",\
1417
-
"packageDependencies": [\
1418
-
["xdg-trashdir", "npm:3.1.0"],\
1419
-
["@sindresorhus/df", "npm:3.1.1"],\
1420
-
["mount-point", "npm:3.0.0"],\
1421
-
["user-home", "npm:2.0.0"],\
1422
-
["xdg-basedir", "npm:4.0.0"]\
1423
-
],\
1424
-
"linkType": "HARD"\
1425
-
}]\
1426
-
]],\
1427
-
["yallist", [\
1428
-
["npm:4.0.0", {\
1429
-
"packageLocation": "./.yarn/cache/yallist-npm-4.0.0-b493d9e907-343617202a.zip/node_modules/yallist/",\
1430
-
"packageDependencies": [\
1431
-
["yallist", "npm:4.0.0"]\
1432
-
],\
1433
-
"linkType": "HARD"\
1434
-
}]\
1435
-
]],\
1436
-
["yargs-parser", [\
1437
-
["npm:20.2.9", {\
1438
-
"packageLocation": "./.yarn/cache/yargs-parser-npm-20.2.9-a1d19e598d-8bb69015f2.zip/node_modules/yargs-parser/",\
1439
-
"packageDependencies": [\
1440
-
["yargs-parser", "npm:20.2.9"]\
1441
-
],\
1442
-
"linkType": "HARD"\
1443
-
}]\
1444
-
]],\
1445
-
["yocto-queue", [\
1446
-
["npm:0.1.0", {\
1447
-
"packageLocation": "./.yarn/cache/yocto-queue-npm-0.1.0-c6c9a7db29-f77b3d8d00.zip/node_modules/yocto-queue/",\
1448
-
"packageDependencies": [\
1449
-
["yocto-queue", "npm:0.1.0"]\
1450
-
],\
1451
-
"linkType": "HARD"\
1452
-
}]\
1453
-
]]\
1454
-
]\
1455
-
}'), {basePath: basePath || __dirname});
1456
-
}
1457
-
1458
-
const fs = require('fs');
1459
-
const path = require('path');
1460
-
const require$$0 = require('module');
1461
-
const StringDecoder = require('string_decoder');
1462
-
const url = require('url');
1463
-
const os = require('os');
1464
-
const nodeUtils = require('util');
1465
-
const readline = require('readline');
1466
-
const assert = require('assert');
1467
-
const stream = require('stream');
1468
-
const zlib = require('zlib');
1469
-
const events = require('events');
1470
-
1471
-
const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
1472
-
1473
-
function _interopNamespace(e) {
1474
-
if (e && e.__esModule) return e;
1475
-
const n = Object.create(null);
1476
-
if (e) {
1477
-
for (const k in e) {
1478
-
if (k !== 'default') {
1479
-
const d = Object.getOwnPropertyDescriptor(e, k);
1480
-
Object.defineProperty(n, k, d.get ? d : {
1481
-
enumerable: true,
1482
-
get: () => e[k]
1483
-
});
1484
-
}
1485
-
}
1486
-
}
1487
-
n.default = e;
1488
-
return Object.freeze(n);
1489
-
}
1490
-
1491
-
const fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
1492
-
const path__default = /*#__PURE__*/_interopDefaultLegacy(path);
1493
-
const require$$0__default = /*#__PURE__*/_interopDefaultLegacy(require$$0);
1494
-
const StringDecoder__default = /*#__PURE__*/_interopDefaultLegacy(StringDecoder);
1495
-
const nodeUtils__namespace = /*#__PURE__*/_interopNamespace(nodeUtils);
1496
-
const assert__default = /*#__PURE__*/_interopDefaultLegacy(assert);
1497
-
const zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib);
1498
-
1499
-
const S_IFMT = 61440;
1500
-
const S_IFDIR = 16384;
1501
-
const S_IFREG = 32768;
1502
-
const S_IFLNK = 40960;
1503
-
const SAFE_TIME = 456789e3;
1504
-
1505
-
const DEFAULT_MODE = S_IFREG | 420;
1506
-
class StatEntry {
1507
-
constructor() {
1508
-
this.uid = 0;
1509
-
this.gid = 0;
1510
-
this.size = 0;
1511
-
this.blksize = 0;
1512
-
this.atimeMs = 0;
1513
-
this.mtimeMs = 0;
1514
-
this.ctimeMs = 0;
1515
-
this.birthtimeMs = 0;
1516
-
this.atime = new Date(0);
1517
-
this.mtime = new Date(0);
1518
-
this.ctime = new Date(0);
1519
-
this.birthtime = new Date(0);
1520
-
this.dev = 0;
1521
-
this.ino = 0;
1522
-
this.mode = DEFAULT_MODE;
1523
-
this.nlink = 1;
1524
-
this.rdev = 0;
1525
-
this.blocks = 1;
1526
-
}
1527
-
isBlockDevice() {
1528
-
return false;
1529
-
}
1530
-
isCharacterDevice() {
1531
-
return false;
1532
-
}
1533
-
isDirectory() {
1534
-
return (this.mode & S_IFMT) === S_IFDIR;
1535
-
}
1536
-
isFIFO() {
1537
-
return false;
1538
-
}
1539
-
isFile() {
1540
-
return (this.mode & S_IFMT) === S_IFREG;
1541
-
}
1542
-
isSocket() {
1543
-
return false;
1544
-
}
1545
-
isSymbolicLink() {
1546
-
return (this.mode & S_IFMT) === S_IFLNK;
1547
-
}
1548
-
}
1549
-
class BigIntStatsEntry {
1550
-
constructor() {
1551
-
this.uid = BigInt(0);
1552
-
this.gid = BigInt(0);
1553
-
this.size = BigInt(0);
1554
-
this.blksize = BigInt(0);
1555
-
this.atimeMs = BigInt(0);
1556
-
this.mtimeMs = BigInt(0);
1557
-
this.ctimeMs = BigInt(0);
1558
-
this.birthtimeMs = BigInt(0);
1559
-
this.atimeNs = BigInt(0);
1560
-
this.mtimeNs = BigInt(0);
1561
-
this.ctimeNs = BigInt(0);
1562
-
this.birthtimeNs = BigInt(0);
1563
-
this.atime = new Date(0);
1564
-
this.mtime = new Date(0);
1565
-
this.ctime = new Date(0);
1566
-
this.birthtime = new Date(0);
1567
-
this.dev = BigInt(0);
1568
-
this.ino = BigInt(0);
1569
-
this.mode = BigInt(DEFAULT_MODE);
1570
-
this.nlink = BigInt(1);
1571
-
this.rdev = BigInt(0);
1572
-
this.blocks = BigInt(1);
1573
-
}
1574
-
isBlockDevice() {
1575
-
return false;
1576
-
}
1577
-
isCharacterDevice() {
1578
-
return false;
1579
-
}
1580
-
isDirectory() {
1581
-
return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFDIR);
1582
-
}
1583
-
isFIFO() {
1584
-
return false;
1585
-
}
1586
-
isFile() {
1587
-
return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFREG);
1588
-
}
1589
-
isSocket() {
1590
-
return false;
1591
-
}
1592
-
isSymbolicLink() {
1593
-
return (this.mode & BigInt(S_IFMT)) === BigInt(S_IFLNK);
1594
-
}
1595
-
}
1596
-
function makeDefaultStats() {
1597
-
return new StatEntry();
1598
-
}
1599
-
function clearStats(stats) {
1600
-
for (const key in stats) {
1601
-
if (Object.prototype.hasOwnProperty.call(stats, key)) {
1602
-
const element = stats[key];
1603
-
if (typeof element === `number`) {
1604
-
stats[key] = 0;
1605
-
} else if (typeof element === `bigint`) {
1606
-
stats[key] = BigInt(0);
1607
-
} else if (nodeUtils__namespace.types.isDate(element)) {
1608
-
stats[key] = new Date(0);
1609
-
}
1610
-
}
1611
-
}
1612
-
return stats;
1613
-
}
1614
-
function convertToBigIntStats(stats) {
1615
-
const bigintStats = new BigIntStatsEntry();
1616
-
for (const key in stats) {
1617
-
if (Object.prototype.hasOwnProperty.call(stats, key)) {
1618
-
const element = stats[key];
1619
-
if (typeof element === `number`) {
1620
-
bigintStats[key] = BigInt(element);
1621
-
} else if (nodeUtils__namespace.types.isDate(element)) {
1622
-
bigintStats[key] = new Date(element);
1623
-
}
1624
-
}
1625
-
}
1626
-
bigintStats.atimeNs = bigintStats.atimeMs * BigInt(1e6);
1627
-
bigintStats.mtimeNs = bigintStats.mtimeMs * BigInt(1e6);
1628
-
bigintStats.ctimeNs = bigintStats.ctimeMs * BigInt(1e6);
1629
-
bigintStats.birthtimeNs = bigintStats.birthtimeMs * BigInt(1e6);
1630
-
return bigintStats;
1631
-
}
1632
-
function areStatsEqual(a, b) {
1633
-
if (a.atimeMs !== b.atimeMs)
1634
-
return false;
1635
-
if (a.birthtimeMs !== b.birthtimeMs)
1636
-
return false;
1637
-
if (a.blksize !== b.blksize)
1638
-
return false;
1639
-
if (a.blocks !== b.blocks)
1640
-
return false;
1641
-
if (a.ctimeMs !== b.ctimeMs)
1642
-
return false;
1643
-
if (a.dev !== b.dev)
1644
-
return false;
1645
-
if (a.gid !== b.gid)
1646
-
return false;
1647
-
if (a.ino !== b.ino)
1648
-
return false;
1649
-
if (a.isBlockDevice() !== b.isBlockDevice())
1650
-
return false;
1651
-
if (a.isCharacterDevice() !== b.isCharacterDevice())
1652
-
return false;
1653
-
if (a.isDirectory() !== b.isDirectory())
1654
-
return false;
1655
-
if (a.isFIFO() !== b.isFIFO())
1656
-
return false;
1657
-
if (a.isFile() !== b.isFile())
1658
-
return false;
1659
-
if (a.isSocket() !== b.isSocket())
1660
-
return false;
1661
-
if (a.isSymbolicLink() !== b.isSymbolicLink())
1662
-
return false;
1663
-
if (a.mode !== b.mode)
1664
-
return false;
1665
-
if (a.mtimeMs !== b.mtimeMs)
1666
-
return false;
1667
-
if (a.nlink !== b.nlink)
1668
-
return false;
1669
-
if (a.rdev !== b.rdev)
1670
-
return false;
1671
-
if (a.size !== b.size)
1672
-
return false;
1673
-
if (a.uid !== b.uid)
1674
-
return false;
1675
-
const aN = a;
1676
-
const bN = b;
1677
-
if (aN.atimeNs !== bN.atimeNs)
1678
-
return false;
1679
-
if (aN.mtimeNs !== bN.mtimeNs)
1680
-
return false;
1681
-
if (aN.ctimeNs !== bN.ctimeNs)
1682
-
return false;
1683
-
if (aN.birthtimeNs !== bN.birthtimeNs)
1684
-
return false;
1685
-
return true;
1686
-
}
1687
-
1688
-
const PortablePath = {
1689
-
root: `/`,
1690
-
dot: `.`,
1691
-
parent: `..`
1692
-
};
1693
-
const Filename = {
1694
-
nodeModules: `node_modules`,
1695
-
manifest: `package.json`,
1696
-
lockfile: `yarn.lock`,
1697
-
virtual: `__virtual__`,
1698
-
pnpJs: `.pnp.js`,
1699
-
pnpCjs: `.pnp.cjs`,
1700
-
rc: `.yarnrc.yml`
1701
-
};
1702
-
const npath = Object.create(path__default.default);
1703
-
const ppath = Object.create(path__default.default.posix);
1704
-
npath.cwd = () => process.cwd();
1705
-
ppath.cwd = () => toPortablePath(process.cwd());
1706
-
ppath.resolve = (...segments) => {
1707
-
if (segments.length > 0 && ppath.isAbsolute(segments[0])) {
1708
-
return path__default.default.posix.resolve(...segments);
1709
-
} else {
1710
-
return path__default.default.posix.resolve(ppath.cwd(), ...segments);
1711
-
}
1712
-
};
1713
-
const contains = function(pathUtils, from, to) {
1714
-
from = pathUtils.normalize(from);
1715
-
to = pathUtils.normalize(to);
1716
-
if (from === to)
1717
-
return `.`;
1718
-
if (!from.endsWith(pathUtils.sep))
1719
-
from = from + pathUtils.sep;
1720
-
if (to.startsWith(from)) {
1721
-
return to.slice(from.length);
1722
-
} else {
1723
-
return null;
1724
-
}
1725
-
};
1726
-
npath.fromPortablePath = fromPortablePath;
1727
-
npath.toPortablePath = toPortablePath;
1728
-
npath.contains = (from, to) => contains(npath, from, to);
1729
-
ppath.contains = (from, to) => contains(ppath, from, to);
1730
-
const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/;
1731
-
const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/;
1732
-
const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/;
1733
-
const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/;
1734
-
function fromPortablePath(p) {
1735
-
if (process.platform !== `win32`)
1736
-
return p;
1737
-
let portablePathMatch, uncPortablePathMatch;
1738
-
if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP))
1739
-
p = portablePathMatch[1];
1740
-
else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP))
1741
-
p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`;
1742
-
else
1743
-
return p;
1744
-
return p.replace(/\//g, `\\`);
1745
-
}
1746
-
function toPortablePath(p) {
1747
-
if (process.platform !== `win32`)
1748
-
return p;
1749
-
p = p.replace(/\\/g, `/`);
1750
-
let windowsPathMatch, uncWindowsPathMatch;
1751
-
if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP))
1752
-
p = `/${windowsPathMatch[1]}`;
1753
-
else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP))
1754
-
p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`;
1755
-
return p;
1756
-
}
1757
-
function convertPath(targetPathUtils, sourcePath) {
1758
-
return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath);
1759
-
}
1760
-
1761
-
const defaultTime = new Date(SAFE_TIME * 1e3);
1762
-
async function copyPromise(destinationFs, destination, sourceFs, source, opts) {
1763
-
const normalizedDestination = destinationFs.pathUtils.normalize(destination);
1764
-
const normalizedSource = sourceFs.pathUtils.normalize(source);
1765
-
const prelayout = [];
1766
-
const postlayout = [];
1767
-
const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource);
1768
-
await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] });
1769
-
const updateTime = typeof destinationFs.lutimesPromise === `function` ? destinationFs.lutimesPromise.bind(destinationFs) : destinationFs.utimesPromise.bind(destinationFs);
1770
-
await copyImpl(prelayout, postlayout, updateTime, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true });
1771
-
for (const operation of prelayout)
1772
-
await operation();
1773
-
await Promise.all(postlayout.map((operation) => {
1774
-
return operation();
1775
-
}));
1776
-
}
1777
-
async function copyImpl(prelayout, postlayout, updateTime, destinationFs, destination, sourceFs, source, opts) {
1778
-
var _a, _b;
1779
-
const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null;
1780
-
const sourceStat = await sourceFs.lstatPromise(source);
1781
-
const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat;
1782
-
let updated;
1783
-
switch (true) {
1784
-
case sourceStat.isDirectory():
1785
-
{
1786
-
updated = await copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
1787
-
}
1788
-
break;
1789
-
case sourceStat.isFile():
1790
-
{
1791
-
updated = await copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
1792
-
}
1793
-
break;
1794
-
case sourceStat.isSymbolicLink():
1795
-
{
1796
-
updated = await copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
1797
-
}
1798
-
break;
1799
-
default:
1800
-
{
1801
-
throw new Error(`Unsupported file type (${sourceStat.mode})`);
1802
-
}
1803
-
}
1804
-
if (updated || ((_a = destinationStat == null ? void 0 : destinationStat.mtime) == null ? void 0 : _a.getTime()) !== mtime.getTime() || ((_b = destinationStat == null ? void 0 : destinationStat.atime) == null ? void 0 : _b.getTime()) !== atime.getTime()) {
1805
-
postlayout.push(() => updateTime(destination, atime, mtime));
1806
-
updated = true;
1807
-
}
1808
-
if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) {
1809
-
postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511));
1810
-
updated = true;
1811
-
}
1812
-
return updated;
1813
-
}
1814
-
async function maybeLStat(baseFs, p) {
1815
-
try {
1816
-
return await baseFs.lstatPromise(p);
1817
-
} catch (e) {
1818
-
return null;
1819
-
}
1820
-
}
1821
-
async function copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
1822
-
if (destinationStat !== null && !destinationStat.isDirectory()) {
1823
-
if (opts.overwrite) {
1824
-
prelayout.push(async () => destinationFs.removePromise(destination));
1825
-
destinationStat = null;
1826
-
} else {
1827
-
return false;
1828
-
}
1829
-
}
1830
-
let updated = false;
1831
-
if (destinationStat === null) {
1832
-
prelayout.push(async () => {
1833
-
try {
1834
-
await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode });
1835
-
} catch (err) {
1836
-
if (err.code !== `EEXIST`) {
1837
-
throw err;
1838
-
}
1839
-
}
1840
-
});
1841
-
updated = true;
1842
-
}
1843
-
const entries = await sourceFs.readdirPromise(source);
1844
-
const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts;
1845
-
if (opts.stableSort) {
1846
-
for (const entry of entries.sort()) {
1847
-
if (await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) {
1848
-
updated = true;
1849
-
}
1850
-
}
1851
-
} else {
1852
-
const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => {
1853
-
await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts);
1854
-
}));
1855
-
if (entriesUpdateStatus.some((status) => status)) {
1856
-
updated = true;
1857
-
}
1858
-
}
1859
-
return updated;
1860
-
}
1861
-
const isCloneSupportedCache = /* @__PURE__ */ new WeakMap();
1862
-
function makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy) {
1863
-
return async () => {
1864
-
await opFs.linkPromise(source, destination);
1865
-
if (linkStrategy === "readOnly" /* ReadOnly */) {
1866
-
sourceStat.mode &= ~146;
1867
-
await opFs.chmodPromise(destination, sourceStat.mode);
1868
-
}
1869
-
};
1870
-
}
1871
-
function makeCloneLinkOperation(opFs, destination, source, sourceStat, linkStrategy) {
1872
-
const isCloneSupported = isCloneSupportedCache.get(opFs);
1873
-
if (typeof isCloneSupported === `undefined`) {
1874
-
return async () => {
1875
-
try {
1876
-
await opFs.copyFilePromise(source, destination, fs__default.default.constants.COPYFILE_FICLONE_FORCE);
1877
-
isCloneSupportedCache.set(opFs, true);
1878
-
} catch (err) {
1879
-
if (err.code === `ENOSYS` || err.code === `ENOTSUP`) {
1880
-
isCloneSupportedCache.set(opFs, false);
1881
-
await makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy)();
1882
-
} else {
1883
-
throw err;
1884
-
}
1885
-
}
1886
-
};
1887
-
} else {
1888
-
if (isCloneSupported) {
1889
-
return async () => opFs.copyFilePromise(source, destination, fs__default.default.constants.COPYFILE_FICLONE_FORCE);
1890
-
} else {
1891
-
return makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy);
1892
-
}
1893
-
}
1894
-
}
1895
-
async function copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
1896
-
var _a;
1897
-
if (destinationStat !== null) {
1898
-
if (opts.overwrite) {
1899
-
prelayout.push(async () => destinationFs.removePromise(destination));
1900
-
destinationStat = null;
1901
-
} else {
1902
-
return false;
1903
-
}
1904
-
}
1905
-
const linkStrategy = (_a = opts.linkStrategy) != null ? _a : null;
1906
-
const op = destinationFs === sourceFs ? linkStrategy !== null ? makeCloneLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.copyFilePromise(source, destination, fs__default.default.constants.COPYFILE_FICLONE) : linkStrategy !== null ? makeLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.writeFilePromise(destination, await sourceFs.readFilePromise(source));
1907
-
prelayout.push(async () => op());
1908
-
return true;
1909
-
}
1910
-
async function copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
1911
-
if (destinationStat !== null) {
1912
-
if (opts.overwrite) {
1913
-
prelayout.push(async () => destinationFs.removePromise(destination));
1914
-
destinationStat = null;
1915
-
} else {
1916
-
return false;
1917
-
}
1918
-
}
1919
-
prelayout.push(async () => {
1920
-
await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination);
1921
-
});
1922
-
return true;
1923
-
}
1924
-
1925
-
function makeError$1(code, message) {
1926
-
return Object.assign(new Error(`${code}: ${message}`), { code });
1927
-
}
1928
-
function EBUSY(message) {
1929
-
return makeError$1(`EBUSY`, message);
1930
-
}
1931
-
function ENOSYS(message, reason) {
1932
-
return makeError$1(`ENOSYS`, `${message}, ${reason}`);
1933
-
}
1934
-
function EINVAL(reason) {
1935
-
return makeError$1(`EINVAL`, `invalid argument, ${reason}`);
1936
-
}
1937
-
function EBADF(reason) {
1938
-
return makeError$1(`EBADF`, `bad file descriptor, ${reason}`);
1939
-
}
1940
-
function ENOENT(reason) {
1941
-
return makeError$1(`ENOENT`, `no such file or directory, ${reason}`);
1942
-
}
1943
-
function ENOTDIR(reason) {
1944
-
return makeError$1(`ENOTDIR`, `not a directory, ${reason}`);
1945
-
}
1946
-
function EISDIR(reason) {
1947
-
return makeError$1(`EISDIR`, `illegal operation on a directory, ${reason}`);
1948
-
}
1949
-
function EEXIST(reason) {
1950
-
return makeError$1(`EEXIST`, `file already exists, ${reason}`);
1951
-
}
1952
-
function EROFS(reason) {
1953
-
return makeError$1(`EROFS`, `read-only filesystem, ${reason}`);
1954
-
}
1955
-
function ENOTEMPTY(reason) {
1956
-
return makeError$1(`ENOTEMPTY`, `directory not empty, ${reason}`);
1957
-
}
1958
-
function EOPNOTSUPP(reason) {
1959
-
return makeError$1(`EOPNOTSUPP`, `operation not supported, ${reason}`);
1960
-
}
1961
-
function ERR_DIR_CLOSED() {
1962
-
return makeError$1(`ERR_DIR_CLOSED`, `Directory handle was closed`);
1963
-
}
1964
-
class LibzipError extends Error {
1965
-
constructor(message, code) {
1966
-
super(message);
1967
-
this.name = `Libzip Error`;
1968
-
this.code = code;
1969
-
}
1970
-
}
1971
-
1972
-
class CustomDir {
1973
-
constructor(path, nextDirent, opts = {}) {
1974
-
this.path = path;
1975
-
this.nextDirent = nextDirent;
1976
-
this.opts = opts;
1977
-
this.closed = false;
1978
-
}
1979
-
throwIfClosed() {
1980
-
if (this.closed) {
1981
-
throw ERR_DIR_CLOSED();
1982
-
}
1983
-
}
1984
-
async *[Symbol.asyncIterator]() {
1985
-
try {
1986
-
let dirent;
1987
-
while ((dirent = await this.read()) !== null) {
1988
-
yield dirent;
1989
-
}
1990
-
} finally {
1991
-
await this.close();
1992
-
}
1993
-
}
1994
-
read(cb) {
1995
-
const dirent = this.readSync();
1996
-
if (typeof cb !== `undefined`)
1997
-
return cb(null, dirent);
1998
-
return Promise.resolve(dirent);
1999
-
}
2000
-
readSync() {
2001
-
this.throwIfClosed();
2002
-
return this.nextDirent();
2003
-
}
2004
-
close(cb) {
2005
-
this.closeSync();
2006
-
if (typeof cb !== `undefined`)
2007
-
return cb(null);
2008
-
return Promise.resolve();
2009
-
}
2010
-
closeSync() {
2011
-
var _a, _b;
2012
-
this.throwIfClosed();
2013
-
(_b = (_a = this.opts).onClose) == null ? void 0 : _b.call(_a);
2014
-
this.closed = true;
2015
-
}
2016
-
}
2017
-
function opendir(fakeFs, path, entries, opts) {
2018
-
const nextDirent = () => {
2019
-
const filename = entries.shift();
2020
-
if (typeof filename === `undefined`)
2021
-
return null;
2022
-
return Object.assign(fakeFs.statSync(fakeFs.pathUtils.join(path, filename)), {
2023
-
name: filename
2024
-
});
2025
-
};
2026
-
return new CustomDir(path, nextDirent, opts);
2027
-
}
2028
-
2029
-
class FakeFS {
2030
-
constructor(pathUtils) {
2031
-
this.pathUtils = pathUtils;
2032
-
}
2033
-
async *genTraversePromise(init, { stableSort = false } = {}) {
2034
-
const stack = [init];
2035
-
while (stack.length > 0) {
2036
-
const p = stack.shift();
2037
-
const entry = await this.lstatPromise(p);
2038
-
if (entry.isDirectory()) {
2039
-
const entries = await this.readdirPromise(p);
2040
-
if (stableSort) {
2041
-
for (const entry2 of entries.sort()) {
2042
-
stack.push(this.pathUtils.join(p, entry2));
2043
-
}
2044
-
} else {
2045
-
throw new Error(`Not supported`);
2046
-
}
2047
-
} else {
2048
-
yield p;
2049
-
}
2050
-
}
2051
-
}
2052
-
async removePromise(p, { recursive = true, maxRetries = 5 } = {}) {
2053
-
let stat;
2054
-
try {
2055
-
stat = await this.lstatPromise(p);
2056
-
} catch (error) {
2057
-
if (error.code === `ENOENT`) {
2058
-
return;
2059
-
} else {
2060
-
throw error;
2061
-
}
2062
-
}
2063
-
if (stat.isDirectory()) {
2064
-
if (recursive) {
2065
-
const entries = await this.readdirPromise(p);
2066
-
await Promise.all(entries.map((entry) => {
2067
-
return this.removePromise(this.pathUtils.resolve(p, entry));
2068
-
}));
2069
-
}
2070
-
for (let t = 0; t <= maxRetries; t++) {
2071
-
try {
2072
-
await this.rmdirPromise(p);
2073
-
break;
2074
-
} catch (error) {
2075
-
if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) {
2076
-
throw error;
2077
-
} else if (t < maxRetries) {
2078
-
await new Promise((resolve) => setTimeout(resolve, t * 100));
2079
-
}
2080
-
}
2081
-
}
2082
-
} else {
2083
-
await this.unlinkPromise(p);
2084
-
}
2085
-
}
2086
-
removeSync(p, { recursive = true } = {}) {
2087
-
let stat;
2088
-
try {
2089
-
stat = this.lstatSync(p);
2090
-
} catch (error) {
2091
-
if (error.code === `ENOENT`) {
2092
-
return;
2093
-
} else {
2094
-
throw error;
2095
-
}
2096
-
}
2097
-
if (stat.isDirectory()) {
2098
-
if (recursive)
2099
-
for (const entry of this.readdirSync(p))
2100
-
this.removeSync(this.pathUtils.resolve(p, entry));
2101
-
this.rmdirSync(p);
2102
-
} else {
2103
-
this.unlinkSync(p);
2104
-
}
2105
-
}
2106
-
async mkdirpPromise(p, { chmod, utimes } = {}) {
2107
-
p = this.resolve(p);
2108
-
if (p === this.pathUtils.dirname(p))
2109
-
return void 0;
2110
-
const parts = p.split(this.pathUtils.sep);
2111
-
let createdDirectory;
2112
-
for (let u = 2; u <= parts.length; ++u) {
2113
-
const subPath = parts.slice(0, u).join(this.pathUtils.sep);
2114
-
if (!this.existsSync(subPath)) {
2115
-
try {
2116
-
await this.mkdirPromise(subPath);
2117
-
} catch (error) {
2118
-
if (error.code === `EEXIST`) {
2119
-
continue;
2120
-
} else {
2121
-
throw error;
2122
-
}
2123
-
}
2124
-
createdDirectory != null ? createdDirectory : createdDirectory = subPath;
2125
-
if (chmod != null)
2126
-
await this.chmodPromise(subPath, chmod);
2127
-
if (utimes != null) {
2128
-
await this.utimesPromise(subPath, utimes[0], utimes[1]);
2129
-
} else {
2130
-
const parentStat = await this.statPromise(this.pathUtils.dirname(subPath));
2131
-
await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime);
2132
-
}
2133
-
}
2134
-
}
2135
-
return createdDirectory;
2136
-
}
2137
-
mkdirpSync(p, { chmod, utimes } = {}) {
2138
-
p = this.resolve(p);
2139
-
if (p === this.pathUtils.dirname(p))
2140
-
return void 0;
2141
-
const parts = p.split(this.pathUtils.sep);
2142
-
let createdDirectory;
2143
-
for (let u = 2; u <= parts.length; ++u) {
2144
-
const subPath = parts.slice(0, u).join(this.pathUtils.sep);
2145
-
if (!this.existsSync(subPath)) {
2146
-
try {
2147
-
this.mkdirSync(subPath);
2148
-
} catch (error) {
2149
-
if (error.code === `EEXIST`) {
2150
-
continue;
2151
-
} else {
2152
-
throw error;
2153
-
}
2154
-
}
2155
-
createdDirectory != null ? createdDirectory : createdDirectory = subPath;
2156
-
if (chmod != null)
2157
-
this.chmodSync(subPath, chmod);
2158
-
if (utimes != null) {
2159
-
this.utimesSync(subPath, utimes[0], utimes[1]);
2160
-
} else {
2161
-
const parentStat = this.statSync(this.pathUtils.dirname(subPath));
2162
-
this.utimesSync(subPath, parentStat.atime, parentStat.mtime);
2163
-
}
2164
-
}
2165
-
}
2166
-
return createdDirectory;
2167
-
}
2168
-
async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) {
2169
-
return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy });
2170
-
}
2171
-
copySync(destination, source, { baseFs = this, overwrite = true } = {}) {
2172
-
const stat = baseFs.lstatSync(source);
2173
-
const exists = this.existsSync(destination);
2174
-
if (stat.isDirectory()) {
2175
-
this.mkdirpSync(destination);
2176
-
const directoryListing = baseFs.readdirSync(source);
2177
-
for (const entry of directoryListing) {
2178
-
this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite });
2179
-
}
2180
-
} else if (stat.isFile()) {
2181
-
if (!exists || overwrite) {
2182
-
if (exists)
2183
-
this.removeSync(destination);
2184
-
const content = baseFs.readFileSync(source);
2185
-
this.writeFileSync(destination, content);
2186
-
}
2187
-
} else if (stat.isSymbolicLink()) {
2188
-
if (!exists || overwrite) {
2189
-
if (exists)
2190
-
this.removeSync(destination);
2191
-
const target = baseFs.readlinkSync(source);
2192
-
this.symlinkSync(convertPath(this.pathUtils, target), destination);
2193
-
}
2194
-
} else {
2195
-
throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`);
2196
-
}
2197
-
const mode = stat.mode & 511;
2198
-
this.chmodSync(destination, mode);
2199
-
}
2200
-
async changeFilePromise(p, content, opts = {}) {
2201
-
if (Buffer.isBuffer(content)) {
2202
-
return this.changeFileBufferPromise(p, content, opts);
2203
-
} else {
2204
-
return this.changeFileTextPromise(p, content, opts);
2205
-
}
2206
-
}
2207
-
async changeFileBufferPromise(p, content, { mode } = {}) {
2208
-
let current = Buffer.alloc(0);
2209
-
try {
2210
-
current = await this.readFilePromise(p);
2211
-
} catch (error) {
2212
-
}
2213
-
if (Buffer.compare(current, content) === 0)
2214
-
return;
2215
-
await this.writeFilePromise(p, content, { mode });
2216
-
}
2217
-
async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) {
2218
-
let current = ``;
2219
-
try {
2220
-
current = await this.readFilePromise(p, `utf8`);
2221
-
} catch (error) {
2222
-
}
2223
-
const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content;
2224
-
if (current === normalizedContent)
2225
-
return;
2226
-
await this.writeFilePromise(p, normalizedContent, { mode });
2227
-
}
2228
-
changeFileSync(p, content, opts = {}) {
2229
-
if (Buffer.isBuffer(content)) {
2230
-
return this.changeFileBufferSync(p, content, opts);
2231
-
} else {
2232
-
return this.changeFileTextSync(p, content, opts);
2233
-
}
2234
-
}
2235
-
changeFileBufferSync(p, content, { mode } = {}) {
2236
-
let current = Buffer.alloc(0);
2237
-
try {
2238
-
current = this.readFileSync(p);
2239
-
} catch (error) {
2240
-
}
2241
-
if (Buffer.compare(current, content) === 0)
2242
-
return;
2243
-
this.writeFileSync(p, content, { mode });
2244
-
}
2245
-
changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) {
2246
-
let current = ``;
2247
-
try {
2248
-
current = this.readFileSync(p, `utf8`);
2249
-
} catch (error) {
2250
-
}
2251
-
const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content;
2252
-
if (current === normalizedContent)
2253
-
return;
2254
-
this.writeFileSync(p, normalizedContent, { mode });
2255
-
}
2256
-
async movePromise(fromP, toP) {
2257
-
try {
2258
-
await this.renamePromise(fromP, toP);
2259
-
} catch (error) {
2260
-
if (error.code === `EXDEV`) {
2261
-
await this.copyPromise(toP, fromP);
2262
-
await this.removePromise(fromP);
2263
-
} else {
2264
-
throw error;
2265
-
}
2266
-
}
2267
-
}
2268
-
moveSync(fromP, toP) {
2269
-
try {
2270
-
this.renameSync(fromP, toP);
2271
-
} catch (error) {
2272
-
if (error.code === `EXDEV`) {
2273
-
this.copySync(toP, fromP);
2274
-
this.removeSync(fromP);
2275
-
} else {
2276
-
throw error;
2277
-
}
2278
-
}
2279
-
}
2280
-
async lockPromise(affectedPath, callback) {
2281
-
const lockPath = `${affectedPath}.flock`;
2282
-
const interval = 1e3 / 60;
2283
-
const startTime = Date.now();
2284
-
let fd = null;
2285
-
const isAlive = async () => {
2286
-
let pid;
2287
-
try {
2288
-
[pid] = await this.readJsonPromise(lockPath);
2289
-
} catch (error) {
2290
-
return Date.now() - startTime < 500;
2291
-
}
2292
-
try {
2293
-
process.kill(pid, 0);
2294
-
return true;
2295
-
} catch (error) {
2296
-
return false;
2297
-
}
2298
-
};
2299
-
while (fd === null) {
2300
-
try {
2301
-
fd = await this.openPromise(lockPath, `wx`);
2302
-
} catch (error) {
2303
-
if (error.code === `EEXIST`) {
2304
-
if (!await isAlive()) {
2305
-
try {
2306
-
await this.unlinkPromise(lockPath);
2307
-
continue;
2308
-
} catch (error2) {
2309
-
}
2310
-
}
2311
-
if (Date.now() - startTime < 60 * 1e3) {
2312
-
await new Promise((resolve) => setTimeout(resolve, interval));
2313
-
} else {
2314
-
throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`);
2315
-
}
2316
-
} else {
2317
-
throw error;
2318
-
}
2319
-
}
2320
-
}
2321
-
await this.writePromise(fd, JSON.stringify([process.pid]));
2322
-
try {
2323
-
return await callback();
2324
-
} finally {
2325
-
try {
2326
-
await this.closePromise(fd);
2327
-
await this.unlinkPromise(lockPath);
2328
-
} catch (error) {
2329
-
}
2330
-
}
2331
-
}
2332
-
async readJsonPromise(p) {
2333
-
const content = await this.readFilePromise(p, `utf8`);
2334
-
try {
2335
-
return JSON.parse(content);
2336
-
} catch (error) {
2337
-
error.message += ` (in ${p})`;
2338
-
throw error;
2339
-
}
2340
-
}
2341
-
readJsonSync(p) {
2342
-
const content = this.readFileSync(p, `utf8`);
2343
-
try {
2344
-
return JSON.parse(content);
2345
-
} catch (error) {
2346
-
error.message += ` (in ${p})`;
2347
-
throw error;
2348
-
}
2349
-
}
2350
-
async writeJsonPromise(p, data) {
2351
-
return await this.writeFilePromise(p, `${JSON.stringify(data, null, 2)}
2352
-
`);
2353
-
}
2354
-
writeJsonSync(p, data) {
2355
-
return this.writeFileSync(p, `${JSON.stringify(data, null, 2)}
2356
-
`);
2357
-
}
2358
-
async preserveTimePromise(p, cb) {
2359
-
const stat = await this.lstatPromise(p);
2360
-
const result = await cb();
2361
-
if (typeof result !== `undefined`)
2362
-
p = result;
2363
-
if (this.lutimesPromise) {
2364
-
await this.lutimesPromise(p, stat.atime, stat.mtime);
2365
-
} else if (!stat.isSymbolicLink()) {
2366
-
await this.utimesPromise(p, stat.atime, stat.mtime);
2367
-
}
2368
-
}
2369
-
async preserveTimeSync(p, cb) {
2370
-
const stat = this.lstatSync(p);
2371
-
const result = cb();
2372
-
if (typeof result !== `undefined`)
2373
-
p = result;
2374
-
if (this.lutimesSync) {
2375
-
this.lutimesSync(p, stat.atime, stat.mtime);
2376
-
} else if (!stat.isSymbolicLink()) {
2377
-
this.utimesSync(p, stat.atime, stat.mtime);
2378
-
}
2379
-
}
2380
-
}
2381
-
class BasePortableFakeFS extends FakeFS {
2382
-
constructor() {
2383
-
super(ppath);
2384
-
}
2385
-
}
2386
-
function getEndOfLine(content) {
2387
-
const matches = content.match(/\r?\n/g);
2388
-
if (matches === null)
2389
-
return os.EOL;
2390
-
const crlf = matches.filter((nl) => nl === `\r
2391
-
`).length;
2392
-
const lf = matches.length - crlf;
2393
-
return crlf > lf ? `\r
2394
-
` : `
2395
-
`;
2396
-
}
2397
-
function normalizeLineEndings(originalContent, newContent) {
2398
-
return newContent.replace(/\r?\n/g, getEndOfLine(originalContent));
2399
-
}
2400
-
2401
-
class NodeFS extends BasePortableFakeFS {
2402
-
constructor(realFs = fs__default.default) {
2403
-
super();
2404
-
this.realFs = realFs;
2405
-
if (typeof this.realFs.lutimes !== `undefined`) {
2406
-
this.lutimesPromise = this.lutimesPromiseImpl;
2407
-
this.lutimesSync = this.lutimesSyncImpl;
2408
-
}
2409
-
}
2410
-
getExtractHint() {
2411
-
return false;
2412
-
}
2413
-
getRealPath() {
2414
-
return PortablePath.root;
2415
-
}
2416
-
resolve(p) {
2417
-
return ppath.resolve(p);
2418
-
}
2419
-
async openPromise(p, flags, mode) {
2420
-
return await new Promise((resolve, reject) => {
2421
-
this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject));
2422
-
});
2423
-
}
2424
-
openSync(p, flags, mode) {
2425
-
return this.realFs.openSync(npath.fromPortablePath(p), flags, mode);
2426
-
}
2427
-
async opendirPromise(p, opts) {
2428
-
return await new Promise((resolve, reject) => {
2429
-
if (typeof opts !== `undefined`) {
2430
-
this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
2431
-
} else {
2432
-
this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
2433
-
}
2434
-
}).then((dir) => {
2435
-
return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true });
2436
-
});
2437
-
}
2438
-
opendirSync(p, opts) {
2439
-
const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p));
2440
-
return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true });
2441
-
}
2442
-
async readPromise(fd, buffer, offset = 0, length = 0, position = -1) {
2443
-
return await new Promise((resolve, reject) => {
2444
-
this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => {
2445
-
if (error) {
2446
-
reject(error);
2447
-
} else {
2448
-
resolve(bytesRead);
2449
-
}
2450
-
});
2451
-
});
2452
-
}
2453
-
readSync(fd, buffer, offset, length, position) {
2454
-
return this.realFs.readSync(fd, buffer, offset, length, position);
2455
-
}
2456
-
async writePromise(fd, buffer, offset, length, position) {
2457
-
return await new Promise((resolve, reject) => {
2458
-
if (typeof buffer === `string`) {
2459
-
return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject));
2460
-
} else {
2461
-
return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject));
2462
-
}
2463
-
});
2464
-
}
2465
-
writeSync(fd, buffer, offset, length, position) {
2466
-
if (typeof buffer === `string`) {
2467
-
return this.realFs.writeSync(fd, buffer, offset);
2468
-
} else {
2469
-
return this.realFs.writeSync(fd, buffer, offset, length, position);
2470
-
}
2471
-
}
2472
-
async closePromise(fd) {
2473
-
await new Promise((resolve, reject) => {
2474
-
this.realFs.close(fd, this.makeCallback(resolve, reject));
2475
-
});
2476
-
}
2477
-
closeSync(fd) {
2478
-
this.realFs.closeSync(fd);
2479
-
}
2480
-
createReadStream(p, opts) {
2481
-
const realPath = p !== null ? npath.fromPortablePath(p) : p;
2482
-
return this.realFs.createReadStream(realPath, opts);
2483
-
}
2484
-
createWriteStream(p, opts) {
2485
-
const realPath = p !== null ? npath.fromPortablePath(p) : p;
2486
-
return this.realFs.createWriteStream(realPath, opts);
2487
-
}
2488
-
async realpathPromise(p) {
2489
-
return await new Promise((resolve, reject) => {
2490
-
this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject));
2491
-
}).then((path) => {
2492
-
return npath.toPortablePath(path);
2493
-
});
2494
-
}
2495
-
realpathSync(p) {
2496
-
return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {}));
2497
-
}
2498
-
async existsPromise(p) {
2499
-
return await new Promise((resolve) => {
2500
-
this.realFs.exists(npath.fromPortablePath(p), resolve);
2501
-
});
2502
-
}
2503
-
accessSync(p, mode) {
2504
-
return this.realFs.accessSync(npath.fromPortablePath(p), mode);
2505
-
}
2506
-
async accessPromise(p, mode) {
2507
-
return await new Promise((resolve, reject) => {
2508
-
this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject));
2509
-
});
2510
-
}
2511
-
existsSync(p) {
2512
-
return this.realFs.existsSync(npath.fromPortablePath(p));
2513
-
}
2514
-
async statPromise(p, opts) {
2515
-
return await new Promise((resolve, reject) => {
2516
-
if (opts) {
2517
-
this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
2518
-
} else {
2519
-
this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
2520
-
}
2521
-
});
2522
-
}
2523
-
statSync(p, opts) {
2524
-
if (opts) {
2525
-
return this.realFs.statSync(npath.fromPortablePath(p), opts);
2526
-
} else {
2527
-
return this.realFs.statSync(npath.fromPortablePath(p));
2528
-
}
2529
-
}
2530
-
async fstatPromise(fd, opts) {
2531
-
return await new Promise((resolve, reject) => {
2532
-
if (opts) {
2533
-
this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject));
2534
-
} else {
2535
-
this.realFs.fstat(fd, this.makeCallback(resolve, reject));
2536
-
}
2537
-
});
2538
-
}
2539
-
fstatSync(fd, opts) {
2540
-
if (opts) {
2541
-
return this.realFs.fstatSync(fd, opts);
2542
-
} else {
2543
-
return this.realFs.fstatSync(fd);
2544
-
}
2545
-
}
2546
-
async lstatPromise(p, opts) {
2547
-
return await new Promise((resolve, reject) => {
2548
-
if (opts) {
2549
-
this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
2550
-
} else {
2551
-
this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
2552
-
}
2553
-
});
2554
-
}
2555
-
lstatSync(p, opts) {
2556
-
if (opts) {
2557
-
return this.realFs.lstatSync(npath.fromPortablePath(p), opts);
2558
-
} else {
2559
-
return this.realFs.lstatSync(npath.fromPortablePath(p));
2560
-
}
2561
-
}
2562
-
async fchmodPromise(fd, mask) {
2563
-
return await new Promise((resolve, reject) => {
2564
-
this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject));
2565
-
});
2566
-
}
2567
-
fchmodSync(fd, mask) {
2568
-
return this.realFs.fchmodSync(fd, mask);
2569
-
}
2570
-
async chmodPromise(p, mask) {
2571
-
return await new Promise((resolve, reject) => {
2572
-
this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject));
2573
-
});
2574
-
}
2575
-
chmodSync(p, mask) {
2576
-
return this.realFs.chmodSync(npath.fromPortablePath(p), mask);
2577
-
}
2578
-
async fchownPromise(fd, uid, gid) {
2579
-
return await new Promise((resolve, reject) => {
2580
-
this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject));
2581
-
});
2582
-
}
2583
-
fchownSync(fd, uid, gid) {
2584
-
return this.realFs.fchownSync(fd, uid, gid);
2585
-
}
2586
-
async chownPromise(p, uid, gid) {
2587
-
return await new Promise((resolve, reject) => {
2588
-
this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject));
2589
-
});
2590
-
}
2591
-
chownSync(p, uid, gid) {
2592
-
return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid);
2593
-
}
2594
-
async renamePromise(oldP, newP) {
2595
-
return await new Promise((resolve, reject) => {
2596
-
this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject));
2597
-
});
2598
-
}
2599
-
renameSync(oldP, newP) {
2600
-
return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP));
2601
-
}
2602
-
async copyFilePromise(sourceP, destP, flags = 0) {
2603
-
return await new Promise((resolve, reject) => {
2604
-
this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject));
2605
-
});
2606
-
}
2607
-
copyFileSync(sourceP, destP, flags = 0) {
2608
-
return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags);
2609
-
}
2610
-
async appendFilePromise(p, content, opts) {
2611
-
return await new Promise((resolve, reject) => {
2612
-
const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
2613
-
if (opts) {
2614
-
this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject));
2615
-
} else {
2616
-
this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject));
2617
-
}
2618
-
});
2619
-
}
2620
-
appendFileSync(p, content, opts) {
2621
-
const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
2622
-
if (opts) {
2623
-
this.realFs.appendFileSync(fsNativePath, content, opts);
2624
-
} else {
2625
-
this.realFs.appendFileSync(fsNativePath, content);
2626
-
}
2627
-
}
2628
-
async writeFilePromise(p, content, opts) {
2629
-
return await new Promise((resolve, reject) => {
2630
-
const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
2631
-
if (opts) {
2632
-
this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject));
2633
-
} else {
2634
-
this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject));
2635
-
}
2636
-
});
2637
-
}
2638
-
writeFileSync(p, content, opts) {
2639
-
const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
2640
-
if (opts) {
2641
-
this.realFs.writeFileSync(fsNativePath, content, opts);
2642
-
} else {
2643
-
this.realFs.writeFileSync(fsNativePath, content);
2644
-
}
2645
-
}
2646
-
async unlinkPromise(p) {
2647
-
return await new Promise((resolve, reject) => {
2648
-
this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
2649
-
});
2650
-
}
2651
-
unlinkSync(p) {
2652
-
return this.realFs.unlinkSync(npath.fromPortablePath(p));
2653
-
}
2654
-
async utimesPromise(p, atime, mtime) {
2655
-
return await new Promise((resolve, reject) => {
2656
-
this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject));
2657
-
});
2658
-
}
2659
-
utimesSync(p, atime, mtime) {
2660
-
this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime);
2661
-
}
2662
-
async lutimesPromiseImpl(p, atime, mtime) {
2663
-
const lutimes = this.realFs.lutimes;
2664
-
if (typeof lutimes === `undefined`)
2665
-
throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`);
2666
-
return await new Promise((resolve, reject) => {
2667
-
lutimes.call(this.realFs, npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject));
2668
-
});
2669
-
}
2670
-
lutimesSyncImpl(p, atime, mtime) {
2671
-
const lutimesSync = this.realFs.lutimesSync;
2672
-
if (typeof lutimesSync === `undefined`)
2673
-
throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`);
2674
-
lutimesSync.call(this.realFs, npath.fromPortablePath(p), atime, mtime);
2675
-
}
2676
-
async mkdirPromise(p, opts) {
2677
-
return await new Promise((resolve, reject) => {
2678
-
this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
2679
-
});
2680
-
}
2681
-
mkdirSync(p, opts) {
2682
-
return this.realFs.mkdirSync(npath.fromPortablePath(p), opts);
2683
-
}
2684
-
async rmdirPromise(p, opts) {
2685
-
return await new Promise((resolve, reject) => {
2686
-
if (opts) {
2687
-
this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
2688
-
} else {
2689
-
this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
2690
-
}
2691
-
});
2692
-
}
2693
-
rmdirSync(p, opts) {
2694
-
return this.realFs.rmdirSync(npath.fromPortablePath(p), opts);
2695
-
}
2696
-
async linkPromise(existingP, newP) {
2697
-
return await new Promise((resolve, reject) => {
2698
-
this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject));
2699
-
});
2700
-
}
2701
-
linkSync(existingP, newP) {
2702
-
return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP));
2703
-
}
2704
-
async symlinkPromise(target, p, type) {
2705
-
return await new Promise((resolve, reject) => {
2706
-
this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject));
2707
-
});
2708
-
}
2709
-
symlinkSync(target, p, type) {
2710
-
return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type);
2711
-
}
2712
-
async readFilePromise(p, encoding) {
2713
-
return await new Promise((resolve, reject) => {
2714
-
const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
2715
-
this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject));
2716
-
});
2717
-
}
2718
-
readFileSync(p, encoding) {
2719
-
const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
2720
-
return this.realFs.readFileSync(fsNativePath, encoding);
2721
-
}
2722
-
async readdirPromise(p, opts) {
2723
-
return await new Promise((resolve, reject) => {
2724
-
if (opts == null ? void 0 : opts.withFileTypes) {
2725
-
this.realFs.readdir(npath.fromPortablePath(p), { withFileTypes: true }, this.makeCallback(resolve, reject));
2726
-
} else {
2727
-
this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback((value) => resolve(value), reject));
2728
-
}
2729
-
});
2730
-
}
2731
-
readdirSync(p, opts) {
2732
-
if (opts == null ? void 0 : opts.withFileTypes) {
2733
-
return this.realFs.readdirSync(npath.fromPortablePath(p), { withFileTypes: true });
2734
-
} else {
2735
-
return this.realFs.readdirSync(npath.fromPortablePath(p));
2736
-
}
2737
-
}
2738
-
async readlinkPromise(p) {
2739
-
return await new Promise((resolve, reject) => {
2740
-
this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
2741
-
}).then((path) => {
2742
-
return npath.toPortablePath(path);
2743
-
});
2744
-
}
2745
-
readlinkSync(p) {
2746
-
return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p)));
2747
-
}
2748
-
async truncatePromise(p, len) {
2749
-
return await new Promise((resolve, reject) => {
2750
-
this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject));
2751
-
});
2752
-
}
2753
-
truncateSync(p, len) {
2754
-
return this.realFs.truncateSync(npath.fromPortablePath(p), len);
2755
-
}
2756
-
async ftruncatePromise(fd, len) {
2757
-
return await new Promise((resolve, reject) => {
2758
-
this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject));
2759
-
});
2760
-
}
2761
-
ftruncateSync(fd, len) {
2762
-
return this.realFs.ftruncateSync(fd, len);
2763
-
}
2764
-
watch(p, a, b) {
2765
-
return this.realFs.watch(
2766
-
npath.fromPortablePath(p),
2767
-
a,
2768
-
b
2769
-
);
2770
-
}
2771
-
watchFile(p, a, b) {
2772
-
return this.realFs.watchFile(
2773
-
npath.fromPortablePath(p),
2774
-
a,
2775
-
b
2776
-
);
2777
-
}
2778
-
unwatchFile(p, cb) {
2779
-
return this.realFs.unwatchFile(npath.fromPortablePath(p), cb);
2780
-
}
2781
-
makeCallback(resolve, reject) {
2782
-
return (err, result) => {
2783
-
if (err) {
2784
-
reject(err);
2785
-
} else {
2786
-
resolve(result);
2787
-
}
2788
-
};
2789
-
}
2790
-
}
2791
-
2792
-
function assertStatus(current, expected) {
2793
-
if (current !== expected) {
2794
-
throw new Error(`Invalid StatWatcher status: expected '${expected}', got '${current}'`);
2795
-
}
2796
-
}
2797
-
class CustomStatWatcher extends events.EventEmitter {
2798
-
constructor(fakeFs, path, { bigint = false } = {}) {
2799
-
super();
2800
-
this.status = "ready" /* Ready */;
2801
-
this.changeListeners = /* @__PURE__ */ new Map();
2802
-
this.startTimeout = null;
2803
-
this.fakeFs = fakeFs;
2804
-
this.path = path;
2805
-
this.bigint = bigint;
2806
-
this.lastStats = this.stat();
2807
-
}
2808
-
static create(fakeFs, path, opts) {
2809
-
const statWatcher = new CustomStatWatcher(fakeFs, path, opts);
2810
-
statWatcher.start();
2811
-
return statWatcher;
2812
-
}
2813
-
start() {
2814
-
assertStatus(this.status, "ready" /* Ready */);
2815
-
this.status = "running" /* Running */;
2816
-
this.startTimeout = setTimeout(() => {
2817
-
this.startTimeout = null;
2818
-
if (!this.fakeFs.existsSync(this.path)) {
2819
-
this.emit("change" /* Change */, this.lastStats, this.lastStats);
2820
-
}
2821
-
}, 3);
2822
-
}
2823
-
stop() {
2824
-
assertStatus(this.status, "running" /* Running */);
2825
-
this.status = "stopped" /* Stopped */;
2826
-
if (this.startTimeout !== null) {
2827
-
clearTimeout(this.startTimeout);
2828
-
this.startTimeout = null;
2829
-
}
2830
-
this.emit("stop" /* Stop */);
2831
-
}
2832
-
stat() {
2833
-
try {
2834
-
return this.fakeFs.statSync(this.path, { bigint: this.bigint });
2835
-
} catch (error) {
2836
-
const statInstance = this.bigint ? new BigIntStatsEntry() : new StatEntry();
2837
-
return clearStats(statInstance);
2838
-
}
2839
-
}
2840
-
makeInterval(opts) {
2841
-
const interval = setInterval(() => {
2842
-
const currentStats = this.stat();
2843
-
const previousStats = this.lastStats;
2844
-
if (areStatsEqual(currentStats, previousStats))
2845
-
return;
2846
-
this.lastStats = currentStats;
2847
-
this.emit("change" /* Change */, currentStats, previousStats);
2848
-
}, opts.interval);
2849
-
return opts.persistent ? interval : interval.unref();
2850
-
}
2851
-
registerChangeListener(listener, opts) {
2852
-
this.addListener("change" /* Change */, listener);
2853
-
this.changeListeners.set(listener, this.makeInterval(opts));
2854
-
}
2855
-
unregisterChangeListener(listener) {
2856
-
this.removeListener("change" /* Change */, listener);
2857
-
const interval = this.changeListeners.get(listener);
2858
-
if (typeof interval !== `undefined`)
2859
-
clearInterval(interval);
2860
-
this.changeListeners.delete(listener);
2861
-
}
2862
-
unregisterAllChangeListeners() {
2863
-
for (const listener of this.changeListeners.keys()) {
2864
-
this.unregisterChangeListener(listener);
2865
-
}
2866
-
}
2867
-
hasChangeListeners() {
2868
-
return this.changeListeners.size > 0;
2869
-
}
2870
-
ref() {
2871
-
for (const interval of this.changeListeners.values())
2872
-
interval.ref();
2873
-
return this;
2874
-
}
2875
-
unref() {
2876
-
for (const interval of this.changeListeners.values())
2877
-
interval.unref();
2878
-
return this;
2879
-
}
2880
-
}
2881
-
2882
-
const statWatchersByFakeFS = /* @__PURE__ */ new WeakMap();
2883
-
function watchFile(fakeFs, path, a, b) {
2884
-
let bigint;
2885
-
let persistent;
2886
-
let interval;
2887
-
let listener;
2888
-
switch (typeof a) {
2889
-
case `function`:
2890
-
{
2891
-
bigint = false;
2892
-
persistent = true;
2893
-
interval = 5007;
2894
-
listener = a;
2895
-
}
2896
-
break;
2897
-
default:
2898
-
{
2899
-
({
2900
-
bigint = false,
2901
-
persistent = true,
2902
-
interval = 5007
2903
-
} = a);
2904
-
listener = b;
2905
-
}
2906
-
break;
2907
-
}
2908
-
let statWatchers = statWatchersByFakeFS.get(fakeFs);
2909
-
if (typeof statWatchers === `undefined`)
2910
-
statWatchersByFakeFS.set(fakeFs, statWatchers = /* @__PURE__ */ new Map());
2911
-
let statWatcher = statWatchers.get(path);
2912
-
if (typeof statWatcher === `undefined`) {
2913
-
statWatcher = CustomStatWatcher.create(fakeFs, path, { bigint });
2914
-
statWatchers.set(path, statWatcher);
2915
-
}
2916
-
statWatcher.registerChangeListener(listener, { persistent, interval });
2917
-
return statWatcher;
2918
-
}
2919
-
function unwatchFile(fakeFs, path, cb) {
2920
-
const statWatchers = statWatchersByFakeFS.get(fakeFs);
2921
-
if (typeof statWatchers === `undefined`)
2922
-
return;
2923
-
const statWatcher = statWatchers.get(path);
2924
-
if (typeof statWatcher === `undefined`)
2925
-
return;
2926
-
if (typeof cb === `undefined`)
2927
-
statWatcher.unregisterAllChangeListeners();
2928
-
else
2929
-
statWatcher.unregisterChangeListener(cb);
2930
-
if (!statWatcher.hasChangeListeners()) {
2931
-
statWatcher.stop();
2932
-
statWatchers.delete(path);
2933
-
}
2934
-
}
2935
-
function unwatchAllFiles(fakeFs) {
2936
-
const statWatchers = statWatchersByFakeFS.get(fakeFs);
2937
-
if (typeof statWatchers === `undefined`)
2938
-
return;
2939
-
for (const path of statWatchers.keys()) {
2940
-
unwatchFile(fakeFs, path);
2941
-
}
2942
-
}
2943
-
2944
-
const DEFAULT_COMPRESSION_LEVEL = `mixed`;
2945
-
function toUnixTimestamp(time) {
2946
-
if (typeof time === `string` && String(+time) === time)
2947
-
return +time;
2948
-
if (typeof time === `number` && Number.isFinite(time)) {
2949
-
if (time < 0) {
2950
-
return Date.now() / 1e3;
2951
-
} else {
2952
-
return time;
2953
-
}
2954
-
}
2955
-
if (nodeUtils.types.isDate(time))
2956
-
return time.getTime() / 1e3;
2957
-
throw new Error(`Invalid time`);
2958
-
}
2959
-
function makeEmptyArchive() {
2960
-
return Buffer.from([
2961
-
80,
2962
-
75,
2963
-
5,
2964
-
6,
2965
-
0,
2966
-
0,
2967
-
0,
2968
-
0,
2969
-
0,
2970
-
0,
2971
-
0,
2972
-
0,
2973
-
0,
2974
-
0,
2975
-
0,
2976
-
0,
2977
-
0,
2978
-
0,
2979
-
0,
2980
-
0,
2981
-
0,
2982
-
0
2983
-
]);
2984
-
}
2985
-
class ZipFS extends BasePortableFakeFS {
2986
-
constructor(source, opts) {
2987
-
super();
2988
-
this.lzSource = null;
2989
-
this.listings = /* @__PURE__ */ new Map();
2990
-
this.entries = /* @__PURE__ */ new Map();
2991
-
this.fileSources = /* @__PURE__ */ new Map();
2992
-
this.fds = /* @__PURE__ */ new Map();
2993
-
this.nextFd = 0;
2994
-
this.ready = false;
2995
-
this.readOnly = false;
2996
-
this.libzip = opts.libzip;
2997
-
const pathOptions = opts;
2998
-
this.level = typeof pathOptions.level !== `undefined` ? pathOptions.level : DEFAULT_COMPRESSION_LEVEL;
2999
-
source != null ? source : source = makeEmptyArchive();
3000
-
if (typeof source === `string`) {
3001
-
const { baseFs = new NodeFS() } = pathOptions;
3002
-
this.baseFs = baseFs;
3003
-
this.path = source;
3004
-
} else {
3005
-
this.path = null;
3006
-
this.baseFs = null;
3007
-
}
3008
-
if (opts.stats) {
3009
-
this.stats = opts.stats;
3010
-
} else {
3011
-
if (typeof source === `string`) {
3012
-
try {
3013
-
this.stats = this.baseFs.statSync(source);
3014
-
} catch (error) {
3015
-
if (error.code === `ENOENT` && pathOptions.create) {
3016
-
this.stats = makeDefaultStats();
3017
-
} else {
3018
-
throw error;
3019
-
}
3020
-
}
3021
-
} else {
3022
-
this.stats = makeDefaultStats();
3023
-
}
3024
-
}
3025
-
const errPtr = this.libzip.malloc(4);
3026
-
try {
3027
-
let flags = 0;
3028
-
if (typeof source === `string` && pathOptions.create)
3029
-
flags |= this.libzip.ZIP_CREATE | this.libzip.ZIP_TRUNCATE;
3030
-
if (opts.readOnly) {
3031
-
flags |= this.libzip.ZIP_RDONLY;
3032
-
this.readOnly = true;
3033
-
}
3034
-
if (typeof source === `string`) {
3035
-
this.zip = this.libzip.open(npath.fromPortablePath(source), flags, errPtr);
3036
-
} else {
3037
-
const lzSource = this.allocateUnattachedSource(source);
3038
-
try {
3039
-
this.zip = this.libzip.openFromSource(lzSource, flags, errPtr);
3040
-
this.lzSource = lzSource;
3041
-
} catch (error) {
3042
-
this.libzip.source.free(lzSource);
3043
-
throw error;
3044
-
}
3045
-
}
3046
-
if (this.zip === 0) {
3047
-
const error = this.libzip.struct.errorS();
3048
-
this.libzip.error.initWithCode(error, this.libzip.getValue(errPtr, `i32`));
3049
-
throw this.makeLibzipError(error);
3050
-
}
3051
-
} finally {
3052
-
this.libzip.free(errPtr);
3053
-
}
3054
-
this.listings.set(PortablePath.root, /* @__PURE__ */ new Set());
3055
-
const entryCount = this.libzip.getNumEntries(this.zip, 0);
3056
-
for (let t = 0; t < entryCount; ++t) {
3057
-
const raw = this.libzip.getName(this.zip, t, 0);
3058
-
if (ppath.isAbsolute(raw))
3059
-
continue;
3060
-
const p = ppath.resolve(PortablePath.root, raw);
3061
-
this.registerEntry(p, t);
3062
-
if (raw.endsWith(`/`)) {
3063
-
this.registerListing(p);
3064
-
}
3065
-
}
3066
-
this.symlinkCount = this.libzip.ext.countSymlinks(this.zip);
3067
-
if (this.symlinkCount === -1)
3068
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3069
-
this.ready = true;
3070
-
}
3071
-
makeLibzipError(error) {
3072
-
const errorCode = this.libzip.struct.errorCodeZip(error);
3073
-
const strerror = this.libzip.error.strerror(error);
3074
-
const libzipError = new LibzipError(strerror, this.libzip.errors[errorCode]);
3075
-
if (errorCode === this.libzip.errors.ZIP_ER_CHANGED)
3076
-
throw new Error(`Assertion failed: Unexpected libzip error: ${libzipError.message}`);
3077
-
return libzipError;
3078
-
}
3079
-
getExtractHint(hints) {
3080
-
for (const fileName of this.entries.keys()) {
3081
-
const ext = this.pathUtils.extname(fileName);
3082
-
if (hints.relevantExtensions.has(ext)) {
3083
-
return true;
3084
-
}
3085
-
}
3086
-
return false;
3087
-
}
3088
-
getAllFiles() {
3089
-
return Array.from(this.entries.keys());
3090
-
}
3091
-
getRealPath() {
3092
-
if (!this.path)
3093
-
throw new Error(`ZipFS don't have real paths when loaded from a buffer`);
3094
-
return this.path;
3095
-
}
3096
-
getBufferAndClose() {
3097
-
this.prepareClose();
3098
-
if (!this.lzSource)
3099
-
throw new Error(`ZipFS was not created from a Buffer`);
3100
-
if (this.entries.size === 0) {
3101
-
this.discardAndClose();
3102
-
return makeEmptyArchive();
3103
-
}
3104
-
try {
3105
-
this.libzip.source.keep(this.lzSource);
3106
-
if (this.libzip.close(this.zip) === -1)
3107
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3108
-
if (this.libzip.source.open(this.lzSource) === -1)
3109
-
throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
3110
-
if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_END) === -1)
3111
-
throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
3112
-
const size = this.libzip.source.tell(this.lzSource);
3113
-
if (size === -1)
3114
-
throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
3115
-
if (this.libzip.source.seek(this.lzSource, 0, 0, this.libzip.SEEK_SET) === -1)
3116
-
throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
3117
-
const buffer = this.libzip.malloc(size);
3118
-
if (!buffer)
3119
-
throw new Error(`Couldn't allocate enough memory`);
3120
-
try {
3121
-
const rc = this.libzip.source.read(this.lzSource, buffer, size);
3122
-
if (rc === -1)
3123
-
throw this.makeLibzipError(this.libzip.source.error(this.lzSource));
3124
-
else if (rc < size)
3125
-
throw new Error(`Incomplete read`);
3126
-
else if (rc > size)
3127
-
throw new Error(`Overread`);
3128
-
const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size);
3129
-
return Buffer.from(memory);
3130
-
} finally {
3131
-
this.libzip.free(buffer);
3132
-
}
3133
-
} finally {
3134
-
this.libzip.source.close(this.lzSource);
3135
-
this.libzip.source.free(this.lzSource);
3136
-
this.ready = false;
3137
-
}
3138
-
}
3139
-
prepareClose() {
3140
-
if (!this.ready)
3141
-
throw EBUSY(`archive closed, close`);
3142
-
unwatchAllFiles(this);
3143
-
}
3144
-
saveAndClose() {
3145
-
if (!this.path || !this.baseFs)
3146
-
throw new Error(`ZipFS cannot be saved and must be discarded when loaded from a buffer`);
3147
-
this.prepareClose();
3148
-
if (this.readOnly) {
3149
-
this.discardAndClose();
3150
-
return;
3151
-
}
3152
-
const newMode = this.baseFs.existsSync(this.path) || this.stats.mode === DEFAULT_MODE ? void 0 : this.stats.mode;
3153
-
if (this.entries.size === 0) {
3154
-
this.discardAndClose();
3155
-
this.baseFs.writeFileSync(this.path, makeEmptyArchive(), { mode: newMode });
3156
-
} else {
3157
-
const rc = this.libzip.close(this.zip);
3158
-
if (rc === -1)
3159
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3160
-
if (typeof newMode !== `undefined`) {
3161
-
this.baseFs.chmodSync(this.path, newMode);
3162
-
}
3163
-
}
3164
-
this.ready = false;
3165
-
}
3166
-
discardAndClose() {
3167
-
this.prepareClose();
3168
-
this.libzip.discard(this.zip);
3169
-
this.ready = false;
3170
-
}
3171
-
resolve(p) {
3172
-
return ppath.resolve(PortablePath.root, p);
3173
-
}
3174
-
async openPromise(p, flags, mode) {
3175
-
return this.openSync(p, flags, mode);
3176
-
}
3177
-
openSync(p, flags, mode) {
3178
-
const fd = this.nextFd++;
3179
-
this.fds.set(fd, { cursor: 0, p });
3180
-
return fd;
3181
-
}
3182
-
hasOpenFileHandles() {
3183
-
return !!this.fds.size;
3184
-
}
3185
-
async opendirPromise(p, opts) {
3186
-
return this.opendirSync(p, opts);
3187
-
}
3188
-
opendirSync(p, opts = {}) {
3189
-
const resolvedP = this.resolveFilename(`opendir '${p}'`, p);
3190
-
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
3191
-
throw ENOENT(`opendir '${p}'`);
3192
-
const directoryListing = this.listings.get(resolvedP);
3193
-
if (!directoryListing)
3194
-
throw ENOTDIR(`opendir '${p}'`);
3195
-
const entries = [...directoryListing];
3196
-
const fd = this.openSync(resolvedP, `r`);
3197
-
const onClose = () => {
3198
-
this.closeSync(fd);
3199
-
};
3200
-
return opendir(this, resolvedP, entries, { onClose });
3201
-
}
3202
-
async readPromise(fd, buffer, offset, length, position) {
3203
-
return this.readSync(fd, buffer, offset, length, position);
3204
-
}
3205
-
readSync(fd, buffer, offset = 0, length = buffer.byteLength, position = -1) {
3206
-
const entry = this.fds.get(fd);
3207
-
if (typeof entry === `undefined`)
3208
-
throw EBADF(`read`);
3209
-
const realPosition = position === -1 || position === null ? entry.cursor : position;
3210
-
const source = this.readFileSync(entry.p);
3211
-
source.copy(buffer, offset, realPosition, realPosition + length);
3212
-
const bytesRead = Math.max(0, Math.min(source.length - realPosition, length));
3213
-
if (position === -1 || position === null)
3214
-
entry.cursor += bytesRead;
3215
-
return bytesRead;
3216
-
}
3217
-
async writePromise(fd, buffer, offset, length, position) {
3218
-
if (typeof buffer === `string`) {
3219
-
return this.writeSync(fd, buffer, position);
3220
-
} else {
3221
-
return this.writeSync(fd, buffer, offset, length, position);
3222
-
}
3223
-
}
3224
-
writeSync(fd, buffer, offset, length, position) {
3225
-
const entry = this.fds.get(fd);
3226
-
if (typeof entry === `undefined`)
3227
-
throw EBADF(`read`);
3228
-
throw new Error(`Unimplemented`);
3229
-
}
3230
-
async closePromise(fd) {
3231
-
return this.closeSync(fd);
3232
-
}
3233
-
closeSync(fd) {
3234
-
const entry = this.fds.get(fd);
3235
-
if (typeof entry === `undefined`)
3236
-
throw EBADF(`read`);
3237
-
this.fds.delete(fd);
3238
-
}
3239
-
createReadStream(p, { encoding } = {}) {
3240
-
if (p === null)
3241
-
throw new Error(`Unimplemented`);
3242
-
const fd = this.openSync(p, `r`);
3243
-
const stream$1 = Object.assign(
3244
-
new stream.PassThrough({
3245
-
emitClose: true,
3246
-
autoDestroy: true,
3247
-
destroy: (error, callback) => {
3248
-
clearImmediate(immediate);
3249
-
this.closeSync(fd);
3250
-
callback(error);
3251
-
}
3252
-
}),
3253
-
{
3254
-
close() {
3255
-
stream$1.destroy();
3256
-
},
3257
-
bytesRead: 0,
3258
-
path: p
3259
-
}
3260
-
);
3261
-
const immediate = setImmediate(async () => {
3262
-
try {
3263
-
const data = await this.readFilePromise(p, encoding);
3264
-
stream$1.bytesRead = data.length;
3265
-
stream$1.end(data);
3266
-
} catch (error) {
3267
-
stream$1.destroy(error);
3268
-
}
3269
-
});
3270
-
return stream$1;
3271
-
}
3272
-
createWriteStream(p, { encoding } = {}) {
3273
-
if (this.readOnly)
3274
-
throw EROFS(`open '${p}'`);
3275
-
if (p === null)
3276
-
throw new Error(`Unimplemented`);
3277
-
const chunks = [];
3278
-
const fd = this.openSync(p, `w`);
3279
-
const stream$1 = Object.assign(
3280
-
new stream.PassThrough({
3281
-
autoDestroy: true,
3282
-
emitClose: true,
3283
-
destroy: (error, callback) => {
3284
-
try {
3285
-
if (error) {
3286
-
callback(error);
3287
-
} else {
3288
-
this.writeFileSync(p, Buffer.concat(chunks), encoding);
3289
-
callback(null);
3290
-
}
3291
-
} catch (err) {
3292
-
callback(err);
3293
-
} finally {
3294
-
this.closeSync(fd);
3295
-
}
3296
-
}
3297
-
}),
3298
-
{
3299
-
bytesWritten: 0,
3300
-
path: p,
3301
-
close() {
3302
-
stream$1.destroy();
3303
-
}
3304
-
}
3305
-
);
3306
-
stream$1.on(`data`, (chunk) => {
3307
-
const chunkBuffer = Buffer.from(chunk);
3308
-
stream$1.bytesWritten += chunkBuffer.length;
3309
-
chunks.push(chunkBuffer);
3310
-
});
3311
-
return stream$1;
3312
-
}
3313
-
async realpathPromise(p) {
3314
-
return this.realpathSync(p);
3315
-
}
3316
-
realpathSync(p) {
3317
-
const resolvedP = this.resolveFilename(`lstat '${p}'`, p);
3318
-
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
3319
-
throw ENOENT(`lstat '${p}'`);
3320
-
return resolvedP;
3321
-
}
3322
-
async existsPromise(p) {
3323
-
return this.existsSync(p);
3324
-
}
3325
-
existsSync(p) {
3326
-
if (!this.ready)
3327
-
throw EBUSY(`archive closed, existsSync '${p}'`);
3328
-
if (this.symlinkCount === 0) {
3329
-
const resolvedP2 = ppath.resolve(PortablePath.root, p);
3330
-
return this.entries.has(resolvedP2) || this.listings.has(resolvedP2);
3331
-
}
3332
-
let resolvedP;
3333
-
try {
3334
-
resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, false);
3335
-
} catch (error) {
3336
-
return false;
3337
-
}
3338
-
if (resolvedP === void 0)
3339
-
return false;
3340
-
return this.entries.has(resolvedP) || this.listings.has(resolvedP);
3341
-
}
3342
-
async accessPromise(p, mode) {
3343
-
return this.accessSync(p, mode);
3344
-
}
3345
-
accessSync(p, mode = fs.constants.F_OK) {
3346
-
const resolvedP = this.resolveFilename(`access '${p}'`, p);
3347
-
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
3348
-
throw ENOENT(`access '${p}'`);
3349
-
if (this.readOnly && mode & fs.constants.W_OK) {
3350
-
throw EROFS(`access '${p}'`);
3351
-
}
3352
-
}
3353
-
async statPromise(p, opts = { bigint: false }) {
3354
-
if (opts.bigint)
3355
-
return this.statSync(p, { bigint: true });
3356
-
return this.statSync(p);
3357
-
}
3358
-
statSync(p, opts = { bigint: false, throwIfNoEntry: true }) {
3359
-
const resolvedP = this.resolveFilename(`stat '${p}'`, p, void 0, opts.throwIfNoEntry);
3360
-
if (resolvedP === void 0)
3361
-
return void 0;
3362
-
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) {
3363
-
if (opts.throwIfNoEntry === false)
3364
-
return void 0;
3365
-
throw ENOENT(`stat '${p}'`);
3366
-
}
3367
-
if (p[p.length - 1] === `/` && !this.listings.has(resolvedP))
3368
-
throw ENOTDIR(`stat '${p}'`);
3369
-
return this.statImpl(`stat '${p}'`, resolvedP, opts);
3370
-
}
3371
-
async fstatPromise(fd, opts) {
3372
-
return this.fstatSync(fd, opts);
3373
-
}
3374
-
fstatSync(fd, opts) {
3375
-
const entry = this.fds.get(fd);
3376
-
if (typeof entry === `undefined`)
3377
-
throw EBADF(`fstatSync`);
3378
-
const { p } = entry;
3379
-
const resolvedP = this.resolveFilename(`stat '${p}'`, p);
3380
-
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
3381
-
throw ENOENT(`stat '${p}'`);
3382
-
if (p[p.length - 1] === `/` && !this.listings.has(resolvedP))
3383
-
throw ENOTDIR(`stat '${p}'`);
3384
-
return this.statImpl(`fstat '${p}'`, resolvedP, opts);
3385
-
}
3386
-
async lstatPromise(p, opts = { bigint: false }) {
3387
-
if (opts.bigint)
3388
-
return this.lstatSync(p, { bigint: true });
3389
-
return this.lstatSync(p);
3390
-
}
3391
-
lstatSync(p, opts = { bigint: false, throwIfNoEntry: true }) {
3392
-
const resolvedP = this.resolveFilename(`lstat '${p}'`, p, false, opts.throwIfNoEntry);
3393
-
if (resolvedP === void 0)
3394
-
return void 0;
3395
-
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP)) {
3396
-
if (opts.throwIfNoEntry === false)
3397
-
return void 0;
3398
-
throw ENOENT(`lstat '${p}'`);
3399
-
}
3400
-
if (p[p.length - 1] === `/` && !this.listings.has(resolvedP))
3401
-
throw ENOTDIR(`lstat '${p}'`);
3402
-
return this.statImpl(`lstat '${p}'`, resolvedP, opts);
3403
-
}
3404
-
statImpl(reason, p, opts = {}) {
3405
-
const entry = this.entries.get(p);
3406
-
if (typeof entry !== `undefined`) {
3407
-
const stat = this.libzip.struct.statS();
3408
-
const rc = this.libzip.statIndex(this.zip, entry, 0, 0, stat);
3409
-
if (rc === -1)
3410
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3411
-
const uid = this.stats.uid;
3412
-
const gid = this.stats.gid;
3413
-
const size = this.libzip.struct.statSize(stat) >>> 0;
3414
-
const blksize = 512;
3415
-
const blocks = Math.ceil(size / blksize);
3416
-
const mtimeMs = (this.libzip.struct.statMtime(stat) >>> 0) * 1e3;
3417
-
const atimeMs = mtimeMs;
3418
-
const birthtimeMs = mtimeMs;
3419
-
const ctimeMs = mtimeMs;
3420
-
const atime = new Date(atimeMs);
3421
-
const birthtime = new Date(birthtimeMs);
3422
-
const ctime = new Date(ctimeMs);
3423
-
const mtime = new Date(mtimeMs);
3424
-
const type = this.listings.has(p) ? S_IFDIR : this.isSymbolicLink(entry) ? S_IFLNK : S_IFREG;
3425
-
const defaultMode = type === S_IFDIR ? 493 : 420;
3426
-
const mode = type | this.getUnixMode(entry, defaultMode) & 511;
3427
-
const crc = this.libzip.struct.statCrc(stat);
3428
-
const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc });
3429
-
return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance;
3430
-
}
3431
-
if (this.listings.has(p)) {
3432
-
const uid = this.stats.uid;
3433
-
const gid = this.stats.gid;
3434
-
const size = 0;
3435
-
const blksize = 512;
3436
-
const blocks = 0;
3437
-
const atimeMs = this.stats.mtimeMs;
3438
-
const birthtimeMs = this.stats.mtimeMs;
3439
-
const ctimeMs = this.stats.mtimeMs;
3440
-
const mtimeMs = this.stats.mtimeMs;
3441
-
const atime = new Date(atimeMs);
3442
-
const birthtime = new Date(birthtimeMs);
3443
-
const ctime = new Date(ctimeMs);
3444
-
const mtime = new Date(mtimeMs);
3445
-
const mode = S_IFDIR | 493;
3446
-
const crc = 0;
3447
-
const statInstance = Object.assign(new StatEntry(), { uid, gid, size, blksize, blocks, atime, birthtime, ctime, mtime, atimeMs, birthtimeMs, ctimeMs, mtimeMs, mode, crc });
3448
-
return opts.bigint === true ? convertToBigIntStats(statInstance) : statInstance;
3449
-
}
3450
-
throw new Error(`Unreachable`);
3451
-
}
3452
-
getUnixMode(index, defaultMode) {
3453
-
const rc = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S);
3454
-
if (rc === -1)
3455
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3456
-
const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0;
3457
-
if (opsys !== this.libzip.ZIP_OPSYS_UNIX)
3458
-
return defaultMode;
3459
-
return this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16;
3460
-
}
3461
-
registerListing(p) {
3462
-
const existingListing = this.listings.get(p);
3463
-
if (existingListing)
3464
-
return existingListing;
3465
-
const parentListing = this.registerListing(ppath.dirname(p));
3466
-
parentListing.add(ppath.basename(p));
3467
-
const newListing = /* @__PURE__ */ new Set();
3468
-
this.listings.set(p, newListing);
3469
-
return newListing;
3470
-
}
3471
-
registerEntry(p, index) {
3472
-
const parentListing = this.registerListing(ppath.dirname(p));
3473
-
parentListing.add(ppath.basename(p));
3474
-
this.entries.set(p, index);
3475
-
}
3476
-
unregisterListing(p) {
3477
-
this.listings.delete(p);
3478
-
const parentListing = this.listings.get(ppath.dirname(p));
3479
-
parentListing == null ? void 0 : parentListing.delete(ppath.basename(p));
3480
-
}
3481
-
unregisterEntry(p) {
3482
-
this.unregisterListing(p);
3483
-
const entry = this.entries.get(p);
3484
-
this.entries.delete(p);
3485
-
if (typeof entry === `undefined`)
3486
-
return;
3487
-
this.fileSources.delete(entry);
3488
-
if (this.isSymbolicLink(entry)) {
3489
-
this.symlinkCount--;
3490
-
}
3491
-
}
3492
-
deleteEntry(p, index) {
3493
-
this.unregisterEntry(p);
3494
-
const rc = this.libzip.delete(this.zip, index);
3495
-
if (rc === -1) {
3496
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3497
-
}
3498
-
}
3499
-
resolveFilename(reason, p, resolveLastComponent = true, throwIfNoEntry = true) {
3500
-
if (!this.ready)
3501
-
throw EBUSY(`archive closed, ${reason}`);
3502
-
let resolvedP = ppath.resolve(PortablePath.root, p);
3503
-
if (resolvedP === `/`)
3504
-
return PortablePath.root;
3505
-
const fileIndex = this.entries.get(resolvedP);
3506
-
if (resolveLastComponent && fileIndex !== void 0) {
3507
-
if (this.symlinkCount !== 0 && this.isSymbolicLink(fileIndex)) {
3508
-
const target = this.getFileSource(fileIndex).toString();
3509
-
return this.resolveFilename(reason, ppath.resolve(ppath.dirname(resolvedP), target), true, throwIfNoEntry);
3510
-
} else {
3511
-
return resolvedP;
3512
-
}
3513
-
}
3514
-
while (true) {
3515
-
const parentP = this.resolveFilename(reason, ppath.dirname(resolvedP), true, throwIfNoEntry);
3516
-
if (parentP === void 0)
3517
-
return parentP;
3518
-
const isDir = this.listings.has(parentP);
3519
-
const doesExist = this.entries.has(parentP);
3520
-
if (!isDir && !doesExist) {
3521
-
if (throwIfNoEntry === false)
3522
-
return void 0;
3523
-
throw ENOENT(reason);
3524
-
}
3525
-
if (!isDir)
3526
-
throw ENOTDIR(reason);
3527
-
resolvedP = ppath.resolve(parentP, ppath.basename(resolvedP));
3528
-
if (!resolveLastComponent || this.symlinkCount === 0)
3529
-
break;
3530
-
const index = this.libzip.name.locate(this.zip, resolvedP.slice(1), 0);
3531
-
if (index === -1)
3532
-
break;
3533
-
if (this.isSymbolicLink(index)) {
3534
-
const target = this.getFileSource(index).toString();
3535
-
resolvedP = ppath.resolve(ppath.dirname(resolvedP), target);
3536
-
} else {
3537
-
break;
3538
-
}
3539
-
}
3540
-
return resolvedP;
3541
-
}
3542
-
allocateBuffer(content) {
3543
-
if (!Buffer.isBuffer(content))
3544
-
content = Buffer.from(content);
3545
-
const buffer = this.libzip.malloc(content.byteLength);
3546
-
if (!buffer)
3547
-
throw new Error(`Couldn't allocate enough memory`);
3548
-
const heap = new Uint8Array(this.libzip.HEAPU8.buffer, buffer, content.byteLength);
3549
-
heap.set(content);
3550
-
return { buffer, byteLength: content.byteLength };
3551
-
}
3552
-
allocateUnattachedSource(content) {
3553
-
const error = this.libzip.struct.errorS();
3554
-
const { buffer, byteLength } = this.allocateBuffer(content);
3555
-
const source = this.libzip.source.fromUnattachedBuffer(buffer, byteLength, 0, 1, error);
3556
-
if (source === 0) {
3557
-
this.libzip.free(error);
3558
-
throw this.makeLibzipError(error);
3559
-
}
3560
-
return source;
3561
-
}
3562
-
allocateSource(content) {
3563
-
const { buffer, byteLength } = this.allocateBuffer(content);
3564
-
const source = this.libzip.source.fromBuffer(this.zip, buffer, byteLength, 0, 1);
3565
-
if (source === 0) {
3566
-
this.libzip.free(buffer);
3567
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3568
-
}
3569
-
return source;
3570
-
}
3571
-
setFileSource(p, content) {
3572
-
const buffer = Buffer.isBuffer(content) ? content : Buffer.from(content);
3573
-
const target = ppath.relative(PortablePath.root, p);
3574
-
const lzSource = this.allocateSource(content);
3575
-
try {
3576
-
const newIndex = this.libzip.file.add(this.zip, target, lzSource, this.libzip.ZIP_FL_OVERWRITE);
3577
-
if (newIndex === -1)
3578
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3579
-
if (this.level !== `mixed`) {
3580
-
const method = this.level === 0 ? this.libzip.ZIP_CM_STORE : this.libzip.ZIP_CM_DEFLATE;
3581
-
const rc = this.libzip.file.setCompression(this.zip, newIndex, 0, method, this.level);
3582
-
if (rc === -1) {
3583
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3584
-
}
3585
-
}
3586
-
this.fileSources.set(newIndex, buffer);
3587
-
return newIndex;
3588
-
} catch (error) {
3589
-
this.libzip.source.free(lzSource);
3590
-
throw error;
3591
-
}
3592
-
}
3593
-
isSymbolicLink(index) {
3594
-
if (this.symlinkCount === 0)
3595
-
return false;
3596
-
const attrs = this.libzip.file.getExternalAttributes(this.zip, index, 0, 0, this.libzip.uint08S, this.libzip.uint32S);
3597
-
if (attrs === -1)
3598
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3599
-
const opsys = this.libzip.getValue(this.libzip.uint08S, `i8`) >>> 0;
3600
-
if (opsys !== this.libzip.ZIP_OPSYS_UNIX)
3601
-
return false;
3602
-
const attributes = this.libzip.getValue(this.libzip.uint32S, `i32`) >>> 16;
3603
-
return (attributes & S_IFMT) === S_IFLNK;
3604
-
}
3605
-
getFileSource(index, opts = { asyncDecompress: false }) {
3606
-
const cachedFileSource = this.fileSources.get(index);
3607
-
if (typeof cachedFileSource !== `undefined`)
3608
-
return cachedFileSource;
3609
-
const stat = this.libzip.struct.statS();
3610
-
const rc = this.libzip.statIndex(this.zip, index, 0, 0, stat);
3611
-
if (rc === -1)
3612
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3613
-
const size = this.libzip.struct.statCompSize(stat);
3614
-
const compressionMethod = this.libzip.struct.statCompMethod(stat);
3615
-
const buffer = this.libzip.malloc(size);
3616
-
try {
3617
-
const file = this.libzip.fopenIndex(this.zip, index, 0, this.libzip.ZIP_FL_COMPRESSED);
3618
-
if (file === 0)
3619
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3620
-
try {
3621
-
const rc2 = this.libzip.fread(file, buffer, size, 0);
3622
-
if (rc2 === -1)
3623
-
throw this.makeLibzipError(this.libzip.file.getError(file));
3624
-
else if (rc2 < size)
3625
-
throw new Error(`Incomplete read`);
3626
-
else if (rc2 > size)
3627
-
throw new Error(`Overread`);
3628
-
const memory = this.libzip.HEAPU8.subarray(buffer, buffer + size);
3629
-
const data = Buffer.from(memory);
3630
-
if (compressionMethod === 0) {
3631
-
this.fileSources.set(index, data);
3632
-
return data;
3633
-
} else if (opts.asyncDecompress) {
3634
-
return new Promise((resolve, reject) => {
3635
-
zlib__default.default.inflateRaw(data, (error, result) => {
3636
-
if (error) {
3637
-
reject(error);
3638
-
} else {
3639
-
this.fileSources.set(index, result);
3640
-
resolve(result);
3641
-
}
3642
-
});
3643
-
});
3644
-
} else {
3645
-
const decompressedData = zlib__default.default.inflateRawSync(data);
3646
-
this.fileSources.set(index, decompressedData);
3647
-
return decompressedData;
3648
-
}
3649
-
} finally {
3650
-
this.libzip.fclose(file);
3651
-
}
3652
-
} finally {
3653
-
this.libzip.free(buffer);
3654
-
}
3655
-
}
3656
-
async fchmodPromise(fd, mask) {
3657
-
return this.chmodPromise(this.fdToPath(fd, `fchmod`), mask);
3658
-
}
3659
-
fchmodSync(fd, mask) {
3660
-
return this.chmodSync(this.fdToPath(fd, `fchmodSync`), mask);
3661
-
}
3662
-
async chmodPromise(p, mask) {
3663
-
return this.chmodSync(p, mask);
3664
-
}
3665
-
chmodSync(p, mask) {
3666
-
if (this.readOnly)
3667
-
throw EROFS(`chmod '${p}'`);
3668
-
mask &= 493;
3669
-
const resolvedP = this.resolveFilename(`chmod '${p}'`, p, false);
3670
-
const entry = this.entries.get(resolvedP);
3671
-
if (typeof entry === `undefined`)
3672
-
throw new Error(`Assertion failed: The entry should have been registered (${resolvedP})`);
3673
-
const oldMod = this.getUnixMode(entry, S_IFREG | 0);
3674
-
const newMod = oldMod & ~511 | mask;
3675
-
const rc = this.libzip.file.setExternalAttributes(this.zip, entry, 0, 0, this.libzip.ZIP_OPSYS_UNIX, newMod << 16);
3676
-
if (rc === -1) {
3677
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3678
-
}
3679
-
}
3680
-
async fchownPromise(fd, uid, gid) {
3681
-
return this.chownPromise(this.fdToPath(fd, `fchown`), uid, gid);
3682
-
}
3683
-
fchownSync(fd, uid, gid) {
3684
-
return this.chownSync(this.fdToPath(fd, `fchownSync`), uid, gid);
3685
-
}
3686
-
async chownPromise(p, uid, gid) {
3687
-
return this.chownSync(p, uid, gid);
3688
-
}
3689
-
chownSync(p, uid, gid) {
3690
-
throw new Error(`Unimplemented`);
3691
-
}
3692
-
async renamePromise(oldP, newP) {
3693
-
return this.renameSync(oldP, newP);
3694
-
}
3695
-
renameSync(oldP, newP) {
3696
-
throw new Error(`Unimplemented`);
3697
-
}
3698
-
async copyFilePromise(sourceP, destP, flags) {
3699
-
const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags);
3700
-
const source = await this.getFileSource(indexSource, { asyncDecompress: true });
3701
-
const newIndex = this.setFileSource(resolvedDestP, source);
3702
-
if (newIndex !== indexDest) {
3703
-
this.registerEntry(resolvedDestP, newIndex);
3704
-
}
3705
-
}
3706
-
copyFileSync(sourceP, destP, flags = 0) {
3707
-
const { indexSource, indexDest, resolvedDestP } = this.prepareCopyFile(sourceP, destP, flags);
3708
-
const source = this.getFileSource(indexSource);
3709
-
const newIndex = this.setFileSource(resolvedDestP, source);
3710
-
if (newIndex !== indexDest) {
3711
-
this.registerEntry(resolvedDestP, newIndex);
3712
-
}
3713
-
}
3714
-
prepareCopyFile(sourceP, destP, flags = 0) {
3715
-
if (this.readOnly)
3716
-
throw EROFS(`copyfile '${sourceP} -> '${destP}'`);
3717
-
if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0)
3718
-
throw ENOSYS(`unsupported clone operation`, `copyfile '${sourceP}' -> ${destP}'`);
3719
-
const resolvedSourceP = this.resolveFilename(`copyfile '${sourceP} -> ${destP}'`, sourceP);
3720
-
const indexSource = this.entries.get(resolvedSourceP);
3721
-
if (typeof indexSource === `undefined`)
3722
-
throw EINVAL(`copyfile '${sourceP}' -> '${destP}'`);
3723
-
const resolvedDestP = this.resolveFilename(`copyfile '${sourceP}' -> ${destP}'`, destP);
3724
-
const indexDest = this.entries.get(resolvedDestP);
3725
-
if ((flags & (fs.constants.COPYFILE_EXCL | fs.constants.COPYFILE_FICLONE_FORCE)) !== 0 && typeof indexDest !== `undefined`)
3726
-
throw EEXIST(`copyfile '${sourceP}' -> '${destP}'`);
3727
-
return {
3728
-
indexSource,
3729
-
resolvedDestP,
3730
-
indexDest
3731
-
};
3732
-
}
3733
-
async appendFilePromise(p, content, opts) {
3734
-
if (this.readOnly)
3735
-
throw EROFS(`open '${p}'`);
3736
-
if (typeof opts === `undefined`)
3737
-
opts = { flag: `a` };
3738
-
else if (typeof opts === `string`)
3739
-
opts = { flag: `a`, encoding: opts };
3740
-
else if (typeof opts.flag === `undefined`)
3741
-
opts = { flag: `a`, ...opts };
3742
-
return this.writeFilePromise(p, content, opts);
3743
-
}
3744
-
appendFileSync(p, content, opts = {}) {
3745
-
if (this.readOnly)
3746
-
throw EROFS(`open '${p}'`);
3747
-
if (typeof opts === `undefined`)
3748
-
opts = { flag: `a` };
3749
-
else if (typeof opts === `string`)
3750
-
opts = { flag: `a`, encoding: opts };
3751
-
else if (typeof opts.flag === `undefined`)
3752
-
opts = { flag: `a`, ...opts };
3753
-
return this.writeFileSync(p, content, opts);
3754
-
}
3755
-
fdToPath(fd, reason) {
3756
-
var _a;
3757
-
const path = (_a = this.fds.get(fd)) == null ? void 0 : _a.p;
3758
-
if (typeof path === `undefined`)
3759
-
throw EBADF(reason);
3760
-
return path;
3761
-
}
3762
-
async writeFilePromise(p, content, opts) {
3763
-
const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts);
3764
-
if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`))
3765
-
content = Buffer.concat([await this.getFileSource(index, { asyncDecompress: true }), Buffer.from(content)]);
3766
-
if (encoding !== null)
3767
-
content = content.toString(encoding);
3768
-
const newIndex = this.setFileSource(resolvedP, content);
3769
-
if (newIndex !== index)
3770
-
this.registerEntry(resolvedP, newIndex);
3771
-
if (mode !== null) {
3772
-
await this.chmodPromise(resolvedP, mode);
3773
-
}
3774
-
}
3775
-
writeFileSync(p, content, opts) {
3776
-
const { encoding, mode, index, resolvedP } = this.prepareWriteFile(p, opts);
3777
-
if (index !== void 0 && typeof opts === `object` && opts.flag && opts.flag.includes(`a`))
3778
-
content = Buffer.concat([this.getFileSource(index), Buffer.from(content)]);
3779
-
if (encoding !== null)
3780
-
content = content.toString(encoding);
3781
-
const newIndex = this.setFileSource(resolvedP, content);
3782
-
if (newIndex !== index)
3783
-
this.registerEntry(resolvedP, newIndex);
3784
-
if (mode !== null) {
3785
-
this.chmodSync(resolvedP, mode);
3786
-
}
3787
-
}
3788
-
prepareWriteFile(p, opts) {
3789
-
if (typeof p === `number`)
3790
-
p = this.fdToPath(p, `read`);
3791
-
if (this.readOnly)
3792
-
throw EROFS(`open '${p}'`);
3793
-
const resolvedP = this.resolveFilename(`open '${p}'`, p);
3794
-
if (this.listings.has(resolvedP))
3795
-
throw EISDIR(`open '${p}'`);
3796
-
let encoding = null, mode = null;
3797
-
if (typeof opts === `string`) {
3798
-
encoding = opts;
3799
-
} else if (typeof opts === `object`) {
3800
-
({
3801
-
encoding = null,
3802
-
mode = null
3803
-
} = opts);
3804
-
}
3805
-
const index = this.entries.get(resolvedP);
3806
-
return {
3807
-
encoding,
3808
-
mode,
3809
-
resolvedP,
3810
-
index
3811
-
};
3812
-
}
3813
-
async unlinkPromise(p) {
3814
-
return this.unlinkSync(p);
3815
-
}
3816
-
unlinkSync(p) {
3817
-
if (this.readOnly)
3818
-
throw EROFS(`unlink '${p}'`);
3819
-
const resolvedP = this.resolveFilename(`unlink '${p}'`, p);
3820
-
if (this.listings.has(resolvedP))
3821
-
throw EISDIR(`unlink '${p}'`);
3822
-
const index = this.entries.get(resolvedP);
3823
-
if (typeof index === `undefined`)
3824
-
throw EINVAL(`unlink '${p}'`);
3825
-
this.deleteEntry(resolvedP, index);
3826
-
}
3827
-
async utimesPromise(p, atime, mtime) {
3828
-
return this.utimesSync(p, atime, mtime);
3829
-
}
3830
-
utimesSync(p, atime, mtime) {
3831
-
if (this.readOnly)
3832
-
throw EROFS(`utimes '${p}'`);
3833
-
const resolvedP = this.resolveFilename(`utimes '${p}'`, p);
3834
-
this.utimesImpl(resolvedP, mtime);
3835
-
}
3836
-
async lutimesPromise(p, atime, mtime) {
3837
-
return this.lutimesSync(p, atime, mtime);
3838
-
}
3839
-
lutimesSync(p, atime, mtime) {
3840
-
if (this.readOnly)
3841
-
throw EROFS(`lutimes '${p}'`);
3842
-
const resolvedP = this.resolveFilename(`utimes '${p}'`, p, false);
3843
-
this.utimesImpl(resolvedP, mtime);
3844
-
}
3845
-
utimesImpl(resolvedP, mtime) {
3846
-
if (this.listings.has(resolvedP)) {
3847
-
if (!this.entries.has(resolvedP))
3848
-
this.hydrateDirectory(resolvedP);
3849
-
}
3850
-
const entry = this.entries.get(resolvedP);
3851
-
if (entry === void 0)
3852
-
throw new Error(`Unreachable`);
3853
-
const rc = this.libzip.file.setMtime(this.zip, entry, 0, toUnixTimestamp(mtime), 0);
3854
-
if (rc === -1) {
3855
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3856
-
}
3857
-
}
3858
-
async mkdirPromise(p, opts) {
3859
-
return this.mkdirSync(p, opts);
3860
-
}
3861
-
mkdirSync(p, { mode = 493, recursive = false } = {}) {
3862
-
if (recursive)
3863
-
return this.mkdirpSync(p, { chmod: mode });
3864
-
if (this.readOnly)
3865
-
throw EROFS(`mkdir '${p}'`);
3866
-
const resolvedP = this.resolveFilename(`mkdir '${p}'`, p);
3867
-
if (this.entries.has(resolvedP) || this.listings.has(resolvedP))
3868
-
throw EEXIST(`mkdir '${p}'`);
3869
-
this.hydrateDirectory(resolvedP);
3870
-
this.chmodSync(resolvedP, mode);
3871
-
return void 0;
3872
-
}
3873
-
async rmdirPromise(p, opts) {
3874
-
return this.rmdirSync(p, opts);
3875
-
}
3876
-
rmdirSync(p, { recursive = false } = {}) {
3877
-
if (this.readOnly)
3878
-
throw EROFS(`rmdir '${p}'`);
3879
-
if (recursive) {
3880
-
this.removeSync(p);
3881
-
return;
3882
-
}
3883
-
const resolvedP = this.resolveFilename(`rmdir '${p}'`, p);
3884
-
const directoryListing = this.listings.get(resolvedP);
3885
-
if (!directoryListing)
3886
-
throw ENOTDIR(`rmdir '${p}'`);
3887
-
if (directoryListing.size > 0)
3888
-
throw ENOTEMPTY(`rmdir '${p}'`);
3889
-
const index = this.entries.get(resolvedP);
3890
-
if (typeof index === `undefined`)
3891
-
throw EINVAL(`rmdir '${p}'`);
3892
-
this.deleteEntry(p, index);
3893
-
}
3894
-
hydrateDirectory(resolvedP) {
3895
-
const index = this.libzip.dir.add(this.zip, ppath.relative(PortablePath.root, resolvedP));
3896
-
if (index === -1)
3897
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3898
-
this.registerListing(resolvedP);
3899
-
this.registerEntry(resolvedP, index);
3900
-
return index;
3901
-
}
3902
-
async linkPromise(existingP, newP) {
3903
-
return this.linkSync(existingP, newP);
3904
-
}
3905
-
linkSync(existingP, newP) {
3906
-
throw EOPNOTSUPP(`link '${existingP}' -> '${newP}'`);
3907
-
}
3908
-
async symlinkPromise(target, p) {
3909
-
return this.symlinkSync(target, p);
3910
-
}
3911
-
symlinkSync(target, p) {
3912
-
if (this.readOnly)
3913
-
throw EROFS(`symlink '${target}' -> '${p}'`);
3914
-
const resolvedP = this.resolveFilename(`symlink '${target}' -> '${p}'`, p);
3915
-
if (this.listings.has(resolvedP))
3916
-
throw EISDIR(`symlink '${target}' -> '${p}'`);
3917
-
if (this.entries.has(resolvedP))
3918
-
throw EEXIST(`symlink '${target}' -> '${p}'`);
3919
-
const index = this.setFileSource(resolvedP, target);
3920
-
this.registerEntry(resolvedP, index);
3921
-
const rc = this.libzip.file.setExternalAttributes(this.zip, index, 0, 0, this.libzip.ZIP_OPSYS_UNIX, (S_IFLNK | 511) << 16);
3922
-
if (rc === -1)
3923
-
throw this.makeLibzipError(this.libzip.getError(this.zip));
3924
-
this.symlinkCount += 1;
3925
-
}
3926
-
async readFilePromise(p, encoding) {
3927
-
if (typeof encoding === `object`)
3928
-
encoding = encoding ? encoding.encoding : void 0;
3929
-
const data = await this.readFileBuffer(p, { asyncDecompress: true });
3930
-
return encoding ? data.toString(encoding) : data;
3931
-
}
3932
-
readFileSync(p, encoding) {
3933
-
if (typeof encoding === `object`)
3934
-
encoding = encoding ? encoding.encoding : void 0;
3935
-
const data = this.readFileBuffer(p);
3936
-
return encoding ? data.toString(encoding) : data;
3937
-
}
3938
-
readFileBuffer(p, opts = { asyncDecompress: false }) {
3939
-
if (typeof p === `number`)
3940
-
p = this.fdToPath(p, `read`);
3941
-
const resolvedP = this.resolveFilename(`open '${p}'`, p);
3942
-
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
3943
-
throw ENOENT(`open '${p}'`);
3944
-
if (p[p.length - 1] === `/` && !this.listings.has(resolvedP))
3945
-
throw ENOTDIR(`open '${p}'`);
3946
-
if (this.listings.has(resolvedP))
3947
-
throw EISDIR(`read`);
3948
-
const entry = this.entries.get(resolvedP);
3949
-
if (entry === void 0)
3950
-
throw new Error(`Unreachable`);
3951
-
return this.getFileSource(entry, opts);
3952
-
}
3953
-
async readdirPromise(p, opts) {
3954
-
return this.readdirSync(p, opts);
3955
-
}
3956
-
readdirSync(p, opts) {
3957
-
const resolvedP = this.resolveFilename(`scandir '${p}'`, p);
3958
-
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
3959
-
throw ENOENT(`scandir '${p}'`);
3960
-
const directoryListing = this.listings.get(resolvedP);
3961
-
if (!directoryListing)
3962
-
throw ENOTDIR(`scandir '${p}'`);
3963
-
const entries = [...directoryListing];
3964
-
if (!(opts == null ? void 0 : opts.withFileTypes))
3965
-
return entries;
3966
-
return entries.map((name) => {
3967
-
return Object.assign(this.statImpl(`lstat`, ppath.join(p, name)), {
3968
-
name
3969
-
});
3970
-
});
3971
-
}
3972
-
async readlinkPromise(p) {
3973
-
const entry = this.prepareReadlink(p);
3974
-
return (await this.getFileSource(entry, { asyncDecompress: true })).toString();
3975
-
}
3976
-
readlinkSync(p) {
3977
-
const entry = this.prepareReadlink(p);
3978
-
return this.getFileSource(entry).toString();
3979
-
}
3980
-
prepareReadlink(p) {
3981
-
const resolvedP = this.resolveFilename(`readlink '${p}'`, p, false);
3982
-
if (!this.entries.has(resolvedP) && !this.listings.has(resolvedP))
3983
-
throw ENOENT(`readlink '${p}'`);
3984
-
if (p[p.length - 1] === `/` && !this.listings.has(resolvedP))
3985
-
throw ENOTDIR(`open '${p}'`);
3986
-
if (this.listings.has(resolvedP))
3987
-
throw EINVAL(`readlink '${p}'`);
3988
-
const entry = this.entries.get(resolvedP);
3989
-
if (entry === void 0)
3990
-
throw new Error(`Unreachable`);
3991
-
if (!this.isSymbolicLink(entry))
3992
-
throw EINVAL(`readlink '${p}'`);
3993
-
return entry;
3994
-
}
3995
-
async truncatePromise(p, len = 0) {
3996
-
const resolvedP = this.resolveFilename(`open '${p}'`, p);
3997
-
const index = this.entries.get(resolvedP);
3998
-
if (typeof index === `undefined`)
3999
-
throw EINVAL(`open '${p}'`);
4000
-
const source = await this.getFileSource(index, { asyncDecompress: true });
4001
-
const truncated = Buffer.alloc(len, 0);
4002
-
source.copy(truncated);
4003
-
return await this.writeFilePromise(p, truncated);
4004
-
}
4005
-
truncateSync(p, len = 0) {
4006
-
const resolvedP = this.resolveFilename(`open '${p}'`, p);
4007
-
const index = this.entries.get(resolvedP);
4008
-
if (typeof index === `undefined`)
4009
-
throw EINVAL(`open '${p}'`);
4010
-
const source = this.getFileSource(index);
4011
-
const truncated = Buffer.alloc(len, 0);
4012
-
source.copy(truncated);
4013
-
return this.writeFileSync(p, truncated);
4014
-
}
4015
-
async ftruncatePromise(fd, len) {
4016
-
return this.truncatePromise(this.fdToPath(fd, `ftruncate`), len);
4017
-
}
4018
-
ftruncateSync(fd, len) {
4019
-
return this.truncateSync(this.fdToPath(fd, `ftruncateSync`), len);
4020
-
}
4021
-
watch(p, a, b) {
4022
-
let persistent;
4023
-
switch (typeof a) {
4024
-
case `function`:
4025
-
case `string`:
4026
-
case `undefined`:
4027
-
{
4028
-
persistent = true;
4029
-
}
4030
-
break;
4031
-
default:
4032
-
{
4033
-
({ persistent = true } = a);
4034
-
}
4035
-
break;
4036
-
}
4037
-
if (!persistent)
4038
-
return { on: () => {
4039
-
}, close: () => {
4040
-
} };
4041
-
const interval = setInterval(() => {
4042
-
}, 24 * 60 * 60 * 1e3);
4043
-
return { on: () => {
4044
-
}, close: () => {
4045
-
clearInterval(interval);
4046
-
} };
4047
-
}
4048
-
watchFile(p, a, b) {
4049
-
const resolvedP = ppath.resolve(PortablePath.root, p);
4050
-
return watchFile(this, resolvedP, a, b);
4051
-
}
4052
-
unwatchFile(p, cb) {
4053
-
const resolvedP = ppath.resolve(PortablePath.root, p);
4054
-
return unwatchFile(this, resolvedP, cb);
4055
-
}
4056
-
}
4057
-
4058
-
class ProxiedFS extends FakeFS {
4059
-
getExtractHint(hints) {
4060
-
return this.baseFs.getExtractHint(hints);
4061
-
}
4062
-
resolve(path) {
4063
-
return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path)));
4064
-
}
4065
-
getRealPath() {
4066
-
return this.mapFromBase(this.baseFs.getRealPath());
4067
-
}
4068
-
async openPromise(p, flags, mode) {
4069
-
return this.baseFs.openPromise(this.mapToBase(p), flags, mode);
4070
-
}
4071
-
openSync(p, flags, mode) {
4072
-
return this.baseFs.openSync(this.mapToBase(p), flags, mode);
4073
-
}
4074
-
async opendirPromise(p, opts) {
4075
-
return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p });
4076
-
}
4077
-
opendirSync(p, opts) {
4078
-
return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p });
4079
-
}
4080
-
async readPromise(fd, buffer, offset, length, position) {
4081
-
return await this.baseFs.readPromise(fd, buffer, offset, length, position);
4082
-
}
4083
-
readSync(fd, buffer, offset, length, position) {
4084
-
return this.baseFs.readSync(fd, buffer, offset, length, position);
4085
-
}
4086
-
async writePromise(fd, buffer, offset, length, position) {
4087
-
if (typeof buffer === `string`) {
4088
-
return await this.baseFs.writePromise(fd, buffer, offset);
4089
-
} else {
4090
-
return await this.baseFs.writePromise(fd, buffer, offset, length, position);
4091
-
}
4092
-
}
4093
-
writeSync(fd, buffer, offset, length, position) {
4094
-
if (typeof buffer === `string`) {
4095
-
return this.baseFs.writeSync(fd, buffer, offset);
4096
-
} else {
4097
-
return this.baseFs.writeSync(fd, buffer, offset, length, position);
4098
-
}
4099
-
}
4100
-
async closePromise(fd) {
4101
-
return this.baseFs.closePromise(fd);
4102
-
}
4103
-
closeSync(fd) {
4104
-
this.baseFs.closeSync(fd);
4105
-
}
4106
-
createReadStream(p, opts) {
4107
-
return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts);
4108
-
}
4109
-
createWriteStream(p, opts) {
4110
-
return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts);
4111
-
}
4112
-
async realpathPromise(p) {
4113
-
return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p)));
4114
-
}
4115
-
realpathSync(p) {
4116
-
return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p)));
4117
-
}
4118
-
async existsPromise(p) {
4119
-
return this.baseFs.existsPromise(this.mapToBase(p));
4120
-
}
4121
-
existsSync(p) {
4122
-
return this.baseFs.existsSync(this.mapToBase(p));
4123
-
}
4124
-
accessSync(p, mode) {
4125
-
return this.baseFs.accessSync(this.mapToBase(p), mode);
4126
-
}
4127
-
async accessPromise(p, mode) {
4128
-
return this.baseFs.accessPromise(this.mapToBase(p), mode);
4129
-
}
4130
-
async statPromise(p, opts) {
4131
-
return this.baseFs.statPromise(this.mapToBase(p), opts);
4132
-
}
4133
-
statSync(p, opts) {
4134
-
return this.baseFs.statSync(this.mapToBase(p), opts);
4135
-
}
4136
-
async fstatPromise(fd, opts) {
4137
-
return this.baseFs.fstatPromise(fd, opts);
4138
-
}
4139
-
fstatSync(fd, opts) {
4140
-
return this.baseFs.fstatSync(fd, opts);
4141
-
}
4142
-
lstatPromise(p, opts) {
4143
-
return this.baseFs.lstatPromise(this.mapToBase(p), opts);
4144
-
}
4145
-
lstatSync(p, opts) {
4146
-
return this.baseFs.lstatSync(this.mapToBase(p), opts);
4147
-
}
4148
-
async fchmodPromise(fd, mask) {
4149
-
return this.baseFs.fchmodPromise(fd, mask);
4150
-
}
4151
-
fchmodSync(fd, mask) {
4152
-
return this.baseFs.fchmodSync(fd, mask);
4153
-
}
4154
-
async chmodPromise(p, mask) {
4155
-
return this.baseFs.chmodPromise(this.mapToBase(p), mask);
4156
-
}
4157
-
chmodSync(p, mask) {
4158
-
return this.baseFs.chmodSync(this.mapToBase(p), mask);
4159
-
}
4160
-
async fchownPromise(fd, uid, gid) {
4161
-
return this.baseFs.fchownPromise(fd, uid, gid);
4162
-
}
4163
-
fchownSync(fd, uid, gid) {
4164
-
return this.baseFs.fchownSync(fd, uid, gid);
4165
-
}
4166
-
async chownPromise(p, uid, gid) {
4167
-
return this.baseFs.chownPromise(this.mapToBase(p), uid, gid);
4168
-
}
4169
-
chownSync(p, uid, gid) {
4170
-
return this.baseFs.chownSync(this.mapToBase(p), uid, gid);
4171
-
}
4172
-
async renamePromise(oldP, newP) {
4173
-
return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP));
4174
-
}
4175
-
renameSync(oldP, newP) {
4176
-
return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP));
4177
-
}
4178
-
async copyFilePromise(sourceP, destP, flags = 0) {
4179
-
return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags);
4180
-
}
4181
-
copyFileSync(sourceP, destP, flags = 0) {
4182
-
return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags);
4183
-
}
4184
-
async appendFilePromise(p, content, opts) {
4185
-
return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts);
4186
-
}
4187
-
appendFileSync(p, content, opts) {
4188
-
return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts);
4189
-
}
4190
-
async writeFilePromise(p, content, opts) {
4191
-
return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts);
4192
-
}
4193
-
writeFileSync(p, content, opts) {
4194
-
return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts);
4195
-
}
4196
-
async unlinkPromise(p) {
4197
-
return this.baseFs.unlinkPromise(this.mapToBase(p));
4198
-
}
4199
-
unlinkSync(p) {
4200
-
return this.baseFs.unlinkSync(this.mapToBase(p));
4201
-
}
4202
-
async utimesPromise(p, atime, mtime) {
4203
-
return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime);
4204
-
}
4205
-
utimesSync(p, atime, mtime) {
4206
-
return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime);
4207
-
}
4208
-
async mkdirPromise(p, opts) {
4209
-
return this.baseFs.mkdirPromise(this.mapToBase(p), opts);
4210
-
}
4211
-
mkdirSync(p, opts) {
4212
-
return this.baseFs.mkdirSync(this.mapToBase(p), opts);
4213
-
}
4214
-
async rmdirPromise(p, opts) {
4215
-
return this.baseFs.rmdirPromise(this.mapToBase(p), opts);
4216
-
}
4217
-
rmdirSync(p, opts) {
4218
-
return this.baseFs.rmdirSync(this.mapToBase(p), opts);
4219
-
}
4220
-
async linkPromise(existingP, newP) {
4221
-
return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP));
4222
-
}
4223
-
linkSync(existingP, newP) {
4224
-
return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP));
4225
-
}
4226
-
async symlinkPromise(target, p, type) {
4227
-
const mappedP = this.mapToBase(p);
4228
-
if (this.pathUtils.isAbsolute(target))
4229
-
return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type);
4230
-
const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target));
4231
-
const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget);
4232
-
return this.baseFs.symlinkPromise(mappedTarget, mappedP, type);
4233
-
}
4234
-
symlinkSync(target, p, type) {
4235
-
const mappedP = this.mapToBase(p);
4236
-
if (this.pathUtils.isAbsolute(target))
4237
-
return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type);
4238
-
const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target));
4239
-
const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget);
4240
-
return this.baseFs.symlinkSync(mappedTarget, mappedP, type);
4241
-
}
4242
-
async readFilePromise(p, encoding) {
4243
-
if (encoding === `utf8`) {
4244
-
return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding);
4245
-
} else {
4246
-
return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding);
4247
-
}
4248
-
}
4249
-
readFileSync(p, encoding) {
4250
-
if (encoding === `utf8`) {
4251
-
return this.baseFs.readFileSync(this.fsMapToBase(p), encoding);
4252
-
} else {
4253
-
return this.baseFs.readFileSync(this.fsMapToBase(p), encoding);
4254
-
}
4255
-
}
4256
-
async readdirPromise(p, opts) {
4257
-
return this.baseFs.readdirPromise(this.mapToBase(p), opts);
4258
-
}
4259
-
readdirSync(p, opts) {
4260
-
return this.baseFs.readdirSync(this.mapToBase(p), opts);
4261
-
}
4262
-
async readlinkPromise(p) {
4263
-
return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p)));
4264
-
}
4265
-
readlinkSync(p) {
4266
-
return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p)));
4267
-
}
4268
-
async truncatePromise(p, len) {
4269
-
return this.baseFs.truncatePromise(this.mapToBase(p), len);
4270
-
}
4271
-
truncateSync(p, len) {
4272
-
return this.baseFs.truncateSync(this.mapToBase(p), len);
4273
-
}
4274
-
async ftruncatePromise(fd, len) {
4275
-
return this.baseFs.ftruncatePromise(fd, len);
4276
-
}
4277
-
ftruncateSync(fd, len) {
4278
-
return this.baseFs.ftruncateSync(fd, len);
4279
-
}
4280
-
watch(p, a, b) {
4281
-
return this.baseFs.watch(
4282
-
this.mapToBase(p),
4283
-
a,
4284
-
b
4285
-
);
4286
-
}
4287
-
watchFile(p, a, b) {
4288
-
return this.baseFs.watchFile(
4289
-
this.mapToBase(p),
4290
-
a,
4291
-
b
4292
-
);
4293
-
}
4294
-
unwatchFile(p, cb) {
4295
-
return this.baseFs.unwatchFile(this.mapToBase(p), cb);
4296
-
}
4297
-
fsMapToBase(p) {
4298
-
if (typeof p === `number`) {
4299
-
return p;
4300
-
} else {
4301
-
return this.mapToBase(p);
4302
-
}
4303
-
}
4304
-
}
4305
-
4306
-
class PosixFS extends ProxiedFS {
4307
-
constructor(baseFs) {
4308
-
super(npath);
4309
-
this.baseFs = baseFs;
4310
-
}
4311
-
mapFromBase(path) {
4312
-
return npath.fromPortablePath(path);
4313
-
}
4314
-
mapToBase(path) {
4315
-
return npath.toPortablePath(path);
4316
-
}
4317
-
}
4318
-
4319
-
const NUMBER_REGEXP = /^[0-9]+$/;
4320
-
const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/;
4321
-
const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/;
4322
-
class VirtualFS extends ProxiedFS {
4323
-
constructor({ baseFs = new NodeFS() } = {}) {
4324
-
super(ppath);
4325
-
this.baseFs = baseFs;
4326
-
}
4327
-
static makeVirtualPath(base, component, to) {
4328
-
if (ppath.basename(base) !== `__virtual__`)
4329
-
throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`);
4330
-
if (!ppath.basename(component).match(VALID_COMPONENT))
4331
-
throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`);
4332
-
const target = ppath.relative(ppath.dirname(base), to);
4333
-
const segments = target.split(`/`);
4334
-
let depth = 0;
4335
-
while (depth < segments.length && segments[depth] === `..`)
4336
-
depth += 1;
4337
-
const finalSegments = segments.slice(depth);
4338
-
const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments);
4339
-
return fullVirtualPath;
4340
-
}
4341
-
static resolveVirtual(p) {
4342
-
const match = p.match(VIRTUAL_REGEXP);
4343
-
if (!match || !match[3] && match[5])
4344
-
return p;
4345
-
const target = ppath.dirname(match[1]);
4346
-
if (!match[3] || !match[4])
4347
-
return target;
4348
-
const isnum = NUMBER_REGEXP.test(match[4]);
4349
-
if (!isnum)
4350
-
return p;
4351
-
const depth = Number(match[4]);
4352
-
const backstep = `../`.repeat(depth);
4353
-
const subpath = match[5] || `.`;
4354
-
return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath));
4355
-
}
4356
-
getExtractHint(hints) {
4357
-
return this.baseFs.getExtractHint(hints);
4358
-
}
4359
-
getRealPath() {
4360
-
return this.baseFs.getRealPath();
4361
-
}
4362
-
realpathSync(p) {
4363
-
const match = p.match(VIRTUAL_REGEXP);
4364
-
if (!match)
4365
-
return this.baseFs.realpathSync(p);
4366
-
if (!match[5])
4367
-
return p;
4368
-
const realpath = this.baseFs.realpathSync(this.mapToBase(p));
4369
-
return VirtualFS.makeVirtualPath(match[1], match[3], realpath);
4370
-
}
4371
-
async realpathPromise(p) {
4372
-
const match = p.match(VIRTUAL_REGEXP);
4373
-
if (!match)
4374
-
return await this.baseFs.realpathPromise(p);
4375
-
if (!match[5])
4376
-
return p;
4377
-
const realpath = await this.baseFs.realpathPromise(this.mapToBase(p));
4378
-
return VirtualFS.makeVirtualPath(match[1], match[3], realpath);
4379
-
}
4380
-
mapToBase(p) {
4381
-
if (p === ``)
4382
-
return p;
4383
-
if (this.pathUtils.isAbsolute(p))
4384
-
return VirtualFS.resolveVirtual(p);
4385
-
const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot));
4386
-
const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p));
4387
-
return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot;
4388
-
}
4389
-
mapFromBase(p) {
4390
-
return p;
4391
-
}
4392
-
}
4393
-
4394
-
const ZIP_MASK = 4278190080;
4395
-
const ZIP_MAGIC = 704643072;
4396
-
const getArchivePart = (path, extension) => {
4397
-
let idx = path.indexOf(extension);
4398
-
if (idx <= 0)
4399
-
return null;
4400
-
let nextCharIdx = idx;
4401
-
while (idx >= 0) {
4402
-
nextCharIdx = idx + extension.length;
4403
-
if (path[nextCharIdx] === ppath.sep)
4404
-
break;
4405
-
if (path[idx - 1] === ppath.sep)
4406
-
return null;
4407
-
idx = path.indexOf(extension, nextCharIdx);
4408
-
}
4409
-
if (path.length > nextCharIdx && path[nextCharIdx] !== ppath.sep)
4410
-
return null;
4411
-
return path.slice(0, nextCharIdx);
4412
-
};
4413
-
class ZipOpenFS extends BasePortableFakeFS {
4414
-
constructor({ libzip, baseFs = new NodeFS(), filter = null, maxOpenFiles = Infinity, readOnlyArchives = false, useCache = true, maxAge = 5e3, fileExtensions = null }) {
4415
-
super();
4416
-
this.fdMap = /* @__PURE__ */ new Map();
4417
-
this.nextFd = 3;
4418
-
this.isZip = /* @__PURE__ */ new Set();
4419
-
this.notZip = /* @__PURE__ */ new Set();
4420
-
this.realPaths = /* @__PURE__ */ new Map();
4421
-
this.limitOpenFilesTimeout = null;
4422
-
this.libzipFactory = typeof libzip !== `function` ? () => libzip : libzip;
4423
-
this.baseFs = baseFs;
4424
-
this.zipInstances = useCache ? /* @__PURE__ */ new Map() : null;
4425
-
this.filter = filter;
4426
-
this.maxOpenFiles = maxOpenFiles;
4427
-
this.readOnlyArchives = readOnlyArchives;
4428
-
this.maxAge = maxAge;
4429
-
this.fileExtensions = fileExtensions;
4430
-
}
4431
-
static async openPromise(fn, opts) {
4432
-
const zipOpenFs = new ZipOpenFS(opts);
4433
-
try {
4434
-
return await fn(zipOpenFs);
4435
-
} finally {
4436
-
zipOpenFs.saveAndClose();
4437
-
}
4438
-
}
4439
-
get libzip() {
4440
-
if (typeof this.libzipInstance === `undefined`)
4441
-
this.libzipInstance = this.libzipFactory();
4442
-
return this.libzipInstance;
4443
-
}
4444
-
getExtractHint(hints) {
4445
-
return this.baseFs.getExtractHint(hints);
4446
-
}
4447
-
getRealPath() {
4448
-
return this.baseFs.getRealPath();
4449
-
}
4450
-
saveAndClose() {
4451
-
unwatchAllFiles(this);
4452
-
if (this.zipInstances) {
4453
-
for (const [path, { zipFs }] of this.zipInstances.entries()) {
4454
-
zipFs.saveAndClose();
4455
-
this.zipInstances.delete(path);
4456
-
}
4457
-
}
4458
-
}
4459
-
discardAndClose() {
4460
-
unwatchAllFiles(this);
4461
-
if (this.zipInstances) {
4462
-
for (const [path, { zipFs }] of this.zipInstances.entries()) {
4463
-
zipFs.discardAndClose();
4464
-
this.zipInstances.delete(path);
4465
-
}
4466
-
}
4467
-
}
4468
-
resolve(p) {
4469
-
return this.baseFs.resolve(p);
4470
-
}
4471
-
remapFd(zipFs, fd) {
4472
-
const remappedFd = this.nextFd++ | ZIP_MAGIC;
4473
-
this.fdMap.set(remappedFd, [zipFs, fd]);
4474
-
return remappedFd;
4475
-
}
4476
-
async openPromise(p, flags, mode) {
4477
-
return await this.makeCallPromise(p, async () => {
4478
-
return await this.baseFs.openPromise(p, flags, mode);
4479
-
}, async (zipFs, { subPath }) => {
4480
-
return this.remapFd(zipFs, await zipFs.openPromise(subPath, flags, mode));
4481
-
});
4482
-
}
4483
-
openSync(p, flags, mode) {
4484
-
return this.makeCallSync(p, () => {
4485
-
return this.baseFs.openSync(p, flags, mode);
4486
-
}, (zipFs, { subPath }) => {
4487
-
return this.remapFd(zipFs, zipFs.openSync(subPath, flags, mode));
4488
-
});
4489
-
}
4490
-
async opendirPromise(p, opts) {
4491
-
return await this.makeCallPromise(p, async () => {
4492
-
return await this.baseFs.opendirPromise(p, opts);
4493
-
}, async (zipFs, { subPath }) => {
4494
-
return await zipFs.opendirPromise(subPath, opts);
4495
-
}, {
4496
-
requireSubpath: false
4497
-
});
4498
-
}
4499
-
opendirSync(p, opts) {
4500
-
return this.makeCallSync(p, () => {
4501
-
return this.baseFs.opendirSync(p, opts);
4502
-
}, (zipFs, { subPath }) => {
4503
-
return zipFs.opendirSync(subPath, opts);
4504
-
}, {
4505
-
requireSubpath: false
4506
-
});
4507
-
}
4508
-
async readPromise(fd, buffer, offset, length, position) {
4509
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
4510
-
return await this.baseFs.readPromise(fd, buffer, offset, length, position);
4511
-
const entry = this.fdMap.get(fd);
4512
-
if (typeof entry === `undefined`)
4513
-
throw EBADF(`read`);
4514
-
const [zipFs, realFd] = entry;
4515
-
return await zipFs.readPromise(realFd, buffer, offset, length, position);
4516
-
}
4517
-
readSync(fd, buffer, offset, length, position) {
4518
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
4519
-
return this.baseFs.readSync(fd, buffer, offset, length, position);
4520
-
const entry = this.fdMap.get(fd);
4521
-
if (typeof entry === `undefined`)
4522
-
throw EBADF(`readSync`);
4523
-
const [zipFs, realFd] = entry;
4524
-
return zipFs.readSync(realFd, buffer, offset, length, position);
4525
-
}
4526
-
async writePromise(fd, buffer, offset, length, position) {
4527
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC) {
4528
-
if (typeof buffer === `string`) {
4529
-
return await this.baseFs.writePromise(fd, buffer, offset);
4530
-
} else {
4531
-
return await this.baseFs.writePromise(fd, buffer, offset, length, position);
4532
-
}
4533
-
}
4534
-
const entry = this.fdMap.get(fd);
4535
-
if (typeof entry === `undefined`)
4536
-
throw EBADF(`write`);
4537
-
const [zipFs, realFd] = entry;
4538
-
if (typeof buffer === `string`) {
4539
-
return await zipFs.writePromise(realFd, buffer, offset);
4540
-
} else {
4541
-
return await zipFs.writePromise(realFd, buffer, offset, length, position);
4542
-
}
4543
-
}
4544
-
writeSync(fd, buffer, offset, length, position) {
4545
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC) {
4546
-
if (typeof buffer === `string`) {
4547
-
return this.baseFs.writeSync(fd, buffer, offset);
4548
-
} else {
4549
-
return this.baseFs.writeSync(fd, buffer, offset, length, position);
4550
-
}
4551
-
}
4552
-
const entry = this.fdMap.get(fd);
4553
-
if (typeof entry === `undefined`)
4554
-
throw EBADF(`writeSync`);
4555
-
const [zipFs, realFd] = entry;
4556
-
if (typeof buffer === `string`) {
4557
-
return zipFs.writeSync(realFd, buffer, offset);
4558
-
} else {
4559
-
return zipFs.writeSync(realFd, buffer, offset, length, position);
4560
-
}
4561
-
}
4562
-
async closePromise(fd) {
4563
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
4564
-
return await this.baseFs.closePromise(fd);
4565
-
const entry = this.fdMap.get(fd);
4566
-
if (typeof entry === `undefined`)
4567
-
throw EBADF(`close`);
4568
-
this.fdMap.delete(fd);
4569
-
const [zipFs, realFd] = entry;
4570
-
return await zipFs.closePromise(realFd);
4571
-
}
4572
-
closeSync(fd) {
4573
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
4574
-
return this.baseFs.closeSync(fd);
4575
-
const entry = this.fdMap.get(fd);
4576
-
if (typeof entry === `undefined`)
4577
-
throw EBADF(`closeSync`);
4578
-
this.fdMap.delete(fd);
4579
-
const [zipFs, realFd] = entry;
4580
-
return zipFs.closeSync(realFd);
4581
-
}
4582
-
createReadStream(p, opts) {
4583
-
if (p === null)
4584
-
return this.baseFs.createReadStream(p, opts);
4585
-
return this.makeCallSync(p, () => {
4586
-
return this.baseFs.createReadStream(p, opts);
4587
-
}, (zipFs, { archivePath, subPath }) => {
4588
-
const stream = zipFs.createReadStream(subPath, opts);
4589
-
stream.path = npath.fromPortablePath(this.pathUtils.join(archivePath, subPath));
4590
-
return stream;
4591
-
});
4592
-
}
4593
-
createWriteStream(p, opts) {
4594
-
if (p === null)
4595
-
return this.baseFs.createWriteStream(p, opts);
4596
-
return this.makeCallSync(p, () => {
4597
-
return this.baseFs.createWriteStream(p, opts);
4598
-
}, (zipFs, { subPath }) => {
4599
-
return zipFs.createWriteStream(subPath, opts);
4600
-
});
4601
-
}
4602
-
async realpathPromise(p) {
4603
-
return await this.makeCallPromise(p, async () => {
4604
-
return await this.baseFs.realpathPromise(p);
4605
-
}, async (zipFs, { archivePath, subPath }) => {
4606
-
let realArchivePath = this.realPaths.get(archivePath);
4607
-
if (typeof realArchivePath === `undefined`) {
4608
-
realArchivePath = await this.baseFs.realpathPromise(archivePath);
4609
-
this.realPaths.set(archivePath, realArchivePath);
4610
-
}
4611
-
return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, await zipFs.realpathPromise(subPath)));
4612
-
});
4613
-
}
4614
-
realpathSync(p) {
4615
-
return this.makeCallSync(p, () => {
4616
-
return this.baseFs.realpathSync(p);
4617
-
}, (zipFs, { archivePath, subPath }) => {
4618
-
let realArchivePath = this.realPaths.get(archivePath);
4619
-
if (typeof realArchivePath === `undefined`) {
4620
-
realArchivePath = this.baseFs.realpathSync(archivePath);
4621
-
this.realPaths.set(archivePath, realArchivePath);
4622
-
}
4623
-
return this.pathUtils.join(realArchivePath, this.pathUtils.relative(PortablePath.root, zipFs.realpathSync(subPath)));
4624
-
});
4625
-
}
4626
-
async existsPromise(p) {
4627
-
return await this.makeCallPromise(p, async () => {
4628
-
return await this.baseFs.existsPromise(p);
4629
-
}, async (zipFs, { subPath }) => {
4630
-
return await zipFs.existsPromise(subPath);
4631
-
});
4632
-
}
4633
-
existsSync(p) {
4634
-
return this.makeCallSync(p, () => {
4635
-
return this.baseFs.existsSync(p);
4636
-
}, (zipFs, { subPath }) => {
4637
-
return zipFs.existsSync(subPath);
4638
-
});
4639
-
}
4640
-
async accessPromise(p, mode) {
4641
-
return await this.makeCallPromise(p, async () => {
4642
-
return await this.baseFs.accessPromise(p, mode);
4643
-
}, async (zipFs, { subPath }) => {
4644
-
return await zipFs.accessPromise(subPath, mode);
4645
-
});
4646
-
}
4647
-
accessSync(p, mode) {
4648
-
return this.makeCallSync(p, () => {
4649
-
return this.baseFs.accessSync(p, mode);
4650
-
}, (zipFs, { subPath }) => {
4651
-
return zipFs.accessSync(subPath, mode);
4652
-
});
4653
-
}
4654
-
async statPromise(p, opts) {
4655
-
return await this.makeCallPromise(p, async () => {
4656
-
return await this.baseFs.statPromise(p, opts);
4657
-
}, async (zipFs, { subPath }) => {
4658
-
return await zipFs.statPromise(subPath, opts);
4659
-
});
4660
-
}
4661
-
statSync(p, opts) {
4662
-
return this.makeCallSync(p, () => {
4663
-
return this.baseFs.statSync(p, opts);
4664
-
}, (zipFs, { subPath }) => {
4665
-
return zipFs.statSync(subPath, opts);
4666
-
});
4667
-
}
4668
-
async fstatPromise(fd, opts) {
4669
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
4670
-
return this.baseFs.fstatPromise(fd, opts);
4671
-
const entry = this.fdMap.get(fd);
4672
-
if (typeof entry === `undefined`)
4673
-
throw EBADF(`fstat`);
4674
-
const [zipFs, realFd] = entry;
4675
-
return zipFs.fstatPromise(realFd, opts);
4676
-
}
4677
-
fstatSync(fd, opts) {
4678
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
4679
-
return this.baseFs.fstatSync(fd, opts);
4680
-
const entry = this.fdMap.get(fd);
4681
-
if (typeof entry === `undefined`)
4682
-
throw EBADF(`fstatSync`);
4683
-
const [zipFs, realFd] = entry;
4684
-
return zipFs.fstatSync(realFd, opts);
4685
-
}
4686
-
async lstatPromise(p, opts) {
4687
-
return await this.makeCallPromise(p, async () => {
4688
-
return await this.baseFs.lstatPromise(p, opts);
4689
-
}, async (zipFs, { subPath }) => {
4690
-
return await zipFs.lstatPromise(subPath, opts);
4691
-
});
4692
-
}
4693
-
lstatSync(p, opts) {
4694
-
return this.makeCallSync(p, () => {
4695
-
return this.baseFs.lstatSync(p, opts);
4696
-
}, (zipFs, { subPath }) => {
4697
-
return zipFs.lstatSync(subPath, opts);
4698
-
});
4699
-
}
4700
-
async fchmodPromise(fd, mask) {
4701
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
4702
-
return this.baseFs.fchmodPromise(fd, mask);
4703
-
const entry = this.fdMap.get(fd);
4704
-
if (typeof entry === `undefined`)
4705
-
throw EBADF(`fchmod`);
4706
-
const [zipFs, realFd] = entry;
4707
-
return zipFs.fchmodPromise(realFd, mask);
4708
-
}
4709
-
fchmodSync(fd, mask) {
4710
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
4711
-
return this.baseFs.fchmodSync(fd, mask);
4712
-
const entry = this.fdMap.get(fd);
4713
-
if (typeof entry === `undefined`)
4714
-
throw EBADF(`fchmodSync`);
4715
-
const [zipFs, realFd] = entry;
4716
-
return zipFs.fchmodSync(realFd, mask);
4717
-
}
4718
-
async chmodPromise(p, mask) {
4719
-
return await this.makeCallPromise(p, async () => {
4720
-
return await this.baseFs.chmodPromise(p, mask);
4721
-
}, async (zipFs, { subPath }) => {
4722
-
return await zipFs.chmodPromise(subPath, mask);
4723
-
});
4724
-
}
4725
-
chmodSync(p, mask) {
4726
-
return this.makeCallSync(p, () => {
4727
-
return this.baseFs.chmodSync(p, mask);
4728
-
}, (zipFs, { subPath }) => {
4729
-
return zipFs.chmodSync(subPath, mask);
4730
-
});
4731
-
}
4732
-
async fchownPromise(fd, uid, gid) {
4733
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
4734
-
return this.baseFs.fchownPromise(fd, uid, gid);
4735
-
const entry = this.fdMap.get(fd);
4736
-
if (typeof entry === `undefined`)
4737
-
throw EBADF(`fchown`);
4738
-
const [zipFs, realFd] = entry;
4739
-
return zipFs.fchownPromise(realFd, uid, gid);
4740
-
}
4741
-
fchownSync(fd, uid, gid) {
4742
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
4743
-
return this.baseFs.fchownSync(fd, uid, gid);
4744
-
const entry = this.fdMap.get(fd);
4745
-
if (typeof entry === `undefined`)
4746
-
throw EBADF(`fchownSync`);
4747
-
const [zipFs, realFd] = entry;
4748
-
return zipFs.fchownSync(realFd, uid, gid);
4749
-
}
4750
-
async chownPromise(p, uid, gid) {
4751
-
return await this.makeCallPromise(p, async () => {
4752
-
return await this.baseFs.chownPromise(p, uid, gid);
4753
-
}, async (zipFs, { subPath }) => {
4754
-
return await zipFs.chownPromise(subPath, uid, gid);
4755
-
});
4756
-
}
4757
-
chownSync(p, uid, gid) {
4758
-
return this.makeCallSync(p, () => {
4759
-
return this.baseFs.chownSync(p, uid, gid);
4760
-
}, (zipFs, { subPath }) => {
4761
-
return zipFs.chownSync(subPath, uid, gid);
4762
-
});
4763
-
}
4764
-
async renamePromise(oldP, newP) {
4765
-
return await this.makeCallPromise(oldP, async () => {
4766
-
return await this.makeCallPromise(newP, async () => {
4767
-
return await this.baseFs.renamePromise(oldP, newP);
4768
-
}, async () => {
4769
-
throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` });
4770
-
});
4771
-
}, async (zipFsO, { subPath: subPathO }) => {
4772
-
return await this.makeCallPromise(newP, async () => {
4773
-
throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` });
4774
-
}, async (zipFsN, { subPath: subPathN }) => {
4775
-
if (zipFsO !== zipFsN) {
4776
-
throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` });
4777
-
} else {
4778
-
return await zipFsO.renamePromise(subPathO, subPathN);
4779
-
}
4780
-
});
4781
-
});
4782
-
}
4783
-
renameSync(oldP, newP) {
4784
-
return this.makeCallSync(oldP, () => {
4785
-
return this.makeCallSync(newP, () => {
4786
-
return this.baseFs.renameSync(oldP, newP);
4787
-
}, () => {
4788
-
throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` });
4789
-
});
4790
-
}, (zipFsO, { subPath: subPathO }) => {
4791
-
return this.makeCallSync(newP, () => {
4792
-
throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` });
4793
-
}, (zipFsN, { subPath: subPathN }) => {
4794
-
if (zipFsO !== zipFsN) {
4795
-
throw Object.assign(new Error(`EEXDEV: cross-device link not permitted`), { code: `EEXDEV` });
4796
-
} else {
4797
-
return zipFsO.renameSync(subPathO, subPathN);
4798
-
}
4799
-
});
4800
-
});
4801
-
}
4802
-
async copyFilePromise(sourceP, destP, flags = 0) {
4803
-
const fallback = async (sourceFs, sourceP2, destFs, destP2) => {
4804
-
if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0)
4805
-
throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` });
4806
-
if (flags & fs.constants.COPYFILE_EXCL && await this.existsPromise(sourceP2))
4807
-
throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` });
4808
-
let content;
4809
-
try {
4810
-
content = await sourceFs.readFilePromise(sourceP2);
4811
-
} catch (error) {
4812
-
throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` });
4813
-
}
4814
-
await destFs.writeFilePromise(destP2, content);
4815
-
};
4816
-
return await this.makeCallPromise(sourceP, async () => {
4817
-
return await this.makeCallPromise(destP, async () => {
4818
-
return await this.baseFs.copyFilePromise(sourceP, destP, flags);
4819
-
}, async (zipFsD, { subPath: subPathD }) => {
4820
-
return await fallback(this.baseFs, sourceP, zipFsD, subPathD);
4821
-
});
4822
-
}, async (zipFsS, { subPath: subPathS }) => {
4823
-
return await this.makeCallPromise(destP, async () => {
4824
-
return await fallback(zipFsS, subPathS, this.baseFs, destP);
4825
-
}, async (zipFsD, { subPath: subPathD }) => {
4826
-
if (zipFsS !== zipFsD) {
4827
-
return await fallback(zipFsS, subPathS, zipFsD, subPathD);
4828
-
} else {
4829
-
return await zipFsS.copyFilePromise(subPathS, subPathD, flags);
4830
-
}
4831
-
});
4832
-
});
4833
-
}
4834
-
copyFileSync(sourceP, destP, flags = 0) {
4835
-
const fallback = (sourceFs, sourceP2, destFs, destP2) => {
4836
-
if ((flags & fs.constants.COPYFILE_FICLONE_FORCE) !== 0)
4837
-
throw Object.assign(new Error(`EXDEV: cross-device clone not permitted, copyfile '${sourceP2}' -> ${destP2}'`), { code: `EXDEV` });
4838
-
if (flags & fs.constants.COPYFILE_EXCL && this.existsSync(sourceP2))
4839
-
throw Object.assign(new Error(`EEXIST: file already exists, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EEXIST` });
4840
-
let content;
4841
-
try {
4842
-
content = sourceFs.readFileSync(sourceP2);
4843
-
} catch (error) {
4844
-
throw Object.assign(new Error(`EINVAL: invalid argument, copyfile '${sourceP2}' -> '${destP2}'`), { code: `EINVAL` });
4845
-
}
4846
-
destFs.writeFileSync(destP2, content);
4847
-
};
4848
-
return this.makeCallSync(sourceP, () => {
4849
-
return this.makeCallSync(destP, () => {
4850
-
return this.baseFs.copyFileSync(sourceP, destP, flags);
4851
-
}, (zipFsD, { subPath: subPathD }) => {
4852
-
return fallback(this.baseFs, sourceP, zipFsD, subPathD);
4853
-
});
4854
-
}, (zipFsS, { subPath: subPathS }) => {
4855
-
return this.makeCallSync(destP, () => {
4856
-
return fallback(zipFsS, subPathS, this.baseFs, destP);
4857
-
}, (zipFsD, { subPath: subPathD }) => {
4858
-
if (zipFsS !== zipFsD) {
4859
-
return fallback(zipFsS, subPathS, zipFsD, subPathD);
4860
-
} else {
4861
-
return zipFsS.copyFileSync(subPathS, subPathD, flags);
4862
-
}
4863
-
});
4864
-
});
4865
-
}
4866
-
async appendFilePromise(p, content, opts) {
4867
-
return await this.makeCallPromise(p, async () => {
4868
-
return await this.baseFs.appendFilePromise(p, content, opts);
4869
-
}, async (zipFs, { subPath }) => {
4870
-
return await zipFs.appendFilePromise(subPath, content, opts);
4871
-
});
4872
-
}
4873
-
appendFileSync(p, content, opts) {
4874
-
return this.makeCallSync(p, () => {
4875
-
return this.baseFs.appendFileSync(p, content, opts);
4876
-
}, (zipFs, { subPath }) => {
4877
-
return zipFs.appendFileSync(subPath, content, opts);
4878
-
});
4879
-
}
4880
-
async writeFilePromise(p, content, opts) {
4881
-
return await this.makeCallPromise(p, async () => {
4882
-
return await this.baseFs.writeFilePromise(p, content, opts);
4883
-
}, async (zipFs, { subPath }) => {
4884
-
return await zipFs.writeFilePromise(subPath, content, opts);
4885
-
});
4886
-
}
4887
-
writeFileSync(p, content, opts) {
4888
-
return this.makeCallSync(p, () => {
4889
-
return this.baseFs.writeFileSync(p, content, opts);
4890
-
}, (zipFs, { subPath }) => {
4891
-
return zipFs.writeFileSync(subPath, content, opts);
4892
-
});
4893
-
}
4894
-
async unlinkPromise(p) {
4895
-
return await this.makeCallPromise(p, async () => {
4896
-
return await this.baseFs.unlinkPromise(p);
4897
-
}, async (zipFs, { subPath }) => {
4898
-
return await zipFs.unlinkPromise(subPath);
4899
-
});
4900
-
}
4901
-
unlinkSync(p) {
4902
-
return this.makeCallSync(p, () => {
4903
-
return this.baseFs.unlinkSync(p);
4904
-
}, (zipFs, { subPath }) => {
4905
-
return zipFs.unlinkSync(subPath);
4906
-
});
4907
-
}
4908
-
async utimesPromise(p, atime, mtime) {
4909
-
return await this.makeCallPromise(p, async () => {
4910
-
return await this.baseFs.utimesPromise(p, atime, mtime);
4911
-
}, async (zipFs, { subPath }) => {
4912
-
return await zipFs.utimesPromise(subPath, atime, mtime);
4913
-
});
4914
-
}
4915
-
utimesSync(p, atime, mtime) {
4916
-
return this.makeCallSync(p, () => {
4917
-
return this.baseFs.utimesSync(p, atime, mtime);
4918
-
}, (zipFs, { subPath }) => {
4919
-
return zipFs.utimesSync(subPath, atime, mtime);
4920
-
});
4921
-
}
4922
-
async mkdirPromise(p, opts) {
4923
-
return await this.makeCallPromise(p, async () => {
4924
-
return await this.baseFs.mkdirPromise(p, opts);
4925
-
}, async (zipFs, { subPath }) => {
4926
-
return await zipFs.mkdirPromise(subPath, opts);
4927
-
});
4928
-
}
4929
-
mkdirSync(p, opts) {
4930
-
return this.makeCallSync(p, () => {
4931
-
return this.baseFs.mkdirSync(p, opts);
4932
-
}, (zipFs, { subPath }) => {
4933
-
return zipFs.mkdirSync(subPath, opts);
4934
-
});
4935
-
}
4936
-
async rmdirPromise(p, opts) {
4937
-
return await this.makeCallPromise(p, async () => {
4938
-
return await this.baseFs.rmdirPromise(p, opts);
4939
-
}, async (zipFs, { subPath }) => {
4940
-
return await zipFs.rmdirPromise(subPath, opts);
4941
-
});
4942
-
}
4943
-
rmdirSync(p, opts) {
4944
-
return this.makeCallSync(p, () => {
4945
-
return this.baseFs.rmdirSync(p, opts);
4946
-
}, (zipFs, { subPath }) => {
4947
-
return zipFs.rmdirSync(subPath, opts);
4948
-
});
4949
-
}
4950
-
async linkPromise(existingP, newP) {
4951
-
return await this.makeCallPromise(newP, async () => {
4952
-
return await this.baseFs.linkPromise(existingP, newP);
4953
-
}, async (zipFs, { subPath }) => {
4954
-
return await zipFs.linkPromise(existingP, subPath);
4955
-
});
4956
-
}
4957
-
linkSync(existingP, newP) {
4958
-
return this.makeCallSync(newP, () => {
4959
-
return this.baseFs.linkSync(existingP, newP);
4960
-
}, (zipFs, { subPath }) => {
4961
-
return zipFs.linkSync(existingP, subPath);
4962
-
});
4963
-
}
4964
-
async symlinkPromise(target, p, type) {
4965
-
return await this.makeCallPromise(p, async () => {
4966
-
return await this.baseFs.symlinkPromise(target, p, type);
4967
-
}, async (zipFs, { subPath }) => {
4968
-
return await zipFs.symlinkPromise(target, subPath);
4969
-
});
4970
-
}
4971
-
symlinkSync(target, p, type) {
4972
-
return this.makeCallSync(p, () => {
4973
-
return this.baseFs.symlinkSync(target, p, type);
4974
-
}, (zipFs, { subPath }) => {
4975
-
return zipFs.symlinkSync(target, subPath);
4976
-
});
4977
-
}
4978
-
async readFilePromise(p, encoding) {
4979
-
return this.makeCallPromise(p, async () => {
4980
-
switch (encoding) {
4981
-
case `utf8`:
4982
-
return await this.baseFs.readFilePromise(p, encoding);
4983
-
default:
4984
-
return await this.baseFs.readFilePromise(p, encoding);
4985
-
}
4986
-
}, async (zipFs, { subPath }) => {
4987
-
return await zipFs.readFilePromise(subPath, encoding);
4988
-
});
4989
-
}
4990
-
readFileSync(p, encoding) {
4991
-
return this.makeCallSync(p, () => {
4992
-
switch (encoding) {
4993
-
case `utf8`:
4994
-
return this.baseFs.readFileSync(p, encoding);
4995
-
default:
4996
-
return this.baseFs.readFileSync(p, encoding);
4997
-
}
4998
-
}, (zipFs, { subPath }) => {
4999
-
return zipFs.readFileSync(subPath, encoding);
5000
-
});
5001
-
}
5002
-
async readdirPromise(p, opts) {
5003
-
return await this.makeCallPromise(p, async () => {
5004
-
return await this.baseFs.readdirPromise(p, opts);
5005
-
}, async (zipFs, { subPath }) => {
5006
-
return await zipFs.readdirPromise(subPath, opts);
5007
-
}, {
5008
-
requireSubpath: false
5009
-
});
5010
-
}
5011
-
readdirSync(p, opts) {
5012
-
return this.makeCallSync(p, () => {
5013
-
return this.baseFs.readdirSync(p, opts);
5014
-
}, (zipFs, { subPath }) => {
5015
-
return zipFs.readdirSync(subPath, opts);
5016
-
}, {
5017
-
requireSubpath: false
5018
-
});
5019
-
}
5020
-
async readlinkPromise(p) {
5021
-
return await this.makeCallPromise(p, async () => {
5022
-
return await this.baseFs.readlinkPromise(p);
5023
-
}, async (zipFs, { subPath }) => {
5024
-
return await zipFs.readlinkPromise(subPath);
5025
-
});
5026
-
}
5027
-
readlinkSync(p) {
5028
-
return this.makeCallSync(p, () => {
5029
-
return this.baseFs.readlinkSync(p);
5030
-
}, (zipFs, { subPath }) => {
5031
-
return zipFs.readlinkSync(subPath);
5032
-
});
5033
-
}
5034
-
async truncatePromise(p, len) {
5035
-
return await this.makeCallPromise(p, async () => {
5036
-
return await this.baseFs.truncatePromise(p, len);
5037
-
}, async (zipFs, { subPath }) => {
5038
-
return await zipFs.truncatePromise(subPath, len);
5039
-
});
5040
-
}
5041
-
truncateSync(p, len) {
5042
-
return this.makeCallSync(p, () => {
5043
-
return this.baseFs.truncateSync(p, len);
5044
-
}, (zipFs, { subPath }) => {
5045
-
return zipFs.truncateSync(subPath, len);
5046
-
});
5047
-
}
5048
-
async ftruncatePromise(fd, len) {
5049
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
5050
-
return this.baseFs.ftruncatePromise(fd, len);
5051
-
const entry = this.fdMap.get(fd);
5052
-
if (typeof entry === `undefined`)
5053
-
throw EBADF(`ftruncate`);
5054
-
const [zipFs, realFd] = entry;
5055
-
return zipFs.ftruncatePromise(realFd, len);
5056
-
}
5057
-
ftruncateSync(fd, len) {
5058
-
if ((fd & ZIP_MASK) !== ZIP_MAGIC)
5059
-
return this.baseFs.ftruncateSync(fd, len);
5060
-
const entry = this.fdMap.get(fd);
5061
-
if (typeof entry === `undefined`)
5062
-
throw EBADF(`ftruncateSync`);
5063
-
const [zipFs, realFd] = entry;
5064
-
return zipFs.ftruncateSync(realFd, len);
5065
-
}
5066
-
watch(p, a, b) {
5067
-
return this.makeCallSync(p, () => {
5068
-
return this.baseFs.watch(
5069
-
p,
5070
-
a,
5071
-
b
5072
-
);
5073
-
}, (zipFs, { subPath }) => {
5074
-
return zipFs.watch(
5075
-
subPath,
5076
-
a,
5077
-
b
5078
-
);
5079
-
});
5080
-
}
5081
-
watchFile(p, a, b) {
5082
-
return this.makeCallSync(p, () => {
5083
-
return this.baseFs.watchFile(
5084
-
p,
5085
-
a,
5086
-
b
5087
-
);
5088
-
}, () => {
5089
-
return watchFile(this, p, a, b);
5090
-
});
5091
-
}
5092
-
unwatchFile(p, cb) {
5093
-
return this.makeCallSync(p, () => {
5094
-
return this.baseFs.unwatchFile(p, cb);
5095
-
}, () => {
5096
-
return unwatchFile(this, p, cb);
5097
-
});
5098
-
}
5099
-
async makeCallPromise(p, discard, accept, { requireSubpath = true } = {}) {
5100
-
if (typeof p !== `string`)
5101
-
return await discard();
5102
-
const normalizedP = this.resolve(p);
5103
-
const zipInfo = this.findZip(normalizedP);
5104
-
if (!zipInfo)
5105
-
return await discard();
5106
-
if (requireSubpath && zipInfo.subPath === `/`)
5107
-
return await discard();
5108
-
return await this.getZipPromise(zipInfo.archivePath, async (zipFs) => await accept(zipFs, zipInfo));
5109
-
}
5110
-
makeCallSync(p, discard, accept, { requireSubpath = true } = {}) {
5111
-
if (typeof p !== `string`)
5112
-
return discard();
5113
-
const normalizedP = this.resolve(p);
5114
-
const zipInfo = this.findZip(normalizedP);
5115
-
if (!zipInfo)
5116
-
return discard();
5117
-
if (requireSubpath && zipInfo.subPath === `/`)
5118
-
return discard();
5119
-
return this.getZipSync(zipInfo.archivePath, (zipFs) => accept(zipFs, zipInfo));
5120
-
}
5121
-
findZip(p) {
5122
-
if (this.filter && !this.filter.test(p))
5123
-
return null;
5124
-
let filePath = ``;
5125
-
while (true) {
5126
-
const pathPartWithArchive = p.substring(filePath.length);
5127
-
let archivePart;
5128
-
if (!this.fileExtensions) {
5129
-
archivePart = getArchivePart(pathPartWithArchive, `.zip`);
5130
-
} else {
5131
-
for (const ext of this.fileExtensions) {
5132
-
archivePart = getArchivePart(pathPartWithArchive, ext);
5133
-
if (archivePart) {
5134
-
break;
5135
-
}
5136
-
}
5137
-
}
5138
-
if (!archivePart)
5139
-
return null;
5140
-
filePath = this.pathUtils.join(filePath, archivePart);
5141
-
if (this.isZip.has(filePath) === false) {
5142
-
if (this.notZip.has(filePath))
5143
-
continue;
5144
-
try {
5145
-
if (!this.baseFs.lstatSync(filePath).isFile()) {
5146
-
this.notZip.add(filePath);
5147
-
continue;
5148
-
}
5149
-
} catch {
5150
-
return null;
5151
-
}
5152
-
this.isZip.add(filePath);
5153
-
}
5154
-
return {
5155
-
archivePath: filePath,
5156
-
subPath: this.pathUtils.join(PortablePath.root, p.substring(filePath.length))
5157
-
};
5158
-
}
5159
-
}
5160
-
limitOpenFiles(max) {
5161
-
if (this.zipInstances === null)
5162
-
return;
5163
-
const now = Date.now();
5164
-
let nextExpiresAt = now + this.maxAge;
5165
-
let closeCount = max === null ? 0 : this.zipInstances.size - max;
5166
-
for (const [path, { zipFs, expiresAt, refCount }] of this.zipInstances.entries()) {
5167
-
if (refCount !== 0 || zipFs.hasOpenFileHandles()) {
5168
-
continue;
5169
-
} else if (now >= expiresAt) {
5170
-
zipFs.saveAndClose();
5171
-
this.zipInstances.delete(path);
5172
-
closeCount -= 1;
5173
-
continue;
5174
-
} else if (max === null || closeCount <= 0) {
5175
-
nextExpiresAt = expiresAt;
5176
-
break;
5177
-
}
5178
-
zipFs.saveAndClose();
5179
-
this.zipInstances.delete(path);
5180
-
closeCount -= 1;
5181
-
}
5182
-
if (this.limitOpenFilesTimeout === null && (max === null && this.zipInstances.size > 0 || max !== null)) {
5183
-
this.limitOpenFilesTimeout = setTimeout(() => {
5184
-
this.limitOpenFilesTimeout = null;
5185
-
this.limitOpenFiles(null);
5186
-
}, nextExpiresAt - now).unref();
5187
-
}
5188
-
}
5189
-
async getZipPromise(p, accept) {
5190
-
const getZipOptions = async () => ({
5191
-
baseFs: this.baseFs,
5192
-
libzip: this.libzip,
5193
-
readOnly: this.readOnlyArchives,
5194
-
stats: await this.baseFs.statPromise(p)
5195
-
});
5196
-
if (this.zipInstances) {
5197
-
let cachedZipFs = this.zipInstances.get(p);
5198
-
if (!cachedZipFs) {
5199
-
const zipOptions = await getZipOptions();
5200
-
cachedZipFs = this.zipInstances.get(p);
5201
-
if (!cachedZipFs) {
5202
-
cachedZipFs = {
5203
-
zipFs: new ZipFS(p, zipOptions),
5204
-
expiresAt: 0,
5205
-
refCount: 0
5206
-
};
5207
-
}
5208
-
}
5209
-
this.zipInstances.delete(p);
5210
-
this.limitOpenFiles(this.maxOpenFiles - 1);
5211
-
this.zipInstances.set(p, cachedZipFs);
5212
-
cachedZipFs.expiresAt = Date.now() + this.maxAge;
5213
-
cachedZipFs.refCount += 1;
5214
-
try {
5215
-
return await accept(cachedZipFs.zipFs);
5216
-
} finally {
5217
-
cachedZipFs.refCount -= 1;
5218
-
}
5219
-
} else {
5220
-
const zipFs = new ZipFS(p, await getZipOptions());
5221
-
try {
5222
-
return await accept(zipFs);
5223
-
} finally {
5224
-
zipFs.saveAndClose();
5225
-
}
5226
-
}
5227
-
}
5228
-
getZipSync(p, accept) {
5229
-
const getZipOptions = () => ({
5230
-
baseFs: this.baseFs,
5231
-
libzip: this.libzip,
5232
-
readOnly: this.readOnlyArchives,
5233
-
stats: this.baseFs.statSync(p)
5234
-
});
5235
-
if (this.zipInstances) {
5236
-
let cachedZipFs = this.zipInstances.get(p);
5237
-
if (!cachedZipFs) {
5238
-
cachedZipFs = {
5239
-
zipFs: new ZipFS(p, getZipOptions()),
5240
-
expiresAt: 0,
5241
-
refCount: 0
5242
-
};
5243
-
}
5244
-
this.zipInstances.delete(p);
5245
-
this.limitOpenFiles(this.maxOpenFiles - 1);
5246
-
this.zipInstances.set(p, cachedZipFs);
5247
-
cachedZipFs.expiresAt = Date.now() + this.maxAge;
5248
-
return accept(cachedZipFs.zipFs);
5249
-
} else {
5250
-
const zipFs = new ZipFS(p, getZipOptions());
5251
-
try {
5252
-
return accept(zipFs);
5253
-
} finally {
5254
-
zipFs.saveAndClose();
5255
-
}
5256
-
}
5257
-
}
5258
-
}
5259
-
5260
-
class NodePathFS extends ProxiedFS {
5261
-
constructor(baseFs) {
5262
-
super(npath);
5263
-
this.baseFs = baseFs;
5264
-
}
5265
-
mapFromBase(path) {
5266
-
return path;
5267
-
}
5268
-
mapToBase(path) {
5269
-
if (typeof path === `string`)
5270
-
return path;
5271
-
if (path instanceof url.URL)
5272
-
return url.fileURLToPath(path);
5273
-
if (Buffer.isBuffer(path)) {
5274
-
const str = path.toString();
5275
-
if (Buffer.byteLength(str) !== path.byteLength)
5276
-
throw new Error(`Non-utf8 buffers are not supported at the moment. Please upvote the following issue if you encounter this error: https://github.com/yarnpkg/berry/issues/4942`);
5277
-
return str;
5278
-
}
5279
-
throw new Error(`Unsupported path type: ${nodeUtils.inspect(path)}`);
5280
-
}
5281
-
}
5282
-
5283
-
var _a, _b, _c, _d;
5284
-
const kBaseFs = Symbol(`kBaseFs`);
5285
-
const kFd = Symbol(`kFd`);
5286
-
const kClosePromise = Symbol(`kClosePromise`);
5287
-
const kCloseResolve = Symbol(`kCloseResolve`);
5288
-
const kCloseReject = Symbol(`kCloseReject`);
5289
-
const kRefs = Symbol(`kRefs`);
5290
-
const kRef = Symbol(`kRef`);
5291
-
const kUnref = Symbol(`kUnref`);
5292
-
class FileHandle {
5293
-
constructor(fd, baseFs) {
5294
-
this[_a] = 1;
5295
-
this[_b] = void 0;
5296
-
this[_c] = void 0;
5297
-
this[_d] = void 0;
5298
-
this[kBaseFs] = baseFs;
5299
-
this[kFd] = fd;
5300
-
}
5301
-
get fd() {
5302
-
return this[kFd];
5303
-
}
5304
-
async appendFile(data, options) {
5305
-
var _a2;
5306
-
try {
5307
-
this[kRef](this.appendFile);
5308
-
const encoding = (_a2 = typeof options === `string` ? options : options == null ? void 0 : options.encoding) != null ? _a2 : void 0;
5309
-
return await this[kBaseFs].appendFilePromise(this.fd, data, encoding ? { encoding } : void 0);
5310
-
} finally {
5311
-
this[kUnref]();
5312
-
}
5313
-
}
5314
-
async chown(uid, gid) {
5315
-
try {
5316
-
this[kRef](this.chown);
5317
-
return await this[kBaseFs].fchownPromise(this.fd, uid, gid);
5318
-
} finally {
5319
-
this[kUnref]();
5320
-
}
5321
-
}
5322
-
async chmod(mode) {
5323
-
try {
5324
-
this[kRef](this.chmod);
5325
-
return await this[kBaseFs].fchmodPromise(this.fd, mode);
5326
-
} finally {
5327
-
this[kUnref]();
5328
-
}
5329
-
}
5330
-
createReadStream(options) {
5331
-
return this[kBaseFs].createReadStream(null, { ...options, fd: this.fd });
5332
-
}
5333
-
createWriteStream(options) {
5334
-
return this[kBaseFs].createWriteStream(null, { ...options, fd: this.fd });
5335
-
}
5336
-
datasync() {
5337
-
throw new Error(`Method not implemented.`);
5338
-
}
5339
-
sync() {
5340
-
throw new Error(`Method not implemented.`);
5341
-
}
5342
-
async read(bufferOrOptions, offset, length, position) {
5343
-
var _a2, _b2, _c2;
5344
-
try {
5345
-
this[kRef](this.read);
5346
-
let buffer;
5347
-
if (!Buffer.isBuffer(bufferOrOptions)) {
5348
-
bufferOrOptions != null ? bufferOrOptions : bufferOrOptions = {};
5349
-
buffer = (_a2 = bufferOrOptions.buffer) != null ? _a2 : Buffer.alloc(16384);
5350
-
offset = bufferOrOptions.offset || 0;
5351
-
length = (_b2 = bufferOrOptions.length) != null ? _b2 : buffer.byteLength;
5352
-
position = (_c2 = bufferOrOptions.position) != null ? _c2 : null;
5353
-
} else {
5354
-
buffer = bufferOrOptions;
5355
-
}
5356
-
offset != null ? offset : offset = 0;
5357
-
length != null ? length : length = 0;
5358
-
if (length === 0) {
5359
-
return {
5360
-
bytesRead: length,
5361
-
buffer
5362
-
};
5363
-
}
5364
-
const bytesRead = await this[kBaseFs].readPromise(this.fd, buffer, offset, length, position);
5365
-
return {
5366
-
bytesRead,
5367
-
buffer
5368
-
};
5369
-
} finally {
5370
-
this[kUnref]();
5371
-
}
5372
-
}
5373
-
async readFile(options) {
5374
-
var _a2;
5375
-
try {
5376
-
this[kRef](this.readFile);
5377
-
const encoding = (_a2 = typeof options === `string` ? options : options == null ? void 0 : options.encoding) != null ? _a2 : void 0;
5378
-
return await this[kBaseFs].readFilePromise(this.fd, encoding);
5379
-
} finally {
5380
-
this[kUnref]();
5381
-
}
5382
-
}
5383
-
readLines(options) {
5384
-
return readline.createInterface({
5385
-
input: this.createReadStream(options),
5386
-
crlfDelay: Infinity
5387
-
});
5388
-
}
5389
-
async stat(opts) {
5390
-
try {
5391
-
this[kRef](this.stat);
5392
-
return await this[kBaseFs].fstatPromise(this.fd, opts);
5393
-
} finally {
5394
-
this[kUnref]();
5395
-
}
5396
-
}
5397
-
async truncate(len) {
5398
-
try {
5399
-
this[kRef](this.truncate);
5400
-
return await this[kBaseFs].ftruncatePromise(this.fd, len);
5401
-
} finally {
5402
-
this[kUnref]();
5403
-
}
5404
-
}
5405
-
utimes(atime, mtime) {
5406
-
throw new Error(`Method not implemented.`);
5407
-
}
5408
-
async writeFile(data, options) {
5409
-
var _a2;
5410
-
try {
5411
-
this[kRef](this.writeFile);
5412
-
const encoding = (_a2 = typeof options === `string` ? options : options == null ? void 0 : options.encoding) != null ? _a2 : void 0;
5413
-
await this[kBaseFs].writeFilePromise(this.fd, data, encoding);
5414
-
} finally {
5415
-
this[kUnref]();
5416
-
}
5417
-
}
5418
-
async write(...args) {
5419
-
try {
5420
-
this[kRef](this.write);
5421
-
if (ArrayBuffer.isView(args[0])) {
5422
-
const [buffer, offset, length, position] = args;
5423
-
const bytesWritten = await this[kBaseFs].writePromise(this.fd, buffer, offset != null ? offset : void 0, length != null ? length : void 0, position != null ? position : void 0);
5424
-
return { bytesWritten, buffer };
5425
-
} else {
5426
-
const [data, position, encoding] = args;
5427
-
const bytesWritten = await this[kBaseFs].writePromise(this.fd, data, position, encoding);
5428
-
return { bytesWritten, buffer: data };
5429
-
}
5430
-
} finally {
5431
-
this[kUnref]();
5432
-
}
5433
-
}
5434
-
async writev(buffers, position) {
5435
-
try {
5436
-
this[kRef](this.writev);
5437
-
let bytesWritten = 0;
5438
-
if (typeof position !== `undefined`) {
5439
-
for (const buffer of buffers) {
5440
-
const writeResult = await this.write(buffer, void 0, void 0, position);
5441
-
bytesWritten += writeResult.bytesWritten;
5442
-
position += writeResult.bytesWritten;
5443
-
}
5444
-
} else {
5445
-
for (const buffer of buffers) {
5446
-
const writeResult = await this.write(buffer);
5447
-
bytesWritten += writeResult.bytesWritten;
5448
-
}
5449
-
}
5450
-
return {
5451
-
buffers,
5452
-
bytesWritten
5453
-
};
5454
-
} finally {
5455
-
this[kUnref]();
5456
-
}
5457
-
}
5458
-
readv(buffers, position) {
5459
-
throw new Error(`Method not implemented.`);
5460
-
}
5461
-
close() {
5462
-
if (this[kFd] === -1)
5463
-
return Promise.resolve();
5464
-
if (this[kClosePromise])
5465
-
return this[kClosePromise];
5466
-
this[kRefs]--;
5467
-
if (this[kRefs] === 0) {
5468
-
const fd = this[kFd];
5469
-
this[kFd] = -1;
5470
-
this[kClosePromise] = this[kBaseFs].closePromise(fd).finally(() => {
5471
-
this[kClosePromise] = void 0;
5472
-
});
5473
-
} else {
5474
-
this[kClosePromise] = new Promise((resolve, reject) => {
5475
-
this[kCloseResolve] = resolve;
5476
-
this[kCloseReject] = reject;
5477
-
}).finally(() => {
5478
-
this[kClosePromise] = void 0;
5479
-
this[kCloseReject] = void 0;
5480
-
this[kCloseResolve] = void 0;
5481
-
});
5482
-
}
5483
-
return this[kClosePromise];
5484
-
}
5485
-
[(_a = kRefs, _b = kClosePromise, _c = kCloseResolve, _d = kCloseReject, kRef)](caller) {
5486
-
if (this[kFd] === -1) {
5487
-
const err = new Error(`file closed`);
5488
-
err.code = `EBADF`;
5489
-
err.syscall = caller.name;
5490
-
throw err;
5491
-
}
5492
-
this[kRefs]++;
5493
-
}
5494
-
[kUnref]() {
5495
-
this[kRefs]--;
5496
-
if (this[kRefs] === 0) {
5497
-
const fd = this[kFd];
5498
-
this[kFd] = -1;
5499
-
this[kBaseFs].closePromise(fd).then(this[kCloseResolve], this[kCloseReject]);
5500
-
}
5501
-
}
5502
-
}
5503
-
5504
-
const SYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([
5505
-
`accessSync`,
5506
-
`appendFileSync`,
5507
-
`createReadStream`,
5508
-
`createWriteStream`,
5509
-
`chmodSync`,
5510
-
`fchmodSync`,
5511
-
`chownSync`,
5512
-
`fchownSync`,
5513
-
`closeSync`,
5514
-
`copyFileSync`,
5515
-
`linkSync`,
5516
-
`lstatSync`,
5517
-
`fstatSync`,
5518
-
`lutimesSync`,
5519
-
`mkdirSync`,
5520
-
`openSync`,
5521
-
`opendirSync`,
5522
-
`readlinkSync`,
5523
-
`readFileSync`,
5524
-
`readdirSync`,
5525
-
`readlinkSync`,
5526
-
`realpathSync`,
5527
-
`renameSync`,
5528
-
`rmdirSync`,
5529
-
`statSync`,
5530
-
`symlinkSync`,
5531
-
`truncateSync`,
5532
-
`ftruncateSync`,
5533
-
`unlinkSync`,
5534
-
`unwatchFile`,
5535
-
`utimesSync`,
5536
-
`watch`,
5537
-
`watchFile`,
5538
-
`writeFileSync`,
5539
-
`writeSync`
5540
-
]);
5541
-
const ASYNC_IMPLEMENTATIONS = /* @__PURE__ */ new Set([
5542
-
`accessPromise`,
5543
-
`appendFilePromise`,
5544
-
`fchmodPromise`,
5545
-
`chmodPromise`,
5546
-
`fchownPromise`,
5547
-
`chownPromise`,
5548
-
`closePromise`,
5549
-
`copyFilePromise`,
5550
-
`linkPromise`,
5551
-
`fstatPromise`,
5552
-
`lstatPromise`,
5553
-
`lutimesPromise`,
5554
-
`mkdirPromise`,
5555
-
`openPromise`,
5556
-
`opendirPromise`,
5557
-
`readdirPromise`,
5558
-
`realpathPromise`,
5559
-
`readFilePromise`,
5560
-
`readdirPromise`,
5561
-
`readlinkPromise`,
5562
-
`renamePromise`,
5563
-
`rmdirPromise`,
5564
-
`statPromise`,
5565
-
`symlinkPromise`,
5566
-
`truncatePromise`,
5567
-
`ftruncatePromise`,
5568
-
`unlinkPromise`,
5569
-
`utimesPromise`,
5570
-
`writeFilePromise`,
5571
-
`writeSync`
5572
-
]);
5573
-
function patchFs(patchedFs, fakeFs) {
5574
-
fakeFs = new NodePathFS(fakeFs);
5575
-
const setupFn = (target, name, replacement) => {
5576
-
const orig = target[name];
5577
-
target[name] = replacement;
5578
-
if (typeof (orig == null ? void 0 : orig[nodeUtils.promisify.custom]) !== `undefined`) {
5579
-
replacement[nodeUtils.promisify.custom] = orig[nodeUtils.promisify.custom];
5580
-
}
5581
-
};
5582
-
{
5583
-
setupFn(patchedFs, `exists`, (p, ...args) => {
5584
-
const hasCallback = typeof args[args.length - 1] === `function`;
5585
-
const callback = hasCallback ? args.pop() : () => {
5586
-
};
5587
-
process.nextTick(() => {
5588
-
fakeFs.existsPromise(p).then((exists) => {
5589
-
callback(exists);
5590
-
}, () => {
5591
-
callback(false);
5592
-
});
5593
-
});
5594
-
});
5595
-
setupFn(patchedFs, `read`, (...args) => {
5596
-
let [fd, buffer, offset, length, position, callback] = args;
5597
-
if (args.length <= 3) {
5598
-
let options = {};
5599
-
if (args.length < 3) {
5600
-
callback = args[1];
5601
-
} else {
5602
-
options = args[1];
5603
-
callback = args[2];
5604
-
}
5605
-
({
5606
-
buffer = Buffer.alloc(16384),
5607
-
offset = 0,
5608
-
length = buffer.byteLength,
5609
-
position
5610
-
} = options);
5611
-
}
5612
-
if (offset == null)
5613
-
offset = 0;
5614
-
length |= 0;
5615
-
if (length === 0) {
5616
-
process.nextTick(() => {
5617
-
callback(null, 0, buffer);
5618
-
});
5619
-
return;
5620
-
}
5621
-
if (position == null)
5622
-
position = -1;
5623
-
process.nextTick(() => {
5624
-
fakeFs.readPromise(fd, buffer, offset, length, position).then((bytesRead) => {
5625
-
callback(null, bytesRead, buffer);
5626
-
}, (error) => {
5627
-
callback(error, 0, buffer);
5628
-
});
5629
-
});
5630
-
});
5631
-
for (const fnName of ASYNC_IMPLEMENTATIONS) {
5632
-
const origName = fnName.replace(/Promise$/, ``);
5633
-
if (typeof patchedFs[origName] === `undefined`)
5634
-
continue;
5635
-
const fakeImpl = fakeFs[fnName];
5636
-
if (typeof fakeImpl === `undefined`)
5637
-
continue;
5638
-
const wrapper = (...args) => {
5639
-
const hasCallback = typeof args[args.length - 1] === `function`;
5640
-
const callback = hasCallback ? args.pop() : () => {
5641
-
};
5642
-
process.nextTick(() => {
5643
-
fakeImpl.apply(fakeFs, args).then((result) => {
5644
-
callback(null, result);
5645
-
}, (error) => {
5646
-
callback(error);
5647
-
});
5648
-
});
5649
-
};
5650
-
setupFn(patchedFs, origName, wrapper);
5651
-
}
5652
-
patchedFs.realpath.native = patchedFs.realpath;
5653
-
}
5654
-
{
5655
-
setupFn(patchedFs, `existsSync`, (p) => {
5656
-
try {
5657
-
return fakeFs.existsSync(p);
5658
-
} catch (error) {
5659
-
return false;
5660
-
}
5661
-
});
5662
-
setupFn(patchedFs, `readSync`, (...args) => {
5663
-
let [fd, buffer, offset, length, position] = args;
5664
-
if (args.length <= 3) {
5665
-
const options = args[2] || {};
5666
-
({ offset = 0, length = buffer.byteLength, position } = options);
5667
-
}
5668
-
if (offset == null)
5669
-
offset = 0;
5670
-
length |= 0;
5671
-
if (length === 0)
5672
-
return 0;
5673
-
if (position == null)
5674
-
position = -1;
5675
-
return fakeFs.readSync(fd, buffer, offset, length, position);
5676
-
});
5677
-
for (const fnName of SYNC_IMPLEMENTATIONS) {
5678
-
const origName = fnName;
5679
-
if (typeof patchedFs[origName] === `undefined`)
5680
-
continue;
5681
-
const fakeImpl = fakeFs[fnName];
5682
-
if (typeof fakeImpl === `undefined`)
5683
-
continue;
5684
-
setupFn(patchedFs, origName, fakeImpl.bind(fakeFs));
5685
-
}
5686
-
patchedFs.realpathSync.native = patchedFs.realpathSync;
5687
-
}
5688
-
{
5689
-
const origEmitWarning = process.emitWarning;
5690
-
process.emitWarning = () => {
5691
-
};
5692
-
let patchedFsPromises;
5693
-
try {
5694
-
patchedFsPromises = patchedFs.promises;
5695
-
} finally {
5696
-
process.emitWarning = origEmitWarning;
5697
-
}
5698
-
if (typeof patchedFsPromises !== `undefined`) {
5699
-
for (const fnName of ASYNC_IMPLEMENTATIONS) {
5700
-
const origName = fnName.replace(/Promise$/, ``);
5701
-
if (typeof patchedFsPromises[origName] === `undefined`)
5702
-
continue;
5703
-
const fakeImpl = fakeFs[fnName];
5704
-
if (typeof fakeImpl === `undefined`)
5705
-
continue;
5706
-
if (fnName === `open`)
5707
-
continue;
5708
-
setupFn(patchedFsPromises, origName, (pathLike, ...args) => {
5709
-
if (pathLike instanceof FileHandle) {
5710
-
return pathLike[origName].apply(pathLike, args);
5711
-
} else {
5712
-
return fakeImpl.call(fakeFs, pathLike, ...args);
5713
-
}
5714
-
});
5715
-
}
5716
-
setupFn(patchedFsPromises, `open`, async (...args) => {
5717
-
const fd = await fakeFs.openPromise(...args);
5718
-
return new FileHandle(fd, fakeFs);
5719
-
});
5720
-
}
5721
-
}
5722
-
{
5723
-
patchedFs.read[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => {
5724
-
const res = fakeFs.readPromise(fd, buffer, ...args);
5725
-
return { bytesRead: await res, buffer };
5726
-
};
5727
-
patchedFs.write[nodeUtils.promisify.custom] = async (fd, buffer, ...args) => {
5728
-
const res = fakeFs.writePromise(fd, buffer, ...args);
5729
-
return { bytesWritten: await res, buffer };
5730
-
};
5731
-
}
5732
-
}
5733
-
5734
-
var libzipSync = {exports: {}};
5735
-
5736
-
(function (module, exports) {
5737
-
var frozenFs = Object.assign({}, fs__default.default);
5738
-
var createModule = function() {
5739
-
var _scriptDir = void 0;
5740
-
if (typeof __filename !== "undefined")
5741
-
_scriptDir = _scriptDir || __filename;
5742
-
return function(createModule2) {
5743
-
createModule2 = createModule2 || {};
5744
-
var Module = typeof createModule2 !== "undefined" ? createModule2 : {};
5745
-
var readyPromiseResolve, readyPromiseReject;
5746
-
Module["ready"] = new Promise(function(resolve, reject) {
5747
-
readyPromiseResolve = resolve;
5748
-
readyPromiseReject = reject;
5749
-
});
5750
-
var moduleOverrides = {};
5751
-
var key;
5752
-
for (key in Module) {
5753
-
if (Module.hasOwnProperty(key)) {
5754
-
moduleOverrides[key] = Module[key];
5755
-
}
5756
-
}
5757
-
var scriptDirectory = "";
5758
-
function locateFile(path) {
5759
-
if (Module["locateFile"]) {
5760
-
return Module["locateFile"](path, scriptDirectory);
5761
-
}
5762
-
return scriptDirectory + path;
5763
-
}
5764
-
var read_, readBinary;
5765
-
var nodeFS;
5766
-
var nodePath;
5767
-
{
5768
-
{
5769
-
scriptDirectory = __dirname + "/";
5770
-
}
5771
-
read_ = function shell_read(filename, binary) {
5772
-
var ret = tryParseAsDataURI(filename);
5773
-
if (ret) {
5774
-
return binary ? ret : ret.toString();
5775
-
}
5776
-
if (!nodeFS)
5777
-
nodeFS = frozenFs;
5778
-
if (!nodePath)
5779
-
nodePath = path__default.default;
5780
-
filename = nodePath["normalize"](filename);
5781
-
return nodeFS["readFileSync"](filename, binary ? null : "utf8");
5782
-
};
5783
-
readBinary = function readBinary2(filename) {
5784
-
var ret = read_(filename, true);
5785
-
if (!ret.buffer) {
5786
-
ret = new Uint8Array(ret);
5787
-
}
5788
-
assert(ret.buffer);
5789
-
return ret;
5790
-
};
5791
-
if (process["argv"].length > 1) {
5792
-
process["argv"][1].replace(/\\/g, "/");
5793
-
}
5794
-
process["argv"].slice(2);
5795
-
Module["inspect"] = function() {
5796
-
return "[Emscripten Module object]";
5797
-
};
5798
-
}
5799
-
var out = Module["print"] || console.log.bind(console);
5800
-
var err = Module["printErr"] || console.warn.bind(console);
5801
-
for (key in moduleOverrides) {
5802
-
if (moduleOverrides.hasOwnProperty(key)) {
5803
-
Module[key] = moduleOverrides[key];
5804
-
}
5805
-
}
5806
-
moduleOverrides = null;
5807
-
if (Module["arguments"])
5808
-
;
5809
-
if (Module["thisProgram"])
5810
-
;
5811
-
if (Module["quit"])
5812
-
;
5813
-
var STACK_ALIGN = 16;
5814
-
function alignMemory(size, factor) {
5815
-
if (!factor)
5816
-
factor = STACK_ALIGN;
5817
-
return Math.ceil(size / factor) * factor;
5818
-
}
5819
-
var wasmBinary;
5820
-
if (Module["wasmBinary"])
5821
-
wasmBinary = Module["wasmBinary"];
5822
-
Module["noExitRuntime"] || true;
5823
-
if (typeof WebAssembly !== "object") {
5824
-
abort("no native wasm support detected");
5825
-
}
5826
-
function getValue(ptr, type, noSafe) {
5827
-
type = type || "i8";
5828
-
if (type.charAt(type.length - 1) === "*")
5829
-
type = "i32";
5830
-
switch (type) {
5831
-
case "i1":
5832
-
return HEAP8[ptr >> 0];
5833
-
case "i8":
5834
-
return HEAP8[ptr >> 0];
5835
-
case "i16":
5836
-
return HEAP16[ptr >> 1];
5837
-
case "i32":
5838
-
return HEAP32[ptr >> 2];
5839
-
case "i64":
5840
-
return HEAP32[ptr >> 2];
5841
-
case "float":
5842
-
return HEAPF32[ptr >> 2];
5843
-
case "double":
5844
-
return HEAPF64[ptr >> 3];
5845
-
default:
5846
-
abort("invalid type for getValue: " + type);
5847
-
}
5848
-
return null;
5849
-
}
5850
-
var wasmMemory;
5851
-
var ABORT = false;
5852
-
function assert(condition, text) {
5853
-
if (!condition) {
5854
-
abort("Assertion failed: " + text);
5855
-
}
5856
-
}
5857
-
function getCFunc(ident) {
5858
-
var func = Module["_" + ident];
5859
-
assert(
5860
-
func,
5861
-
"Cannot call unknown function " + ident + ", make sure it is exported"
5862
-
);
5863
-
return func;
5864
-
}
5865
-
function ccall(ident, returnType, argTypes, args, opts) {
5866
-
var toC = {
5867
-
string: function(str) {
5868
-
var ret2 = 0;
5869
-
if (str !== null && str !== void 0 && str !== 0) {
5870
-
var len = (str.length << 2) + 1;
5871
-
ret2 = stackAlloc(len);
5872
-
stringToUTF8(str, ret2, len);
5873
-
}
5874
-
return ret2;
5875
-
},
5876
-
array: function(arr) {
5877
-
var ret2 = stackAlloc(arr.length);
5878
-
writeArrayToMemory(arr, ret2);
5879
-
return ret2;
5880
-
}
5881
-
};
5882
-
function convertReturnValue(ret2) {
5883
-
if (returnType === "string")
5884
-
return UTF8ToString(ret2);
5885
-
if (returnType === "boolean")
5886
-
return Boolean(ret2);
5887
-
return ret2;
5888
-
}
5889
-
var func = getCFunc(ident);
5890
-
var cArgs = [];
5891
-
var stack = 0;
5892
-
if (args) {
5893
-
for (var i = 0; i < args.length; i++) {
5894
-
var converter = toC[argTypes[i]];
5895
-
if (converter) {
5896
-
if (stack === 0)
5897
-
stack = stackSave();
5898
-
cArgs[i] = converter(args[i]);
5899
-
} else {
5900
-
cArgs[i] = args[i];
5901
-
}
5902
-
}
5903
-
}
5904
-
var ret = func.apply(null, cArgs);
5905
-
ret = convertReturnValue(ret);
5906
-
if (stack !== 0)
5907
-
stackRestore(stack);
5908
-
return ret;
5909
-
}
5910
-
function cwrap(ident, returnType, argTypes, opts) {
5911
-
argTypes = argTypes || [];
5912
-
var numericArgs = argTypes.every(function(type) {
5913
-
return type === "number";
5914
-
});
5915
-
var numericRet = returnType !== "string";
5916
-
if (numericRet && numericArgs && !opts) {
5917
-
return getCFunc(ident);
5918
-
}
5919
-
return function() {
5920
-
return ccall(ident, returnType, argTypes, arguments);
5921
-
};
5922
-
}
5923
-
var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : void 0;
5924
-
function UTF8ArrayToString(heap, idx, maxBytesToRead) {
5925
-
var endIdx = idx + maxBytesToRead;
5926
-
var endPtr = idx;
5927
-
while (heap[endPtr] && !(endPtr >= endIdx))
5928
-
++endPtr;
5929
-
if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) {
5930
-
return UTF8Decoder.decode(heap.subarray(idx, endPtr));
5931
-
} else {
5932
-
var str = "";
5933
-
while (idx < endPtr) {
5934
-
var u0 = heap[idx++];
5935
-
if (!(u0 & 128)) {
5936
-
str += String.fromCharCode(u0);
5937
-
continue;
5938
-
}
5939
-
var u1 = heap[idx++] & 63;
5940
-
if ((u0 & 224) == 192) {
5941
-
str += String.fromCharCode((u0 & 31) << 6 | u1);
5942
-
continue;
5943
-
}
5944
-
var u2 = heap[idx++] & 63;
5945
-
if ((u0 & 240) == 224) {
5946
-
u0 = (u0 & 15) << 12 | u1 << 6 | u2;
5947
-
} else {
5948
-
u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63;
5949
-
}
5950
-
if (u0 < 65536) {
5951
-
str += String.fromCharCode(u0);
5952
-
} else {
5953
-
var ch = u0 - 65536;
5954
-
str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023);
5955
-
}
5956
-
}
5957
-
}
5958
-
return str;
5959
-
}
5960
-
function UTF8ToString(ptr, maxBytesToRead) {
5961
-
return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : "";
5962
-
}
5963
-
function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
5964
-
if (!(maxBytesToWrite > 0))
5965
-
return 0;
5966
-
var startIdx = outIdx;
5967
-
var endIdx = outIdx + maxBytesToWrite - 1;
5968
-
for (var i = 0; i < str.length; ++i) {
5969
-
var u = str.charCodeAt(i);
5970
-
if (u >= 55296 && u <= 57343) {
5971
-
var u1 = str.charCodeAt(++i);
5972
-
u = 65536 + ((u & 1023) << 10) | u1 & 1023;
5973
-
}
5974
-
if (u <= 127) {
5975
-
if (outIdx >= endIdx)
5976
-
break;
5977
-
heap[outIdx++] = u;
5978
-
} else if (u <= 2047) {
5979
-
if (outIdx + 1 >= endIdx)
5980
-
break;
5981
-
heap[outIdx++] = 192 | u >> 6;
5982
-
heap[outIdx++] = 128 | u & 63;
5983
-
} else if (u <= 65535) {
5984
-
if (outIdx + 2 >= endIdx)
5985
-
break;
5986
-
heap[outIdx++] = 224 | u >> 12;
5987
-
heap[outIdx++] = 128 | u >> 6 & 63;
5988
-
heap[outIdx++] = 128 | u & 63;
5989
-
} else {
5990
-
if (outIdx + 3 >= endIdx)
5991
-
break;
5992
-
heap[outIdx++] = 240 | u >> 18;
5993
-
heap[outIdx++] = 128 | u >> 12 & 63;
5994
-
heap[outIdx++] = 128 | u >> 6 & 63;
5995
-
heap[outIdx++] = 128 | u & 63;
5996
-
}
5997
-
}
5998
-
heap[outIdx] = 0;
5999
-
return outIdx - startIdx;
6000
-
}
6001
-
function stringToUTF8(str, outPtr, maxBytesToWrite) {
6002
-
return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite);
6003
-
}
6004
-
function lengthBytesUTF8(str) {
6005
-
var len = 0;
6006
-
for (var i = 0; i < str.length; ++i) {
6007
-
var u = str.charCodeAt(i);
6008
-
if (u >= 55296 && u <= 57343)
6009
-
u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023;
6010
-
if (u <= 127)
6011
-
++len;
6012
-
else if (u <= 2047)
6013
-
len += 2;
6014
-
else if (u <= 65535)
6015
-
len += 3;
6016
-
else
6017
-
len += 4;
6018
-
}
6019
-
return len;
6020
-
}
6021
-
function allocateUTF8(str) {
6022
-
var size = lengthBytesUTF8(str) + 1;
6023
-
var ret = _malloc(size);
6024
-
if (ret)
6025
-
stringToUTF8Array(str, HEAP8, ret, size);
6026
-
return ret;
6027
-
}
6028
-
function writeArrayToMemory(array, buffer2) {
6029
-
HEAP8.set(array, buffer2);
6030
-
}
6031
-
function alignUp(x, multiple) {
6032
-
if (x % multiple > 0) {
6033
-
x += multiple - x % multiple;
6034
-
}
6035
-
return x;
6036
-
}
6037
-
var buffer, HEAP8, HEAPU8, HEAP16, HEAP32, HEAPF32, HEAPF64;
6038
-
function updateGlobalBufferAndViews(buf) {
6039
-
buffer = buf;
6040
-
Module["HEAP8"] = HEAP8 = new Int8Array(buf);
6041
-
Module["HEAP16"] = HEAP16 = new Int16Array(buf);
6042
-
Module["HEAP32"] = HEAP32 = new Int32Array(buf);
6043
-
Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf);
6044
-
Module["HEAPU16"] = new Uint16Array(buf);
6045
-
Module["HEAPU32"] = new Uint32Array(buf);
6046
-
Module["HEAPF32"] = HEAPF32 = new Float32Array(buf);
6047
-
Module["HEAPF64"] = HEAPF64 = new Float64Array(buf);
6048
-
}
6049
-
Module["INITIAL_MEMORY"] || 16777216;
6050
-
var wasmTable;
6051
-
var __ATPRERUN__ = [];
6052
-
var __ATINIT__ = [];
6053
-
var __ATPOSTRUN__ = [];
6054
-
function preRun() {
6055
-
if (Module["preRun"]) {
6056
-
if (typeof Module["preRun"] == "function")
6057
-
Module["preRun"] = [Module["preRun"]];
6058
-
while (Module["preRun"].length) {
6059
-
addOnPreRun(Module["preRun"].shift());
6060
-
}
6061
-
}
6062
-
callRuntimeCallbacks(__ATPRERUN__);
6063
-
}
6064
-
function initRuntime() {
6065
-
if (!Module["noFSInit"] && !FS.init.initialized)
6066
-
FS.init();
6067
-
callRuntimeCallbacks(__ATINIT__);
6068
-
}
6069
-
function postRun() {
6070
-
if (Module["postRun"]) {
6071
-
if (typeof Module["postRun"] == "function")
6072
-
Module["postRun"] = [Module["postRun"]];
6073
-
while (Module["postRun"].length) {
6074
-
addOnPostRun(Module["postRun"].shift());
6075
-
}
6076
-
}
6077
-
callRuntimeCallbacks(__ATPOSTRUN__);
6078
-
}
6079
-
function addOnPreRun(cb) {
6080
-
__ATPRERUN__.unshift(cb);
6081
-
}
6082
-
function addOnInit(cb) {
6083
-
__ATINIT__.unshift(cb);
6084
-
}
6085
-
function addOnPostRun(cb) {
6086
-
__ATPOSTRUN__.unshift(cb);
6087
-
}
6088
-
var runDependencies = 0;
6089
-
var dependenciesFulfilled = null;
6090
-
function addRunDependency(id) {
6091
-
runDependencies++;
6092
-
if (Module["monitorRunDependencies"]) {
6093
-
Module["monitorRunDependencies"](runDependencies);
6094
-
}
6095
-
}
6096
-
function removeRunDependency(id) {
6097
-
runDependencies--;
6098
-
if (Module["monitorRunDependencies"]) {
6099
-
Module["monitorRunDependencies"](runDependencies);
6100
-
}
6101
-
if (runDependencies == 0) {
6102
-
if (dependenciesFulfilled) {
6103
-
var callback = dependenciesFulfilled;
6104
-
dependenciesFulfilled = null;
6105
-
callback();
6106
-
}
6107
-
}
6108
-
}
6109
-
Module["preloadedImages"] = {};
6110
-
Module["preloadedAudios"] = {};
6111
-
function abort(what) {
6112
-
if (Module["onAbort"]) {
6113
-
Module["onAbort"](what);
6114
-
}
6115
-
what += "";
6116
-
err(what);
6117
-
ABORT = true;
6118
-
what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info.";
6119
-
var e = new WebAssembly.RuntimeError(what);
6120
-
readyPromiseReject(e);
6121
-
throw e;
6122
-
}
6123
-
var dataURIPrefix = "data:application/octet-stream;base64,";
6124
-
function isDataURI(filename) {
6125
-
return filename.startsWith(dataURIPrefix);
6126
-
}
6127
-
var wasmBinaryFile = "data:application/octet-stream;base64,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ACgCFC0AAiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQADIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAQgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABSAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAGIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAcgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAJIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAogACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ACyAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAMIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAA0gACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ADiAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAPIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhRBEGo2AhQgACAAKAIIQQFrIgE2AgggAQ0ACyAAIAAoAhhB8f8DcDYCGCAAIAAoAgxB8f8DcDYCDAwBCwsgACgCEARAA0AgACgCEEEQTwRAIAAgACgCEEEQazYCECAAIAAoAhQtAAAgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AASAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQACIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAMgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0ABCAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAFIAAoAhhqNgIYIAAgACgCGCAAKAIMajYCDCAAIAAoAhQtAAYgACgCGGo2AhggACAAKAIYIAAoAgxqNgIMIAAgACgCFC0AByAAKAIYajYCGCAAIAAoAhggACgCDGo2AgwgACAAKAIULQAIIAAoAhhqNgIYIAAgACgCGCAAKAIMajYC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NgIYIAEoAgxCADcDICABKAIMQgA3AyggASgCDEEANgIwIAEoAgxBADYCNCABKAIMQQA2AjggASgCDEEANgI8IAEoAgxBADsBQCABKAIMQYCA2I14NgJEIAEoAgxCADcDSCABKAIMQQA7AVAgASgCDEEAOwFSIAEoAgxBADYCVAvSEwEBfyMAQbABayIDJAAgAyAANgKoASADIAE2AqQBIAMgAjYCoAEgA0EANgKQASADIAMoAqQBKAIwQQAQOjYClAEgAyADKAKkASgCOEEAEDo2ApgBAkACQAJAAkAgAygClAFBAkYEQCADKAKYAUEBRg0BCyADKAKUAUEBRgRAIAMoApgBQQJGDQELIAMoApQBQQJHDQEgAygCmAFBAkcNAQsgAygCpAEiACAALwEMQYAQcjsBDAwBCyADKAKkASIAIAAvAQxB/+8DcTsBDCADKAKUAUECRgRAIANB9eABIAMoAqQBKAIwIAMoAqgBQQhqEI4BNgKQASADKAKQAUUEQCADQX82AqwBDAMLCwJAIAMoAqABQYACcQ0AIAMoApgBQQJHDQAgA0H1xgEgAygCpAEoAjggAygCqAFBCGoQjgE2AkggAygCSEUEQCADKAKQARAjIANBfzYCrAEMAwsgAygCSCADKAKQATYCACADIAMoAkg2ApABCwsCQCADKAKkAS8BUkUEQCADKAKkASIAIAAvAQxB/v8DcTsBDAwBCyADKAKkASIAIAAvAQxBAXI7AQwLIAMgAygCpAEgAygCoAEQZUEBcToAhgEgAyADKAKgAUGACnFBgApHBH8gAy0AhgEFQQELQQFxOgCHASADAn9BASADKAKkAS8BUkGBAkYNABpBASADKAKkAS8BUkGCAkYNABogAygCpAEvAVJBgwJGC0EBcToAhQEgAy0AhwFBAXEEQCADIANBIGpCHBApNgIcIAMoAhxFBEAgAygCqAFBCGpBDkEAEBQgAygCkAEQIyADQX82AqwBDAILAkAgAygCoAFBgAJxBEACQCADKAKgAUGACHENACADKAKkASkDIEL/////D1YNACADKAKkASkDKEL/////D1gNAgsgAygCHCADKAKkASkDKBAtIAMoAhwgAygCpAEpAyAQLQwBCwJAAkAgAygCoAFBgAhxDQAgAygCpAEpAyBC/////w9WDQAgAygCpAEpAyhC/////w9WDQAgAygCpAEpA0hC/////w9YDQELIAMoAqQBKQMoQv////8PWgRAIAMoAhwgAygCpAEpAygQLQsgAygCpAEpAyBC/////w9aBEAgAygCHCADKAKkASkDIBAtCyADKAKkASkDSEL/////D1oEQCADKAIcIAMoAqQBKQNIEC0LCwsCfyMAQRBrIgAgAygCHDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIcEBYgAygCkAEQIyADQX82AqwBDAILIANBAQJ/IwBBEGsiACADKAIcNgIMAn4gACgCDC0AAEEBcQRAIAAoAgwpAxAMAQtCAAunQf//A3ELIANBIGpBgAYQVTYCjAEgAygCHBAWIAMoAowBIAMoApABNgIAIAMgAygCjAE2ApABCyADLQCFAUEBcQRAIAMgA0EVakIHECk2AhAgAygCEEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAgsgAygCEEECEB8gAygCEEG9EkECEEEgAygCECADKAKkAS8BUkH/AXEQlgEgAygCECADKAKkASgCEEH//wNxEB8CfyMAQRBrIgAgAygCEDYCDCAAKAIMLQAAQQFxRQsEQCADKAKoAUEIakEUQQAQFCADKAIQEBYgAygCkAEQIyADQX82AqwBDAILIANBgbICQQcgA0EVakGABhBVNgIMIAMoAhAQFiADKAIMIAMoApABNgIAIAMgAygCDDYCkAELIAMgA0HQAGpCLhApIgA2AkwgAEUEQCADKAKoAUEIakEOQQAQFCADKAKQARAjIANBfzYCrAEMAQsgAygCTEHxEkH2EiADKAKgAUGAAnEbQQQQQSADKAKgAUGAAnFFBEAgAygCTCADLQCGAUEBcQR/QS0FIAMoAqQBLwEIC0H//wNxEB8LIAMoAkwgAy0AhgFBAXEEf0EtBSADKAKkAS8BCgtB//8DcRAfIAMoAkwgAygCpAEvAQwQHwJAIAMtAIUBQQFxBEAgAygCTEHjABAfDAELIAMoAkwgAygCpAEoAhBB//8DcRAfCyADKAKkASgCFCADQZ4BaiADQZwBahCNASADKAJMIAMvAZ4BEB8gAygCTCADLwGcARAfAkACQCADLQCFAUEBcUUNACADKAKkASkDKEIUWg0AIAMoAkxBABAhDAELIAMoAkwgAygCpAEoAhgQIQsCQAJAIAMoAqABQYACcUGAAkcNACADKAKkASkDIEL/////D1QEQCADKAKkASkDKEL/////D1QNAQsgAygCTEF/ECEgAygCTEF/ECEMAQsCQCADKAKkASkDIEL/////D1QEQCADKAJMIAMoAqQBKQMgpxAhDAELIAMoAkxBfxAhCwJAIAMoAqQBKQMoQv////8PVARAIAMoAkwgAygCpAEpAyinECEMAQsgAygCTEF/ECELCyADKAJMIAMoAqQBKAIwEFFB//8DcRAfIAMgAygCpAEoAjQgAygCoAEQkgFB//8DcSADKAKQAUGABhCSAUH//wNxajYCiAEgAygCTCADKAKIAUH//wNxEB8gAygCoAFBgAJxRQRAIAMoAkwgAygCpAEoAjgQUUH//wNxEB8gAygCTCADKAKkASgCPEH//wNxEB8gAygCTCADKAKkAS8BQBAfIAMoAkwgAygCpAEoAkQQIQJAIAMoAqQBKQNIQv////8PVARAIAMoAkwgAygCpAEpA0inECEMAQsgAygCTEF/ECELCwJ/IwBBEGsiACADKAJMNgIMIAAoAgwtAABBAXFFCwRAIAMoAqgBQQhqQRRBABAUIAMoAkwQFiADKAKQARAjIANBfzYCrAEMAQsgAygCqAEgA0HQAGoCfiMAQRBrIgAgAygCTDYCDAJ+IAAoAgwtAABBAXEEQCAAKAIMKQMQDAELQgALCxA2QQBIBEAgAygCTBAWIAMoApABECMgA0F/NgKsAQwBCyADKAJMEBYgAygCpAEoAjAEQCADKAKoASADKAKkASgCMBCFAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEEQCADKAKoASADKAKQAUGABhCRAUEASARAIAMoApABECMgA0F/NgKsAQwCCwsgAygCkAEQIyADKAKkASgCNARAIAMoAqgBIAMoAqQBKAI0IAMoAqABEJEBQQBIBEAgA0F/NgKsAQwCCwsgAygCoAFBgAJxRQRAIAMoAqQBKAI4BEAgAygCqAEgAygCpAEoAjgQhQFBAEgEQCADQX82AqwBDAMLCwsgAyADLQCHAUEBcTYCrAELIAMoAqwBIQAgA0GwAWokACAAC+ACAQF/IwBBIGsiBCQAIAQgADsBGiAEIAE7ARggBCACNgIUIAQgAzYCECAEQRAQGCIANgIMAkAg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AAAgAygCHEHcFmogAygCDEECdGooAgAgAygCHEHYKGpqLQAASg0ADAELIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhxB3BZqIAMoAgxBAnRqKAIANgIAIAMgAygCDDYCFCADIAMoAgxBAXQ2AgwMAQsLIAMoAhxB3BZqIAMoAhRBAnRqIAMoAhA2AgAL1xMBA38jAEEwayICJAAgAiAANgIsIAIgATYCKCACIAIoAigoAgA2AiQgAiACKAIoKAIIKAIANgIgIAIgAigCKCgCCCgCDDYCHCACQX82AhAgAigCLEEANgLQKCACKAIsQb0ENgLUKCACQQA2AhgDQCACKAIYIAIoAhxIBEACQCACKAIkIAIoAhhBAnRqLwEABEAgAiACKAIYIgE2AhAgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQAgBCAANgLQKCAAQQJ0IANqIAE2AgAgAigCGCACKAIsQdgoampBADoAAAwBCyACKAIkIAIoAhhBAnRqQQA7AQILIAIgAigCGEEBajYCGAwBCwsDQCACKAIsKALQKEECSARAAkAgAigCEEECSARAIAIgAigCEEEBaiIANgIQDAELQQAhAAsgAigCLEHcFmohAyACKAIsIgQoAtAoQQFqIQEgBCABNgLQKCABQQJ0IANqIAA2AgAgAiAANgIMIAIoAiQgAigCDEECdGpBATsBACACKAIMIAIoAixB2ChqakEAOgAAIAIoAiwiACAAKAKoLUEBazYCqC0gAigCIARAIAIoAiwiACAAKAKsLSACKAIgIAIoAgxBAnRqLwECazYCrC0LDAELCyACKAIoIAIoAhA2AgQgAiACKAIsKALQKEECbTYCGANAIAIoAhhBAU4EQCACKAIsIAIoAiQgAigCGBB5IAIgAigCGEEBazYCGAwBCwsgAiACKAIcNgIMA0AgAiACKAIsKALgFjYCGCACKAIsQdwWaiEBIAIoAiwiAygC0CghACADIABBAWs2AtAoIAIoAiwgAEECdCABaigCADYC4BYgAigCLCACKAIkQQEQeSACIAIoAiwoAuAWNgIUIAIoAhghASACKAIsQdwWaiEDIAIoAiwiBCgC1ChBAWshACAEIAA2AtQoIABBAnQgA2ogATYCACACKAIUIQEgAigCLEHcFmohAyACKAIsIgQoAtQoQQFrIQAgBCAANgLUKCAA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AQsgAigCCEEANgIAIAIoAghCADcDECACKAIIQgA3AwggAigCCEIANwMgIAIoAghCADcDGCACKAIIQQA2AiggAigCCEEAOgAsIAIoAgggAikDECACKAIMEI8BQQFxRQRAIAIoAggQJSACQQA2AhwMAQsgAiACKAIINgIcCyACKAIcIQEgAkEgaiQAIAEL1gIBAX8jAEEgayIDJAAgAyAANgIYIAMgATYCFCADIAI2AhAgAyADQQxqQgQQKTYCCAJAIAMoAghFBEAgA0F/NgIcDAELA0AgAygCFARAIAMoAhQoAgQgAygCEHFBgAZxBEAgAygCCEIAECwaIAMoAgggAygCFC8BCBAfIAMoAgggAygCFC8BChAfAn8jAEEQayIAIAMoAgg2AgwgACgCDC0AAEEBcUULBEAgAygCGEEIakEUQQAQFCADKAIIEBYgA0F/NgIcDAQLIAMoAhggA0EMakIEEDZBAEgEQCADKAIIEBYgA0F/NgIcDAQLIAMoAhQvAQoEQCADKAIYIAMoAhQoAgwgAygCFC8BCq0QNkEASARAIAMoAggQFiADQX82AhwMBQsLCyADIAMoAhQoAgA2AhQMAQsLIAMoAggQFiADQQA2AhwLIAMoAhwhACADQSBqJAAgAAtoAQF/IwBBEGsiAiAANgIMIAIgATYCCCACQQA7AQYDQCACKAIMBEAgAigCDCgCBCACKAIIcUGABnEEQCACIAIoAgwvAQogAi8BBkEEamo7AQYLIAIgAigCDCgCADYCDAwBCwsgAi8BBgvwAQEBfyMAQRBrIgEkACABIAA2AgwgASABKAIMNgIIIAFBADYCBANAIAEoAgwEQAJAAkAgASgCDC8BCEH1xgFGDQAgASgCDC8BCEH14AFGDQAgASgCDC8BCEGBsgJGDQAgASgCDC8BCEEBRw0BCyABIAEoAgwoAgA2AgAgASgCCCABKAIMRgRAIAEgASgCADYCCAsgASgCDEEANgIAIAEoAgwQIyABKAIEBEAgASgCBCABKAIANgIACyABIAEoAgA2AgwMAgsgASABKAIMNgIEIAEgASgCDCgCADYCDAwBCwsgASgCCCEAIAFBEGokACAAC7IEAQF/IwBBQGoiBSQAIAUgADYCOCAFIAE7ATYgBSACNgIwIAUgAzYCLCAFIAQ2AiggBSAFKAI4IAUvATatECkiADYC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IAEoAhBB//8DRgRAIAEgASgCDDYCEAsgASgCCEH//wNGBEAgASABKAIENgIICwJAIAEoApQBQQRxRQ0AIAEoAgggASgCBEYEQCABKAIQIAEoAgxGDQELIAEoApABQRVBABAUIAEtABdBAXEEQCABKAKkARAWCyABQQA2AqwBDAELAkAgASgCEEUEQCABKAIIRQ0BCyABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AyggASABKAKkARAxNwMgIAEpAyggASkDIFIEQCABKAKQAUEBQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABIAEoAqQBEDE3AzAgASABKAKkARAxNwOAAQJ/IwBBEGsiBSABKAKkATYCDCAFKAIMLQAAQQFxRQsEQCABKAKQAUEUQQAQFCABLQAXQQFxBEAgASgCpAEQFgsgAUEANgKsAQwBCyABLQAXQQFxBEAgASgCpAEQFgsCQCABKQOAAUL///////////8AWARAIAEpA4ABIAEpA4ABIAEpAzB8WA0BCyABKAKQAUEEQRYQFCABQQA2AqwBDAELIAEpA4ABIAEpAzB8IAEpA5gBIAEpAzh8VgRAIAEoApABQRVBABAUIAFBADYCrAEMAQsCQCABKAKUAUEEcUUNACABKQOAASABKQMwfCABKQOYASABKQM4fFENACABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEpAyggASkDMEIugFYEQCABKAKQAUEVQQAQFCABQQA2AqwBDAELIAEgASkDKCABKAKQARCQASIFNgKMASAFRQRAIAFBADYCrAEMAQsgASgCjAFBAToALCABKAKMASABKQMwNwMYIAEoAowBIAEpA4ABNwMgIAEgASgCjAE2AqwBCyABKAKsASEFIAFBsAFqJAAgACAFNgJQDAELIAAoAmQgACkDMBAsGiAAKAJkIQUgACkDWCEJIAAoAmgoAhQhBiAAKAJUIQcjAEHQAGsiASQAIAEgBTYCSCABIAk3A0AgASAGNgI8IAEgBzYCOAJAIAEoAkgQMEIWVARAIAEoAjhBFUEAEBQgAUEANgJMDAELIwBBEGsiBSABKAJINgIMIAECfiAFKAIMLQAAQQFxBEAgBSgCDCkDEAwBC0IACzcDCCABKAJI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ECADQcgAEBgiADYCDAJAIABFBEAgAygCEEEBQbSbASgCABAUIANBADYCHAwBCyADKAIMIAMoAhA2AgAgAygCDCADLQAbQQFxOgAEIAMoAgwgAygCFDYCCAJAIAMoAgwoAghBAU4EQCADKAIMKAIIQQlMDQELIAMoAgxBCTYCCAsgAygCDEEAOgAMIAMoAgxBADYCMCADKAIMQQA2AjQgAygCDEEANgI4IAMgAygCDDYCHAsgAygCHCEAIANBIGokACAACzgBAX8jAEEQayIBIAA2AgwgASgCDEEANgIAIAEoAgxBADYCBCABKAIMQQA2AgggASgCDEEAOgAMC+MIAQF/IwBBQGoiAiAANgI4IAIgATYCNCACIAIoAjgoAnw2AjAgAiACKAI4KAI4IAIoAjgoAmxqNgIsIAIgAigCOCgCeDYCICACIAIoAjgoApABNgIcIAICfyACKAI4KAJsIAIoAjgoAixBhgJrSwRAIAIoAjgoAmwgAigCOCgCLEGGAmtrDAELQQALNgIYIAIgAigCOCgCQDYCFCACIAIoAjgoAjQ2AhAgAiACKAI4KAI4IAIoAjgoAmxqQYICajYCDCACIAIoAiwgAigCIEEBa2otAAA6AAsgAiACKAIsIAIoAiBqLQAAOgAKIAIoAjgoAnggAigCOCgCjAFPBEAgAiACKAIwQQJ2NgIwCyACKAIcIAIoAjgoAnRLBEAgAiACKAI4KAJ0NgIcCwNAAkAgAiACKAI4KAI4IAIoAjRqNgIoAkAgAigCKCACKAIgai0AACACLQAKRw0AIAIoAiggAigCIEEBa2otAAAgAi0AC0cNACACKAIoLQAAIAIoAiwtAABHDQAgAiACKAIoIgBBAWo2AiggAC0AASACKAIsLQABRwRADAELIAIgAigCLEECajYCLCACIAIoAihBAWo2AigDQCACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AigCf0EAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACIAIoAiwiAEEBajYCLCAALQABIQEgAiACKAIoIgBBAWo2AihBACAALQABIAFHDQAaIAIgAigCLCIAQQFqNgIsIAAtAAEhASACIAIoAigiAEEBajYCKEEAIAAtAAEgAUcNABogAiACKAIsIgBBAWo2AiwgAC0AASEBIAIgAigCKCIAQQFqNgIoQQAgAC0AASABRw0AGiACKAIsIAIoAgxJC0EBcQ0ACyACQYICIAIoAgwgAigCLGtrNgIkIAIgAigCDEGCAms2AiwgAigCJCACKAIgSgRAIAIoAjggAigCNDYCcCACIAIoAiQ2AiAgAigCJCACKAIcTg0CIAIgAigCLCACKAIgQQFrai0AADoACyACIAIoAiwgAigCIGotAAA6AAoLCyACIAIoAhQgAigCNCACKAIQcUEBdGovAQAiATYCNEEAIQAgASACKAIYSwR/IAIgAigCMEEBayIANgIwIABBAEcFQQALQQFxDQELCwJAIAIoAiAgAigCOCgCdE0EQCACIAIoAiA2AjwMAQsgAiACKAI4KAJ0NgI8CyACKAI8C5IQAQF/IwBBMGsiAiQAIAIgADYCKCACIAE2AiQgAgJ/IAIoAigoAiwgAigCKCgCDEEFa0kEQCACKAIoKAIsDAELIAIoAigoAgxBBWsLNgIgIAJBADYCECACIAIoAigoAgAoAgQ2AgwDQAJAIAJB//8DNgIcIAIgAigCKCgCvC1BKmpBA3U2AhQgAigCKCgCACgCECACKAIUSQ0AIAIgAigCKCgCACgCECACKAIUazYCFCACIAIoAigoAmwgAigCKCgCXGs2AhggAigCHCACKAIYIAIoAigoAgAoAgRqSwRAIAIgAigCGCACKAIoKAIAKAIEajYCHAsgAigCHCACKAIUSwRAIAIgAigCFDYCHAsCQCACKAIcIAIoAiBPDQACQCACKAIcRQRAIAIoAiRBBEcNAQsgAigCJEUNACACKAIcIAIoAhggAigCKCgCACgCBGpGDQELDAELQQAhACACIAIoAiRBBEYEfyACKAIcIAIoAhggAigCKCgCACgCBGpGBUEAC0EBcTYCECACKAIoQQBBACACKAIQEF0gAigCKCgCCCACKAIoKAIUQQRraiACKAIcOgAAIAIoAigoAgggAigCKCgCFEEDa2ogAigCHEEIdjoAACACKAIoKAIIIAIoAigoAhRBAmtqIAIoAhxBf3M6AAAgAigCKCgCCCACKAIoKAIUQQFraiACKAIcQX9zQQh2OgAAIAIoAigoAgAQHCACKAIYBEAgAigCGCACKAIcSwRAIAIgAigCHDYCGAsgAigCKCgCACgCDCACKAIoKAI4IAIoAigoAlxqIAIoAhgQGRogAigCKCgCACIAIAIoAhggACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCGGs2AhAgAigCKCgCACIAIAIoAhggACgCFGo2AhQgAigCKCIAIAIoAhggACgCXGo2AlwgAiACKAIcIAIoAhhrNgIcCyACKAIcBEAgAigCKCgCACACKAIoKAIAKAIMIAIoAhwQdhogAigCKCgCACIAIAIoAhwgACgCDGo2AgwgAigCKCgCACIAIAAoAhAgAigCHGs2AhAgAigCKCgCACIAIAIoAhwgACgCFGo2AhQLIAIoAhBFDQELCyACIAIoAgwgAigCKCgCACgCBGs2AgwgAigCDARAAkAgAigCDCACKAIoKAIsTwRAIAIoAihBAjYCsC0gAigCKCgCOCACKAIoKAIAKAIAIAIoAigoAixrIAIoAigoAiwQGRogAigCKCACKAIoKAIsNgJsDAELIAIoAgwgAigCKCgCPCACKAIoKAJsa08EQCACKAIoIgAgACgCbCACKAIoKAIsazYCbCACKAIoKAI4IAIoAigoAjggAigCKCgCLGogAigCKCgCbBAZGiACKAIoKAKwLUECSQRAIAIoAigiACAAKAKwLUEBajYCsC0LCyACKAIoKAI4IAIoAigoAmxqIAIoAigoAgAoAgAgAigCDGsgAigCDBAZGiACKAIoIgAgAigCDCAAKAJsajYCbAsgAigCKCACKAIoKAJsNgJcIAIoAigiAQJ/IAIoAgwgAigCKCgCLCACKAIoKAK0LWtLBEAgAigCKCgCLCACKAIoKAK0LWsMAQsgAigCDAsgASgCtC1qNgK0LQsgAigCKCgCwC0gAigCKCgCbEkEQCACKAIoIAIoAigoAmw2AsAtCwJAIAIoAhAEQCACQQM2AiwMAQsCQCACKAIkRQ0AIAIoAiRBBEYNACACKAIoKAIAKAIEDQAgAigCKCgCbCACKAIoKAJcRw0AIAJBATYCLAwBCyACIAIoAigoAjwgAigCKCgCbGtBAWs2AhQCQCACKAIoKAIAKAIEIAIoAhRNDQAgAigCKCgCXCACKAIoKAIsSA0AIAIoAigiACAAKAJcIAIoAigoAixrNgJcIAIoAigiACAAKAJsIAIoAigoAixrNgJsIAIoAigoAjggAigCKCgCOCACKAIoKAIsaiACKAIoKAJsEBkaIAIoAigoArAtQQJJBEAgAigCKCIAIAAoArAtQQFqNgKwLQsgAiACKAIoKAIsIAIoAhRqNgIUCyACKAIUIAIoAigoAgAoAgRLBEAgAiACKAIoKAIAKAIENgIUCyACKAIUBEAgAigCKCgCACACKAIoKAI4IAIoAigoAmxqIAIoAhQQdhogAigCKCIAIAIoAhQgACgCbGo2AmwLIAIoAigoAsAtIAIoAigoAmxJBEAgAigCKCACKAIoKAJsNgLALQsgAiACKAIoKAK8LUEqakEDdTYCFCACIAIoAigoAgwgAigCFGtB//8DSwR/Qf//AwUgAigCKCgCDCACKAIUaws2AhQgAgJ/IAIoAhQgAigCKCgCLEsEQCACKAIoKAIsDAELIAIoAhQLNgIgIAIgAigCKCgCbCACKAIoKAJcazYCGAJAIAIoAhggAigCIEkEQCACKAIYRQRAIAIoAiRBBEcNAgsgAigCJEUNASACKAIoKAIAKAIEDQEgAigCGCACKAIUSw0BCyACAn8gAigCGCACKAIUSwRAIAIoAhQMAQsgAigCGAs2AhwgAgJ/QQAgAigCJEEERw0AGkEAIAIoAigoAgAoAgQNABogAigCHCACKAIYRgtBAXE2AhAgAigCKCACKAIoKAI4IAIoAigoAlxqIAIoAhwgAigCEBBdIAIoAigiACACKAIcIAAoAlxqNgJcIAIoAigoAgAQHAsgAkECQQAgAigCEBs2AiwLIAIoAiwhACACQTBqJAAgAAuyAgEBfyMAQRBrIgEkACABIAA2AggCQCABKAIIEHgEQCABQX42AgwMAQsgASABKAIIKAIcKAIENgIEIAEoAggoAhwoAggEQCABKAIIKAIoIAEoAggoAhwoAgggASgCCCgCJBEEAAsgASgCCCgCHCgCRARAIAEoAggoAiggASgCCCgCHCgCRCABKAIIKAIkEQQACyABKAIIKAIc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DQAgAiEAIANBAWsiAw0ACwsgBCgCFBogASACNgKgAQwCCyMAQRBrIgAgASgCqAEoAgQ2AgwgAUEAIAAoAgxrQQJ0QajZAGooAgA2AqABDAELIAFBADYCoAELCwJAIAEoAqABRQRAIAEgASgCpAE2AqwBDAELIAEgASgCoAEQLgJ/IAEoAqQBBEAgASgCpAEQLkECagwBC0EAC2pBAWoQGCIANgIcIABFBEAgAUG4EygCADYCrAEMAQsgASgCHCEAAn8gASgCpAEEQCABKAKkAQwBC0H6EgshA0HfEkH6EiABKAKkARshAiABIAEoAqABNgIIIAEgAjYCBCABIAM2AgAgAEG+CiABEG8gASgCqAEgASgCHDYCCCABIAEoAhw2AqwBCyABKAKsASEAIAFBsAFqJAAgAAsIAEEBQTgQfwszAQF/IAAoAhQiAyABIAIgACgCECADayIBIAEgAksbIgEQGRogACAAKAIUIAFqNgIUIAILjwUCBn4BfyABIAEoAgBBD2pBcHEiAUEQajYCACAAAnwgASkDACEDIAEpAwghBiMAQSBrIggkAAJAIAZC////////////AIMiBEKAgICAgIDAgDx9IARCgICAgICAwP/DAH1UBEAgBkIEhiADQjyIhCEEIANC//////////8PgyIDQoGAgICAgICACFoEQCAEQoGAgICAgICAwAB8IQIMAgsgBEKAgICAgICAgEB9IQIgA0KAgICAgICAgAiFQgBSDQEgAiAEQgGDfCECDAELIANQIARCgICAgICAwP//AFQgBEKAgICAgIDA//8AURtFBEAgBkIEhiADQjyIhEL/////////A4NCgICAgICAgPz/AIQhAgwBC0KAgICAgICA+P8AIQIgBEL///////+//8MAVg0AQgAhAiAEQjCIpyIAQZH3AEkNACADIQIgBkL///////8/g0KAgICAgIDAAIQiBSEHAkAgAEGB9wBrIgFBwABxBEAgAiABQUBqrYYhB0IAIQIMAQsgAUUNACAHIAGtIgSGIAJBwAAgAWutiIQhByACIASGIQILIAggAjcDECAIIAc3AxgCQEGB+AAgAGsiAEHAAHEEQCAFIABBQGqtiCEDQgAhBQwBCyAARQ0AIAVBwAAgAGuthiADIACtIgKIhCEDIAUgAoghBQsgCCADNwMAIAggBTcDCCAIKQMIQgSGIAgpAwAiA0I8iIQhAiAIKQMQIAgpAxiEQgBSrSADQv//////////D4OEIgNCgYCAgICAgIAIWgRAIAJCAXwhAgwBCyADQoCAgICAgICACIVCAFINACACQgGDIAJ8IQILIAhBIGokACACIAZCgICAgICAgICAf4OEvws5AwALrRcDEn8CfgF8IwBBsARrIgkkACAJQQA2AiwCQCABvSIYQn9XBEBBASESQa4IIRMgAZoiAb0hGAwBCyAEQYAQcQRAQQEhEkGxCCETDAELQbQIQa8IIARBAXEiEhshEyASRSEXCwJAIBhCgICAgICAgPj/AINCgICAgICAgPj/AFEEQCAAQSAgAiASQQNqIg0gBEH//3txECYgACATIBIQIiAAQeQLQbUSIAVBIHEiAxtBjw1BuRIgAxsgASABYhtBAxAiDAELIAlBEGohEAJAAn8CQCABIAlBLGoQqQEiASABoCIBRAAAAAAAAAAAYgRAIAkgCSgCLCIGQQFrNgIsIAVBIHIiFEHhAEcNAQwDCyAFQSByIhRB4QBGDQIgCSgCLCELQQYgAyADQQBIGwwBCyAJIAZBHWsiCzYCLCABRAAAAAAAALBBoiEBQQYgAyADQQBIGwshCiAJQTBqIAlB0AJqIAtBAEgbIg4hBwNAIAcCfyABRAAAAAAAAPBBYyABRAAAAAAAAAAAZnEEQCABqwwBC0EACyIDNgIAIAdBBGohByABIAO4oUQAAAAAZc3NQaIiAUQAAAAAAAAAAGINAAsCQCALQQFIBEAgCyEDIAchBiAOIQgMAQsgDiEIIAshAwNAIANBHSADQR1IGyEMAkAgB0EEayIGIAhJDQAgDK0hGUIAIRgDQCAGIAY1AgAgGYYgGHwiGCAYQoCU69wDgCIYQoCU69wDfn0+AgAgCCAGQQRrIgZNBEAgGEL/////D4MhGAwBCwsgGKciA0UNACAIQQRrIgggAzYCAAsDQCAIIAciBkkEQCAGQQRrIgcoAgBFDQELCyAJIAkoAiwgDGsiAzYCLCAGIQcgA0EASg0ACwsgCkEZakEJbSEHIANBf0wEQCAHQQFqIQ0gFEHmAEYhFQNAQQlBACADayADQXdIGyEWAkAgBiAISwRAQYCU69wDIBZ2IQ9BfyAWdEF/cyERQQAhAyAIIQcDQCAHIAMgBygCACIMIBZ2ajYCACAMIBFxIA9sIQMgB0EEaiIHIAZJDQALIAggCEEEaiAIKAIAGyEIIANFDQEgBiADNgIAIAZBBGohBgwBCyAIIAhBBGogCCgCABshCAsgCSAJKAIsIBZqIgM2AiwgDiAIIBUbIgcgDUECdGogBiAGIAdrQQJ1IA1KGyEGIANBAEgNAAsLQQAhBwJAIAYgCE0NACAOIAhrQQJ1QQlsIQcgCCgCACIMQQpJDQBB5AAhAwNAIAdBAWohByADIAxLDQEgA0EKbCEDDAALAAsgCkEAIAcgFEHmAEYbayAUQecARiAKQQBHcWsiAyAGIA5rQQJ1QQlsQQlrSARAIANBgMgAaiIRQQltIgxBAnQgCUEwakEEciAJQdQCaiALQQBIG2pBgCBrIQ1BCiEDAkAgESAMQQlsayIMQQdKDQBB5AAhAwNAIAxBAWoiDEEIRg0BIANBCmwhAwwACwALAkAgDSgCACIRIBEgA24iDCADbGsiD0EBIA1BBGoiCyAGRhtFDQBEAAAAAAAA4D9EAAAAAAAA8D9EAAAAAAAA+D8gBiALRhtEAAAAAAAA+D8gDyADQQF2IgtGGyALIA9LGyEaRAEAAAAAAEBDRAAAAAAAAEBDIAxBAXEbIQECQCAXDQAgEy0AAEEtRw0AIBqaIRogAZohAQsgDSARIA9rIgs2AgAgASAaoCABYQ0AIA0gAyALaiIDNgIAIANBgJTr3ANPBEADQCANQQA2AgAgCCANQQRrIg1LBEAgCEEEayIIQQA2AgALIA0gDSgCAEEBaiIDNgIAIANB/5Pr3ANLDQALCyAOIAhrQQJ1QQlsIQcgCCgCACILQQpJDQBB5AAhAwNAIAdBAWohByADIAtLDQEgA0EKbCEDDAALAAsgDUEEaiIDIAYgAyAGSRshBgsDQCAGIgsgCE0iDEUEQCALQQRrIgYoAgBFDQELCwJAIBRB5wBHBEAgBEEIcSEPDAELIAdBf3NBfyAKQQEgChsiBiAHSiAHQXtKcSIDGyAGaiEKQX9BfiADGyAFaiEFIARBCHEiDw0AQXchBgJAIAwNACALQQRrKAIAIgNFDQBBACEGIANBCnANAEEAIQxB5AAhBgNAIAMgBnBFBEAgDEEBaiEMIAZBCmwhBgwBCwsgDEF/cyEGCyALIA5rQQJ1QQlsIQMgBUFfcUHGAEYEQEEAIQ8gCiADIAZqQQlrIgNBACADQQBKGyIDIAMgCkobIQoMAQtBACEPIAogAyAHaiAGakEJayIDQQAgA0EAShsiAyADIApKGyEKCyAKIA9yQQBHIREgAEEgIAIgBUFfcSIMQcYARgR/IAdBACAHQQBKGwUgECAHIAdBH3UiA2ogA3OtIBAQRCIGa0EBTARAA0AgBkEBayIGQTA6AAAgECAGa0ECSA0ACwsgBkECayIVIAU6AAAgBkEBa0EtQSsgB0EASBs6AAAgECAVawsgCiASaiARampBAWoiDSAEECYgACATIBIQIiAAQTAgAiANIARBgIAEcxAmAkACQAJAIAxBxgBGBEAgCUEQakEIciEDIAlBEGpBCXIhByAOIAggCCAOSxsiBSEIA0AgCDUCACAHEEQhBgJAIAUgCEcEQCAGIAlBEGpNDQEDQCAGQQFrIgZBMDoAACAGIAlBEGpLDQALDAELIAYgB0cNACAJQTA6ABggAyEGCyAAIAYgByAGaxAiIAhBBGoiCCAOTQ0AC0EAIQYgEUUNAiAAQdYSQQEQIiAIIAtPDQEgCkEBSA0BA0AgCDUCACAHEEQiBiAJQRBqSwRAA0AgBkEBayIGQTA6AAAgBiAJQRBqSw0ACwsgACAGIApBCSAKQQlIGxAiIApBCWshBiAIQQRqIgggC08NAyAKQQlKIQMgBiEKIAMNAAsMAgsCQCAKQQBIDQAgCyAIQQRqIAggC0kbIQUgCUEQakEJciELIAlBEGpBCHIhAyAIIQcDQCALIAc1AgAgCxBEIgZGBEAgCUEwOgAYIAMhBgsCQCAHIAhHBEAgBiAJQRBqTQ0BA0AgBkEBayIGQTA6AAAgBiAJQRBqSw0ACwwBCyAAIAZBARAiIAZBAWohBkEAIApBAEwgDxsNACAAQdYSQQEQIgsgACAGIAsgBmsiBiAKIAYgCkgbECIgCiAGayEKIAdBBGoiByAFTw0BIApBf0oNAAsLIABBMCAKQRJqQRJBABAmIAAgFSAQIBVrECIMAgsgCiEGCyAAQTAgBkEJakEJQQAQJgsMAQsgE0EJaiATIAVBIHEiCxshCgJAIANBC0sNAEEMIANrIgZFDQBEAAAAAAAAIEAhGgNAIBpEAAAAAAAAMECiIRogBkEBayIGDQALIAotAABBLUYEQCAaIAGaIBqhoJohAQwBCyABIBqgIBqhIQELIBAgCSgCLCIGIAZBH3UiBmogBnOtIBAQRCIGRgRAIAlBMDoADyAJQQ9qIQYLIBJBAnIhDiAJKAIsIQcgBkECayIMIAVBD2o6AAAgBkEBa0EtQSsgB0EASBs6AAAgBEEIcSEHIAlBEGohCANAIAgiBQJ/IAGZRAAAAAAAAOBBYwRAIAGqDAELQYCAgIB4CyIGQYCHAWotAAAgC3I6AAAgASAGt6FEAAAAAAAAMECiIQECQCAFQQFqIgggCUEQamtBAUcNAAJAIAFEAAAAAAAAAABiDQAgA0EASg0AIAdFDQELIAVBLjoAASAFQQJqIQgLIAFEAAAAAAAAAABiDQALIABBICACIA4CfwJAIANFDQAgCCAJa0ESayADTg0AIAMgEGogDGtBAmoMAQsgECAJQRBqIAxqayAIagsiA2oiDSAEECYgACAKIA4QIiAAQTAgAiANIARBgIAEcxAmIAAgCUEQaiAIIAlBEGprIgUQIiAAQTAgAyAFIBAgDGsiA2prQQBBABAmIAAgDCADECILIABBICACIA0gBEGAwABzECYgCUGwBGokACACIA0gAiANShsLBgBB4J8BCwYAQdyfAQsGAEHUnwELGAEBfyMAQRBrIgEgADYCDCABKAIMQQRqCxgBAX8jAEEQayIBIAA2AgwgASgCDEEIagtpAQF/IwBBEGsiASQAIAEgADYCDCABKAIMKAIUBEAgASgCDCgCFBAbCyABQQA2AgggASgCDCgCBARAIAEgASgCDCgCBDYCCAsgASgCDEEEahA4IAEoAgwQFSABKAIIIQAgAUEQaiQAIAALqQEBA38CQCAALQAAIgJFDQADQCABLQAAIgRFBEAgAiEDDAILAkAgAiAERg0AIAJBIHIgAiACQcEAa0EaSRsgAS0AACICQSByIAIgAkHBAGtBGkkbRg0AIAAtAAAhAwwCCyABQQFqIQEgAC0AASECIABBAWohACACDQALCyADQf8BcSIAQSByIAAgAEHBAGtBGkkbIAEtAAAiAEEgciAAIABBwQBrQRpJG2sLiAEBAX8jAEEQayICJAAgAiAANgIMIAIgATYCCCMAQRBrIgAgAigCDDYCDCAAKAIMQQA2AgAgACgCDEEANgIEIAAoAgxBADYCCCACKAIMIAIoAgg2AgACQCACKAIMEKwBQQFGBEAgAigCDEG0mwEoAgA2AgQMAQsgAigCDEEANgIECyACQRBqJAAL2AkBAX8jAEGwAWsiBSQAIAUgADYCpAEgBSABNgKgASAFIAI2ApwBIAUgAzcDkAEgBSAENgKMASAFIAUoAqABNgKIAQJAAkACQAJAAkACQAJAAkACQAJAAkAgBSgCjAEODwABAgMEBQcICQkJCQkJBgkLIAUoAogBQgA3AyAgBUIANwOoAQwJCyAFIAUoAqQBIAUoApwBIAUpA5ABECsiAzcDgAEgA0IAUwRAIAUoAogBQQhqIAUoAqQBEBcgBUJ/NwOoAQwJCwJAIAUpA4ABUARAIAUoAogBKQMoIAUoAogBKQMgUQRAIAUoAogBQQE2AgQgBSgCiAEgBSgCiAEpAyA3AxggBSgCiAEoAgAEQCAFKAKkASAFQcgAahA5QQBIBEAgBSgCiAFBCGogBSgCpAEQFyAFQn83A6gBDA0LAkAgBSkDSEIgg1ANACAFKAJ0IAUoAogBKAIwRg0AIAUoAogBQQhqQQdBABAUIAVCfzcDqAEMDQsCQCAFKQNIQgSDUA0AIAUpA2AgBSgCiAEpAxhRDQAgBSgCiAFBCGpBFUEAEBQgBUJ/NwOoAQwNCwsLDAELAkAgBSgCiAEoAgQNACAFKAKIASkDICAFKAKIASkDKFYNACAFIAUoAogBKQMoIAUoAogBKQMgfTcDQANAIAUpA0AgBSkDgAFUBEAgBSAFKQOAASAFKQNAfUL/////D1YEfkL/////DwUgBSkDgAEgBSkDQH0LNwM4IAUoAogBKAIwIAUoApwBIAUpA0CnaiAFKQM4pxAaIQAgBSgCiAEgADYCMCAFKAKIASIAIAUpAzggACkDKHw3AyggBSAFKQM4IAUpA0B8NwNADAELCwsLIAUoAogBIgAgBSkDgAEgACkDIHw3AyAgBSAFKQOAATcDqAEMCAsgBUIANwOoAQwHCyAFIAUoApwBNgI0IAUoAogBKAIEBEAgBSgCNCAFKAKIASkDGDcDGCAFKAI0IAUoAogBKAIwNgIsIAUoAjQgBSgCiAEpAxg3AyAgBSgCNEEAOwEwIAUoAjRBADsBMiAFKAI0IgAgACkDAELsAYQ3AwALIAVCADcDqAEMBgsgBSAFKAKIAUEIaiAFKAKcASAFKQOQARBDNwOoAQwFCyAFKAKIARAVIAVCADcDqAEMBAsjAEEQayIAIAUoAqQBNgIMIAUgACgCDCkDGDcDKCAFKQMoQgBTBEAgBSgCiAFBCGogBSgCpAEQFyAFQn83A6gBDAQLIAUpAyghAyAFQX82AhggBUEQNgIUIAVBDzYCECAFQQ02AgwgBUEMNgIIIAVBCjYCBCAFQQk2AgAgBUEIIAUQNEJ/hSADgzcDqAEMAwsgBQJ/IAUpA5ABQhBUBEAgBSgCiAFBCGpBEkEAEBRBAAwBCyAFKAKcAQs2AhwgBSgCHEUEQCAFQn83A6gBDAMLAkAgBSgCpAEgBSgCHCkDACAFKAIcKAIIECdBAE4EQCAFIAUoAqQBEEkiAzcDICADQgBZDQELIAUoAogBQQhqIAUoAqQBEBcgBUJ/NwOoAQwDCyAFKAKIASAFKQMgNwMgIAVCADcDqAEMAgsgBSAFKAKIASkDIDcDqAEMAQsgBSgCiAFBCGpBHEEAEBQgBUJ/NwOoAQsgBSkDqAEhAyAFQbABaiQAIAMLnAwBAX8jAEEwayIFJAAgBSAANgIkIAUgATYCICAFIAI2AhwgBSADNwMQIAUgBDYCDCAFIAUoAiA2AggCQAJAAkACQAJAAkACQAJAAkACQCAFKAIMDhEAAQIDBQYICAgICAgICAcIBAgLIAUoAghCADcDGCAFKAIIQQA6AAwgBSgCCEEAOgANIAUoAghBADoADyAFKAIIQn83AyAgBSgCCCgCrEAgBSgCCCgCqEAoAgwRAABBAXFFBEAgBUJ/NwMoDAkLIAVCADcDKAwICyAFKAIkIQEgBSgCCCECIAUoAhwhBCAFKQMQIQMjAEFAaiIAJAAgACABNgI0IAAgAjYCMCAAIAQ2AiwgACADNwMgAkACfyMAQRBrIgEgACgCMDYCDCABKAIMKAIACwRAIABCfzcDOAwBCwJAIAApAyBQRQRAIAAoAjAtAA1BAXFFDQELIABCADcDOAwBCyAAQgA3AwggAEEAOgAbA0AgAC0AG0EBcQR/QQAFIAApAwggACkDIFQLQQFxBEAgACAAKQMgIAApAwh9NwMAIAAgACgCMCgCrEAgACgCLCAAKQMIp2ogACAAKAIwKAKoQCgCHBEBADYCHCAAKAIcQQJHBEAgACAAKQMAIAApAwh8NwMICwJAAkACQAJAIAAoAhxBAWsOAwACAQMLIAAoAjBBAToADQJAIAAoAjAtAAxBAXENAAsgACgCMCkDIEIAUwRAIAAoAjBBFEEAEBQgAEEBOgAbDAMLAkAgACgCMC0ADkEBcUUNACAAKAIwKQMgIAApAwhWDQAgACgCMEEBOgAPIAAoAjAgACgCMCkDIDcDGCAAKAIsIAAoAjBBKGogACgCMCkDGKcQGRogACAAKAIwKQMYNwM4DAYLIABBAToAGwwCCyAAKAIwLQAMQQFxBEAgAEEBOgAbDAILIAAgACgCNCAAKAIwQShqQoDAABArIgM3AxAgA0IAUwRAIAAoAjAgACgCNBAXIABBAToAGwwCCwJAIAApAxBQBEAgACgCMEEBOgAMIAAoAjAoAqxAIAAoAjAoAqhAKAIYEQIAIAAoAjApAyBCAFMEQCAAKAIwQgA3AyALDAELAkAgACgCMCkDIEIAWQRAIAAoAjBBADoADgwBCyAAKAIwIAApAxA3AyALIAAoAjAoAqxAIAAoAjBBKGogACkDECAAKAIwKAKoQCgCFBEQABoLDAELAn8jAEEQayIBIAAoAjA2AgwgASgCDCgCAEULBEAgACgCMEEUQQAQFAsgAEEBOgAbCwwBCwsgACkDCEIAUgRAIAAoAjBBADoADiAAKAIwIgEgACkDCCABKQMYfDcDGCAAIAApAwg3AzgMAQsgAEF/QQACfyMAQRBrIgEgACgCMDYCDCABKAIMKAIACxusNwM4CyAAKQM4IQMgAEFAayQAIAUgAzcDKAwHCyAFKAIIKAKsQCAFKAIIKAKoQCgCEBEAAEEBcUUEQCAFQn83AygMBwsgBUIANwMoDAYLIAUgBSgCHDYCBAJAIAUoAggtABBBAXEEQCAFKAIILQANQQFxBEAgBSgCBCAFKAIILQAPQQFxBH9BAAUCfwJAIAUoAggoAhRBf0cEQCAFKAIIKAIUQX5HDQELQQgMAQsgBSgCCCgCFAtB//8DcQs7ATAgBSgCBCAFKAIIKQMYNwMgIAUoAgQiACAAKQMAQsgAhDcDAAwCCyAFKAIEIgAgACkDAEK3////D4M3AwAMAQsgBSgCBEEAOwEwIAUoAgQiACAAKQMAQsAAhDcDAAJAIAUoAggtAA1BAXEEQCAFKAIEIAUoAggpAxg3AxggBSgCBCIAIAApAwBCBIQ3AwAMAQsgBSgCBCIAIAApAwBC+////w+DNwMACwsgBUIANwMoDAULIAUgBSgCCC0AD0EBcQR/QQAFIAUoAggoAqxAIAUoAggoAqhAKAIIEQAAC6w3AygMBAsgBSAFKAIIIAUoAhwgBSkDEBBDNwMoDAMLIAUoAggQsQEgBUIANwMoDAILIAVBfzYCACAFQRAgBRA0Qj+ENwMoDAELIAUoAghBFEEAEBQgBUJ/NwMoCyAFKQMoIQMgBUEwaiQAIAMLPAEBfyMAQRBrIgMkACADIAA7AQ4gAyABNgIIIAMgAjYCBEEAIAMoAgggAygCBBC0ASEAIANBEGokACAAC46nAQEEfyMAQSBrIgUkACAFIAA2AhggBSABNgIUIAUgAjYCECAFIAUoAhg2AgwgBSgCDCAFKAIQKQMAQv////8PVgR+Qv////8PBSAFKAIQKQMACz4CICAFKAIMIAUoAhQ2AhwCQCAFKAIMLQAEQQFxBEAgBSgCDEEQaiEBQQRBACAFKAIMLQAMQQFxGyECIwBBQGoiACQAIAAgATYCOCAAIAI2AjQCQAJAAkAgACgCOBB4DQAgACgCNEEFSg0AIAAoAjRBAE4NAQsgAEF+NgI8DAELIAAgACgCOCgCHDYCLAJAAkAgACgCOCgCDEUNACAAKAI4KAIEBEAgACgCOCgCAEUNAQsgACgCLCgCBEGaBUcNASAAKAI0QQRGDQELIAAoAjhBsNkAKAIANgIYIABBfjYCPAwBCyAAKAI4KAIQRQRAIAAoAjhBvNkAKAIANgIYIABBezYCPAwBCyAAIAAoAiwoAig2AjAgACgCLCAAKAI0NgIoAkAgACgCLCgCFARAIAAoAjgQHCAAKAI4KAIQRQRAIAAoAixBfzYCKCAAQQA2AjwMAwsMAQsCQCAAKAI4KAIEDQAgACgCNEEBdEEJQQAgACgCNEEEShtrIAAoAjBBAXRBCUEAIAAoAjBBBEoba0oNACAAKAI0QQRGDQAgACgCOEG82QAoAgA2AhggAEF7NgI8DAILCwJAIAAoAiwoAgRBmgVHDQAgACgCOCgCBEUNACAAKAI4QbzZACgCADYCGCAAQXs2AjwMAQsgACgCLCgCBEEqRgRAIAAgACgCLCgCMEEEdEH4AGtBCHQ2AigCQAJAIAAoAiwoAogBQQJIBEAgACgCLCgChAFBAk4NAQsgAEEANgIkDAELAkAgACgCLCgChAFBBkgEQCAAQQE2AiQMAQsCQCAAKAIsKAKEAUEGRgRAIABBAjYCJAwBCyAAQQM2AiQLCwsgACAAKAIoIAAoAiRBBnRyNgIoIAAoAiwoAmwEQCAAIAAoAihBIHI2AigLIAAgACgCKEEfIAAoAihBH3BrajYCKCAAKAIsIAAoAigQSyAAKAIsKAJsBEAgACgCLCAAKAI4KAIwQRB2EEsgACgCLCAAKAI4KAIwQf//A3EQSwtBAEEAQQAQPSEBIAAoAjggATYCMCAAKAIsQfEANgIEIAAoAjgQHCAAKAIsKAIUBEAgACgCLEF/NgIoIABBADYCPAwCCwsgACgCLCgCBEE5RgRAQQBBAEEAEBohASAAKAI4IAE2AjAgACgCLCgCCCECIAAoAiwiAygCFCEBIAMgAUEBajYCFCABIAJqQR86AAAgACgCLCgCCCECIAAoAiwiAygCFCEBIAMgAUEBajYCFCABIAJqQYsBOgAAIAAoAiwoAgghAiAAKAIsIgMoAhQhASADIAFBAWo2AhQgASACakEIOgAAAkAgACgCLCgCHEUEQCAAKAIsKAIIIQIgACgCLCIDKAIUIQEgAyABQQFqNgIUIAEgAmpBADoAACAAKAIsKAIIIQIgACgCLCIDKAIUIQEgAyABQQFqNgIUIAEgAmpBADoAACAAKAIsKAIIIQIgACgCLCIDKAIUIQEgAyABQQFqNgIUIAEgAmpBADoAACAAKAIsKAIIIQIgACgCLCIDKAIUIQEgAyABQQFqNgIUIAEgAmpBADoAACAAKAIsKAIIIQIgACgCLCIDKAIUIQEgAyABQQFqNgIUIAEgAmpBADoAACAAKAIsKAKEAUEJRgR/QQIFQQRBACAAKAIsKAKIAUECSAR/IAAoAiwoAoQBQQJIBUEBC0EBcRsLIQIgACgCLCgCCCEDIAAoAiwiBCgCFCEBIAQgAUEBajYCFCABIANqIAI6AAAgACgCLCgCCCECIAAoAiwiAygCFCEBIAMgAUEBajYCFCABIAJqQQM6AAAgACgCLEHxADYCBCAAKAI4EBwgACgCLCgCFARAIAAoAixBfzYCKCAAQQA2AjwMBAsMAQsgACgCLCgCHCgCAEVFQQJBACAAKAIsKAIcKAIsG2pBBEEAIAAoAiwoAhwoAhAbakEIQQAgACgCLCgCHCgCHBtqQRBBACAAKAIsKAIcKAIkG2ohAiAAKAIsKAIIIQMgACgCLCIEKAIUIQEgBCABQQFqNgIUIAEgA2ogAjoAACAAKAIsKAIcKAIEQf8BcSECIAAoAiwoAgghAyAAKAIsIgQoAhQhASAEIAFBAWo2AhQgASADaiACOgAAIAAoAiwoAhwoAgRBCHZB/wFxIQIgACgCLCgCCCEDIAAoAiwiBCgCFCEBIAQgAUEBajYCFCABIANqIAI6AAAgACgCLCgCHCgCBEEQdkH/AXEhAiAAKAIsKAIIIQMgACgCLCIEKAIUIQEgBCABQQFqNgIUIAEgA2ogAjoAACAAKAIsKAIcKAIEQRh2IQIgACgCLCgCCCEDIAAoAiwiBCgCFCEBIAQgAUEBajYCFCABIANqIAI6AAAgACgCLCgChAFBCUYEf0ECBUEEQQAgACgCLCgCiAFBAkgEfyAAKAIsKAKEAUECSAVBAQtBAXEbCyECIAAoAiwoAgghAyAAKAIsIgQoAhQhASAEIAFBAWo2AhQgASADaiACOgAAIAAoAiwoAhwoAgxB/wFxIQIgACgCLCgCCCEDIAAoAiwiBCgCFCEBIAQgAUEBajYCFCABIANqIAI6AAAgACgCLCgCHCgCEARAIAAoAiwoAhwoAhRB/wFxIQIgACgCLCgCCCEDIAAoAiwiBCgCFCEBIAQgAUEBajYCFCABIANqIAI6AAAgACgCLCgCHCgCFEEIdkH/AXEhAiAAKAIsKAIIIQMgACgCLCIEKAIUIQEgBCABQQFqNgIUIAEgA2ogAjoAAAsgACgCLCgCHCgCLARAIAAoAjgoAjAgACgCLCgCCCAAKAIsKAIUEBohASAAKAI4IAE2AjALIAAoAixBADYCICAAKAIsQcUANgIECwsgACgCLCgCBEHFAEYEQCAAKAIsKAIcKAIQBEAgACAAKAIsKAIUNgIgIAAgACgCLCgCHCgCFEH//wNxIAAoAiwoAiBrNgIcA0AgACgCLCgCDCAAKAIsKAIUIAAoAhxqSQRAIAAgACgCLCgCDCAAKAIsKAIUazYCGCAAKAIsKAIIIAAoAiwoAhRqIAAoAiwoAhwoAhAgACgCLCgCIGogACgCGBAZGiAAKAIsIAAoAiwoAgw2AhQCQCAAKAIsKAIcKAIsRQ0AIAAoAiwoAhQgACgCIE0NACAAKAI4KAIwIAAoAiwoAgggACgCIGogACgCLCgCFCAAKAIgaxAaIQEgACgCOCABNgIwCyAAKAIsIgEgACgCGCABKAIgajYCICAAKAI4EBwgACgCLCgCFARAIAAoAixBfzYCKCAAQQA2AjwMBQUgAEEANgIgIAAgACgCHCAAKAIYazYCHAwCCwALCyAAKAIsKAIIIAAoAiwoAhRqIAAoAiwoAhwoAhAgACgCLCgCIGogACgCHBAZGiAAKAIsIgEgACgCHCABKAIUajYCFAJAIAAoAiwoAhwoAixFDQAgACgCLCgCFCAAKAIgTQ0AIAAoAjgoAjAgACgCLCgCCCAAKAIgaiAAKAIsKAIUIAAoAiBrEBohASAAKAI4IAE2AjALIAAoAixBADYCIAsgACgCLEHJADYCBAsgACgCLCgCBEHJAEYEQCAAKAIsKAIcKAIcBEAgACAAKAIsKAIUNgIUA0AgACgCLCgCFCAAKAIsKAIMRgRAAkAgACgCLCgCHCgCLEUNACAAKAIsKAIUIAAoAhRNDQAgACgCOCgCMCAAKAIsKAIIIAAoAhRqIAAoAiwoAhQgACgCFGsQGiEBIAAoAjggATYCMAsgACgCOBAcIAAoAiwoAhQEQCAAKAIsQX82AiggAEEANgI8DAULIABBADYCFAsgACgCLCgCHCgCHCECIAAoAiwiAygCICEBIAMgAUEBajYCICAAIAEgAmotAAA2AhAgACgCECECIAAoAiwoAgghAyAAKAIsIgQoAhQhASAEIAFBAWo2AhQgASADaiACOgAAIAAoAhANAAsCQCAAKAIsKAIcKAIsRQ0AIAAoAiwoAhQgACgCFE0NACAAKAI4KAIwIAAoAiwoAgggACgCFGogACgCLCgCFCAAKAIUaxAaIQEgACgCOCABNgIwCyAAKAIsQQA2AiALIAAoAixB2wA2AgQLIAAoAiwoAgRB2wBGBEAgACgCLCgCHCgCJARAIAAgACgCLCgCFDYCDANAIAAoAiwoAhQgACgCLCgCDEYEQAJAIAAoAiwoAhwoAixFDQAgACgCLCgCFCAAKAIMTQ0AIAAoAjgoAjAgACgCLCgCCCAAKAIMaiAAKAIsKAIUIAAoAgxrEBohASAAKAI4IAE2AjALIAAoAjgQHCAAKAIsKAIUBEAgACgCLEF/NgIoIABBADYCPAwFCyAAQQA2AgwLIAAoAiwoAhwoAiQhAiAAKAIsIgMoAiAhASADIAFBAWo2AiAgACABIAJqLQAANgIIIAAoAgghAiAAKAIsKAIIIQMgACgCLCIEKAIUIQEgBCABQQFqNgIUIAEgA2ogAjoAACAAKAIIDQALAkAgACgCLCgCHCgCLEUNACAAKAIsKAIUIAAoAgxNDQAgACgCOCgCMCAAKAIsKAIIIAAoAgxqIAAoAiwoAhQgACgCDGsQGiEBIAAoAjggATYCMAsLIAAoAixB5wA2AgQLIAAoAiwoAgRB5wBGBEAgACgCLCgCHCgCLARAIAAoAiwoAgwgACgCLCgCFEECakkEQCAAKAI4EBwgACgCLCgCFARAIAAoAixBfzYCKCAAQQA2AjwMBAsLIAAoAjgoAjBB/wFxIQIgACgCLCgCCCEDIAAoAiwiBCgCFCEBIAQgAUEBajYCFCABIANqIAI6AAAgACgCOCgCMEEIdkH/AXEhAiAAKAIsKAIIIQMgACgCLCIEKAIUIQEgBCABQQFqNgIUIAEgA2ogAjoAAEEAQQBBABAaIQEgACgCOCABNgIwCyAAKAIsQfEANgIEIAAoAjgQHCAAKAIsKAIUBEAgACgCLEF/NgIoIABBADYCPAwCCwsCQAJAIAAoAjgoAgQNACAAKAIsKAJ0DQAgACgCNEUNASAAKAIsKAIEQZoFRg0BCyAAAn8gACgCLCgChAFFBEAgACgCLCAAKAI0ELcBDAELAn8gACgCLCgCiAFBAkYEQCAAKAIsIQIgACgCNCEDIwBBIGsiASQAIAEgAjYCGCABIAM2AhQCQANAAkAgASgCGCgCdEUEQCABKAIYEFwgASgCGCgCdEUEQCABKAIURQRAIAFBADYCHAwFCwwCCwsgASgCGEEANgJgIAEgASgCGCICKAI4IAIoAmxqLQAAOgAPIAEoAhgiAigCpC0gAigCoC1BAXRqQQA7AQAgAS0ADyEDIAEoAhgiAigCmC0hBCACIAIoAqAtIgJBAWo2AqAtIAIgBGogAzoAACABKAIYIAEtAA9BAnRqIgIgAi8BlAFBAWo7AZQBIAEgASgCGCgCoC0gASgCGCgCnC1BAWtGNgIQIAEoAhgiAiACKAJ0QQFrNgJ0IAEoAhgiAiACKAJsQQFqNgJsIAEoAhAEQCABKAIYAn8gASgCGCgCXEEATgRAIAEoAhgoAjggASgCGCgCXGoMAQtBAAsgASgCGCgCbCABKAIYKAJca0EAECggASgCGCABKAIYKAJsNgJcIAEoAhgoAgAQHCABKAIYKAIAKAIQRQRAIAFBADYCHAwECwsMAQsLIAEoAhhBADYCtC0gASgCFEEERgRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQEQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUECNgIcDAILIAFBAzYCHAwBCyABKAIYKAKgLQRAIAEoAhgCfyABKAIYKAJcQQBOBEAgASgCGCgCOCABKAIYKAJcagwBC0EACyABKAIYKAJsIAEoAhgoAlxrQQAQKCABKAIYIAEoAhgoAmw2AlwgASgCGCgCABAcIAEoAhgoAgAoAhBFBEAgAUEANgIcDAILCyABQQE2AhwLIAEoAhwhAiABQSBqJAAgAgwBCwJ/IAAoAiwoAogBQQNGBEAgACgCLCECIAAoAjQhAyMAQTBrIgEkACABIAI2AiggASADNgIkAkADQAJAIAEoAigoAnRBggJNBEAgASgCKBBcAkAgASgCKCgCdEGCAksNACABKAIkDQAgAUEANgIsDAQLIAEoAigoAnRFDQELIAEoAihBADYCYAJAIAEoAigoAnRBA0kNACABKAIoKAJsRQ0AIAEgASgCKCgCOCABKAIoKAJsakEBazYCGCABIAEoAhgtAAA2AhwgASgCHCECIAEgASgCGCIDQQFqNgIYAkAgAy0AASACRw0AIAEoAhwhAiABIAEoAhgiA0EBajYCGCADLQABIAJHDQAgASgCHCECIAEgASgCGCIDQQFqNgIYIAMtAAEgAkcNACABIAEoAigoAjggASgCKCgCbGpBggJqNgIUA0AgASgCHCECIAEgASgCGCIDQQFqNgIYAn9BACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABogASgCHCECIAEgASgCGCIDQQFqNgIYQQAgAy0AASACRw0AGiABKAIcIQIgASABKAIYIgNBAWo2AhhBACADLQABIAJHDQAaIAEoAhwhAiABIAEoAhgiA0EBajYCGEEAIAMtAAEgAkcNABog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AS8BEiECIAEgASgCSCIDQQFqNgJIIAMgAjoAAAwCCyABKAIMQRBxBEAgASABLwESNgIIIAEgASgCDEEPcTYCDCABKAIMBEAgASgCKCABKAIMSQRAIAEgASgCUCICQQFqNgJQIAEgASgCLCACLQAAIAEoAih0ajYCLCABIAEoAihBCGo2AigLIAEgASgCCCABKAIsQQEgASgCDHRBAWtxajYCCCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoCyABKAIoQQ9JBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABIAEoAlAiAkEBajYCUCABIAEoAiwgAi0AACABKAIodGo2AiwgASABKAIoQQhqNgIoCyABIAEoAiAgASgCLCABKAIYcUECdGooAQA2ARACQANAIAEgAS0AETYCDCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgAS0AEDYCDCABKAIMQRBxBEAgASABLwESNgIEIAEgASgCDEEPcTYCDCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKCABKAIoIAEoAgxJBEAgASABKAJQIgJBAWo2AlAgASABKAIsIAItAAAgASgCKHRqNgIsIAEgASgCKEEIajYCKAsLIAEgASgCBCABKAIsQQEgASgCDHRBAWtxajYCBCABIAEoAiwgASgCDHY2AiwgASABKAIoIAEoAgxrNgIoIAEgASgCSCABKAJEazYCDAJAIAEoAgQgASgCDEsEQCABIAEoAgQgASgCDGs2AgwgASgCDCABKAI4SwRAIAEoAlQoAsQ3BEAgASgCXEHdDDYCGCABKAJUQdH+ADYCBAwKCwsgASABKAIwNgIAAkAgASgCNEUEQCABIAEoAgAgASgCPCABKAIMa2o2AgAgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAkggASgCBGs2AgALDAELAkAgASgCNCABKAIMSQRAIAEgASgCACABKAI8IAEoAjRqIAEoAgxrajYCACABIAEoAgwgASgCNGs2AgwgASgCDCABKAIISQRAIAEgASgCCCABKAIMazYCCANAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIMQQFrIgI2AgwgAg0ACyABIAEoAjA2AgAgASgCNCABKAIISQRAIAEgASgCNDYCDCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsMAQsgASABKAIAIAEoAjQgASgCDGtqNgIAIAEoAgwgASgCCEkEQCABIAEoAgggASgCDGs2AggDQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCDEEBayICNgIMIAINAAsgASABKAJIIAEoAgRrNgIACwsLA0AgASgCCEECSwRAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCCEEDazYCCAwBCwsMAQsgASABKAJIIAEoAgRrNgIAA0AgASABKAIAIgJBAWo2AgAgAi0AACECIAEgASgCSCIDQQFqNgJIIAMgAjoAACABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEgASgCACICQQFqNgIAIAItAAAhAiABIAEoAkgiA0EBajYCSCADIAI6AAAgASABKAIIQQNrNgIIIAEoAghBAksNAAsLIAEoAggEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAAIAEoAghBAUsEQCABIAEoAgAiAkEBajYCACACLQAAIQIgASABKAJIIgNBAWo2AkggAyACOgAACwsMAgsgASgCDEHAAHFFBEAgASABKAIgIAEvARIgASgCLEEBIAEoAgx0QQFrcWpBAnRqKAEANgEQDAELCyAB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AG5hbgAvZGV2L3VyYW5kb20AaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrAGluY29ycmVjdCBoZWFkZXIgY2hlY2sAaW5jb3JyZWN0IGxlbmd0aCBjaGVjawBpbmNvcnJlY3QgZGF0YSBjaGVjawBpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjawBoZWFkZXIgY3JjIG1pc21hdGNoAGluZgBpbnZhbGlkIHdpbmRvdyBzaXplAFJlYWQtb25seSBhcmNoaXZlAE5vdCBhIHppcCBhcmNoaXZlAFJlc291cmNlIHN0aWxsIGluIHVzZQBNYWxsb2MgZmFpbHVyZQBpbnZhbGlkIGJsb2NrIHR5cGUARmFpbHVyZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGZpbGUAQ2FuJ3Qgb3BlbiBmaWxlAE5vIHN1Y2ggZmlsZQBQcmVtYXR1cmUgZW5kIG9mIGZpbGUAQ2FuJ3QgcmVtb3ZlIGZpbGUAaW52YWxpZCBsaXRlcmFsL2xlbmd0aCBjb2RlAGludmFsaWQgZGlzdGFuY2UgY29kZQB1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZABzdHJlYW0gZW5kAENvbXByZXNzZWQgZGF0YSBpbnZhbGlkAE11bHRpLWRpc2sgemlwIGFyY2hpdmVzIG5vdCBzdXBwb3J0ZWQAT3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQARW5jcnlwdGlvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABDb21wcmVzc2lvbiBtZXRob2Qgbm90IHN1cHBvcnRlZABFbnRyeSBoYXMgYmVlbiBkZWxldGVkAENvbnRhaW5pbmcgemlwIGFyY2hpdmUgd2FzIGNsb3NlZABDbG9zaW5nIHppcCBhcmNoaXZlIGZhaWxlZABSZW5hbWluZyB0ZW1wb3JhcnkgZmlsZSBmYWlsZWQARW50cnkgaGFzIGJlZW4gY2hhbmdlZABObyBwYXNzd29yZCBwcm92aWRlZABXcm9uZyBwYXNzd29yZCBwcm92aWRlZABVbmtub3duIGVycm9yICVkAHJiAHIrYgByd2EAJXMuWFhYWFhYAE5BTgBJTkYAQUUAMS4yLjExAC9wcm9jL3NlbGYvZmQvAC4AKG51bGwpADogAFBLBgcA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0gAIADIACACyAAgAcgAIAPIACAAKAAgAigAIAEoACADKAAgAKgAIAKoACABqAAgA6gAIABoACACaAAgAWgAIANoACAA6AAgAugAIAHoACAD6AAgABgAIAIYACABGAAgAxgAIACYACACmAAgAZgAIAOYACAAWAAgAlgAIAFYACADWAAgANgAIALYACAB2AAgA9gAIAA4ACACOAAgATgAIAM4ACAAuAAgArgAIAG4ACADuAAgAHgAIAJ4ACABeAAgA3gAIAD4ACAC+AAgAfgAIAP4ACAABAAgAgQAIAEEACADBAAgAIQAIAKEACABhAAgA4QAIABEACACRAAgAUQAIANEACAAxAAgAsQAIAHEACADxAAgACQAIAIkACABJAAgAyQAIACkACACpAAgAaQAIAOkACAAZAAgAmQAIAFkACADZAAgAOQAIALkACAB5AAgA+QAIAAUACACFAAgARQAIAMUACAAlAAgApQAIAGUACADlAAgAFQAIAJUACABVAAgA1QAIADUACAC1AAgAdQAIAPUACAANAAgAjQAIAE0ACADNAAgALQAIAK0ACABtAAgA7QAIAB0ACACdAAgAXQAIAN0ACAA9AAgAvQAIAH0ACAD9AAgAEwAJABMBCQCTAAkAkwEJAFMACQBTAQkA0wAJANMBCQAzAAkAMwEJALMACQCzAQkAcwAJAHMBCQDzAAkA8wEJAAsACQALAQkAiwAJAIsBCQBLAAkASwEJAMsACQDLAQkAKwAJACsBCQCrAAkAqwEJAGsACQBrAQkA6wAJAOsBCQAbAAkAGwEJAJsACQCbAQkAWwAJAFsBCQDbAAkA2wEJADsACQA7AQkAuwAJALsBCQB7AAkAewEJAPsACQD7AQkABwAJAAcBCQCHAAkAhwEJAEcACQBHAQkAxwAJAMcBCQAnAAkAJwEJAKcACQCnAQkAZwAJAGcBCQDnAAkA5wEJABcACQAXAQkAlwAJAJcBCQBXAAkAVwEJANcACQDXAQkANwAJADcBCQC3AAkAtwEJAHcACQB3AQkA9wAJAPcBCQAPAAkADwEJAI8ACQCPAQkATwAJAE8BCQDPAAkAzwEJAC8ACQAvAQkArwAJAK8BCQBvAAkAbwEJAO8ACQDvAQkAHwAJAB8BCQCfAAkAnwEJAF8ACQBfAQkA3wAJAN8BCQA/AAkAPwEJAL8ACQC/AQkAfwAJAH8BCQD/AAkA/wEJAAAABwBAAAcAIAAHAGAABwAQAAcAUAAHADAABwBwAAcACAAHAEgABwAoAAcAaAAHABgABwBYAAcAOAAHAHgABwAEAAcARAAHACQABwBkAAcAFAAHAFQABwA0AAcAdAAHAAMACACDAAgAQwAIAMMACAAjAAgAowAIAGMACADjAAgAAAAFABAABQAIAAUAGAAFAAQABQAUAAUADAAFABwABQACAAUAEgAFAAoABQAaAAUABgAFABYABQAOAAUAHgAFAAEABQARAAUACQAFABkABQAFAAUAFQAFAA0ABQAdAAUAAwAFABMABQALAAUAGwAFAAcABQAXAAUAQbDqAAtNAQAAAAEAAAABAAAAAQAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAABAAAAAQAAAAEAAAABAAAAAUAAAAFAAAABQAAAAUAQaDrAAtlAQAAAAEAAAACAAAAAgAAAAMAAAADAAAABAAAAAQAAAAFAAAABQAAAAYAAAAGAAAABwAAAAcAAAAIAAAACAAAAAkAAAAJAAAACgAAAAoAAAALAAAACwAAAAwAAAAMAAAADQAAAA0AQdDsAAsjAgAAAAMAAAAHAAAAAAAAABAREgAIBwkGCgULBAwDDQIOAQ8AQYTtAAtpAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAKAAAADAAAAA4AAAAQAAAAFAAAABgAAAAcAAAAIAAAACgAAAAwAAAAOAAAAEAAAABQAAAAYAAAAHAAAACAAAAAoAAAAMAAAADgAEGE7gALegEAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAQAAAAGAAAACAAAAAwAAAAAABAACAAQAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAAIAAAADAAAABAAAAAYAAAMS4yLjExAEGI7wALbQcAAAAEAAQACAAEAAgAAAAEAAUAEAAIAAgAAAAEAAYAIAAgAAgAAAAEAAQAEAAQAAkAAAAIABAAIAAgAAkAAAAIABAAgACAAAkAAAAIACAAgAAAAQkAAAAgAIAAAgEABAkAAAAgAAIBAgEAEAkAQYDwAAulAgMABAAFAAYABwAIAAkACgALAA0ADwARABMAFwAbAB8AIwArADMAOwBDAFMAYwBzAIMAowDDAOMAAgEAAAAAAAAQABAAEAAQABAAEAAQABAAEQARABEAEQASABIAEgASABMAEwATABMAFAAUABQAFAAVABUAFQAVABAATQDKAAAAAQACAAMABAAFAAcACQANABEAGQAhADEAQQBhAIEAwQABAYEBAQIBAwEEAQYBCAEMARABGAEgATABQAFgAAAAABAAEAAQABAAEQARABIAEgATABMAFAAUABUAFQAWABYAFwAXABgAGAAZABkAGgAaABsAGwAcABwAHQAdAEAAQAAQABEAEgAAAAgABwAJAAYACgAFAAsABAAMAAMADQACAA4AAQAPAEGw8gALwRFgBwAAAAhQAAAIEAAUCHMAEgcfAAAIcAAACDAAAAnAABAHCgAACGAAAAggAAAJoAAACAAAAAiAAAAIQAAACeAAEAcGAAAIWAAACBgAAAmQABMHOwAACHgAAAg4AAAJ0AARBxEAAAhoAAAIKAAACbAAAAgIAAAIiAAACEgAAAnwABAHBAAACFQAAAgUABUI4wATBysAAAh0AAAINAAACcgAEQcNAAAIZAAACCQAAAmoAAAIBAAACIQAAAhEAAAJ6AAQBwgAAAhcAAAIHAAACZgAFAdTAAAIfAAACDwAAAnYABIHFwAACGwAAAgsAAAJuAAACAwAAAiMAAAITAAACfgAEAcDAAAIUgAACBIAFQijABMHIwAACHIAAAgyAAAJxAARBwsAAAhiAAAIIgAACaQAAAgCAAAIggAACEIAAAnkABAHBwAACFoAAAgaAAAJlAAUB0MAAAh6AAAIOgAACdQAEgcTAAAIagAACCoAAAm0AAAICgAACIoAAAhKAAAJ9AAQBwUAAAhWAAAIFgBACAAAEwczAAAIdgAACDYAAAnMABEHDwAACGYAAAgmAAAJrAAACAYAAAiGAAAIRgAACewAEAcJAAAIXgAACB4AAAmcABQHYwAACH4AAAg+AAAJ3AASBxsAAAhuAAAILgAACbwAAAgOAAAIjgAACE4AAAn8AGAHAAAACFEAAAgRABUIgwASBx8AAAhxAAAIMQAACcIAEAcKAAAIYQAACCEAAAmiAAAIAQAACIEAAAhBAAAJ4gAQBwYAAAhZAAAIGQAACZIAEwc7AAAIeQAACDkAAAnSABEHEQAACGkAAAgpAAAJsgAACAkAAAiJAAAISQAACfIAEAcEAAAIVQAACBUAEAgCARMHKwAACHUAAAg1AAAJygARBw0AAAhlAAAIJQAACaoAAAgFAAAIhQAACEUAAAnqABAHCAAACF0AAAgdAAAJmgAUB1MAAAh9AAAIPQAACdoAEgcXAAAIbQAACC0AAAm6AAAIDQAACI0AAAhNAAAJ+gAQBwMAAAhTAAAIEwAVCMMAEwcjAAAIcwAACDMAAAnGABEHCwAACGMAAAgjAAAJpgAACAMAAAiDAAAIQwAACeYAEAcHAAAIWwAACBsAAAmWABQHQwAACHsAAAg7AAAJ1gASBxMAAAhrAAAIKwAACbYAAAgLAAAIiwAACEsAAAn2ABAHBQAACFcAAAgXAEAIAAATBzMAAAh3AAAINwAACc4AEQcPAAAIZwAACCcAAAmuAAAIBwAACIcAAAhHAAAJ7gAQBwkAAAhfAAAIHwAACZ4AFAdjAAAIfwAACD8AAAneABIHGwAACG8AAAgvAAAJvgAACA8AAAiPAAAITwAACf4AYAcAAAAIUAAACBAAFAhzABIHHwAACHAAAAgwAAAJwQAQBwoAAAhgAAAIIAAACaEAAAgAAAAIgAAACEAAAAnhABAHBgAACFgAAAgYAAAJkQATBzsAAAh4AAAIOAAACdEAEQcRAAAIaAAACCgAAAmxAAAICAAACIgAAAhIAAAJ8QAQBwQAAAhUAAAIFAAVCOMAEwcrAAAIdAAACDQAAAnJABEHDQAACGQAAAgkAAAJqQAACAQAAAiEAAAIRAAACekAEAcIAAAIXAAACBwAAAmZABQHUwAACHwAAAg8AAAJ2QASBxcAAAhsAAAILAAACbkAAAgMAAAIjAAACEwAAAn5ABAHAwAACFIAAAgSABUIowATByMAAAhyAAAIMgAACcUAEQcLAAAIYgAACCIAAAmlAAAIAgAACIIAAAhCAAAJ5QAQBwcAAAhaAAAIGgAACZUAFAdDAAAIegAACDoAAAnVABIHEwAACGoAAAgqAAAJtQAACAoAAAiKAAAISgAACfUAEAcFAAAIVgAACBYAQAgAABMHMwAACHYAAAg2AAAJzQARBw8AAAhmAAAIJgAACa0AAAgGAAAIhgAACEYAAAntABAHCQAACF4AAAgeAAAJnQAUB2MAAAh+AAAIPgAACd0AEgcbAAAIbgAACC4AAAm9AAAIDgAACI4AAAhOAAAJ/QBgBwAAAAhRAAAIEQAVCIMAEgcfAAAIcQAACDEAAAnDABAHCgAACGEAAAghAAAJowAACAEAAAiBAAAIQQAACeMAEAcGAAAIWQAACBkAAAmTABMHOwAACHkAAAg5AAAJ0wARBxEAAAhpAAAIKQAACbMAAAgJAAAIiQAACEkAAAnzABAHBAAACFUAAAgVABAIAgETBysAAAh1AAAINQAACcsAEQcNAAAIZQAACCUAAAmrAAAIBQAACIUAAAhFAAAJ6wAQBwgAAAhdAAAIHQAACZsAFAdTAAAIfQAACD0AAAnbABIHFwAACG0AAAgtAAAJuwAACA0AAAiNAAAITQAACfsAEAcDAAAIUwAACBMAFQjDABMHIwAACHMAAAgzAAAJxwARBwsAAAhjAAAIIwAACacAAAgDAAAIgwAACEMAAAnnABAHBwAACFsAAAgbAAAJlwAUB0MAAAh7AAAIOwAACdcAEgcTAAAIawAACCsAAAm3AAAICwAACIsAAAhLAAAJ9wAQBwUAAAhXAAAIFwBACAAAEwczAAAIdwAACDcAAAnPABEHDwAACGcAAAgnAAAJrwAACAcAAAiHAAAIRwAACe8AEAcJAAAIXwAACB8AAAmfABQHYwAACH8AAAg/AAAJ3wASBxsAAAhvAAAILwAACb8AAAgPAAAIjwAACE8AAAn/ABAFAQAXBQEBEwURABsFARARBQUAGQUBBBUFQQAdBQFAEAUDABgFAQIUBSEAHAUBIBIFCQAaBQEIFgWBAEAFAAAQBQIAFwWBARMFGQAbBQEYEQUHABkFAQYVBWEAHQUBYBAFBAAYBQEDFAUxABwFATASBQ0AGgUBDBYFwQBABQAAEQAKABEREQAAAAAFAAAAAAAACQAAAAALAAAAAAAAAAARAA8KERERAwoHAAEACQsLAAAJBgsAAAsABhEAAAAREREAQYGEAQshCwAAAAAAAAAAEQAKChEREQAKAAACAAkLAAAACQALAAALAEG7hAELAQwAQceEAQsVDAAAAAAMAAAAAAkMAAAAAAAMAAAMAEH1hAELAQ4AQYGFAQsVDQAAAAQNAAAAAAkOAAAAAAAOAAAOAEGvhQELARAAQbuFAQseDwAAAAAPAAAAAAkQAAAAAAAQAAAQAAASAAAAEhISAEHyhQELDhIAAAASEhIAAAAAAAAJAEGjhgELAQsAQa+GAQsVCgAAAAAKAAAAAAkLAAAAAAALAAALAEHdhgELAQwAQemGAQsnDAAAAAAMAAAAAAkMAAAAAAAMAAAMAAAwMTIzNDU2Nzg5QUJDREVGAEG0hwELARkAQduHAQsF//////8AQaCIAQtXGRJEOwI/LEcUPTMwChsGRktFNw9JDo4XA0AdPGkrNh9KLRwBICUpIQgMFRYiLhA4Pgs0MRhkdHV2L0EJfzkRI0MyQomKiwUEJignDSoeNYwHGkiTE5SVAEGAiQELig5JbGxlZ2FsIGJ5dGUgc2VxdWVuY2UARG9tYWluIGVycm9yAFJlc3VsdCBub3QgcmVwcmVzZW50YWJsZQBOb3QgYSB0dHkAUGVybWlzc2lvbiBkZW5pZWQAT3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQATm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeQBObyBzdWNoIHByb2Nlc3MARmlsZSBleGlzdHMAVmFsdWUgdG9vIGxhcmdlIGZvciBkYXRhIHR5cGUATm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UAT3V0IG9mIG1lbW9yeQBSZXNvdXJjZSBidXN5AEludGVycnVwdGVkIHN5c3RlbSBjYWxsAFJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlAEludmFsaWQgc2VlawBDcm9zcy1kZXZpY2UgbGluawBSZWFkLW9ubHkgZmlsZSBzeXN0ZW0ARGlyZWN0b3J5IG5vdCBlbXB0eQBDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIAT3BlcmF0aW9uIHRpbWVkIG91dABDb25uZWN0aW9uIHJlZnVzZWQASG9zdCBpcyBkb3duAEhvc3QgaXMgdW5yZWFjaGFibGUAQWRkcmVzcyBpbiB1c2UAQnJva2VuIHBpcGUASS9PIGVycm9yAE5vIHN1Y2ggZGV2aWNlIG9yIGFkZHJlc3MAQmxvY2sgZGV2aWNlIHJlcXVpcmVkAE5vIHN1Y2ggZGV2aWNlAE5vdCBhIGRpcmVjdG9yeQBJcyBhIGRpcmVjdG9yeQBUZXh0IGZpbGUgYnVzeQBFeGVjIGZvcm1hdCBlcnJvcgBJbnZhbGlkIGFyZ3VtZW50AEFyZ3VtZW50IGxpc3QgdG9vIGxvbmcAU3ltYm9saWMgbGluayBsb29wAEZpbGVuYW1lIHRvbyBsb25nAFRvbyBtYW55IG9wZW4gZmlsZXMgaW4gc3lzdGVtAE5vIGZpbGUgZGVzY3JpcHRvcnMgYXZhaWxhYmxlAEJhZCBmaWxlIGRlc2NyaXB0b3IATm8gY2hpbGQgcHJvY2VzcwBCYWQgYWRkcmVzcwBGaWxlIHRvbyBsYXJnZQBUb28gbWFueSBsaW5rcwBObyBsb2NrcyBhdmFpbGFibGUAUmVzb3VyY2UgZGVhZGxvY2sgd291bGQgb2NjdXIAU3RhdGUgbm90IHJlY292ZXJhYmxlAFByZXZpb3VzIG93bmVyIGRpZWQAT3BlcmF0aW9uIGNhbmNlbGVkAEZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZABObyBtZXNzYWdlIG9mIGRlc2lyZWQgdHlwZQBJZGVudGlmaWVyIHJlbW92ZWQARGV2aWNlIG5vdCBhIHN0cmVhbQBObyBkYXRhIGF2YWlsYWJsZQBEZXZpY2UgdGltZW91dABPdXQgb2Ygc3RyZWFtcyByZXNvdXJjZXMATGluayBoYXMgYmVlbiBzZXZlcmVkAFByb3RvY29sIGVycm9yAEJhZCBtZXNzYWdlAEZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUATm90IGEgc29ja2V0AERlc3RpbmF0aW9uIGFkZHJlc3MgcmVxdWlyZWQATWVzc2FnZSB0b28gbGFyZ2UAUHJvdG9jb2wgd3JvbmcgdHlwZSBmb3Igc29ja2V0AFByb3RvY29sIG5vdCBhdmFpbGFibGUAUHJvdG9jb2wgbm90IHN1cHBvcnRlZABTb2NrZXQgdHlwZSBub3Qgc3VwcG9ydGVkAE5vdCBzdXBwb3J0ZWQAUHJvdG9jb2wgZmFtaWx5IG5vdCBzdXBwb3J0ZWQAQWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCBieSBwcm90b2NvbABBZGRyZXNzIG5vdCBhdmFpbGFibGUATmV0d29yayBpcyBkb3duAE5ldHdvcmsgdW5yZWFjaGFibGUAQ29ubmVjdGlvbiByZXNldCBieSBuZXR3b3JrAENvbm5lY3Rpb24gYWJvcnRlZABObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlAFNvY2tldCBpcyBjb25uZWN0ZWQAU29ja2V0IG5vdCBjb25uZWN0ZWQAQ2Fubm90IHNlbmQgYWZ0ZXIgc29ja2V0IHNodXRkb3duAE9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzAE9wZXJhdGlvbiBpbiBwcm9ncmVzcwBTdGFsZSBmaWxlIGhhbmRsZQBSZW1vdGUgSS9PIGVycm9yAFF1b3RhIGV4Y2VlZGVkAE5vIG1lZGl1bSBmb3VuZABXcm9uZyBtZWRpdW0gdHlwZQBObyBlcnJvciBpbmZvcm1hdGlvbgBBkJcBC1JQUFAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAAAEAAAAIAAAAlEsAALRLAEGQmQELAgxQAEHImQELCR8AAADkTAAAAwBB5JkBC4wBLfRRWM+MscBG9rXLKTEDxwRbcDC0Xf0geH+LmthZKVBoSImrp1YDbP+3zYg/1He0K6WjcPG65Kj8QYP92W/hinovLXSWBx8NCV4Ddixw90ClLKdvV0GoqnTfoFhkA0rHxDxTrq9fGAQVseNtKIarDKS/Q/DpUIE5VxZSN/////////////////////8=";
6128
-
if (!isDataURI(wasmBinaryFile)) {
6129
-
wasmBinaryFile = locateFile(wasmBinaryFile);
6130
-
}
6131
-
function getBinary(file) {
6132
-
try {
6133
-
if (file == wasmBinaryFile && wasmBinary) {
6134
-
return new Uint8Array(wasmBinary);
6135
-
}
6136
-
var binary = tryParseAsDataURI(file);
6137
-
if (binary) {
6138
-
return binary;
6139
-
}
6140
-
if (readBinary) {
6141
-
return readBinary(file);
6142
-
} else {
6143
-
throw "sync fetching of the wasm failed: you can preload it to Module['wasmBinary'] manually, or emcc.py will do that for you when generating HTML (but not JS)";
6144
-
}
6145
-
} catch (err2) {
6146
-
abort(err2);
6147
-
}
6148
-
}
6149
-
function instantiateSync(file, info) {
6150
-
var instance;
6151
-
var module2;
6152
-
var binary;
6153
-
try {
6154
-
binary = getBinary(file);
6155
-
module2 = new WebAssembly.Module(binary);
6156
-
instance = new WebAssembly.Instance(module2, info);
6157
-
} catch (e) {
6158
-
var str = e.toString();
6159
-
err("failed to compile wasm module: " + str);
6160
-
if (str.includes("imported Memory") || str.includes("memory import")) {
6161
-
err(
6162
-
"Memory size incompatibility issues may be due to changing INITIAL_MEMORY at runtime to something too large. Use ALLOW_MEMORY_GROWTH to allow any size memory (and also make sure not to set INITIAL_MEMORY at runtime to something smaller than it was at compile time)."
6163
-
);
6164
-
}
6165
-
throw e;
6166
-
}
6167
-
return [instance, module2];
6168
-
}
6169
-
function createWasm() {
6170
-
var info = { a: asmLibraryArg };
6171
-
function receiveInstance(instance, module2) {
6172
-
var exports3 = instance.exports;
6173
-
Module["asm"] = exports3;
6174
-
wasmMemory = Module["asm"]["u"];
6175
-
updateGlobalBufferAndViews(wasmMemory.buffer);
6176
-
wasmTable = Module["asm"]["pa"];
6177
-
addOnInit(Module["asm"]["v"]);
6178
-
removeRunDependency();
6179
-
}
6180
-
addRunDependency();
6181
-
if (Module["instantiateWasm"]) {
6182
-
try {
6183
-
var exports2 = Module["instantiateWasm"](info, receiveInstance);
6184
-
return exports2;
6185
-
} catch (e) {
6186
-
err("Module.instantiateWasm callback failed with error: " + e);
6187
-
return false;
6188
-
}
6189
-
}
6190
-
var result = instantiateSync(wasmBinaryFile, info);
6191
-
receiveInstance(result[0]);
6192
-
return Module["asm"];
6193
-
}
6194
-
var tempDouble;
6195
-
var tempI64;
6196
-
function callRuntimeCallbacks(callbacks) {
6197
-
while (callbacks.length > 0) {
6198
-
var callback = callbacks.shift();
6199
-
if (typeof callback == "function") {
6200
-
callback(Module);
6201
-
continue;
6202
-
}
6203
-
var func = callback.func;
6204
-
if (typeof func === "number") {
6205
-
if (callback.arg === void 0) {
6206
-
wasmTable.get(func)();
6207
-
} else {
6208
-
wasmTable.get(func)(callback.arg);
6209
-
}
6210
-
} else {
6211
-
func(callback.arg === void 0 ? null : callback.arg);
6212
-
}
6213
-
}
6214
-
}
6215
-
function _gmtime_r(time, tmPtr) {
6216
-
var date = new Date(HEAP32[time >> 2] * 1e3);
6217
-
HEAP32[tmPtr >> 2] = date.getUTCSeconds();
6218
-
HEAP32[tmPtr + 4 >> 2] = date.getUTCMinutes();
6219
-
HEAP32[tmPtr + 8 >> 2] = date.getUTCHours();
6220
-
HEAP32[tmPtr + 12 >> 2] = date.getUTCDate();
6221
-
HEAP32[tmPtr + 16 >> 2] = date.getUTCMonth();
6222
-
HEAP32[tmPtr + 20 >> 2] = date.getUTCFullYear() - 1900;
6223
-
HEAP32[tmPtr + 24 >> 2] = date.getUTCDay();
6224
-
HEAP32[tmPtr + 36 >> 2] = 0;
6225
-
HEAP32[tmPtr + 32 >> 2] = 0;
6226
-
var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0);
6227
-
var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0;
6228
-
HEAP32[tmPtr + 28 >> 2] = yday;
6229
-
if (!_gmtime_r.GMTString)
6230
-
_gmtime_r.GMTString = allocateUTF8("GMT");
6231
-
HEAP32[tmPtr + 40 >> 2] = _gmtime_r.GMTString;
6232
-
return tmPtr;
6233
-
}
6234
-
function ___gmtime_r(a0, a1) {
6235
-
return _gmtime_r(a0, a1);
6236
-
}
6237
-
var PATH = {
6238
-
splitPath: function(filename) {
6239
-
var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;
6240
-
return splitPathRe.exec(filename).slice(1);
6241
-
},
6242
-
normalizeArray: function(parts, allowAboveRoot) {
6243
-
var up = 0;
6244
-
for (var i = parts.length - 1; i >= 0; i--) {
6245
-
var last = parts[i];
6246
-
if (last === ".") {
6247
-
parts.splice(i, 1);
6248
-
} else if (last === "..") {
6249
-
parts.splice(i, 1);
6250
-
up++;
6251
-
} else if (up) {
6252
-
parts.splice(i, 1);
6253
-
up--;
6254
-
}
6255
-
}
6256
-
if (allowAboveRoot) {
6257
-
for (; up; up--) {
6258
-
parts.unshift("..");
6259
-
}
6260
-
}
6261
-
return parts;
6262
-
},
6263
-
normalize: function(path) {
6264
-
var isAbsolute = path.charAt(0) === "/", trailingSlash = path.substr(-1) === "/";
6265
-
path = PATH.normalizeArray(
6266
-
path.split("/").filter(function(p) {
6267
-
return !!p;
6268
-
}),
6269
-
!isAbsolute
6270
-
).join("/");
6271
-
if (!path && !isAbsolute) {
6272
-
path = ".";
6273
-
}
6274
-
if (path && trailingSlash) {
6275
-
path += "/";
6276
-
}
6277
-
return (isAbsolute ? "/" : "") + path;
6278
-
},
6279
-
dirname: function(path) {
6280
-
var result = PATH.splitPath(path), root = result[0], dir = result[1];
6281
-
if (!root && !dir) {
6282
-
return ".";
6283
-
}
6284
-
if (dir) {
6285
-
dir = dir.substr(0, dir.length - 1);
6286
-
}
6287
-
return root + dir;
6288
-
},
6289
-
basename: function(path) {
6290
-
if (path === "/")
6291
-
return "/";
6292
-
path = PATH.normalize(path);
6293
-
path = path.replace(/\/$/, "");
6294
-
var lastSlash = path.lastIndexOf("/");
6295
-
if (lastSlash === -1)
6296
-
return path;
6297
-
return path.substr(lastSlash + 1);
6298
-
},
6299
-
extname: function(path) {
6300
-
return PATH.splitPath(path)[3];
6301
-
},
6302
-
join: function() {
6303
-
var paths = Array.prototype.slice.call(arguments, 0);
6304
-
return PATH.normalize(paths.join("/"));
6305
-
},
6306
-
join2: function(l, r) {
6307
-
return PATH.normalize(l + "/" + r);
6308
-
}
6309
-
};
6310
-
function getRandomDevice() {
6311
-
{
6312
-
try {
6313
-
var crypto_module = require("crypto");
6314
-
return function() {
6315
-
return crypto_module["randomBytes"](1)[0];
6316
-
};
6317
-
} catch (e) {
6318
-
}
6319
-
}
6320
-
return function() {
6321
-
abort("randomDevice");
6322
-
};
6323
-
}
6324
-
var PATH_FS = {
6325
-
resolve: function() {
6326
-
var resolvedPath = "", resolvedAbsolute = false;
6327
-
for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
6328
-
var path = i >= 0 ? arguments[i] : FS.cwd();
6329
-
if (typeof path !== "string") {
6330
-
throw new TypeError("Arguments to path.resolve must be strings");
6331
-
} else if (!path) {
6332
-
return "";
6333
-
}
6334
-
resolvedPath = path + "/" + resolvedPath;
6335
-
resolvedAbsolute = path.charAt(0) === "/";
6336
-
}
6337
-
resolvedPath = PATH.normalizeArray(
6338
-
resolvedPath.split("/").filter(function(p) {
6339
-
return !!p;
6340
-
}),
6341
-
!resolvedAbsolute
6342
-
).join("/");
6343
-
return (resolvedAbsolute ? "/" : "") + resolvedPath || ".";
6344
-
},
6345
-
relative: function(from, to) {
6346
-
from = PATH_FS.resolve(from).substr(1);
6347
-
to = PATH_FS.resolve(to).substr(1);
6348
-
function trim(arr) {
6349
-
var start = 0;
6350
-
for (; start < arr.length; start++) {
6351
-
if (arr[start] !== "")
6352
-
break;
6353
-
}
6354
-
var end = arr.length - 1;
6355
-
for (; end >= 0; end--) {
6356
-
if (arr[end] !== "")
6357
-
break;
6358
-
}
6359
-
if (start > end)
6360
-
return [];
6361
-
return arr.slice(start, end - start + 1);
6362
-
}
6363
-
var fromParts = trim(from.split("/"));
6364
-
var toParts = trim(to.split("/"));
6365
-
var length = Math.min(fromParts.length, toParts.length);
6366
-
var samePartsLength = length;
6367
-
for (var i = 0; i < length; i++) {
6368
-
if (fromParts[i] !== toParts[i]) {
6369
-
samePartsLength = i;
6370
-
break;
6371
-
}
6372
-
}
6373
-
var outputParts = [];
6374
-
for (var i = samePartsLength; i < fromParts.length; i++) {
6375
-
outputParts.push("..");
6376
-
}
6377
-
outputParts = outputParts.concat(toParts.slice(samePartsLength));
6378
-
return outputParts.join("/");
6379
-
}
6380
-
};
6381
-
var TTY = {
6382
-
ttys: [],
6383
-
init: function() {
6384
-
},
6385
-
shutdown: function() {
6386
-
},
6387
-
register: function(dev, ops) {
6388
-
TTY.ttys[dev] = { input: [], output: [], ops };
6389
-
FS.registerDevice(dev, TTY.stream_ops);
6390
-
},
6391
-
stream_ops: {
6392
-
open: function(stream) {
6393
-
var tty = TTY.ttys[stream.node.rdev];
6394
-
if (!tty) {
6395
-
throw new FS.ErrnoError(43);
6396
-
}
6397
-
stream.tty = tty;
6398
-
stream.seekable = false;
6399
-
},
6400
-
close: function(stream) {
6401
-
stream.tty.ops.flush(stream.tty);
6402
-
},
6403
-
flush: function(stream) {
6404
-
stream.tty.ops.flush(stream.tty);
6405
-
},
6406
-
read: function(stream, buffer2, offset, length, pos) {
6407
-
if (!stream.tty || !stream.tty.ops.get_char) {
6408
-
throw new FS.ErrnoError(60);
6409
-
}
6410
-
var bytesRead = 0;
6411
-
for (var i = 0; i < length; i++) {
6412
-
var result;
6413
-
try {
6414
-
result = stream.tty.ops.get_char(stream.tty);
6415
-
} catch (e) {
6416
-
throw new FS.ErrnoError(29);
6417
-
}
6418
-
if (result === void 0 && bytesRead === 0) {
6419
-
throw new FS.ErrnoError(6);
6420
-
}
6421
-
if (result === null || result === void 0)
6422
-
break;
6423
-
bytesRead++;
6424
-
buffer2[offset + i] = result;
6425
-
}
6426
-
if (bytesRead) {
6427
-
stream.node.timestamp = Date.now();
6428
-
}
6429
-
return bytesRead;
6430
-
},
6431
-
write: function(stream, buffer2, offset, length, pos) {
6432
-
if (!stream.tty || !stream.tty.ops.put_char) {
6433
-
throw new FS.ErrnoError(60);
6434
-
}
6435
-
try {
6436
-
for (var i = 0; i < length; i++) {
6437
-
stream.tty.ops.put_char(stream.tty, buffer2[offset + i]);
6438
-
}
6439
-
} catch (e) {
6440
-
throw new FS.ErrnoError(29);
6441
-
}
6442
-
if (length) {
6443
-
stream.node.timestamp = Date.now();
6444
-
}
6445
-
return i;
6446
-
}
6447
-
},
6448
-
default_tty_ops: {
6449
-
get_char: function(tty) {
6450
-
if (!tty.input.length) {
6451
-
var result = null;
6452
-
{
6453
-
var BUFSIZE = 256;
6454
-
var buf = Buffer.alloc ? Buffer.alloc(BUFSIZE) : new Buffer(BUFSIZE);
6455
-
var bytesRead = 0;
6456
-
try {
6457
-
bytesRead = nodeFS.readSync(
6458
-
process.stdin.fd,
6459
-
buf,
6460
-
0,
6461
-
BUFSIZE,
6462
-
null
6463
-
);
6464
-
} catch (e) {
6465
-
if (e.toString().includes("EOF"))
6466
-
bytesRead = 0;
6467
-
else
6468
-
throw e;
6469
-
}
6470
-
if (bytesRead > 0) {
6471
-
result = buf.slice(0, bytesRead).toString("utf-8");
6472
-
} else {
6473
-
result = null;
6474
-
}
6475
-
}
6476
-
if (!result) {
6477
-
return null;
6478
-
}
6479
-
tty.input = intArrayFromString(result, true);
6480
-
}
6481
-
return tty.input.shift();
6482
-
},
6483
-
put_char: function(tty, val) {
6484
-
if (val === null || val === 10) {
6485
-
out(UTF8ArrayToString(tty.output, 0));
6486
-
tty.output = [];
6487
-
} else {
6488
-
if (val != 0)
6489
-
tty.output.push(val);
6490
-
}
6491
-
},
6492
-
flush: function(tty) {
6493
-
if (tty.output && tty.output.length > 0) {
6494
-
out(UTF8ArrayToString(tty.output, 0));
6495
-
tty.output = [];
6496
-
}
6497
-
}
6498
-
},
6499
-
default_tty1_ops: {
6500
-
put_char: function(tty, val) {
6501
-
if (val === null || val === 10) {
6502
-
err(UTF8ArrayToString(tty.output, 0));
6503
-
tty.output = [];
6504
-
} else {
6505
-
if (val != 0)
6506
-
tty.output.push(val);
6507
-
}
6508
-
},
6509
-
flush: function(tty) {
6510
-
if (tty.output && tty.output.length > 0) {
6511
-
err(UTF8ArrayToString(tty.output, 0));
6512
-
tty.output = [];
6513
-
}
6514
-
}
6515
-
}
6516
-
};
6517
-
function mmapAlloc(size) {
6518
-
var alignedSize = alignMemory(size, 65536);
6519
-
var ptr = _malloc(alignedSize);
6520
-
while (size < alignedSize)
6521
-
HEAP8[ptr + size++] = 0;
6522
-
return ptr;
6523
-
}
6524
-
var MEMFS = {
6525
-
ops_table: null,
6526
-
mount: function(mount) {
6527
-
return MEMFS.createNode(null, "/", 16384 | 511, 0);
6528
-
},
6529
-
createNode: function(parent, name, mode, dev) {
6530
-
if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
6531
-
throw new FS.ErrnoError(63);
6532
-
}
6533
-
if (!MEMFS.ops_table) {
6534
-
MEMFS.ops_table = {
6535
-
dir: {
6536
-
node: {
6537
-
getattr: MEMFS.node_ops.getattr,
6538
-
setattr: MEMFS.node_ops.setattr,
6539
-
lookup: MEMFS.node_ops.lookup,
6540
-
mknod: MEMFS.node_ops.mknod,
6541
-
rename: MEMFS.node_ops.rename,
6542
-
unlink: MEMFS.node_ops.unlink,
6543
-
rmdir: MEMFS.node_ops.rmdir,
6544
-
readdir: MEMFS.node_ops.readdir,
6545
-
symlink: MEMFS.node_ops.symlink
6546
-
},
6547
-
stream: { llseek: MEMFS.stream_ops.llseek }
6548
-
},
6549
-
file: {
6550
-
node: {
6551
-
getattr: MEMFS.node_ops.getattr,
6552
-
setattr: MEMFS.node_ops.setattr
6553
-
},
6554
-
stream: {
6555
-
llseek: MEMFS.stream_ops.llseek,
6556
-
read: MEMFS.stream_ops.read,
6557
-
write: MEMFS.stream_ops.write,
6558
-
allocate: MEMFS.stream_ops.allocate,
6559
-
mmap: MEMFS.stream_ops.mmap,
6560
-
msync: MEMFS.stream_ops.msync
6561
-
}
6562
-
},
6563
-
link: {
6564
-
node: {
6565
-
getattr: MEMFS.node_ops.getattr,
6566
-
setattr: MEMFS.node_ops.setattr,
6567
-
readlink: MEMFS.node_ops.readlink
6568
-
},
6569
-
stream: {}
6570
-
},
6571
-
chrdev: {
6572
-
node: {
6573
-
getattr: MEMFS.node_ops.getattr,
6574
-
setattr: MEMFS.node_ops.setattr
6575
-
},
6576
-
stream: FS.chrdev_stream_ops
6577
-
}
6578
-
};
6579
-
}
6580
-
var node = FS.createNode(parent, name, mode, dev);
6581
-
if (FS.isDir(node.mode)) {
6582
-
node.node_ops = MEMFS.ops_table.dir.node;
6583
-
node.stream_ops = MEMFS.ops_table.dir.stream;
6584
-
node.contents = {};
6585
-
} else if (FS.isFile(node.mode)) {
6586
-
node.node_ops = MEMFS.ops_table.file.node;
6587
-
node.stream_ops = MEMFS.ops_table.file.stream;
6588
-
node.usedBytes = 0;
6589
-
node.contents = null;
6590
-
} else if (FS.isLink(node.mode)) {
6591
-
node.node_ops = MEMFS.ops_table.link.node;
6592
-
node.stream_ops = MEMFS.ops_table.link.stream;
6593
-
} else if (FS.isChrdev(node.mode)) {
6594
-
node.node_ops = MEMFS.ops_table.chrdev.node;
6595
-
node.stream_ops = MEMFS.ops_table.chrdev.stream;
6596
-
}
6597
-
node.timestamp = Date.now();
6598
-
if (parent) {
6599
-
parent.contents[name] = node;
6600
-
parent.timestamp = node.timestamp;
6601
-
}
6602
-
return node;
6603
-
},
6604
-
getFileDataAsTypedArray: function(node) {
6605
-
if (!node.contents)
6606
-
return new Uint8Array(0);
6607
-
if (node.contents.subarray)
6608
-
return node.contents.subarray(0, node.usedBytes);
6609
-
return new Uint8Array(node.contents);
6610
-
},
6611
-
expandFileStorage: function(node, newCapacity) {
6612
-
var prevCapacity = node.contents ? node.contents.length : 0;
6613
-
if (prevCapacity >= newCapacity)
6614
-
return;
6615
-
var CAPACITY_DOUBLING_MAX = 1024 * 1024;
6616
-
newCapacity = Math.max(
6617
-
newCapacity,
6618
-
prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2 : 1.125) >>> 0
6619
-
);
6620
-
if (prevCapacity != 0)
6621
-
newCapacity = Math.max(newCapacity, 256);
6622
-
var oldContents = node.contents;
6623
-
node.contents = new Uint8Array(newCapacity);
6624
-
if (node.usedBytes > 0)
6625
-
node.contents.set(oldContents.subarray(0, node.usedBytes), 0);
6626
-
},
6627
-
resizeFileStorage: function(node, newSize) {
6628
-
if (node.usedBytes == newSize)
6629
-
return;
6630
-
if (newSize == 0) {
6631
-
node.contents = null;
6632
-
node.usedBytes = 0;
6633
-
} else {
6634
-
var oldContents = node.contents;
6635
-
node.contents = new Uint8Array(newSize);
6636
-
if (oldContents) {
6637
-
node.contents.set(
6638
-
oldContents.subarray(0, Math.min(newSize, node.usedBytes))
6639
-
);
6640
-
}
6641
-
node.usedBytes = newSize;
6642
-
}
6643
-
},
6644
-
node_ops: {
6645
-
getattr: function(node) {
6646
-
var attr = {};
6647
-
attr.dev = FS.isChrdev(node.mode) ? node.id : 1;
6648
-
attr.ino = node.id;
6649
-
attr.mode = node.mode;
6650
-
attr.nlink = 1;
6651
-
attr.uid = 0;
6652
-
attr.gid = 0;
6653
-
attr.rdev = node.rdev;
6654
-
if (FS.isDir(node.mode)) {
6655
-
attr.size = 4096;
6656
-
} else if (FS.isFile(node.mode)) {
6657
-
attr.size = node.usedBytes;
6658
-
} else if (FS.isLink(node.mode)) {
6659
-
attr.size = node.link.length;
6660
-
} else {
6661
-
attr.size = 0;
6662
-
}
6663
-
attr.atime = new Date(node.timestamp);
6664
-
attr.mtime = new Date(node.timestamp);
6665
-
attr.ctime = new Date(node.timestamp);
6666
-
attr.blksize = 4096;
6667
-
attr.blocks = Math.ceil(attr.size / attr.blksize);
6668
-
return attr;
6669
-
},
6670
-
setattr: function(node, attr) {
6671
-
if (attr.mode !== void 0) {
6672
-
node.mode = attr.mode;
6673
-
}
6674
-
if (attr.timestamp !== void 0) {
6675
-
node.timestamp = attr.timestamp;
6676
-
}
6677
-
if (attr.size !== void 0) {
6678
-
MEMFS.resizeFileStorage(node, attr.size);
6679
-
}
6680
-
},
6681
-
lookup: function(parent, name) {
6682
-
throw FS.genericErrors[44];
6683
-
},
6684
-
mknod: function(parent, name, mode, dev) {
6685
-
return MEMFS.createNode(parent, name, mode, dev);
6686
-
},
6687
-
rename: function(old_node, new_dir, new_name) {
6688
-
if (FS.isDir(old_node.mode)) {
6689
-
var new_node;
6690
-
try {
6691
-
new_node = FS.lookupNode(new_dir, new_name);
6692
-
} catch (e) {
6693
-
}
6694
-
if (new_node) {
6695
-
for (var i in new_node.contents) {
6696
-
throw new FS.ErrnoError(55);
6697
-
}
6698
-
}
6699
-
}
6700
-
delete old_node.parent.contents[old_node.name];
6701
-
old_node.parent.timestamp = Date.now();
6702
-
old_node.name = new_name;
6703
-
new_dir.contents[new_name] = old_node;
6704
-
new_dir.timestamp = old_node.parent.timestamp;
6705
-
old_node.parent = new_dir;
6706
-
},
6707
-
unlink: function(parent, name) {
6708
-
delete parent.contents[name];
6709
-
parent.timestamp = Date.now();
6710
-
},
6711
-
rmdir: function(parent, name) {
6712
-
var node = FS.lookupNode(parent, name);
6713
-
for (var i in node.contents) {
6714
-
throw new FS.ErrnoError(55);
6715
-
}
6716
-
delete parent.contents[name];
6717
-
parent.timestamp = Date.now();
6718
-
},
6719
-
readdir: function(node) {
6720
-
var entries = [".", ".."];
6721
-
for (var key2 in node.contents) {
6722
-
if (!node.contents.hasOwnProperty(key2)) {
6723
-
continue;
6724
-
}
6725
-
entries.push(key2);
6726
-
}
6727
-
return entries;
6728
-
},
6729
-
symlink: function(parent, newname, oldpath) {
6730
-
var node = MEMFS.createNode(parent, newname, 511 | 40960, 0);
6731
-
node.link = oldpath;
6732
-
return node;
6733
-
},
6734
-
readlink: function(node) {
6735
-
if (!FS.isLink(node.mode)) {
6736
-
throw new FS.ErrnoError(28);
6737
-
}
6738
-
return node.link;
6739
-
}
6740
-
},
6741
-
stream_ops: {
6742
-
read: function(stream, buffer2, offset, length, position) {
6743
-
var contents = stream.node.contents;
6744
-
if (position >= stream.node.usedBytes)
6745
-
return 0;
6746
-
var size = Math.min(stream.node.usedBytes - position, length);
6747
-
if (size > 8 && contents.subarray) {
6748
-
buffer2.set(contents.subarray(position, position + size), offset);
6749
-
} else {
6750
-
for (var i = 0; i < size; i++)
6751
-
buffer2[offset + i] = contents[position + i];
6752
-
}
6753
-
return size;
6754
-
},
6755
-
write: function(stream, buffer2, offset, length, position, canOwn) {
6756
-
if (buffer2.buffer === HEAP8.buffer) {
6757
-
canOwn = false;
6758
-
}
6759
-
if (!length)
6760
-
return 0;
6761
-
var node = stream.node;
6762
-
node.timestamp = Date.now();
6763
-
if (buffer2.subarray && (!node.contents || node.contents.subarray)) {
6764
-
if (canOwn) {
6765
-
node.contents = buffer2.subarray(offset, offset + length);
6766
-
node.usedBytes = length;
6767
-
return length;
6768
-
} else if (node.usedBytes === 0 && position === 0) {
6769
-
node.contents = buffer2.slice(offset, offset + length);
6770
-
node.usedBytes = length;
6771
-
return length;
6772
-
} else if (position + length <= node.usedBytes) {
6773
-
node.contents.set(
6774
-
buffer2.subarray(offset, offset + length),
6775
-
position
6776
-
);
6777
-
return length;
6778
-
}
6779
-
}
6780
-
MEMFS.expandFileStorage(node, position + length);
6781
-
if (node.contents.subarray && buffer2.subarray) {
6782
-
node.contents.set(
6783
-
buffer2.subarray(offset, offset + length),
6784
-
position
6785
-
);
6786
-
} else {
6787
-
for (var i = 0; i < length; i++) {
6788
-
node.contents[position + i] = buffer2[offset + i];
6789
-
}
6790
-
}
6791
-
node.usedBytes = Math.max(node.usedBytes, position + length);
6792
-
return length;
6793
-
},
6794
-
llseek: function(stream, offset, whence) {
6795
-
var position = offset;
6796
-
if (whence === 1) {
6797
-
position += stream.position;
6798
-
} else if (whence === 2) {
6799
-
if (FS.isFile(stream.node.mode)) {
6800
-
position += stream.node.usedBytes;
6801
-
}
6802
-
}
6803
-
if (position < 0) {
6804
-
throw new FS.ErrnoError(28);
6805
-
}
6806
-
return position;
6807
-
},
6808
-
allocate: function(stream, offset, length) {
6809
-
MEMFS.expandFileStorage(stream.node, offset + length);
6810
-
stream.node.usedBytes = Math.max(
6811
-
stream.node.usedBytes,
6812
-
offset + length
6813
-
);
6814
-
},
6815
-
mmap: function(stream, address, length, position, prot, flags) {
6816
-
if (address !== 0) {
6817
-
throw new FS.ErrnoError(28);
6818
-
}
6819
-
if (!FS.isFile(stream.node.mode)) {
6820
-
throw new FS.ErrnoError(43);
6821
-
}
6822
-
var ptr;
6823
-
var allocated;
6824
-
var contents = stream.node.contents;
6825
-
if (!(flags & 2) && contents.buffer === buffer) {
6826
-
allocated = false;
6827
-
ptr = contents.byteOffset;
6828
-
} else {
6829
-
if (position > 0 || position + length < contents.length) {
6830
-
if (contents.subarray) {
6831
-
contents = contents.subarray(position, position + length);
6832
-
} else {
6833
-
contents = Array.prototype.slice.call(
6834
-
contents,
6835
-
position,
6836
-
position + length
6837
-
);
6838
-
}
6839
-
}
6840
-
allocated = true;
6841
-
ptr = mmapAlloc(length);
6842
-
if (!ptr) {
6843
-
throw new FS.ErrnoError(48);
6844
-
}
6845
-
HEAP8.set(contents, ptr);
6846
-
}
6847
-
return { ptr, allocated };
6848
-
},
6849
-
msync: function(stream, buffer2, offset, length, mmapFlags) {
6850
-
if (!FS.isFile(stream.node.mode)) {
6851
-
throw new FS.ErrnoError(43);
6852
-
}
6853
-
if (mmapFlags & 2) {
6854
-
return 0;
6855
-
}
6856
-
MEMFS.stream_ops.write(
6857
-
stream,
6858
-
buffer2,
6859
-
0,
6860
-
length,
6861
-
offset,
6862
-
false
6863
-
);
6864
-
return 0;
6865
-
}
6866
-
}
6867
-
};
6868
-
var ERRNO_CODES = {
6869
-
EPERM: 63,
6870
-
ENOENT: 44,
6871
-
ESRCH: 71,
6872
-
EINTR: 27,
6873
-
EIO: 29,
6874
-
ENXIO: 60,
6875
-
E2BIG: 1,
6876
-
ENOEXEC: 45,
6877
-
EBADF: 8,
6878
-
ECHILD: 12,
6879
-
EAGAIN: 6,
6880
-
EWOULDBLOCK: 6,
6881
-
ENOMEM: 48,
6882
-
EACCES: 2,
6883
-
EFAULT: 21,
6884
-
ENOTBLK: 105,
6885
-
EBUSY: 10,
6886
-
EEXIST: 20,
6887
-
EXDEV: 75,
6888
-
ENODEV: 43,
6889
-
ENOTDIR: 54,
6890
-
EISDIR: 31,
6891
-
EINVAL: 28,
6892
-
ENFILE: 41,
6893
-
EMFILE: 33,
6894
-
ENOTTY: 59,
6895
-
ETXTBSY: 74,
6896
-
EFBIG: 22,
6897
-
ENOSPC: 51,
6898
-
ESPIPE: 70,
6899
-
EROFS: 69,
6900
-
EMLINK: 34,
6901
-
EPIPE: 64,
6902
-
EDOM: 18,
6903
-
ERANGE: 68,
6904
-
ENOMSG: 49,
6905
-
EIDRM: 24,
6906
-
ECHRNG: 106,
6907
-
EL2NSYNC: 156,
6908
-
EL3HLT: 107,
6909
-
EL3RST: 108,
6910
-
ELNRNG: 109,
6911
-
EUNATCH: 110,
6912
-
ENOCSI: 111,
6913
-
EL2HLT: 112,
6914
-
EDEADLK: 16,
6915
-
ENOLCK: 46,
6916
-
EBADE: 113,
6917
-
EBADR: 114,
6918
-
EXFULL: 115,
6919
-
ENOANO: 104,
6920
-
EBADRQC: 103,
6921
-
EBADSLT: 102,
6922
-
EDEADLOCK: 16,
6923
-
EBFONT: 101,
6924
-
ENOSTR: 100,
6925
-
ENODATA: 116,
6926
-
ETIME: 117,
6927
-
ENOSR: 118,
6928
-
ENONET: 119,
6929
-
ENOPKG: 120,
6930
-
EREMOTE: 121,
6931
-
ENOLINK: 47,
6932
-
EADV: 122,
6933
-
ESRMNT: 123,
6934
-
ECOMM: 124,
6935
-
EPROTO: 65,
6936
-
EMULTIHOP: 36,
6937
-
EDOTDOT: 125,
6938
-
EBADMSG: 9,
6939
-
ENOTUNIQ: 126,
6940
-
EBADFD: 127,
6941
-
EREMCHG: 128,
6942
-
ELIBACC: 129,
6943
-
ELIBBAD: 130,
6944
-
ELIBSCN: 131,
6945
-
ELIBMAX: 132,
6946
-
ELIBEXEC: 133,
6947
-
ENOSYS: 52,
6948
-
ENOTEMPTY: 55,
6949
-
ENAMETOOLONG: 37,
6950
-
ELOOP: 32,
6951
-
EOPNOTSUPP: 138,
6952
-
EPFNOSUPPORT: 139,
6953
-
ECONNRESET: 15,
6954
-
ENOBUFS: 42,
6955
-
EAFNOSUPPORT: 5,
6956
-
EPROTOTYPE: 67,
6957
-
ENOTSOCK: 57,
6958
-
ENOPROTOOPT: 50,
6959
-
ESHUTDOWN: 140,
6960
-
ECONNREFUSED: 14,
6961
-
EADDRINUSE: 3,
6962
-
ECONNABORTED: 13,
6963
-
ENETUNREACH: 40,
6964
-
ENETDOWN: 38,
6965
-
ETIMEDOUT: 73,
6966
-
EHOSTDOWN: 142,
6967
-
EHOSTUNREACH: 23,
6968
-
EINPROGRESS: 26,
6969
-
EALREADY: 7,
6970
-
EDESTADDRREQ: 17,
6971
-
EMSGSIZE: 35,
6972
-
EPROTONOSUPPORT: 66,
6973
-
ESOCKTNOSUPPORT: 137,
6974
-
EADDRNOTAVAIL: 4,
6975
-
ENETRESET: 39,
6976
-
EISCONN: 30,
6977
-
ENOTCONN: 53,
6978
-
ETOOMANYREFS: 141,
6979
-
EUSERS: 136,
6980
-
EDQUOT: 19,
6981
-
ESTALE: 72,
6982
-
ENOTSUP: 138,
6983
-
ENOMEDIUM: 148,
6984
-
EILSEQ: 25,
6985
-
EOVERFLOW: 61,
6986
-
ECANCELED: 11,
6987
-
ENOTRECOVERABLE: 56,
6988
-
EOWNERDEAD: 62,
6989
-
ESTRPIPE: 135
6990
-
};
6991
-
var NODEFS = {
6992
-
isWindows: false,
6993
-
staticInit: function() {
6994
-
NODEFS.isWindows = !!process.platform.match(/^win/);
6995
-
var flags = { fs: fs.constants };
6996
-
if (flags["fs"]) {
6997
-
flags = flags["fs"];
6998
-
}
6999
-
NODEFS.flagsForNodeMap = {
7000
-
1024: flags["O_APPEND"],
7001
-
64: flags["O_CREAT"],
7002
-
128: flags["O_EXCL"],
7003
-
256: flags["O_NOCTTY"],
7004
-
0: flags["O_RDONLY"],
7005
-
2: flags["O_RDWR"],
7006
-
4096: flags["O_SYNC"],
7007
-
512: flags["O_TRUNC"],
7008
-
1: flags["O_WRONLY"]
7009
-
};
7010
-
},
7011
-
bufferFrom: function(arrayBuffer) {
7012
-
return Buffer["alloc"] ? Buffer.from(arrayBuffer) : new Buffer(arrayBuffer);
7013
-
},
7014
-
convertNodeCode: function(e) {
7015
-
var code = e.code;
7016
-
return ERRNO_CODES[code];
7017
-
},
7018
-
mount: function(mount) {
7019
-
return NODEFS.createNode(null, "/", NODEFS.getMode(mount.opts.root), 0);
7020
-
},
7021
-
createNode: function(parent, name, mode, dev) {
7022
-
if (!FS.isDir(mode) && !FS.isFile(mode) && !FS.isLink(mode)) {
7023
-
throw new FS.ErrnoError(28);
7024
-
}
7025
-
var node = FS.createNode(parent, name, mode);
7026
-
node.node_ops = NODEFS.node_ops;
7027
-
node.stream_ops = NODEFS.stream_ops;
7028
-
return node;
7029
-
},
7030
-
getMode: function(path) {
7031
-
var stat;
7032
-
try {
7033
-
stat = fs.lstatSync(path);
7034
-
if (NODEFS.isWindows) {
7035
-
stat.mode = stat.mode | (stat.mode & 292) >> 2;
7036
-
}
7037
-
} catch (e) {
7038
-
if (!e.code)
7039
-
throw e;
7040
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7041
-
}
7042
-
return stat.mode;
7043
-
},
7044
-
realPath: function(node) {
7045
-
var parts = [];
7046
-
while (node.parent !== node) {
7047
-
parts.push(node.name);
7048
-
node = node.parent;
7049
-
}
7050
-
parts.push(node.mount.opts.root);
7051
-
parts.reverse();
7052
-
return PATH.join.apply(null, parts);
7053
-
},
7054
-
flagsForNode: function(flags) {
7055
-
flags &= ~2097152;
7056
-
flags &= ~2048;
7057
-
flags &= ~32768;
7058
-
flags &= ~524288;
7059
-
var newFlags = 0;
7060
-
for (var k in NODEFS.flagsForNodeMap) {
7061
-
if (flags & k) {
7062
-
newFlags |= NODEFS.flagsForNodeMap[k];
7063
-
flags ^= k;
7064
-
}
7065
-
}
7066
-
if (!flags) {
7067
-
return newFlags;
7068
-
} else {
7069
-
throw new FS.ErrnoError(28);
7070
-
}
7071
-
},
7072
-
node_ops: {
7073
-
getattr: function(node) {
7074
-
var path = NODEFS.realPath(node);
7075
-
var stat;
7076
-
try {
7077
-
stat = fs.lstatSync(path);
7078
-
} catch (e) {
7079
-
if (!e.code)
7080
-
throw e;
7081
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7082
-
}
7083
-
if (NODEFS.isWindows && !stat.blksize) {
7084
-
stat.blksize = 4096;
7085
-
}
7086
-
if (NODEFS.isWindows && !stat.blocks) {
7087
-
stat.blocks = (stat.size + stat.blksize - 1) / stat.blksize | 0;
7088
-
}
7089
-
return {
7090
-
dev: stat.dev,
7091
-
ino: stat.ino,
7092
-
mode: stat.mode,
7093
-
nlink: stat.nlink,
7094
-
uid: stat.uid,
7095
-
gid: stat.gid,
7096
-
rdev: stat.rdev,
7097
-
size: stat.size,
7098
-
atime: stat.atime,
7099
-
mtime: stat.mtime,
7100
-
ctime: stat.ctime,
7101
-
blksize: stat.blksize,
7102
-
blocks: stat.blocks
7103
-
};
7104
-
},
7105
-
setattr: function(node, attr) {
7106
-
var path = NODEFS.realPath(node);
7107
-
try {
7108
-
if (attr.mode !== void 0) {
7109
-
fs.chmodSync(path, attr.mode);
7110
-
node.mode = attr.mode;
7111
-
}
7112
-
if (attr.timestamp !== void 0) {
7113
-
var date = new Date(attr.timestamp);
7114
-
fs.utimesSync(path, date, date);
7115
-
}
7116
-
if (attr.size !== void 0) {
7117
-
fs.truncateSync(path, attr.size);
7118
-
}
7119
-
} catch (e) {
7120
-
if (!e.code)
7121
-
throw e;
7122
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7123
-
}
7124
-
},
7125
-
lookup: function(parent, name) {
7126
-
var path = PATH.join2(NODEFS.realPath(parent), name);
7127
-
var mode = NODEFS.getMode(path);
7128
-
return NODEFS.createNode(parent, name, mode);
7129
-
},
7130
-
mknod: function(parent, name, mode, dev) {
7131
-
var node = NODEFS.createNode(parent, name, mode, dev);
7132
-
var path = NODEFS.realPath(node);
7133
-
try {
7134
-
if (FS.isDir(node.mode)) {
7135
-
fs.mkdirSync(path, node.mode);
7136
-
} else {
7137
-
fs.writeFileSync(path, "", { mode: node.mode });
7138
-
}
7139
-
} catch (e) {
7140
-
if (!e.code)
7141
-
throw e;
7142
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7143
-
}
7144
-
return node;
7145
-
},
7146
-
rename: function(oldNode, newDir, newName) {
7147
-
var oldPath = NODEFS.realPath(oldNode);
7148
-
var newPath = PATH.join2(NODEFS.realPath(newDir), newName);
7149
-
try {
7150
-
fs.renameSync(oldPath, newPath);
7151
-
} catch (e) {
7152
-
if (!e.code)
7153
-
throw e;
7154
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7155
-
}
7156
-
oldNode.name = newName;
7157
-
},
7158
-
unlink: function(parent, name) {
7159
-
var path = PATH.join2(NODEFS.realPath(parent), name);
7160
-
try {
7161
-
fs.unlinkSync(path);
7162
-
} catch (e) {
7163
-
if (!e.code)
7164
-
throw e;
7165
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7166
-
}
7167
-
},
7168
-
rmdir: function(parent, name) {
7169
-
var path = PATH.join2(NODEFS.realPath(parent), name);
7170
-
try {
7171
-
fs.rmdirSync(path);
7172
-
} catch (e) {
7173
-
if (!e.code)
7174
-
throw e;
7175
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7176
-
}
7177
-
},
7178
-
readdir: function(node) {
7179
-
var path = NODEFS.realPath(node);
7180
-
try {
7181
-
return fs.readdirSync(path);
7182
-
} catch (e) {
7183
-
if (!e.code)
7184
-
throw e;
7185
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7186
-
}
7187
-
},
7188
-
symlink: function(parent, newName, oldPath) {
7189
-
var newPath = PATH.join2(NODEFS.realPath(parent), newName);
7190
-
try {
7191
-
fs.symlinkSync(oldPath, newPath);
7192
-
} catch (e) {
7193
-
if (!e.code)
7194
-
throw e;
7195
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7196
-
}
7197
-
},
7198
-
readlink: function(node) {
7199
-
var path = NODEFS.realPath(node);
7200
-
try {
7201
-
path = fs.readlinkSync(path);
7202
-
path = NODEJS_PATH.relative(
7203
-
NODEJS_PATH.resolve(node.mount.opts.root),
7204
-
path
7205
-
);
7206
-
return path;
7207
-
} catch (e) {
7208
-
if (!e.code)
7209
-
throw e;
7210
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7211
-
}
7212
-
}
7213
-
},
7214
-
stream_ops: {
7215
-
open: function(stream) {
7216
-
var path = NODEFS.realPath(stream.node);
7217
-
try {
7218
-
if (FS.isFile(stream.node.mode)) {
7219
-
stream.nfd = fs.openSync(path, NODEFS.flagsForNode(stream.flags));
7220
-
}
7221
-
} catch (e) {
7222
-
if (!e.code)
7223
-
throw e;
7224
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7225
-
}
7226
-
},
7227
-
close: function(stream) {
7228
-
try {
7229
-
if (FS.isFile(stream.node.mode) && stream.nfd) {
7230
-
fs.closeSync(stream.nfd);
7231
-
}
7232
-
} catch (e) {
7233
-
if (!e.code)
7234
-
throw e;
7235
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7236
-
}
7237
-
},
7238
-
read: function(stream, buffer2, offset, length, position) {
7239
-
if (length === 0)
7240
-
return 0;
7241
-
try {
7242
-
return fs.readSync(
7243
-
stream.nfd,
7244
-
NODEFS.bufferFrom(buffer2.buffer),
7245
-
offset,
7246
-
length,
7247
-
position
7248
-
);
7249
-
} catch (e) {
7250
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7251
-
}
7252
-
},
7253
-
write: function(stream, buffer2, offset, length, position) {
7254
-
try {
7255
-
return fs.writeSync(
7256
-
stream.nfd,
7257
-
NODEFS.bufferFrom(buffer2.buffer),
7258
-
offset,
7259
-
length,
7260
-
position
7261
-
);
7262
-
} catch (e) {
7263
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7264
-
}
7265
-
},
7266
-
llseek: function(stream, offset, whence) {
7267
-
var position = offset;
7268
-
if (whence === 1) {
7269
-
position += stream.position;
7270
-
} else if (whence === 2) {
7271
-
if (FS.isFile(stream.node.mode)) {
7272
-
try {
7273
-
var stat = fs.fstatSync(stream.nfd);
7274
-
position += stat.size;
7275
-
} catch (e) {
7276
-
throw new FS.ErrnoError(NODEFS.convertNodeCode(e));
7277
-
}
7278
-
}
7279
-
}
7280
-
if (position < 0) {
7281
-
throw new FS.ErrnoError(28);
7282
-
}
7283
-
return position;
7284
-
},
7285
-
mmap: function(stream, address, length, position, prot, flags) {
7286
-
if (address !== 0) {
7287
-
throw new FS.ErrnoError(28);
7288
-
}
7289
-
if (!FS.isFile(stream.node.mode)) {
7290
-
throw new FS.ErrnoError(43);
7291
-
}
7292
-
var ptr = mmapAlloc(length);
7293
-
NODEFS.stream_ops.read(stream, HEAP8, ptr, length, position);
7294
-
return { ptr, allocated: true };
7295
-
},
7296
-
msync: function(stream, buffer2, offset, length, mmapFlags) {
7297
-
if (!FS.isFile(stream.node.mode)) {
7298
-
throw new FS.ErrnoError(43);
7299
-
}
7300
-
if (mmapFlags & 2) {
7301
-
return 0;
7302
-
}
7303
-
NODEFS.stream_ops.write(
7304
-
stream,
7305
-
buffer2,
7306
-
0,
7307
-
length,
7308
-
offset,
7309
-
false
7310
-
);
7311
-
return 0;
7312
-
}
7313
-
}
7314
-
};
7315
-
var NODERAWFS = {
7316
-
lookupPath: function(path) {
7317
-
return { path, node: { mode: NODEFS.getMode(path) } };
7318
-
},
7319
-
createStandardStreams: function() {
7320
-
FS.streams[0] = {
7321
-
fd: 0,
7322
-
nfd: 0,
7323
-
position: 0,
7324
-
path: "",
7325
-
flags: 0,
7326
-
tty: true,
7327
-
seekable: false
7328
-
};
7329
-
for (var i = 1; i < 3; i++) {
7330
-
FS.streams[i] = {
7331
-
fd: i,
7332
-
nfd: i,
7333
-
position: 0,
7334
-
path: "",
7335
-
flags: 577,
7336
-
tty: true,
7337
-
seekable: false
7338
-
};
7339
-
}
7340
-
},
7341
-
cwd: function() {
7342
-
return process.cwd();
7343
-
},
7344
-
chdir: function() {
7345
-
process.chdir.apply(void 0, arguments);
7346
-
},
7347
-
mknod: function(path, mode) {
7348
-
if (FS.isDir(path)) {
7349
-
fs.mkdirSync(path, mode);
7350
-
} else {
7351
-
fs.writeFileSync(path, "", { mode });
7352
-
}
7353
-
},
7354
-
mkdir: function() {
7355
-
fs.mkdirSync.apply(void 0, arguments);
7356
-
},
7357
-
symlink: function() {
7358
-
fs.symlinkSync.apply(void 0, arguments);
7359
-
},
7360
-
rename: function() {
7361
-
fs.renameSync.apply(void 0, arguments);
7362
-
},
7363
-
rmdir: function() {
7364
-
fs.rmdirSync.apply(void 0, arguments);
7365
-
},
7366
-
readdir: function() {
7367
-
fs.readdirSync.apply(void 0, arguments);
7368
-
},
7369
-
unlink: function() {
7370
-
fs.unlinkSync.apply(void 0, arguments);
7371
-
},
7372
-
readlink: function() {
7373
-
return fs.readlinkSync.apply(void 0, arguments);
7374
-
},
7375
-
stat: function() {
7376
-
return fs.statSync.apply(void 0, arguments);
7377
-
},
7378
-
lstat: function() {
7379
-
return fs.lstatSync.apply(void 0, arguments);
7380
-
},
7381
-
chmod: function() {
7382
-
fs.chmodSync.apply(void 0, arguments);
7383
-
},
7384
-
fchmod: function() {
7385
-
fs.fchmodSync.apply(void 0, arguments);
7386
-
},
7387
-
chown: function() {
7388
-
fs.chownSync.apply(void 0, arguments);
7389
-
},
7390
-
fchown: function() {
7391
-
fs.fchownSync.apply(void 0, arguments);
7392
-
},
7393
-
truncate: function() {
7394
-
fs.truncateSync.apply(void 0, arguments);
7395
-
},
7396
-
ftruncate: function(fd, len) {
7397
-
if (len < 0) {
7398
-
throw new FS.ErrnoError(28);
7399
-
}
7400
-
fs.ftruncateSync.apply(void 0, arguments);
7401
-
},
7402
-
utime: function() {
7403
-
fs.utimesSync.apply(void 0, arguments);
7404
-
},
7405
-
open: function(path, flags, mode, suggestFD) {
7406
-
if (typeof flags === "string") {
7407
-
flags = VFS.modeStringToFlags(flags);
7408
-
}
7409
-
var nfd = fs.openSync(path, NODEFS.flagsForNode(flags), mode);
7410
-
var fd = suggestFD != null ? suggestFD : FS.nextfd(nfd);
7411
-
var stream = {
7412
-
fd,
7413
-
nfd,
7414
-
position: 0,
7415
-
path,
7416
-
flags,
7417
-
seekable: true
7418
-
};
7419
-
FS.streams[fd] = stream;
7420
-
return stream;
7421
-
},
7422
-
close: function(stream) {
7423
-
if (!stream.stream_ops) {
7424
-
fs.closeSync(stream.nfd);
7425
-
}
7426
-
FS.closeStream(stream.fd);
7427
-
},
7428
-
llseek: function(stream, offset, whence) {
7429
-
if (stream.stream_ops) {
7430
-
return VFS.llseek(stream, offset, whence);
7431
-
}
7432
-
var position = offset;
7433
-
if (whence === 1) {
7434
-
position += stream.position;
7435
-
} else if (whence === 2) {
7436
-
position += fs.fstatSync(stream.nfd).size;
7437
-
} else if (whence !== 0) {
7438
-
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
7439
-
}
7440
-
if (position < 0) {
7441
-
throw new FS.ErrnoError(ERRNO_CODES.EINVAL);
7442
-
}
7443
-
stream.position = position;
7444
-
return position;
7445
-
},
7446
-
read: function(stream, buffer2, offset, length, position) {
7447
-
if (stream.stream_ops) {
7448
-
return VFS.read(stream, buffer2, offset, length, position);
7449
-
}
7450
-
var seeking = typeof position !== "undefined";
7451
-
if (!seeking && stream.seekable)
7452
-
position = stream.position;
7453
-
var bytesRead = fs.readSync(
7454
-
stream.nfd,
7455
-
NODEFS.bufferFrom(buffer2.buffer),
7456
-
offset,
7457
-
length,
7458
-
position
7459
-
);
7460
-
if (!seeking)
7461
-
stream.position += bytesRead;
7462
-
return bytesRead;
7463
-
},
7464
-
write: function(stream, buffer2, offset, length, position) {
7465
-
if (stream.stream_ops) {
7466
-
return VFS.write(stream, buffer2, offset, length, position);
7467
-
}
7468
-
if (stream.flags & +"1024") {
7469
-
FS.llseek(stream, 0, +"2");
7470
-
}
7471
-
var seeking = typeof position !== "undefined";
7472
-
if (!seeking && stream.seekable)
7473
-
position = stream.position;
7474
-
var bytesWritten = fs.writeSync(
7475
-
stream.nfd,
7476
-
NODEFS.bufferFrom(buffer2.buffer),
7477
-
offset,
7478
-
length,
7479
-
position
7480
-
);
7481
-
if (!seeking)
7482
-
stream.position += bytesWritten;
7483
-
return bytesWritten;
7484
-
},
7485
-
allocate: function() {
7486
-
throw new FS.ErrnoError(ERRNO_CODES.EOPNOTSUPP);
7487
-
},
7488
-
mmap: function(stream, address, length, position, prot, flags) {
7489
-
if (stream.stream_ops) {
7490
-
return VFS.mmap(stream, address, length, position, prot, flags);
7491
-
}
7492
-
if (address !== 0) {
7493
-
throw new FS.ErrnoError(28);
7494
-
}
7495
-
var ptr = mmapAlloc(length);
7496
-
FS.read(stream, HEAP8, ptr, length, position);
7497
-
return { ptr, allocated: true };
7498
-
},
7499
-
msync: function(stream, buffer2, offset, length, mmapFlags) {
7500
-
if (stream.stream_ops) {
7501
-
return VFS.msync(stream, buffer2, offset, length, mmapFlags);
7502
-
}
7503
-
if (mmapFlags & 2) {
7504
-
return 0;
7505
-
}
7506
-
FS.write(stream, buffer2, 0, length, offset);
7507
-
return 0;
7508
-
},
7509
-
munmap: function() {
7510
-
return 0;
7511
-
},
7512
-
ioctl: function() {
7513
-
throw new FS.ErrnoError(ERRNO_CODES.ENOTTY);
7514
-
}
7515
-
};
7516
-
var FS = {
7517
-
root: null,
7518
-
mounts: [],
7519
-
devices: {},
7520
-
streams: [],
7521
-
nextInode: 1,
7522
-
nameTable: null,
7523
-
currentPath: "/",
7524
-
initialized: false,
7525
-
ignorePermissions: true,
7526
-
trackingDelegate: {},
7527
-
tracking: { openFlags: { READ: 1, WRITE: 2 } },
7528
-
ErrnoError: null,
7529
-
genericErrors: {},
7530
-
filesystems: null,
7531
-
syncFSRequests: 0,
7532
-
lookupPath: function(path, opts) {
7533
-
path = PATH_FS.resolve(FS.cwd(), path);
7534
-
opts = opts || {};
7535
-
if (!path)
7536
-
return { path: "", node: null };
7537
-
var defaults = { follow_mount: true, recurse_count: 0 };
7538
-
for (var key2 in defaults) {
7539
-
if (opts[key2] === void 0) {
7540
-
opts[key2] = defaults[key2];
7541
-
}
7542
-
}
7543
-
if (opts.recurse_count > 8) {
7544
-
throw new FS.ErrnoError(32);
7545
-
}
7546
-
var parts = PATH.normalizeArray(
7547
-
path.split("/").filter(function(p) {
7548
-
return !!p;
7549
-
}),
7550
-
false
7551
-
);
7552
-
var current = FS.root;
7553
-
var current_path = "/";
7554
-
for (var i = 0; i < parts.length; i++) {
7555
-
var islast = i === parts.length - 1;
7556
-
if (islast && opts.parent) {
7557
-
break;
7558
-
}
7559
-
current = FS.lookupNode(current, parts[i]);
7560
-
current_path = PATH.join2(current_path, parts[i]);
7561
-
if (FS.isMountpoint(current)) {
7562
-
if (!islast || islast && opts.follow_mount) {
7563
-
current = current.mounted.root;
7564
-
}
7565
-
}
7566
-
if (!islast || opts.follow) {
7567
-
var count = 0;
7568
-
while (FS.isLink(current.mode)) {
7569
-
var link = FS.readlink(current_path);
7570
-
current_path = PATH_FS.resolve(PATH.dirname(current_path), link);
7571
-
var lookup = FS.lookupPath(current_path, {
7572
-
recurse_count: opts.recurse_count
7573
-
});
7574
-
current = lookup.node;
7575
-
if (count++ > 40) {
7576
-
throw new FS.ErrnoError(32);
7577
-
}
7578
-
}
7579
-
}
7580
-
}
7581
-
return { path: current_path, node: current };
7582
-
},
7583
-
getPath: function(node) {
7584
-
var path;
7585
-
while (true) {
7586
-
if (FS.isRoot(node)) {
7587
-
var mount = node.mount.mountpoint;
7588
-
if (!path)
7589
-
return mount;
7590
-
return mount[mount.length - 1] !== "/" ? mount + "/" + path : mount + path;
7591
-
}
7592
-
path = path ? node.name + "/" + path : node.name;
7593
-
node = node.parent;
7594
-
}
7595
-
},
7596
-
hashName: function(parentid, name) {
7597
-
var hash = 0;
7598
-
for (var i = 0; i < name.length; i++) {
7599
-
hash = (hash << 5) - hash + name.charCodeAt(i) | 0;
7600
-
}
7601
-
return (parentid + hash >>> 0) % FS.nameTable.length;
7602
-
},
7603
-
hashAddNode: function(node) {
7604
-
var hash = FS.hashName(node.parent.id, node.name);
7605
-
node.name_next = FS.nameTable[hash];
7606
-
FS.nameTable[hash] = node;
7607
-
},
7608
-
hashRemoveNode: function(node) {
7609
-
var hash = FS.hashName(node.parent.id, node.name);
7610
-
if (FS.nameTable[hash] === node) {
7611
-
FS.nameTable[hash] = node.name_next;
7612
-
} else {
7613
-
var current = FS.nameTable[hash];
7614
-
while (current) {
7615
-
if (current.name_next === node) {
7616
-
current.name_next = node.name_next;
7617
-
break;
7618
-
}
7619
-
current = current.name_next;
7620
-
}
7621
-
}
7622
-
},
7623
-
lookupNode: function(parent, name) {
7624
-
var errCode = FS.mayLookup(parent);
7625
-
if (errCode) {
7626
-
throw new FS.ErrnoError(errCode, parent);
7627
-
}
7628
-
var hash = FS.hashName(parent.id, name);
7629
-
for (var node = FS.nameTable[hash]; node; node = node.name_next) {
7630
-
var nodeName = node.name;
7631
-
if (node.parent.id === parent.id && nodeName === name) {
7632
-
return node;
7633
-
}
7634
-
}
7635
-
return FS.lookup(parent, name);
7636
-
},
7637
-
createNode: function(parent, name, mode, rdev) {
7638
-
var node = new FS.FSNode(parent, name, mode, rdev);
7639
-
FS.hashAddNode(node);
7640
-
return node;
7641
-
},
7642
-
destroyNode: function(node) {
7643
-
FS.hashRemoveNode(node);
7644
-
},
7645
-
isRoot: function(node) {
7646
-
return node === node.parent;
7647
-
},
7648
-
isMountpoint: function(node) {
7649
-
return !!node.mounted;
7650
-
},
7651
-
isFile: function(mode) {
7652
-
return (mode & 61440) === 32768;
7653
-
},
7654
-
isDir: function(mode) {
7655
-
return (mode & 61440) === 16384;
7656
-
},
7657
-
isLink: function(mode) {
7658
-
return (mode & 61440) === 40960;
7659
-
},
7660
-
isChrdev: function(mode) {
7661
-
return (mode & 61440) === 8192;
7662
-
},
7663
-
isBlkdev: function(mode) {
7664
-
return (mode & 61440) === 24576;
7665
-
},
7666
-
isFIFO: function(mode) {
7667
-
return (mode & 61440) === 4096;
7668
-
},
7669
-
isSocket: function(mode) {
7670
-
return (mode & 49152) === 49152;
7671
-
},
7672
-
flagModes: { r: 0, "r+": 2, w: 577, "w+": 578, a: 1089, "a+": 1090 },
7673
-
modeStringToFlags: function(str) {
7674
-
var flags = FS.flagModes[str];
7675
-
if (typeof flags === "undefined") {
7676
-
throw new Error("Unknown file open mode: " + str);
7677
-
}
7678
-
return flags;
7679
-
},
7680
-
flagsToPermissionString: function(flag) {
7681
-
var perms = ["r", "w", "rw"][flag & 3];
7682
-
if (flag & 512) {
7683
-
perms += "w";
7684
-
}
7685
-
return perms;
7686
-
},
7687
-
nodePermissions: function(node, perms) {
7688
-
if (FS.ignorePermissions) {
7689
-
return 0;
7690
-
}
7691
-
if (perms.includes("r") && !(node.mode & 292)) {
7692
-
return 2;
7693
-
} else if (perms.includes("w") && !(node.mode & 146)) {
7694
-
return 2;
7695
-
} else if (perms.includes("x") && !(node.mode & 73)) {
7696
-
return 2;
7697
-
}
7698
-
return 0;
7699
-
},
7700
-
mayLookup: function(dir) {
7701
-
var errCode = FS.nodePermissions(dir, "x");
7702
-
if (errCode)
7703
-
return errCode;
7704
-
if (!dir.node_ops.lookup)
7705
-
return 2;
7706
-
return 0;
7707
-
},
7708
-
mayCreate: function(dir, name) {
7709
-
try {
7710
-
var node = FS.lookupNode(dir, name);
7711
-
return 20;
7712
-
} catch (e) {
7713
-
}
7714
-
return FS.nodePermissions(dir, "wx");
7715
-
},
7716
-
mayDelete: function(dir, name, isdir) {
7717
-
var node;
7718
-
try {
7719
-
node = FS.lookupNode(dir, name);
7720
-
} catch (e) {
7721
-
return e.errno;
7722
-
}
7723
-
var errCode = FS.nodePermissions(dir, "wx");
7724
-
if (errCode) {
7725
-
return errCode;
7726
-
}
7727
-
if (isdir) {
7728
-
if (!FS.isDir(node.mode)) {
7729
-
return 54;
7730
-
}
7731
-
if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) {
7732
-
return 10;
7733
-
}
7734
-
} else {
7735
-
if (FS.isDir(node.mode)) {
7736
-
return 31;
7737
-
}
7738
-
}
7739
-
return 0;
7740
-
},
7741
-
mayOpen: function(node, flags) {
7742
-
if (!node) {
7743
-
return 44;
7744
-
}
7745
-
if (FS.isLink(node.mode)) {
7746
-
return 32;
7747
-
} else if (FS.isDir(node.mode)) {
7748
-
if (FS.flagsToPermissionString(flags) !== "r" || flags & 512) {
7749
-
return 31;
7750
-
}
7751
-
}
7752
-
return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
7753
-
},
7754
-
MAX_OPEN_FDS: 4096,
7755
-
nextfd: function(fd_start, fd_end) {
7756
-
fd_start = fd_start || 0;
7757
-
fd_end = fd_end || FS.MAX_OPEN_FDS;
7758
-
for (var fd = fd_start; fd <= fd_end; fd++) {
7759
-
if (!FS.streams[fd]) {
7760
-
return fd;
7761
-
}
7762
-
}
7763
-
throw new FS.ErrnoError(33);
7764
-
},
7765
-
getStream: function(fd) {
7766
-
return FS.streams[fd];
7767
-
},
7768
-
createStream: function(stream, fd_start, fd_end) {
7769
-
if (!FS.FSStream) {
7770
-
FS.FSStream = function() {
7771
-
};
7772
-
FS.FSStream.prototype = {
7773
-
object: {
7774
-
get: function() {
7775
-
return this.node;
7776
-
},
7777
-
set: function(val) {
7778
-
this.node = val;
7779
-
}
7780
-
},
7781
-
isRead: {
7782
-
get: function() {
7783
-
return (this.flags & 2097155) !== 1;
7784
-
}
7785
-
},
7786
-
isWrite: {
7787
-
get: function() {
7788
-
return (this.flags & 2097155) !== 0;
7789
-
}
7790
-
},
7791
-
isAppend: {
7792
-
get: function() {
7793
-
return this.flags & 1024;
7794
-
}
7795
-
}
7796
-
};
7797
-
}
7798
-
var newStream = new FS.FSStream();
7799
-
for (var p in stream) {
7800
-
newStream[p] = stream[p];
7801
-
}
7802
-
stream = newStream;
7803
-
var fd = FS.nextfd(fd_start, fd_end);
7804
-
stream.fd = fd;
7805
-
FS.streams[fd] = stream;
7806
-
return stream;
7807
-
},
7808
-
closeStream: function(fd) {
7809
-
FS.streams[fd] = null;
7810
-
},
7811
-
chrdev_stream_ops: {
7812
-
open: function(stream) {
7813
-
var device = FS.getDevice(stream.node.rdev);
7814
-
stream.stream_ops = device.stream_ops;
7815
-
if (stream.stream_ops.open) {
7816
-
stream.stream_ops.open(stream);
7817
-
}
7818
-
},
7819
-
llseek: function() {
7820
-
throw new FS.ErrnoError(70);
7821
-
}
7822
-
},
7823
-
major: function(dev) {
7824
-
return dev >> 8;
7825
-
},
7826
-
minor: function(dev) {
7827
-
return dev & 255;
7828
-
},
7829
-
makedev: function(ma, mi) {
7830
-
return ma << 8 | mi;
7831
-
},
7832
-
registerDevice: function(dev, ops) {
7833
-
FS.devices[dev] = { stream_ops: ops };
7834
-
},
7835
-
getDevice: function(dev) {
7836
-
return FS.devices[dev];
7837
-
},
7838
-
getMounts: function(mount) {
7839
-
var mounts = [];
7840
-
var check = [mount];
7841
-
while (check.length) {
7842
-
var m = check.pop();
7843
-
mounts.push(m);
7844
-
check.push.apply(check, m.mounts);
7845
-
}
7846
-
return mounts;
7847
-
},
7848
-
syncfs: function(populate, callback) {
7849
-
if (typeof populate === "function") {
7850
-
callback = populate;
7851
-
populate = false;
7852
-
}
7853
-
FS.syncFSRequests++;
7854
-
if (FS.syncFSRequests > 1) {
7855
-
err(
7856
-
"warning: " + FS.syncFSRequests + " FS.syncfs operations in flight at once, probably just doing extra work"
7857
-
);
7858
-
}
7859
-
var mounts = FS.getMounts(FS.root.mount);
7860
-
var completed = 0;
7861
-
function doCallback(errCode) {
7862
-
FS.syncFSRequests--;
7863
-
return callback(errCode);
7864
-
}
7865
-
function done(errCode) {
7866
-
if (errCode) {
7867
-
if (!done.errored) {
7868
-
done.errored = true;
7869
-
return doCallback(errCode);
7870
-
}
7871
-
return;
7872
-
}
7873
-
if (++completed >= mounts.length) {
7874
-
doCallback(null);
7875
-
}
7876
-
}
7877
-
mounts.forEach(function(mount) {
7878
-
if (!mount.type.syncfs) {
7879
-
return done(null);
7880
-
}
7881
-
mount.type.syncfs(mount, populate, done);
7882
-
});
7883
-
},
7884
-
mount: function(type, opts, mountpoint) {
7885
-
var root = mountpoint === "/";
7886
-
var pseudo = !mountpoint;
7887
-
var node;
7888
-
if (root && FS.root) {
7889
-
throw new FS.ErrnoError(10);
7890
-
} else if (!root && !pseudo) {
7891
-
var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
7892
-
mountpoint = lookup.path;
7893
-
node = lookup.node;
7894
-
if (FS.isMountpoint(node)) {
7895
-
throw new FS.ErrnoError(10);
7896
-
}
7897
-
if (!FS.isDir(node.mode)) {
7898
-
throw new FS.ErrnoError(54);
7899
-
}
7900
-
}
7901
-
var mount = {
7902
-
type,
7903
-
opts,
7904
-
mountpoint,
7905
-
mounts: []
7906
-
};
7907
-
var mountRoot = type.mount(mount);
7908
-
mountRoot.mount = mount;
7909
-
mount.root = mountRoot;
7910
-
if (root) {
7911
-
FS.root = mountRoot;
7912
-
} else if (node) {
7913
-
node.mounted = mount;
7914
-
if (node.mount) {
7915
-
node.mount.mounts.push(mount);
7916
-
}
7917
-
}
7918
-
return mountRoot;
7919
-
},
7920
-
unmount: function(mountpoint) {
7921
-
var lookup = FS.lookupPath(mountpoint, { follow_mount: false });
7922
-
if (!FS.isMountpoint(lookup.node)) {
7923
-
throw new FS.ErrnoError(28);
7924
-
}
7925
-
var node = lookup.node;
7926
-
var mount = node.mounted;
7927
-
var mounts = FS.getMounts(mount);
7928
-
Object.keys(FS.nameTable).forEach(function(hash) {
7929
-
var current = FS.nameTable[hash];
7930
-
while (current) {
7931
-
var next = current.name_next;
7932
-
if (mounts.includes(current.mount)) {
7933
-
FS.destroyNode(current);
7934
-
}
7935
-
current = next;
7936
-
}
7937
-
});
7938
-
node.mounted = null;
7939
-
var idx = node.mount.mounts.indexOf(mount);
7940
-
node.mount.mounts.splice(idx, 1);
7941
-
},
7942
-
lookup: function(parent, name) {
7943
-
return parent.node_ops.lookup(parent, name);
7944
-
},
7945
-
mknod: function(path, mode, dev) {
7946
-
var lookup = FS.lookupPath(path, { parent: true });
7947
-
var parent = lookup.node;
7948
-
var name = PATH.basename(path);
7949
-
if (!name || name === "." || name === "..") {
7950
-
throw new FS.ErrnoError(28);
7951
-
}
7952
-
var errCode = FS.mayCreate(parent, name);
7953
-
if (errCode) {
7954
-
throw new FS.ErrnoError(errCode);
7955
-
}
7956
-
if (!parent.node_ops.mknod) {
7957
-
throw new FS.ErrnoError(63);
7958
-
}
7959
-
return parent.node_ops.mknod(parent, name, mode, dev);
7960
-
},
7961
-
create: function(path, mode) {
7962
-
mode = mode !== void 0 ? mode : 438;
7963
-
mode &= 4095;
7964
-
mode |= 32768;
7965
-
return FS.mknod(path, mode, 0);
7966
-
},
7967
-
mkdir: function(path, mode) {
7968
-
mode = mode !== void 0 ? mode : 511;
7969
-
mode &= 511 | 512;
7970
-
mode |= 16384;
7971
-
return FS.mknod(path, mode, 0);
7972
-
},
7973
-
mkdirTree: function(path, mode) {
7974
-
var dirs = path.split("/");
7975
-
var d = "";
7976
-
for (var i = 0; i < dirs.length; ++i) {
7977
-
if (!dirs[i])
7978
-
continue;
7979
-
d += "/" + dirs[i];
7980
-
try {
7981
-
FS.mkdir(d, mode);
7982
-
} catch (e) {
7983
-
if (e.errno != 20)
7984
-
throw e;
7985
-
}
7986
-
}
7987
-
},
7988
-
mkdev: function(path, mode, dev) {
7989
-
if (typeof dev === "undefined") {
7990
-
dev = mode;
7991
-
mode = 438;
7992
-
}
7993
-
mode |= 8192;
7994
-
return FS.mknod(path, mode, dev);
7995
-
},
7996
-
symlink: function(oldpath, newpath) {
7997
-
if (!PATH_FS.resolve(oldpath)) {
7998
-
throw new FS.ErrnoError(44);
7999
-
}
8000
-
var lookup = FS.lookupPath(newpath, { parent: true });
8001
-
var parent = lookup.node;
8002
-
if (!parent) {
8003
-
throw new FS.ErrnoError(44);
8004
-
}
8005
-
var newname = PATH.basename(newpath);
8006
-
var errCode = FS.mayCreate(parent, newname);
8007
-
if (errCode) {
8008
-
throw new FS.ErrnoError(errCode);
8009
-
}
8010
-
if (!parent.node_ops.symlink) {
8011
-
throw new FS.ErrnoError(63);
8012
-
}
8013
-
return parent.node_ops.symlink(parent, newname, oldpath);
8014
-
},
8015
-
rename: function(old_path, new_path) {
8016
-
var old_dirname = PATH.dirname(old_path);
8017
-
var new_dirname = PATH.dirname(new_path);
8018
-
var old_name = PATH.basename(old_path);
8019
-
var new_name = PATH.basename(new_path);
8020
-
var lookup, old_dir, new_dir;
8021
-
lookup = FS.lookupPath(old_path, { parent: true });
8022
-
old_dir = lookup.node;
8023
-
lookup = FS.lookupPath(new_path, { parent: true });
8024
-
new_dir = lookup.node;
8025
-
if (!old_dir || !new_dir)
8026
-
throw new FS.ErrnoError(44);
8027
-
if (old_dir.mount !== new_dir.mount) {
8028
-
throw new FS.ErrnoError(75);
8029
-
}
8030
-
var old_node = FS.lookupNode(old_dir, old_name);
8031
-
var relative = PATH_FS.relative(old_path, new_dirname);
8032
-
if (relative.charAt(0) !== ".") {
8033
-
throw new FS.ErrnoError(28);
8034
-
}
8035
-
relative = PATH_FS.relative(new_path, old_dirname);
8036
-
if (relative.charAt(0) !== ".") {
8037
-
throw new FS.ErrnoError(55);
8038
-
}
8039
-
var new_node;
8040
-
try {
8041
-
new_node = FS.lookupNode(new_dir, new_name);
8042
-
} catch (e) {
8043
-
}
8044
-
if (old_node === new_node) {
8045
-
return;
8046
-
}
8047
-
var isdir = FS.isDir(old_node.mode);
8048
-
var errCode = FS.mayDelete(old_dir, old_name, isdir);
8049
-
if (errCode) {
8050
-
throw new FS.ErrnoError(errCode);
8051
-
}
8052
-
errCode = new_node ? FS.mayDelete(new_dir, new_name, isdir) : FS.mayCreate(new_dir, new_name);
8053
-
if (errCode) {
8054
-
throw new FS.ErrnoError(errCode);
8055
-
}
8056
-
if (!old_dir.node_ops.rename) {
8057
-
throw new FS.ErrnoError(63);
8058
-
}
8059
-
if (FS.isMountpoint(old_node) || new_node && FS.isMountpoint(new_node)) {
8060
-
throw new FS.ErrnoError(10);
8061
-
}
8062
-
if (new_dir !== old_dir) {
8063
-
errCode = FS.nodePermissions(old_dir, "w");
8064
-
if (errCode) {
8065
-
throw new FS.ErrnoError(errCode);
8066
-
}
8067
-
}
8068
-
try {
8069
-
if (FS.trackingDelegate["willMovePath"]) {
8070
-
FS.trackingDelegate["willMovePath"](old_path, new_path);
8071
-
}
8072
-
} catch (e) {
8073
-
err(
8074
-
"FS.trackingDelegate['willMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message
8075
-
);
8076
-
}
8077
-
FS.hashRemoveNode(old_node);
8078
-
try {
8079
-
old_dir.node_ops.rename(old_node, new_dir, new_name);
8080
-
} catch (e) {
8081
-
throw e;
8082
-
} finally {
8083
-
FS.hashAddNode(old_node);
8084
-
}
8085
-
try {
8086
-
if (FS.trackingDelegate["onMovePath"])
8087
-
FS.trackingDelegate["onMovePath"](old_path, new_path);
8088
-
} catch (e) {
8089
-
err(
8090
-
"FS.trackingDelegate['onMovePath']('" + old_path + "', '" + new_path + "') threw an exception: " + e.message
8091
-
);
8092
-
}
8093
-
},
8094
-
rmdir: function(path) {
8095
-
var lookup = FS.lookupPath(path, { parent: true });
8096
-
var parent = lookup.node;
8097
-
var name = PATH.basename(path);
8098
-
var node = FS.lookupNode(parent, name);
8099
-
var errCode = FS.mayDelete(parent, name, true);
8100
-
if (errCode) {
8101
-
throw new FS.ErrnoError(errCode);
8102
-
}
8103
-
if (!parent.node_ops.rmdir) {
8104
-
throw new FS.ErrnoError(63);
8105
-
}
8106
-
if (FS.isMountpoint(node)) {
8107
-
throw new FS.ErrnoError(10);
8108
-
}
8109
-
try {
8110
-
if (FS.trackingDelegate["willDeletePath"]) {
8111
-
FS.trackingDelegate["willDeletePath"](path);
8112
-
}
8113
-
} catch (e) {
8114
-
err(
8115
-
"FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message
8116
-
);
8117
-
}
8118
-
parent.node_ops.rmdir(parent, name);
8119
-
FS.destroyNode(node);
8120
-
try {
8121
-
if (FS.trackingDelegate["onDeletePath"])
8122
-
FS.trackingDelegate["onDeletePath"](path);
8123
-
} catch (e) {
8124
-
err(
8125
-
"FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message
8126
-
);
8127
-
}
8128
-
},
8129
-
readdir: function(path) {
8130
-
var lookup = FS.lookupPath(path, { follow: true });
8131
-
var node = lookup.node;
8132
-
if (!node.node_ops.readdir) {
8133
-
throw new FS.ErrnoError(54);
8134
-
}
8135
-
return node.node_ops.readdir(node);
8136
-
},
8137
-
unlink: function(path) {
8138
-
var lookup = FS.lookupPath(path, { parent: true });
8139
-
var parent = lookup.node;
8140
-
var name = PATH.basename(path);
8141
-
var node = FS.lookupNode(parent, name);
8142
-
var errCode = FS.mayDelete(parent, name, false);
8143
-
if (errCode) {
8144
-
throw new FS.ErrnoError(errCode);
8145
-
}
8146
-
if (!parent.node_ops.unlink) {
8147
-
throw new FS.ErrnoError(63);
8148
-
}
8149
-
if (FS.isMountpoint(node)) {
8150
-
throw new FS.ErrnoError(10);
8151
-
}
8152
-
try {
8153
-
if (FS.trackingDelegate["willDeletePath"]) {
8154
-
FS.trackingDelegate["willDeletePath"](path);
8155
-
}
8156
-
} catch (e) {
8157
-
err(
8158
-
"FS.trackingDelegate['willDeletePath']('" + path + "') threw an exception: " + e.message
8159
-
);
8160
-
}
8161
-
parent.node_ops.unlink(parent, name);
8162
-
FS.destroyNode(node);
8163
-
try {
8164
-
if (FS.trackingDelegate["onDeletePath"])
8165
-
FS.trackingDelegate["onDeletePath"](path);
8166
-
} catch (e) {
8167
-
err(
8168
-
"FS.trackingDelegate['onDeletePath']('" + path + "') threw an exception: " + e.message
8169
-
);
8170
-
}
8171
-
},
8172
-
readlink: function(path) {
8173
-
var lookup = FS.lookupPath(path);
8174
-
var link = lookup.node;
8175
-
if (!link) {
8176
-
throw new FS.ErrnoError(44);
8177
-
}
8178
-
if (!link.node_ops.readlink) {
8179
-
throw new FS.ErrnoError(28);
8180
-
}
8181
-
return PATH_FS.resolve(
8182
-
FS.getPath(link.parent),
8183
-
link.node_ops.readlink(link)
8184
-
);
8185
-
},
8186
-
stat: function(path, dontFollow) {
8187
-
var lookup = FS.lookupPath(path, { follow: !dontFollow });
8188
-
var node = lookup.node;
8189
-
if (!node) {
8190
-
throw new FS.ErrnoError(44);
8191
-
}
8192
-
if (!node.node_ops.getattr) {
8193
-
throw new FS.ErrnoError(63);
8194
-
}
8195
-
return node.node_ops.getattr(node);
8196
-
},
8197
-
lstat: function(path) {
8198
-
return FS.stat(path, true);
8199
-
},
8200
-
chmod: function(path, mode, dontFollow) {
8201
-
var node;
8202
-
if (typeof path === "string") {
8203
-
var lookup = FS.lookupPath(path, { follow: !dontFollow });
8204
-
node = lookup.node;
8205
-
} else {
8206
-
node = path;
8207
-
}
8208
-
if (!node.node_ops.setattr) {
8209
-
throw new FS.ErrnoError(63);
8210
-
}
8211
-
node.node_ops.setattr(node, {
8212
-
mode: mode & 4095 | node.mode & ~4095,
8213
-
timestamp: Date.now()
8214
-
});
8215
-
},
8216
-
lchmod: function(path, mode) {
8217
-
FS.chmod(path, mode, true);
8218
-
},
8219
-
fchmod: function(fd, mode) {
8220
-
var stream = FS.getStream(fd);
8221
-
if (!stream) {
8222
-
throw new FS.ErrnoError(8);
8223
-
}
8224
-
FS.chmod(stream.node, mode);
8225
-
},
8226
-
chown: function(path, uid, gid, dontFollow) {
8227
-
var node;
8228
-
if (typeof path === "string") {
8229
-
var lookup = FS.lookupPath(path, { follow: !dontFollow });
8230
-
node = lookup.node;
8231
-
} else {
8232
-
node = path;
8233
-
}
8234
-
if (!node.node_ops.setattr) {
8235
-
throw new FS.ErrnoError(63);
8236
-
}
8237
-
node.node_ops.setattr(node, { timestamp: Date.now() });
8238
-
},
8239
-
lchown: function(path, uid, gid) {
8240
-
FS.chown(path, uid, gid, true);
8241
-
},
8242
-
fchown: function(fd, uid, gid) {
8243
-
var stream = FS.getStream(fd);
8244
-
if (!stream) {
8245
-
throw new FS.ErrnoError(8);
8246
-
}
8247
-
FS.chown(stream.node, uid, gid);
8248
-
},
8249
-
truncate: function(path, len) {
8250
-
if (len < 0) {
8251
-
throw new FS.ErrnoError(28);
8252
-
}
8253
-
var node;
8254
-
if (typeof path === "string") {
8255
-
var lookup = FS.lookupPath(path, { follow: true });
8256
-
node = lookup.node;
8257
-
} else {
8258
-
node = path;
8259
-
}
8260
-
if (!node.node_ops.setattr) {
8261
-
throw new FS.ErrnoError(63);
8262
-
}
8263
-
if (FS.isDir(node.mode)) {
8264
-
throw new FS.ErrnoError(31);
8265
-
}
8266
-
if (!FS.isFile(node.mode)) {
8267
-
throw new FS.ErrnoError(28);
8268
-
}
8269
-
var errCode = FS.nodePermissions(node, "w");
8270
-
if (errCode) {
8271
-
throw new FS.ErrnoError(errCode);
8272
-
}
8273
-
node.node_ops.setattr(node, { size: len, timestamp: Date.now() });
8274
-
},
8275
-
ftruncate: function(fd, len) {
8276
-
var stream = FS.getStream(fd);
8277
-
if (!stream) {
8278
-
throw new FS.ErrnoError(8);
8279
-
}
8280
-
if ((stream.flags & 2097155) === 0) {
8281
-
throw new FS.ErrnoError(28);
8282
-
}
8283
-
FS.truncate(stream.node, len);
8284
-
},
8285
-
utime: function(path, atime, mtime) {
8286
-
var lookup = FS.lookupPath(path, { follow: true });
8287
-
var node = lookup.node;
8288
-
node.node_ops.setattr(node, { timestamp: Math.max(atime, mtime) });
8289
-
},
8290
-
open: function(path, flags, mode, fd_start, fd_end) {
8291
-
if (path === "") {
8292
-
throw new FS.ErrnoError(44);
8293
-
}
8294
-
flags = typeof flags === "string" ? FS.modeStringToFlags(flags) : flags;
8295
-
mode = typeof mode === "undefined" ? 438 : mode;
8296
-
if (flags & 64) {
8297
-
mode = mode & 4095 | 32768;
8298
-
} else {
8299
-
mode = 0;
8300
-
}
8301
-
var node;
8302
-
if (typeof path === "object") {
8303
-
node = path;
8304
-
} else {
8305
-
path = PATH.normalize(path);
8306
-
try {
8307
-
var lookup = FS.lookupPath(path, { follow: !(flags & 131072) });
8308
-
node = lookup.node;
8309
-
} catch (e) {
8310
-
}
8311
-
}
8312
-
var created = false;
8313
-
if (flags & 64) {
8314
-
if (node) {
8315
-
if (flags & 128) {
8316
-
throw new FS.ErrnoError(20);
8317
-
}
8318
-
} else {
8319
-
node = FS.mknod(path, mode, 0);
8320
-
created = true;
8321
-
}
8322
-
}
8323
-
if (!node) {
8324
-
throw new FS.ErrnoError(44);
8325
-
}
8326
-
if (FS.isChrdev(node.mode)) {
8327
-
flags &= ~512;
8328
-
}
8329
-
if (flags & 65536 && !FS.isDir(node.mode)) {
8330
-
throw new FS.ErrnoError(54);
8331
-
}
8332
-
if (!created) {
8333
-
var errCode = FS.mayOpen(node, flags);
8334
-
if (errCode) {
8335
-
throw new FS.ErrnoError(errCode);
8336
-
}
8337
-
}
8338
-
if (flags & 512) {
8339
-
FS.truncate(node, 0);
8340
-
}
8341
-
flags &= ~(128 | 512 | 131072);
8342
-
var stream = FS.createStream(
8343
-
{
8344
-
node,
8345
-
path: FS.getPath(node),
8346
-
flags,
8347
-
seekable: true,
8348
-
position: 0,
8349
-
stream_ops: node.stream_ops,
8350
-
ungotten: [],
8351
-
error: false
8352
-
},
8353
-
fd_start,
8354
-
fd_end
8355
-
);
8356
-
if (stream.stream_ops.open) {
8357
-
stream.stream_ops.open(stream);
8358
-
}
8359
-
if (Module["logReadFiles"] && !(flags & 1)) {
8360
-
if (!FS.readFiles)
8361
-
FS.readFiles = {};
8362
-
if (!(path in FS.readFiles)) {
8363
-
FS.readFiles[path] = 1;
8364
-
err("FS.trackingDelegate error on read file: " + path);
8365
-
}
8366
-
}
8367
-
try {
8368
-
if (FS.trackingDelegate["onOpenFile"]) {
8369
-
var trackingFlags = 0;
8370
-
if ((flags & 2097155) !== 1) {
8371
-
trackingFlags |= FS.tracking.openFlags.READ;
8372
-
}
8373
-
if ((flags & 2097155) !== 0) {
8374
-
trackingFlags |= FS.tracking.openFlags.WRITE;
8375
-
}
8376
-
FS.trackingDelegate["onOpenFile"](path, trackingFlags);
8377
-
}
8378
-
} catch (e) {
8379
-
err(
8380
-
"FS.trackingDelegate['onOpenFile']('" + path + "', flags) threw an exception: " + e.message
8381
-
);
8382
-
}
8383
-
return stream;
8384
-
},
8385
-
close: function(stream) {
8386
-
if (FS.isClosed(stream)) {
8387
-
throw new FS.ErrnoError(8);
8388
-
}
8389
-
if (stream.getdents)
8390
-
stream.getdents = null;
8391
-
try {
8392
-
if (stream.stream_ops.close) {
8393
-
stream.stream_ops.close(stream);
8394
-
}
8395
-
} catch (e) {
8396
-
throw e;
8397
-
} finally {
8398
-
FS.closeStream(stream.fd);
8399
-
}
8400
-
stream.fd = null;
8401
-
},
8402
-
isClosed: function(stream) {
8403
-
return stream.fd === null;
8404
-
},
8405
-
llseek: function(stream, offset, whence) {
8406
-
if (FS.isClosed(stream)) {
8407
-
throw new FS.ErrnoError(8);
8408
-
}
8409
-
if (!stream.seekable || !stream.stream_ops.llseek) {
8410
-
throw new FS.ErrnoError(70);
8411
-
}
8412
-
if (whence != 0 && whence != 1 && whence != 2) {
8413
-
throw new FS.ErrnoError(28);
8414
-
}
8415
-
stream.position = stream.stream_ops.llseek(stream, offset, whence);
8416
-
stream.ungotten = [];
8417
-
return stream.position;
8418
-
},
8419
-
read: function(stream, buffer2, offset, length, position) {
8420
-
if (length < 0 || position < 0) {
8421
-
throw new FS.ErrnoError(28);
8422
-
}
8423
-
if (FS.isClosed(stream)) {
8424
-
throw new FS.ErrnoError(8);
8425
-
}
8426
-
if ((stream.flags & 2097155) === 1) {
8427
-
throw new FS.ErrnoError(8);
8428
-
}
8429
-
if (FS.isDir(stream.node.mode)) {
8430
-
throw new FS.ErrnoError(31);
8431
-
}
8432
-
if (!stream.stream_ops.read) {
8433
-
throw new FS.ErrnoError(28);
8434
-
}
8435
-
var seeking = typeof position !== "undefined";
8436
-
if (!seeking) {
8437
-
position = stream.position;
8438
-
} else if (!stream.seekable) {
8439
-
throw new FS.ErrnoError(70);
8440
-
}
8441
-
var bytesRead = stream.stream_ops.read(
8442
-
stream,
8443
-
buffer2,
8444
-
offset,
8445
-
length,
8446
-
position
8447
-
);
8448
-
if (!seeking)
8449
-
stream.position += bytesRead;
8450
-
return bytesRead;
8451
-
},
8452
-
write: function(stream, buffer2, offset, length, position, canOwn) {
8453
-
if (length < 0 || position < 0) {
8454
-
throw new FS.ErrnoError(28);
8455
-
}
8456
-
if (FS.isClosed(stream)) {
8457
-
throw new FS.ErrnoError(8);
8458
-
}
8459
-
if ((stream.flags & 2097155) === 0) {
8460
-
throw new FS.ErrnoError(8);
8461
-
}
8462
-
if (FS.isDir(stream.node.mode)) {
8463
-
throw new FS.ErrnoError(31);
8464
-
}
8465
-
if (!stream.stream_ops.write) {
8466
-
throw new FS.ErrnoError(28);
8467
-
}
8468
-
if (stream.seekable && stream.flags & 1024) {
8469
-
FS.llseek(stream, 0, 2);
8470
-
}
8471
-
var seeking = typeof position !== "undefined";
8472
-
if (!seeking) {
8473
-
position = stream.position;
8474
-
} else if (!stream.seekable) {
8475
-
throw new FS.ErrnoError(70);
8476
-
}
8477
-
var bytesWritten = stream.stream_ops.write(
8478
-
stream,
8479
-
buffer2,
8480
-
offset,
8481
-
length,
8482
-
position,
8483
-
canOwn
8484
-
);
8485
-
if (!seeking)
8486
-
stream.position += bytesWritten;
8487
-
try {
8488
-
if (stream.path && FS.trackingDelegate["onWriteToFile"])
8489
-
FS.trackingDelegate["onWriteToFile"](stream.path);
8490
-
} catch (e) {
8491
-
err(
8492
-
"FS.trackingDelegate['onWriteToFile']('" + stream.path + "') threw an exception: " + e.message
8493
-
);
8494
-
}
8495
-
return bytesWritten;
8496
-
},
8497
-
allocate: function(stream, offset, length) {
8498
-
if (FS.isClosed(stream)) {
8499
-
throw new FS.ErrnoError(8);
8500
-
}
8501
-
if (offset < 0 || length <= 0) {
8502
-
throw new FS.ErrnoError(28);
8503
-
}
8504
-
if ((stream.flags & 2097155) === 0) {
8505
-
throw new FS.ErrnoError(8);
8506
-
}
8507
-
if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {
8508
-
throw new FS.ErrnoError(43);
8509
-
}
8510
-
if (!stream.stream_ops.allocate) {
8511
-
throw new FS.ErrnoError(138);
8512
-
}
8513
-
stream.stream_ops.allocate(stream, offset, length);
8514
-
},
8515
-
mmap: function(stream, address, length, position, prot, flags) {
8516
-
if ((prot & 2) !== 0 && (flags & 2) === 0 && (stream.flags & 2097155) !== 2) {
8517
-
throw new FS.ErrnoError(2);
8518
-
}
8519
-
if ((stream.flags & 2097155) === 1) {
8520
-
throw new FS.ErrnoError(2);
8521
-
}
8522
-
if (!stream.stream_ops.mmap) {
8523
-
throw new FS.ErrnoError(43);
8524
-
}
8525
-
return stream.stream_ops.mmap(
8526
-
stream,
8527
-
address,
8528
-
length,
8529
-
position,
8530
-
prot,
8531
-
flags
8532
-
);
8533
-
},
8534
-
msync: function(stream, buffer2, offset, length, mmapFlags) {
8535
-
if (!stream || !stream.stream_ops.msync) {
8536
-
return 0;
8537
-
}
8538
-
return stream.stream_ops.msync(
8539
-
stream,
8540
-
buffer2,
8541
-
offset,
8542
-
length,
8543
-
mmapFlags
8544
-
);
8545
-
},
8546
-
munmap: function(stream) {
8547
-
return 0;
8548
-
},
8549
-
ioctl: function(stream, cmd, arg) {
8550
-
if (!stream.stream_ops.ioctl) {
8551
-
throw new FS.ErrnoError(59);
8552
-
}
8553
-
return stream.stream_ops.ioctl(stream, cmd, arg);
8554
-
},
8555
-
readFile: function(path, opts) {
8556
-
opts = opts || {};
8557
-
opts.flags = opts.flags || 0;
8558
-
opts.encoding = opts.encoding || "binary";
8559
-
if (opts.encoding !== "utf8" && opts.encoding !== "binary") {
8560
-
throw new Error('Invalid encoding type "' + opts.encoding + '"');
8561
-
}
8562
-
var ret;
8563
-
var stream = FS.open(path, opts.flags);
8564
-
var stat = FS.stat(path);
8565
-
var length = stat.size;
8566
-
var buf = new Uint8Array(length);
8567
-
FS.read(stream, buf, 0, length, 0);
8568
-
if (opts.encoding === "utf8") {
8569
-
ret = UTF8ArrayToString(buf, 0);
8570
-
} else if (opts.encoding === "binary") {
8571
-
ret = buf;
8572
-
}
8573
-
FS.close(stream);
8574
-
return ret;
8575
-
},
8576
-
writeFile: function(path, data, opts) {
8577
-
opts = opts || {};
8578
-
opts.flags = opts.flags || 577;
8579
-
var stream = FS.open(path, opts.flags, opts.mode);
8580
-
if (typeof data === "string") {
8581
-
var buf = new Uint8Array(lengthBytesUTF8(data) + 1);
8582
-
var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);
8583
-
FS.write(stream, buf, 0, actualNumBytes, void 0, opts.canOwn);
8584
-
} else if (ArrayBuffer.isView(data)) {
8585
-
FS.write(stream, data, 0, data.byteLength, void 0, opts.canOwn);
8586
-
} else {
8587
-
throw new Error("Unsupported data type");
8588
-
}
8589
-
FS.close(stream);
8590
-
},
8591
-
cwd: function() {
8592
-
return FS.currentPath;
8593
-
},
8594
-
chdir: function(path) {
8595
-
var lookup = FS.lookupPath(path, { follow: true });
8596
-
if (lookup.node === null) {
8597
-
throw new FS.ErrnoError(44);
8598
-
}
8599
-
if (!FS.isDir(lookup.node.mode)) {
8600
-
throw new FS.ErrnoError(54);
8601
-
}
8602
-
var errCode = FS.nodePermissions(lookup.node, "x");
8603
-
if (errCode) {
8604
-
throw new FS.ErrnoError(errCode);
8605
-
}
8606
-
FS.currentPath = lookup.path;
8607
-
},
8608
-
createDefaultDirectories: function() {
8609
-
FS.mkdir("/tmp");
8610
-
FS.mkdir("/home");
8611
-
FS.mkdir("/home/web_user");
8612
-
},
8613
-
createDefaultDevices: function() {
8614
-
FS.mkdir("/dev");
8615
-
FS.registerDevice(FS.makedev(1, 3), {
8616
-
read: function() {
8617
-
return 0;
8618
-
},
8619
-
write: function(stream, buffer2, offset, length, pos) {
8620
-
return length;
8621
-
}
8622
-
});
8623
-
FS.mkdev("/dev/null", FS.makedev(1, 3));
8624
-
TTY.register(FS.makedev(5, 0), TTY.default_tty_ops);
8625
-
TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops);
8626
-
FS.mkdev("/dev/tty", FS.makedev(5, 0));
8627
-
FS.mkdev("/dev/tty1", FS.makedev(6, 0));
8628
-
var random_device = getRandomDevice();
8629
-
FS.createDevice("/dev", "random", random_device);
8630
-
FS.createDevice("/dev", "urandom", random_device);
8631
-
FS.mkdir("/dev/shm");
8632
-
FS.mkdir("/dev/shm/tmp");
8633
-
},
8634
-
createSpecialDirectories: function() {
8635
-
FS.mkdir("/proc");
8636
-
var proc_self = FS.mkdir("/proc/self");
8637
-
FS.mkdir("/proc/self/fd");
8638
-
FS.mount(
8639
-
{
8640
-
mount: function() {
8641
-
var node = FS.createNode(proc_self, "fd", 16384 | 511, 73);
8642
-
node.node_ops = {
8643
-
lookup: function(parent, name) {
8644
-
var fd = +name;
8645
-
var stream = FS.getStream(fd);
8646
-
if (!stream)
8647
-
throw new FS.ErrnoError(8);
8648
-
var ret = {
8649
-
parent: null,
8650
-
mount: { mountpoint: "fake" },
8651
-
node_ops: {
8652
-
readlink: function() {
8653
-
return stream.path;
8654
-
}
8655
-
}
8656
-
};
8657
-
ret.parent = ret;
8658
-
return ret;
8659
-
}
8660
-
};
8661
-
return node;
8662
-
}
8663
-
},
8664
-
{},
8665
-
"/proc/self/fd"
8666
-
);
8667
-
},
8668
-
createStandardStreams: function() {
8669
-
if (Module["stdin"]) {
8670
-
FS.createDevice("/dev", "stdin", Module["stdin"]);
8671
-
} else {
8672
-
FS.symlink("/dev/tty", "/dev/stdin");
8673
-
}
8674
-
if (Module["stdout"]) {
8675
-
FS.createDevice("/dev", "stdout", null, Module["stdout"]);
8676
-
} else {
8677
-
FS.symlink("/dev/tty", "/dev/stdout");
8678
-
}
8679
-
if (Module["stderr"]) {
8680
-
FS.createDevice("/dev", "stderr", null, Module["stderr"]);
8681
-
} else {
8682
-
FS.symlink("/dev/tty1", "/dev/stderr");
8683
-
}
8684
-
FS.open("/dev/stdin", 0);
8685
-
FS.open("/dev/stdout", 1);
8686
-
FS.open("/dev/stderr", 1);
8687
-
},
8688
-
ensureErrnoError: function() {
8689
-
if (FS.ErrnoError)
8690
-
return;
8691
-
FS.ErrnoError = function ErrnoError(errno, node) {
8692
-
this.node = node;
8693
-
this.setErrno = function(errno2) {
8694
-
this.errno = errno2;
8695
-
};
8696
-
this.setErrno(errno);
8697
-
this.message = "FS error";
8698
-
};
8699
-
FS.ErrnoError.prototype = new Error();
8700
-
FS.ErrnoError.prototype.constructor = FS.ErrnoError;
8701
-
[44].forEach(function(code) {
8702
-
FS.genericErrors[code] = new FS.ErrnoError(code);
8703
-
FS.genericErrors[code].stack = "<generic error, no stack>";
8704
-
});
8705
-
},
8706
-
staticInit: function() {
8707
-
FS.ensureErrnoError();
8708
-
FS.nameTable = new Array(4096);
8709
-
FS.mount(MEMFS, {}, "/");
8710
-
FS.createDefaultDirectories();
8711
-
FS.createDefaultDevices();
8712
-
FS.createSpecialDirectories();
8713
-
FS.filesystems = { MEMFS, NODEFS };
8714
-
},
8715
-
init: function(input, output, error) {
8716
-
FS.init.initialized = true;
8717
-
FS.ensureErrnoError();
8718
-
Module["stdin"] = input || Module["stdin"];
8719
-
Module["stdout"] = output || Module["stdout"];
8720
-
Module["stderr"] = error || Module["stderr"];
8721
-
FS.createStandardStreams();
8722
-
},
8723
-
quit: function() {
8724
-
FS.init.initialized = false;
8725
-
var fflush = Module["_fflush"];
8726
-
if (fflush)
8727
-
fflush(0);
8728
-
for (var i = 0; i < FS.streams.length; i++) {
8729
-
var stream = FS.streams[i];
8730
-
if (!stream) {
8731
-
continue;
8732
-
}
8733
-
FS.close(stream);
8734
-
}
8735
-
},
8736
-
getMode: function(canRead, canWrite) {
8737
-
var mode = 0;
8738
-
if (canRead)
8739
-
mode |= 292 | 73;
8740
-
if (canWrite)
8741
-
mode |= 146;
8742
-
return mode;
8743
-
},
8744
-
findObject: function(path, dontResolveLastLink) {
8745
-
var ret = FS.analyzePath(path, dontResolveLastLink);
8746
-
if (ret.exists) {
8747
-
return ret.object;
8748
-
} else {
8749
-
return null;
8750
-
}
8751
-
},
8752
-
analyzePath: function(path, dontResolveLastLink) {
8753
-
try {
8754
-
var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
8755
-
path = lookup.path;
8756
-
} catch (e) {
8757
-
}
8758
-
var ret = {
8759
-
isRoot: false,
8760
-
exists: false,
8761
-
error: 0,
8762
-
name: null,
8763
-
path: null,
8764
-
object: null,
8765
-
parentExists: false,
8766
-
parentPath: null,
8767
-
parentObject: null
8768
-
};
8769
-
try {
8770
-
var lookup = FS.lookupPath(path, { parent: true });
8771
-
ret.parentExists = true;
8772
-
ret.parentPath = lookup.path;
8773
-
ret.parentObject = lookup.node;
8774
-
ret.name = PATH.basename(path);
8775
-
lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
8776
-
ret.exists = true;
8777
-
ret.path = lookup.path;
8778
-
ret.object = lookup.node;
8779
-
ret.name = lookup.node.name;
8780
-
ret.isRoot = lookup.path === "/";
8781
-
} catch (e) {
8782
-
ret.error = e.errno;
8783
-
}
8784
-
return ret;
8785
-
},
8786
-
createPath: function(parent, path, canRead, canWrite) {
8787
-
parent = typeof parent === "string" ? parent : FS.getPath(parent);
8788
-
var parts = path.split("/").reverse();
8789
-
while (parts.length) {
8790
-
var part = parts.pop();
8791
-
if (!part)
8792
-
continue;
8793
-
var current = PATH.join2(parent, part);
8794
-
try {
8795
-
FS.mkdir(current);
8796
-
} catch (e) {
8797
-
}
8798
-
parent = current;
8799
-
}
8800
-
return current;
8801
-
},
8802
-
createFile: function(parent, name, properties, canRead, canWrite) {
8803
-
var path = PATH.join2(
8804
-
typeof parent === "string" ? parent : FS.getPath(parent),
8805
-
name
8806
-
);
8807
-
var mode = FS.getMode(canRead, canWrite);
8808
-
return FS.create(path, mode);
8809
-
},
8810
-
createDataFile: function(parent, name, data, canRead, canWrite, canOwn) {
8811
-
var path = name ? PATH.join2(
8812
-
typeof parent === "string" ? parent : FS.getPath(parent),
8813
-
name
8814
-
) : parent;
8815
-
var mode = FS.getMode(canRead, canWrite);
8816
-
var node = FS.create(path, mode);
8817
-
if (data) {
8818
-
if (typeof data === "string") {
8819
-
var arr = new Array(data.length);
8820
-
for (var i = 0, len = data.length; i < len; ++i)
8821
-
arr[i] = data.charCodeAt(i);
8822
-
data = arr;
8823
-
}
8824
-
FS.chmod(node, mode | 146);
8825
-
var stream = FS.open(node, 577);
8826
-
FS.write(stream, data, 0, data.length, 0, canOwn);
8827
-
FS.close(stream);
8828
-
FS.chmod(node, mode);
8829
-
}
8830
-
return node;
8831
-
},
8832
-
createDevice: function(parent, name, input, output) {
8833
-
var path = PATH.join2(
8834
-
typeof parent === "string" ? parent : FS.getPath(parent),
8835
-
name
8836
-
);
8837
-
var mode = FS.getMode(!!input, !!output);
8838
-
if (!FS.createDevice.major)
8839
-
FS.createDevice.major = 64;
8840
-
var dev = FS.makedev(FS.createDevice.major++, 0);
8841
-
FS.registerDevice(dev, {
8842
-
open: function(stream) {
8843
-
stream.seekable = false;
8844
-
},
8845
-
close: function(stream) {
8846
-
if (output && output.buffer && output.buffer.length) {
8847
-
output(10);
8848
-
}
8849
-
},
8850
-
read: function(stream, buffer2, offset, length, pos) {
8851
-
var bytesRead = 0;
8852
-
for (var i = 0; i < length; i++) {
8853
-
var result;
8854
-
try {
8855
-
result = input();
8856
-
} catch (e) {
8857
-
throw new FS.ErrnoError(29);
8858
-
}
8859
-
if (result === void 0 && bytesRead === 0) {
8860
-
throw new FS.ErrnoError(6);
8861
-
}
8862
-
if (result === null || result === void 0)
8863
-
break;
8864
-
bytesRead++;
8865
-
buffer2[offset + i] = result;
8866
-
}
8867
-
if (bytesRead) {
8868
-
stream.node.timestamp = Date.now();
8869
-
}
8870
-
return bytesRead;
8871
-
},
8872
-
write: function(stream, buffer2, offset, length, pos) {
8873
-
for (var i = 0; i < length; i++) {
8874
-
try {
8875
-
output(buffer2[offset + i]);
8876
-
} catch (e) {
8877
-
throw new FS.ErrnoError(29);
8878
-
}
8879
-
}
8880
-
if (length) {
8881
-
stream.node.timestamp = Date.now();
8882
-
}
8883
-
return i;
8884
-
}
8885
-
});
8886
-
return FS.mkdev(path, mode, dev);
8887
-
},
8888
-
forceLoadFile: function(obj) {
8889
-
if (obj.isDevice || obj.isFolder || obj.link || obj.contents)
8890
-
return true;
8891
-
if (read_) {
8892
-
try {
8893
-
obj.contents = intArrayFromString(read_(obj.url), true);
8894
-
obj.usedBytes = obj.contents.length;
8895
-
} catch (e) {
8896
-
throw new FS.ErrnoError(29);
8897
-
}
8898
-
} else {
8899
-
throw new Error("Cannot load without read() or XMLHttpRequest.");
8900
-
}
8901
-
},
8902
-
createLazyFile: function(parent, name, url, canRead, canWrite) {
8903
-
var properties; {
8904
-
var properties = { isDevice: false, url };
8905
-
}
8906
-
var node = FS.createFile(parent, name, properties, canRead, canWrite);
8907
-
if (properties.contents) {
8908
-
node.contents = properties.contents;
8909
-
} else if (properties.url) {
8910
-
node.contents = null;
8911
-
node.url = properties.url;
8912
-
}
8913
-
Object.defineProperties(node, {
8914
-
usedBytes: {
8915
-
get: function() {
8916
-
return this.contents.length;
8917
-
}
8918
-
}
8919
-
});
8920
-
var stream_ops = {};
8921
-
var keys = Object.keys(node.stream_ops);
8922
-
keys.forEach(function(key2) {
8923
-
var fn = node.stream_ops[key2];
8924
-
stream_ops[key2] = function forceLoadLazyFile() {
8925
-
FS.forceLoadFile(node);
8926
-
return fn.apply(null, arguments);
8927
-
};
8928
-
});
8929
-
stream_ops.read = function stream_ops_read(stream, buffer2, offset, length, position) {
8930
-
FS.forceLoadFile(node);
8931
-
var contents = stream.node.contents;
8932
-
if (position >= contents.length)
8933
-
return 0;
8934
-
var size = Math.min(contents.length - position, length);
8935
-
if (contents.slice) {
8936
-
for (var i = 0; i < size; i++) {
8937
-
buffer2[offset + i] = contents[position + i];
8938
-
}
8939
-
} else {
8940
-
for (var i = 0; i < size; i++) {
8941
-
buffer2[offset + i] = contents.get(position + i);
8942
-
}
8943
-
}
8944
-
return size;
8945
-
};
8946
-
node.stream_ops = stream_ops;
8947
-
return node;
8948
-
},
8949
-
createPreloadedFile: function(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) {
8950
-
Browser.init();
8951
-
var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;
8952
-
function processData(byteArray) {
8953
-
function finish(byteArray2) {
8954
-
if (preFinish)
8955
-
preFinish();
8956
-
if (!dontCreateFile) {
8957
-
FS.createDataFile(
8958
-
parent,
8959
-
name,
8960
-
byteArray2,
8961
-
canRead,
8962
-
canWrite,
8963
-
canOwn
8964
-
);
8965
-
}
8966
-
if (onload)
8967
-
onload();
8968
-
removeRunDependency();
8969
-
}
8970
-
var handled = false;
8971
-
Module["preloadPlugins"].forEach(function(plugin) {
8972
-
if (handled)
8973
-
return;
8974
-
if (plugin["canHandle"](fullname)) {
8975
-
plugin["handle"](byteArray, fullname, finish, function() {
8976
-
if (onerror)
8977
-
onerror();
8978
-
removeRunDependency();
8979
-
});
8980
-
handled = true;
8981
-
}
8982
-
});
8983
-
if (!handled)
8984
-
finish(byteArray);
8985
-
}
8986
-
addRunDependency();
8987
-
if (typeof url == "string") {
8988
-
Browser.asyncLoad(
8989
-
url,
8990
-
function(byteArray) {
8991
-
processData(byteArray);
8992
-
},
8993
-
onerror
8994
-
);
8995
-
} else {
8996
-
processData(url);
8997
-
}
8998
-
},
8999
-
indexedDB: function() {
9000
-
return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
9001
-
},
9002
-
DB_NAME: function() {
9003
-
return "EM_FS_" + window.location.pathname;
9004
-
},
9005
-
DB_VERSION: 20,
9006
-
DB_STORE_NAME: "FILE_DATA",
9007
-
saveFilesToDB: function(paths, onload, onerror) {
9008
-
onload = onload || function() {
9009
-
};
9010
-
onerror = onerror || function() {
9011
-
};
9012
-
var indexedDB = FS.indexedDB();
9013
-
try {
9014
-
var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
9015
-
} catch (e) {
9016
-
return onerror(e);
9017
-
}
9018
-
openRequest.onupgradeneeded = function openRequest_onupgradeneeded() {
9019
-
out("creating db");
9020
-
var db = openRequest.result;
9021
-
db.createObjectStore(FS.DB_STORE_NAME);
9022
-
};
9023
-
openRequest.onsuccess = function openRequest_onsuccess() {
9024
-
var db = openRequest.result;
9025
-
var transaction = db.transaction([FS.DB_STORE_NAME], "readwrite");
9026
-
var files = transaction.objectStore(FS.DB_STORE_NAME);
9027
-
var ok = 0, fail = 0, total = paths.length;
9028
-
function finish() {
9029
-
if (fail == 0)
9030
-
onload();
9031
-
else
9032
-
onerror();
9033
-
}
9034
-
paths.forEach(function(path) {
9035
-
var putRequest = files.put(
9036
-
FS.analyzePath(path).object.contents,
9037
-
path
9038
-
);
9039
-
putRequest.onsuccess = function putRequest_onsuccess() {
9040
-
ok++;
9041
-
if (ok + fail == total)
9042
-
finish();
9043
-
};
9044
-
putRequest.onerror = function putRequest_onerror() {
9045
-
fail++;
9046
-
if (ok + fail == total)
9047
-
finish();
9048
-
};
9049
-
});
9050
-
transaction.onerror = onerror;
9051
-
};
9052
-
openRequest.onerror = onerror;
9053
-
},
9054
-
loadFilesFromDB: function(paths, onload, onerror) {
9055
-
onload = onload || function() {
9056
-
};
9057
-
onerror = onerror || function() {
9058
-
};
9059
-
var indexedDB = FS.indexedDB();
9060
-
try {
9061
-
var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
9062
-
} catch (e) {
9063
-
return onerror(e);
9064
-
}
9065
-
openRequest.onupgradeneeded = onerror;
9066
-
openRequest.onsuccess = function openRequest_onsuccess() {
9067
-
var db = openRequest.result;
9068
-
try {
9069
-
var transaction = db.transaction([FS.DB_STORE_NAME], "readonly");
9070
-
} catch (e) {
9071
-
onerror(e);
9072
-
return;
9073
-
}
9074
-
var files = transaction.objectStore(FS.DB_STORE_NAME);
9075
-
var ok = 0, fail = 0, total = paths.length;
9076
-
function finish() {
9077
-
if (fail == 0)
9078
-
onload();
9079
-
else
9080
-
onerror();
9081
-
}
9082
-
paths.forEach(function(path) {
9083
-
var getRequest = files.get(path);
9084
-
getRequest.onsuccess = function getRequest_onsuccess() {
9085
-
if (FS.analyzePath(path).exists) {
9086
-
FS.unlink(path);
9087
-
}
9088
-
FS.createDataFile(
9089
-
PATH.dirname(path),
9090
-
PATH.basename(path),
9091
-
getRequest.result,
9092
-
true,
9093
-
true,
9094
-
true
9095
-
);
9096
-
ok++;
9097
-
if (ok + fail == total)
9098
-
finish();
9099
-
};
9100
-
getRequest.onerror = function getRequest_onerror() {
9101
-
fail++;
9102
-
if (ok + fail == total)
9103
-
finish();
9104
-
};
9105
-
});
9106
-
transaction.onerror = onerror;
9107
-
};
9108
-
openRequest.onerror = onerror;
9109
-
}
9110
-
};
9111
-
var SYSCALLS = {
9112
-
mappings: {},
9113
-
DEFAULT_POLLMASK: 5,
9114
-
umask: 511,
9115
-
calculateAt: function(dirfd, path, allowEmpty) {
9116
-
if (path[0] === "/") {
9117
-
return path;
9118
-
}
9119
-
var dir;
9120
-
if (dirfd === -100) {
9121
-
dir = FS.cwd();
9122
-
} else {
9123
-
var dirstream = FS.getStream(dirfd);
9124
-
if (!dirstream)
9125
-
throw new FS.ErrnoError(8);
9126
-
dir = dirstream.path;
9127
-
}
9128
-
if (path.length == 0) {
9129
-
if (!allowEmpty) {
9130
-
throw new FS.ErrnoError(44);
9131
-
}
9132
-
return dir;
9133
-
}
9134
-
return PATH.join2(dir, path);
9135
-
},
9136
-
doStat: function(func, path, buf) {
9137
-
try {
9138
-
var stat = func(path);
9139
-
} catch (e) {
9140
-
if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) {
9141
-
return -54;
9142
-
}
9143
-
throw e;
9144
-
}
9145
-
HEAP32[buf >> 2] = stat.dev;
9146
-
HEAP32[buf + 4 >> 2] = 0;
9147
-
HEAP32[buf + 8 >> 2] = stat.ino;
9148
-
HEAP32[buf + 12 >> 2] = stat.mode;
9149
-
HEAP32[buf + 16 >> 2] = stat.nlink;
9150
-
HEAP32[buf + 20 >> 2] = stat.uid;
9151
-
HEAP32[buf + 24 >> 2] = stat.gid;
9152
-
HEAP32[buf + 28 >> 2] = stat.rdev;
9153
-
HEAP32[buf + 32 >> 2] = 0;
9154
-
tempI64 = [
9155
-
stat.size >>> 0,
9156
-
(tempDouble = stat.size, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil(
9157
-
(tempDouble - +(~~tempDouble >>> 0)) / 4294967296
9158
-
) >>> 0 : 0)
9159
-
], HEAP32[buf + 40 >> 2] = tempI64[0], HEAP32[buf + 44 >> 2] = tempI64[1];
9160
-
HEAP32[buf + 48 >> 2] = 4096;
9161
-
HEAP32[buf + 52 >> 2] = stat.blocks;
9162
-
HEAP32[buf + 56 >> 2] = stat.atime.getTime() / 1e3 | 0;
9163
-
HEAP32[buf + 60 >> 2] = 0;
9164
-
HEAP32[buf + 64 >> 2] = stat.mtime.getTime() / 1e3 | 0;
9165
-
HEAP32[buf + 68 >> 2] = 0;
9166
-
HEAP32[buf + 72 >> 2] = stat.ctime.getTime() / 1e3 | 0;
9167
-
HEAP32[buf + 76 >> 2] = 0;
9168
-
tempI64 = [
9169
-
stat.ino >>> 0,
9170
-
(tempDouble = stat.ino, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil(
9171
-
(tempDouble - +(~~tempDouble >>> 0)) / 4294967296
9172
-
) >>> 0 : 0)
9173
-
], HEAP32[buf + 80 >> 2] = tempI64[0], HEAP32[buf + 84 >> 2] = tempI64[1];
9174
-
return 0;
9175
-
},
9176
-
doMsync: function(addr, stream, len, flags, offset) {
9177
-
var buffer2 = HEAPU8.slice(addr, addr + len);
9178
-
FS.msync(stream, buffer2, offset, len, flags);
9179
-
},
9180
-
doMkdir: function(path, mode) {
9181
-
path = PATH.normalize(path);
9182
-
if (path[path.length - 1] === "/")
9183
-
path = path.substr(0, path.length - 1);
9184
-
FS.mkdir(path, mode, 0);
9185
-
return 0;
9186
-
},
9187
-
doMknod: function(path, mode, dev) {
9188
-
switch (mode & 61440) {
9189
-
case 32768:
9190
-
case 8192:
9191
-
case 24576:
9192
-
case 4096:
9193
-
case 49152:
9194
-
break;
9195
-
default:
9196
-
return -28;
9197
-
}
9198
-
FS.mknod(path, mode, dev);
9199
-
return 0;
9200
-
},
9201
-
doReadlink: function(path, buf, bufsize) {
9202
-
if (bufsize <= 0)
9203
-
return -28;
9204
-
var ret = FS.readlink(path);
9205
-
var len = Math.min(bufsize, lengthBytesUTF8(ret));
9206
-
var endChar = HEAP8[buf + len];
9207
-
stringToUTF8(ret, buf, bufsize + 1);
9208
-
HEAP8[buf + len] = endChar;
9209
-
return len;
9210
-
},
9211
-
doAccess: function(path, amode) {
9212
-
if (amode & ~7) {
9213
-
return -28;
9214
-
}
9215
-
var node;
9216
-
var lookup = FS.lookupPath(path, { follow: true });
9217
-
node = lookup.node;
9218
-
if (!node) {
9219
-
return -44;
9220
-
}
9221
-
var perms = "";
9222
-
if (amode & 4)
9223
-
perms += "r";
9224
-
if (amode & 2)
9225
-
perms += "w";
9226
-
if (amode & 1)
9227
-
perms += "x";
9228
-
if (perms && FS.nodePermissions(node, perms)) {
9229
-
return -2;
9230
-
}
9231
-
return 0;
9232
-
},
9233
-
doDup: function(path, flags, suggestFD) {
9234
-
var suggest = FS.getStream(suggestFD);
9235
-
if (suggest)
9236
-
FS.close(suggest);
9237
-
return FS.open(path, flags, 0, suggestFD, suggestFD).fd;
9238
-
},
9239
-
doReadv: function(stream, iov, iovcnt, offset) {
9240
-
var ret = 0;
9241
-
for (var i = 0; i < iovcnt; i++) {
9242
-
var ptr = HEAP32[iov + i * 8 >> 2];
9243
-
var len = HEAP32[iov + (i * 8 + 4) >> 2];
9244
-
var curr = FS.read(stream, HEAP8, ptr, len, offset);
9245
-
if (curr < 0)
9246
-
return -1;
9247
-
ret += curr;
9248
-
if (curr < len)
9249
-
break;
9250
-
}
9251
-
return ret;
9252
-
},
9253
-
doWritev: function(stream, iov, iovcnt, offset) {
9254
-
var ret = 0;
9255
-
for (var i = 0; i < iovcnt; i++) {
9256
-
var ptr = HEAP32[iov + i * 8 >> 2];
9257
-
var len = HEAP32[iov + (i * 8 + 4) >> 2];
9258
-
var curr = FS.write(stream, HEAP8, ptr, len, offset);
9259
-
if (curr < 0)
9260
-
return -1;
9261
-
ret += curr;
9262
-
}
9263
-
return ret;
9264
-
},
9265
-
varargs: void 0,
9266
-
get: function() {
9267
-
SYSCALLS.varargs += 4;
9268
-
var ret = HEAP32[SYSCALLS.varargs - 4 >> 2];
9269
-
return ret;
9270
-
},
9271
-
getStr: function(ptr) {
9272
-
var ret = UTF8ToString(ptr);
9273
-
return ret;
9274
-
},
9275
-
getStreamFromFD: function(fd) {
9276
-
var stream = FS.getStream(fd);
9277
-
if (!stream)
9278
-
throw new FS.ErrnoError(8);
9279
-
return stream;
9280
-
},
9281
-
get64: function(low, high) {
9282
-
return low;
9283
-
}
9284
-
};
9285
-
function ___sys_chmod(path, mode) {
9286
-
try {
9287
-
path = SYSCALLS.getStr(path);
9288
-
FS.chmod(path, mode);
9289
-
return 0;
9290
-
} catch (e) {
9291
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9292
-
abort(e);
9293
-
return -e.errno;
9294
-
}
9295
-
}
9296
-
function setErrNo(value) {
9297
-
HEAP32[___errno_location() >> 2] = value;
9298
-
return value;
9299
-
}
9300
-
function ___sys_fcntl64(fd, cmd, varargs) {
9301
-
SYSCALLS.varargs = varargs;
9302
-
try {
9303
-
var stream = SYSCALLS.getStreamFromFD(fd);
9304
-
switch (cmd) {
9305
-
case 0: {
9306
-
var arg = SYSCALLS.get();
9307
-
if (arg < 0) {
9308
-
return -28;
9309
-
}
9310
-
var newStream;
9311
-
newStream = FS.open(stream.path, stream.flags, 0, arg);
9312
-
return newStream.fd;
9313
-
}
9314
-
case 1:
9315
-
case 2:
9316
-
return 0;
9317
-
case 3:
9318
-
return stream.flags;
9319
-
case 4: {
9320
-
var arg = SYSCALLS.get();
9321
-
stream.flags |= arg;
9322
-
return 0;
9323
-
}
9324
-
case 12: {
9325
-
var arg = SYSCALLS.get();
9326
-
var offset = 0;
9327
-
HEAP16[arg + offset >> 1] = 2;
9328
-
return 0;
9329
-
}
9330
-
case 13:
9331
-
case 14:
9332
-
return 0;
9333
-
case 16:
9334
-
case 8:
9335
-
return -28;
9336
-
case 9:
9337
-
setErrNo(28);
9338
-
return -1;
9339
-
default: {
9340
-
return -28;
9341
-
}
9342
-
}
9343
-
} catch (e) {
9344
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9345
-
abort(e);
9346
-
return -e.errno;
9347
-
}
9348
-
}
9349
-
function ___sys_fstat64(fd, buf) {
9350
-
try {
9351
-
var stream = SYSCALLS.getStreamFromFD(fd);
9352
-
return SYSCALLS.doStat(FS.stat, stream.path, buf);
9353
-
} catch (e) {
9354
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9355
-
abort(e);
9356
-
return -e.errno;
9357
-
}
9358
-
}
9359
-
function ___sys_ioctl(fd, op, varargs) {
9360
-
SYSCALLS.varargs = varargs;
9361
-
try {
9362
-
var stream = SYSCALLS.getStreamFromFD(fd);
9363
-
switch (op) {
9364
-
case 21509:
9365
-
case 21505: {
9366
-
if (!stream.tty)
9367
-
return -59;
9368
-
return 0;
9369
-
}
9370
-
case 21510:
9371
-
case 21511:
9372
-
case 21512:
9373
-
case 21506:
9374
-
case 21507:
9375
-
case 21508: {
9376
-
if (!stream.tty)
9377
-
return -59;
9378
-
return 0;
9379
-
}
9380
-
case 21519: {
9381
-
if (!stream.tty)
9382
-
return -59;
9383
-
var argp = SYSCALLS.get();
9384
-
HEAP32[argp >> 2] = 0;
9385
-
return 0;
9386
-
}
9387
-
case 21520: {
9388
-
if (!stream.tty)
9389
-
return -59;
9390
-
return -28;
9391
-
}
9392
-
case 21531: {
9393
-
var argp = SYSCALLS.get();
9394
-
return FS.ioctl(stream, op, argp);
9395
-
}
9396
-
case 21523: {
9397
-
if (!stream.tty)
9398
-
return -59;
9399
-
return 0;
9400
-
}
9401
-
case 21524: {
9402
-
if (!stream.tty)
9403
-
return -59;
9404
-
return 0;
9405
-
}
9406
-
default:
9407
-
abort("bad ioctl syscall " + op);
9408
-
}
9409
-
} catch (e) {
9410
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9411
-
abort(e);
9412
-
return -e.errno;
9413
-
}
9414
-
}
9415
-
function ___sys_open(path, flags, varargs) {
9416
-
SYSCALLS.varargs = varargs;
9417
-
try {
9418
-
var pathname = SYSCALLS.getStr(path);
9419
-
var mode = varargs ? SYSCALLS.get() : 0;
9420
-
var stream = FS.open(pathname, flags, mode);
9421
-
return stream.fd;
9422
-
} catch (e) {
9423
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9424
-
abort(e);
9425
-
return -e.errno;
9426
-
}
9427
-
}
9428
-
function ___sys_rename(old_path, new_path) {
9429
-
try {
9430
-
old_path = SYSCALLS.getStr(old_path);
9431
-
new_path = SYSCALLS.getStr(new_path);
9432
-
FS.rename(old_path, new_path);
9433
-
return 0;
9434
-
} catch (e) {
9435
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9436
-
abort(e);
9437
-
return -e.errno;
9438
-
}
9439
-
}
9440
-
function ___sys_rmdir(path) {
9441
-
try {
9442
-
path = SYSCALLS.getStr(path);
9443
-
FS.rmdir(path);
9444
-
return 0;
9445
-
} catch (e) {
9446
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9447
-
abort(e);
9448
-
return -e.errno;
9449
-
}
9450
-
}
9451
-
function ___sys_stat64(path, buf) {
9452
-
try {
9453
-
path = SYSCALLS.getStr(path);
9454
-
return SYSCALLS.doStat(FS.stat, path, buf);
9455
-
} catch (e) {
9456
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9457
-
abort(e);
9458
-
return -e.errno;
9459
-
}
9460
-
}
9461
-
function ___sys_unlink(path) {
9462
-
try {
9463
-
path = SYSCALLS.getStr(path);
9464
-
FS.unlink(path);
9465
-
return 0;
9466
-
} catch (e) {
9467
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9468
-
abort(e);
9469
-
return -e.errno;
9470
-
}
9471
-
}
9472
-
function _emscripten_memcpy_big(dest, src, num) {
9473
-
HEAPU8.copyWithin(dest, src, src + num);
9474
-
}
9475
-
function emscripten_realloc_buffer(size) {
9476
-
try {
9477
-
wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16);
9478
-
updateGlobalBufferAndViews(wasmMemory.buffer);
9479
-
return 1;
9480
-
} catch (e) {
9481
-
}
9482
-
}
9483
-
function _emscripten_resize_heap(requestedSize) {
9484
-
var oldSize = HEAPU8.length;
9485
-
requestedSize = requestedSize >>> 0;
9486
-
var maxHeapSize = 2147483648;
9487
-
if (requestedSize > maxHeapSize) {
9488
-
return false;
9489
-
}
9490
-
for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
9491
-
var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown);
9492
-
overGrownHeapSize = Math.min(
9493
-
overGrownHeapSize,
9494
-
requestedSize + 100663296
9495
-
);
9496
-
var newSize = Math.min(
9497
-
maxHeapSize,
9498
-
alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)
9499
-
);
9500
-
var replacement = emscripten_realloc_buffer(newSize);
9501
-
if (replacement) {
9502
-
return true;
9503
-
}
9504
-
}
9505
-
return false;
9506
-
}
9507
-
function _fd_close(fd) {
9508
-
try {
9509
-
var stream = SYSCALLS.getStreamFromFD(fd);
9510
-
FS.close(stream);
9511
-
return 0;
9512
-
} catch (e) {
9513
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9514
-
abort(e);
9515
-
return e.errno;
9516
-
}
9517
-
}
9518
-
function _fd_fdstat_get(fd, pbuf) {
9519
-
try {
9520
-
var stream = SYSCALLS.getStreamFromFD(fd);
9521
-
var type = stream.tty ? 2 : FS.isDir(stream.mode) ? 3 : FS.isLink(stream.mode) ? 7 : 4;
9522
-
HEAP8[pbuf >> 0] = type;
9523
-
return 0;
9524
-
} catch (e) {
9525
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9526
-
abort(e);
9527
-
return e.errno;
9528
-
}
9529
-
}
9530
-
function _fd_read(fd, iov, iovcnt, pnum) {
9531
-
try {
9532
-
var stream = SYSCALLS.getStreamFromFD(fd);
9533
-
var num = SYSCALLS.doReadv(stream, iov, iovcnt);
9534
-
HEAP32[pnum >> 2] = num;
9535
-
return 0;
9536
-
} catch (e) {
9537
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9538
-
abort(e);
9539
-
return e.errno;
9540
-
}
9541
-
}
9542
-
function _fd_seek(fd, offset_low, offset_high, whence, newOffset) {
9543
-
try {
9544
-
var stream = SYSCALLS.getStreamFromFD(fd);
9545
-
var HIGH_OFFSET = 4294967296;
9546
-
var offset = offset_high * HIGH_OFFSET + (offset_low >>> 0);
9547
-
var DOUBLE_LIMIT = 9007199254740992;
9548
-
if (offset <= -DOUBLE_LIMIT || offset >= DOUBLE_LIMIT) {
9549
-
return -61;
9550
-
}
9551
-
FS.llseek(stream, offset, whence);
9552
-
tempI64 = [
9553
-
stream.position >>> 0,
9554
-
(tempDouble = stream.position, +Math.abs(tempDouble) >= 1 ? tempDouble > 0 ? (Math.min(+Math.floor(tempDouble / 4294967296), 4294967295) | 0) >>> 0 : ~~+Math.ceil(
9555
-
(tempDouble - +(~~tempDouble >>> 0)) / 4294967296
9556
-
) >>> 0 : 0)
9557
-
], HEAP32[newOffset >> 2] = tempI64[0], HEAP32[newOffset + 4 >> 2] = tempI64[1];
9558
-
if (stream.getdents && offset === 0 && whence === 0)
9559
-
stream.getdents = null;
9560
-
return 0;
9561
-
} catch (e) {
9562
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9563
-
abort(e);
9564
-
return e.errno;
9565
-
}
9566
-
}
9567
-
function _fd_write(fd, iov, iovcnt, pnum) {
9568
-
try {
9569
-
var stream = SYSCALLS.getStreamFromFD(fd);
9570
-
var num = SYSCALLS.doWritev(stream, iov, iovcnt);
9571
-
HEAP32[pnum >> 2] = num;
9572
-
return 0;
9573
-
} catch (e) {
9574
-
if (typeof FS === "undefined" || !(e instanceof FS.ErrnoError))
9575
-
abort(e);
9576
-
return e.errno;
9577
-
}
9578
-
}
9579
-
function _setTempRet0(val) {
9580
-
}
9581
-
function _time(ptr) {
9582
-
var ret = Date.now() / 1e3 | 0;
9583
-
if (ptr) {
9584
-
HEAP32[ptr >> 2] = ret;
9585
-
}
9586
-
return ret;
9587
-
}
9588
-
function _tzset() {
9589
-
if (_tzset.called)
9590
-
return;
9591
-
_tzset.called = true;
9592
-
var currentYear = new Date().getFullYear();
9593
-
var winter = new Date(currentYear, 0, 1);
9594
-
var summer = new Date(currentYear, 6, 1);
9595
-
var winterOffset = winter.getTimezoneOffset();
9596
-
var summerOffset = summer.getTimezoneOffset();
9597
-
var stdTimezoneOffset = Math.max(winterOffset, summerOffset);
9598
-
HEAP32[__get_timezone() >> 2] = stdTimezoneOffset * 60;
9599
-
HEAP32[__get_daylight() >> 2] = Number(winterOffset != summerOffset);
9600
-
function extractZone(date) {
9601
-
var match = date.toTimeString().match(/\(([A-Za-z ]+)\)$/);
9602
-
return match ? match[1] : "GMT";
9603
-
}
9604
-
var winterName = extractZone(winter);
9605
-
var summerName = extractZone(summer);
9606
-
var winterNamePtr = allocateUTF8(winterName);
9607
-
var summerNamePtr = allocateUTF8(summerName);
9608
-
if (summerOffset < winterOffset) {
9609
-
HEAP32[__get_tzname() >> 2] = winterNamePtr;
9610
-
HEAP32[__get_tzname() + 4 >> 2] = summerNamePtr;
9611
-
} else {
9612
-
HEAP32[__get_tzname() >> 2] = summerNamePtr;
9613
-
HEAP32[__get_tzname() + 4 >> 2] = winterNamePtr;
9614
-
}
9615
-
}
9616
-
function _timegm(tmPtr) {
9617
-
_tzset();
9618
-
var time = Date.UTC(
9619
-
HEAP32[tmPtr + 20 >> 2] + 1900,
9620
-
HEAP32[tmPtr + 16 >> 2],
9621
-
HEAP32[tmPtr + 12 >> 2],
9622
-
HEAP32[tmPtr + 8 >> 2],
9623
-
HEAP32[tmPtr + 4 >> 2],
9624
-
HEAP32[tmPtr >> 2],
9625
-
0
9626
-
);
9627
-
var date = new Date(time);
9628
-
HEAP32[tmPtr + 24 >> 2] = date.getUTCDay();
9629
-
var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0);
9630
-
var yday = (date.getTime() - start) / (1e3 * 60 * 60 * 24) | 0;
9631
-
HEAP32[tmPtr + 28 >> 2] = yday;
9632
-
return date.getTime() / 1e3 | 0;
9633
-
}
9634
-
var FSNode = function(parent, name, mode, rdev) {
9635
-
if (!parent) {
9636
-
parent = this;
9637
-
}
9638
-
this.parent = parent;
9639
-
this.mount = parent.mount;
9640
-
this.mounted = null;
9641
-
this.id = FS.nextInode++;
9642
-
this.name = name;
9643
-
this.mode = mode;
9644
-
this.node_ops = {};
9645
-
this.stream_ops = {};
9646
-
this.rdev = rdev;
9647
-
};
9648
-
var readMode = 292 | 73;
9649
-
var writeMode = 146;
9650
-
Object.defineProperties(FSNode.prototype, {
9651
-
read: {
9652
-
get: function() {
9653
-
return (this.mode & readMode) === readMode;
9654
-
},
9655
-
set: function(val) {
9656
-
val ? this.mode |= readMode : this.mode &= ~readMode;
9657
-
}
9658
-
},
9659
-
write: {
9660
-
get: function() {
9661
-
return (this.mode & writeMode) === writeMode;
9662
-
},
9663
-
set: function(val) {
9664
-
val ? this.mode |= writeMode : this.mode &= ~writeMode;
9665
-
}
9666
-
},
9667
-
isFolder: {
9668
-
get: function() {
9669
-
return FS.isDir(this.mode);
9670
-
}
9671
-
},
9672
-
isDevice: {
9673
-
get: function() {
9674
-
return FS.isChrdev(this.mode);
9675
-
}
9676
-
}
9677
-
});
9678
-
FS.FSNode = FSNode;
9679
-
FS.staticInit();
9680
-
{
9681
-
var fs = frozenFs;
9682
-
var NODEJS_PATH = path__default.default;
9683
-
NODEFS.staticInit();
9684
-
}
9685
-
{
9686
-
var _wrapNodeError = function(func) {
9687
-
return function() {
9688
-
try {
9689
-
return func.apply(this, arguments);
9690
-
} catch (e) {
9691
-
if (!e.code)
9692
-
throw e;
9693
-
throw new FS.ErrnoError(ERRNO_CODES[e.code]);
9694
-
}
9695
-
};
9696
-
};
9697
-
var VFS = Object.assign({}, FS);
9698
-
for (var _key in NODERAWFS)
9699
-
FS[_key] = _wrapNodeError(NODERAWFS[_key]);
9700
-
}
9701
-
function intArrayFromString(stringy, dontAddNull, length) {
9702
-
var len = length > 0 ? length : lengthBytesUTF8(stringy) + 1;
9703
-
var u8array = new Array(len);
9704
-
var numBytesWritten = stringToUTF8Array(
9705
-
stringy,
9706
-
u8array,
9707
-
0,
9708
-
u8array.length
9709
-
);
9710
-
if (dontAddNull)
9711
-
u8array.length = numBytesWritten;
9712
-
return u8array;
9713
-
}
9714
-
function intArrayFromBase64(s) {
9715
-
{
9716
-
var buf;
9717
-
try {
9718
-
buf = Buffer.from(s, "base64");
9719
-
} catch (_) {
9720
-
buf = new Buffer(s, "base64");
9721
-
}
9722
-
return new Uint8Array(
9723
-
buf["buffer"],
9724
-
buf["byteOffset"],
9725
-
buf["byteLength"]
9726
-
);
9727
-
}
9728
-
}
9729
-
function tryParseAsDataURI(filename) {
9730
-
if (!isDataURI(filename)) {
9731
-
return;
9732
-
}
9733
-
return intArrayFromBase64(filename.slice(dataURIPrefix.length));
9734
-
}
9735
-
var asmLibraryArg = {
9736
-
s: ___gmtime_r,
9737
-
p: ___sys_chmod,
9738
-
e: ___sys_fcntl64,
9739
-
k: ___sys_fstat64,
9740
-
o: ___sys_ioctl,
9741
-
q: ___sys_open,
9742
-
i: ___sys_rename,
9743
-
r: ___sys_rmdir,
9744
-
c: ___sys_stat64,
9745
-
h: ___sys_unlink,
9746
-
l: _emscripten_memcpy_big,
9747
-
m: _emscripten_resize_heap,
9748
-
f: _fd_close,
9749
-
j: _fd_fdstat_get,
9750
-
g: _fd_read,
9751
-
n: _fd_seek,
9752
-
d: _fd_write,
9753
-
a: _setTempRet0,
9754
-
b: _time,
9755
-
t: _timegm
9756
-
};
9757
-
var asm = createWasm();
9758
-
Module["___wasm_call_ctors"] = asm["v"];
9759
-
Module["_zip_ext_count_symlinks"] = asm["w"];
9760
-
Module["_zip_file_get_external_attributes"] = asm["x"];
9761
-
Module["_zipstruct_stat"] = asm["y"];
9762
-
Module["_zipstruct_statS"] = asm["z"];
9763
-
Module["_zipstruct_stat_name"] = asm["A"];
9764
-
Module["_zipstruct_stat_index"] = asm["B"];
9765
-
Module["_zipstruct_stat_size"] = asm["C"];
9766
-
Module["_zipstruct_stat_mtime"] = asm["D"];
9767
-
Module["_zipstruct_stat_crc"] = asm["E"];
9768
-
Module["_zipstruct_error"] = asm["F"];
9769
-
Module["_zipstruct_errorS"] = asm["G"];
9770
-
Module["_zipstruct_error_code_zip"] = asm["H"];
9771
-
Module["_zipstruct_stat_comp_size"] = asm["I"];
9772
-
Module["_zipstruct_stat_comp_method"] = asm["J"];
9773
-
Module["_zip_close"] = asm["K"];
9774
-
Module["_zip_delete"] = asm["L"];
9775
-
Module["_zip_dir_add"] = asm["M"];
9776
-
Module["_zip_discard"] = asm["N"];
9777
-
Module["_zip_error_init_with_code"] = asm["O"];
9778
-
Module["_zip_get_error"] = asm["P"];
9779
-
Module["_zip_file_get_error"] = asm["Q"];
9780
-
Module["_zip_error_strerror"] = asm["R"];
9781
-
Module["_zip_fclose"] = asm["S"];
9782
-
Module["_zip_file_add"] = asm["T"];
9783
-
Module["_free"] = asm["U"];
9784
-
var _malloc = Module["_malloc"] = asm["V"];
9785
-
var ___errno_location = Module["___errno_location"] = asm["W"];
9786
-
Module["_zip_source_error"] = asm["X"];
9787
-
Module["_zip_source_seek"] = asm["Y"];
9788
-
Module["_zip_file_set_external_attributes"] = asm["Z"];
9789
-
Module["_zip_file_set_mtime"] = asm["_"];
9790
-
Module["_zip_fopen"] = asm["$"];
9791
-
Module["_zip_fopen_index"] = asm["aa"];
9792
-
Module["_zip_fread"] = asm["ba"];
9793
-
Module["_zip_get_name"] = asm["ca"];
9794
-
Module["_zip_get_num_entries"] = asm["da"];
9795
-
Module["_zip_source_read"] = asm["ea"];
9796
-
Module["_zip_name_locate"] = asm["fa"];
9797
-
Module["_zip_open"] = asm["ga"];
9798
-
Module["_zip_open_from_source"] = asm["ha"];
9799
-
Module["_zip_set_file_compression"] = asm["ia"];
9800
-
Module["_zip_source_buffer"] = asm["ja"];
9801
-
Module["_zip_source_buffer_create"] = asm["ka"];
9802
-
Module["_zip_source_close"] = asm["la"];
9803
-
Module["_zip_source_free"] = asm["ma"];
9804
-
Module["_zip_source_keep"] = asm["na"];
9805
-
Module["_zip_source_open"] = asm["oa"];
9806
-
Module["_zip_source_set_mtime"] = asm["qa"];
9807
-
Module["_zip_source_tell"] = asm["ra"];
9808
-
Module["_zip_stat"] = asm["sa"];
9809
-
Module["_zip_stat_index"] = asm["ta"];
9810
-
var __get_tzname = Module["__get_tzname"] = asm["ua"];
9811
-
var __get_daylight = Module["__get_daylight"] = asm["va"];
9812
-
var __get_timezone = Module["__get_timezone"] = asm["wa"];
9813
-
var stackSave = Module["stackSave"] = asm["xa"];
9814
-
var stackRestore = Module["stackRestore"] = asm["ya"];
9815
-
var stackAlloc = Module["stackAlloc"] = asm["za"];
9816
-
Module["cwrap"] = cwrap;
9817
-
Module["getValue"] = getValue;
9818
-
var calledRun;
9819
-
dependenciesFulfilled = function runCaller() {
9820
-
if (!calledRun)
9821
-
run();
9822
-
if (!calledRun)
9823
-
dependenciesFulfilled = runCaller;
9824
-
};
9825
-
function run(args) {
9826
-
if (runDependencies > 0) {
9827
-
return;
9828
-
}
9829
-
preRun();
9830
-
if (runDependencies > 0) {
9831
-
return;
9832
-
}
9833
-
function doRun() {
9834
-
if (calledRun)
9835
-
return;
9836
-
calledRun = true;
9837
-
Module["calledRun"] = true;
9838
-
if (ABORT)
9839
-
return;
9840
-
initRuntime();
9841
-
readyPromiseResolve(Module);
9842
-
if (Module["onRuntimeInitialized"])
9843
-
Module["onRuntimeInitialized"]();
9844
-
postRun();
9845
-
}
9846
-
if (Module["setStatus"]) {
9847
-
Module["setStatus"]("Running...");
9848
-
setTimeout(function() {
9849
-
setTimeout(function() {
9850
-
Module["setStatus"]("");
9851
-
}, 1);
9852
-
doRun();
9853
-
}, 1);
9854
-
} else {
9855
-
doRun();
9856
-
}
9857
-
}
9858
-
Module["run"] = run;
9859
-
if (Module["preInit"]) {
9860
-
if (typeof Module["preInit"] == "function")
9861
-
Module["preInit"] = [Module["preInit"]];
9862
-
while (Module["preInit"].length > 0) {
9863
-
Module["preInit"].pop()();
9864
-
}
9865
-
}
9866
-
run();
9867
-
return createModule2;
9868
-
};
9869
-
}();
9870
-
module.exports = createModule;
9871
-
}(libzipSync));
9872
-
9873
-
const createModule = libzipSync.exports;
9874
-
9875
-
const number64 = [
9876
-
`number`,
9877
-
`number`
9878
-
];
9879
-
var Errors = /* @__PURE__ */ ((Errors2) => {
9880
-
Errors2[Errors2["ZIP_ER_OK"] = 0] = "ZIP_ER_OK";
9881
-
Errors2[Errors2["ZIP_ER_MULTIDISK"] = 1] = "ZIP_ER_MULTIDISK";
9882
-
Errors2[Errors2["ZIP_ER_RENAME"] = 2] = "ZIP_ER_RENAME";
9883
-
Errors2[Errors2["ZIP_ER_CLOSE"] = 3] = "ZIP_ER_CLOSE";
9884
-
Errors2[Errors2["ZIP_ER_SEEK"] = 4] = "ZIP_ER_SEEK";
9885
-
Errors2[Errors2["ZIP_ER_READ"] = 5] = "ZIP_ER_READ";
9886
-
Errors2[Errors2["ZIP_ER_WRITE"] = 6] = "ZIP_ER_WRITE";
9887
-
Errors2[Errors2["ZIP_ER_CRC"] = 7] = "ZIP_ER_CRC";
9888
-
Errors2[Errors2["ZIP_ER_ZIPCLOSED"] = 8] = "ZIP_ER_ZIPCLOSED";
9889
-
Errors2[Errors2["ZIP_ER_NOENT"] = 9] = "ZIP_ER_NOENT";
9890
-
Errors2[Errors2["ZIP_ER_EXISTS"] = 10] = "ZIP_ER_EXISTS";
9891
-
Errors2[Errors2["ZIP_ER_OPEN"] = 11] = "ZIP_ER_OPEN";
9892
-
Errors2[Errors2["ZIP_ER_TMPOPEN"] = 12] = "ZIP_ER_TMPOPEN";
9893
-
Errors2[Errors2["ZIP_ER_ZLIB"] = 13] = "ZIP_ER_ZLIB";
9894
-
Errors2[Errors2["ZIP_ER_MEMORY"] = 14] = "ZIP_ER_MEMORY";
9895
-
Errors2[Errors2["ZIP_ER_CHANGED"] = 15] = "ZIP_ER_CHANGED";
9896
-
Errors2[Errors2["ZIP_ER_COMPNOTSUPP"] = 16] = "ZIP_ER_COMPNOTSUPP";
9897
-
Errors2[Errors2["ZIP_ER_EOF"] = 17] = "ZIP_ER_EOF";
9898
-
Errors2[Errors2["ZIP_ER_INVAL"] = 18] = "ZIP_ER_INVAL";
9899
-
Errors2[Errors2["ZIP_ER_NOZIP"] = 19] = "ZIP_ER_NOZIP";
9900
-
Errors2[Errors2["ZIP_ER_INTERNAL"] = 20] = "ZIP_ER_INTERNAL";
9901
-
Errors2[Errors2["ZIP_ER_INCONS"] = 21] = "ZIP_ER_INCONS";
9902
-
Errors2[Errors2["ZIP_ER_REMOVE"] = 22] = "ZIP_ER_REMOVE";
9903
-
Errors2[Errors2["ZIP_ER_DELETED"] = 23] = "ZIP_ER_DELETED";
9904
-
Errors2[Errors2["ZIP_ER_ENCRNOTSUPP"] = 24] = "ZIP_ER_ENCRNOTSUPP";
9905
-
Errors2[Errors2["ZIP_ER_RDONLY"] = 25] = "ZIP_ER_RDONLY";
9906
-
Errors2[Errors2["ZIP_ER_NOPASSWD"] = 26] = "ZIP_ER_NOPASSWD";
9907
-
Errors2[Errors2["ZIP_ER_WRONGPASSWD"] = 27] = "ZIP_ER_WRONGPASSWD";
9908
-
Errors2[Errors2["ZIP_ER_OPNOTSUPP"] = 28] = "ZIP_ER_OPNOTSUPP";
9909
-
Errors2[Errors2["ZIP_ER_INUSE"] = 29] = "ZIP_ER_INUSE";
9910
-
Errors2[Errors2["ZIP_ER_TELL"] = 30] = "ZIP_ER_TELL";
9911
-
Errors2[Errors2["ZIP_ER_COMPRESSED_DATA"] = 31] = "ZIP_ER_COMPRESSED_DATA";
9912
-
return Errors2;
9913
-
})(Errors || {});
9914
-
const makeInterface = (libzip) => ({
9915
-
get HEAP8() {
9916
-
return libzip.HEAP8;
9917
-
},
9918
-
get HEAPU8() {
9919
-
return libzip.HEAPU8;
9920
-
},
9921
-
errors: Errors,
9922
-
SEEK_SET: 0,
9923
-
SEEK_CUR: 1,
9924
-
SEEK_END: 2,
9925
-
ZIP_CHECKCONS: 4,
9926
-
ZIP_CREATE: 1,
9927
-
ZIP_EXCL: 2,
9928
-
ZIP_TRUNCATE: 8,
9929
-
ZIP_RDONLY: 16,
9930
-
ZIP_FL_OVERWRITE: 8192,
9931
-
ZIP_FL_COMPRESSED: 4,
9932
-
ZIP_OPSYS_DOS: 0,
9933
-
ZIP_OPSYS_AMIGA: 1,
9934
-
ZIP_OPSYS_OPENVMS: 2,
9935
-
ZIP_OPSYS_UNIX: 3,
9936
-
ZIP_OPSYS_VM_CMS: 4,
9937
-
ZIP_OPSYS_ATARI_ST: 5,
9938
-
ZIP_OPSYS_OS_2: 6,
9939
-
ZIP_OPSYS_MACINTOSH: 7,
9940
-
ZIP_OPSYS_Z_SYSTEM: 8,
9941
-
ZIP_OPSYS_CPM: 9,
9942
-
ZIP_OPSYS_WINDOWS_NTFS: 10,
9943
-
ZIP_OPSYS_MVS: 11,
9944
-
ZIP_OPSYS_VSE: 12,
9945
-
ZIP_OPSYS_ACORN_RISC: 13,
9946
-
ZIP_OPSYS_VFAT: 14,
9947
-
ZIP_OPSYS_ALTERNATE_MVS: 15,
9948
-
ZIP_OPSYS_BEOS: 16,
9949
-
ZIP_OPSYS_TANDEM: 17,
9950
-
ZIP_OPSYS_OS_400: 18,
9951
-
ZIP_OPSYS_OS_X: 19,
9952
-
ZIP_CM_DEFAULT: -1,
9953
-
ZIP_CM_STORE: 0,
9954
-
ZIP_CM_DEFLATE: 8,
9955
-
uint08S: libzip._malloc(1),
9956
-
uint16S: libzip._malloc(2),
9957
-
uint32S: libzip._malloc(4),
9958
-
uint64S: libzip._malloc(8),
9959
-
malloc: libzip._malloc,
9960
-
free: libzip._free,
9961
-
getValue: libzip.getValue,
9962
-
open: libzip.cwrap(`zip_open`, `number`, [`string`, `number`, `number`]),
9963
-
openFromSource: libzip.cwrap(`zip_open_from_source`, `number`, [`number`, `number`, `number`]),
9964
-
close: libzip.cwrap(`zip_close`, `number`, [`number`]),
9965
-
discard: libzip.cwrap(`zip_discard`, null, [`number`]),
9966
-
getError: libzip.cwrap(`zip_get_error`, `number`, [`number`]),
9967
-
getName: libzip.cwrap(`zip_get_name`, `string`, [`number`, `number`, `number`]),
9968
-
getNumEntries: libzip.cwrap(`zip_get_num_entries`, `number`, [`number`, `number`]),
9969
-
delete: libzip.cwrap(`zip_delete`, `number`, [`number`, `number`]),
9970
-
stat: libzip.cwrap(`zip_stat`, `number`, [`number`, `string`, `number`, `number`]),
9971
-
statIndex: libzip.cwrap(`zip_stat_index`, `number`, [`number`, ...number64, `number`, `number`]),
9972
-
fopen: libzip.cwrap(`zip_fopen`, `number`, [`number`, `string`, `number`]),
9973
-
fopenIndex: libzip.cwrap(`zip_fopen_index`, `number`, [`number`, ...number64, `number`]),
9974
-
fread: libzip.cwrap(`zip_fread`, `number`, [`number`, `number`, `number`, `number`]),
9975
-
fclose: libzip.cwrap(`zip_fclose`, `number`, [`number`]),
9976
-
dir: {
9977
-
add: libzip.cwrap(`zip_dir_add`, `number`, [`number`, `string`])
9978
-
},
9979
-
file: {
9980
-
add: libzip.cwrap(`zip_file_add`, `number`, [`number`, `string`, `number`, `number`]),
9981
-
getError: libzip.cwrap(`zip_file_get_error`, `number`, [`number`]),
9982
-
getExternalAttributes: libzip.cwrap(`zip_file_get_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]),
9983
-
setExternalAttributes: libzip.cwrap(`zip_file_set_external_attributes`, `number`, [`number`, ...number64, `number`, `number`, `number`]),
9984
-
setMtime: libzip.cwrap(`zip_file_set_mtime`, `number`, [`number`, ...number64, `number`, `number`]),
9985
-
setCompression: libzip.cwrap(`zip_set_file_compression`, `number`, [`number`, ...number64, `number`, `number`])
9986
-
},
9987
-
ext: {
9988
-
countSymlinks: libzip.cwrap(`zip_ext_count_symlinks`, `number`, [`number`])
9989
-
},
9990
-
error: {
9991
-
initWithCode: libzip.cwrap(`zip_error_init_with_code`, null, [`number`, `number`]),
9992
-
strerror: libzip.cwrap(`zip_error_strerror`, `string`, [`number`])
9993
-
},
9994
-
name: {
9995
-
locate: libzip.cwrap(`zip_name_locate`, `number`, [`number`, `string`, `number`])
9996
-
},
9997
-
source: {
9998
-
fromUnattachedBuffer: libzip.cwrap(`zip_source_buffer_create`, `number`, [`number`, ...number64, `number`, `number`]),
9999
-
fromBuffer: libzip.cwrap(`zip_source_buffer`, `number`, [`number`, `number`, ...number64, `number`]),
10000
-
free: libzip.cwrap(`zip_source_free`, null, [`number`]),
10001
-
keep: libzip.cwrap(`zip_source_keep`, null, [`number`]),
10002
-
open: libzip.cwrap(`zip_source_open`, `number`, [`number`]),
10003
-
close: libzip.cwrap(`zip_source_close`, `number`, [`number`]),
10004
-
seek: libzip.cwrap(`zip_source_seek`, `number`, [`number`, ...number64, `number`]),
10005
-
tell: libzip.cwrap(`zip_source_tell`, `number`, [`number`]),
10006
-
read: libzip.cwrap(`zip_source_read`, `number`, [`number`, `number`, `number`]),
10007
-
error: libzip.cwrap(`zip_source_error`, `number`, [`number`]),
10008
-
setMtime: libzip.cwrap(`zip_source_set_mtime`, `number`, [`number`, `number`])
10009
-
},
10010
-
struct: {
10011
-
stat: libzip.cwrap(`zipstruct_stat`, `number`, []),
10012
-
statS: libzip.cwrap(`zipstruct_statS`, `number`, []),
10013
-
statName: libzip.cwrap(`zipstruct_stat_name`, `string`, [`number`]),
10014
-
statIndex: libzip.cwrap(`zipstruct_stat_index`, `number`, [`number`]),
10015
-
statSize: libzip.cwrap(`zipstruct_stat_size`, `number`, [`number`]),
10016
-
statCompSize: libzip.cwrap(`zipstruct_stat_comp_size`, `number`, [`number`]),
10017
-
statCompMethod: libzip.cwrap(`zipstruct_stat_comp_method`, `number`, [`number`]),
10018
-
statMtime: libzip.cwrap(`zipstruct_stat_mtime`, `number`, [`number`]),
10019
-
statCrc: libzip.cwrap(`zipstruct_stat_crc`, `number`, [`number`]),
10020
-
error: libzip.cwrap(`zipstruct_error`, `number`, []),
10021
-
errorS: libzip.cwrap(`zipstruct_errorS`, `number`, []),
10022
-
errorCodeZip: libzip.cwrap(`zipstruct_error_code_zip`, `number`, [`number`])
10023
-
}
10024
-
});
10025
-
10026
-
let mod = null;
10027
-
function getLibzipSync() {
10028
-
if (mod === null)
10029
-
mod = makeInterface(createModule());
10030
-
return mod;
10031
-
}
10032
-
10033
-
var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {
10034
-
ErrorCode2["API_ERROR"] = `API_ERROR`;
10035
-
ErrorCode2["BUILTIN_NODE_RESOLUTION_FAILED"] = `BUILTIN_NODE_RESOLUTION_FAILED`;
10036
-
ErrorCode2["EXPORTS_RESOLUTION_FAILED"] = `EXPORTS_RESOLUTION_FAILED`;
10037
-
ErrorCode2["MISSING_DEPENDENCY"] = `MISSING_DEPENDENCY`;
10038
-
ErrorCode2["MISSING_PEER_DEPENDENCY"] = `MISSING_PEER_DEPENDENCY`;
10039
-
ErrorCode2["QUALIFIED_PATH_RESOLUTION_FAILED"] = `QUALIFIED_PATH_RESOLUTION_FAILED`;
10040
-
ErrorCode2["INTERNAL"] = `INTERNAL`;
10041
-
ErrorCode2["UNDECLARED_DEPENDENCY"] = `UNDECLARED_DEPENDENCY`;
10042
-
ErrorCode2["UNSUPPORTED"] = `UNSUPPORTED`;
10043
-
return ErrorCode2;
10044
-
})(ErrorCode || {});
10045
-
const MODULE_NOT_FOUND_ERRORS = /* @__PURE__ */ new Set([
10046
-
"BUILTIN_NODE_RESOLUTION_FAILED" /* BUILTIN_NODE_RESOLUTION_FAILED */,
10047
-
"MISSING_DEPENDENCY" /* MISSING_DEPENDENCY */,
10048
-
"MISSING_PEER_DEPENDENCY" /* MISSING_PEER_DEPENDENCY */,
10049
-
"QUALIFIED_PATH_RESOLUTION_FAILED" /* QUALIFIED_PATH_RESOLUTION_FAILED */,
10050
-
"UNDECLARED_DEPENDENCY" /* UNDECLARED_DEPENDENCY */
10051
-
]);
10052
-
function makeError(pnpCode, message, data = {}, code) {
10053
-
code != null ? code : code = MODULE_NOT_FOUND_ERRORS.has(pnpCode) ? `MODULE_NOT_FOUND` : pnpCode;
10054
-
const propertySpec = {
10055
-
configurable: true,
10056
-
writable: true,
10057
-
enumerable: false
10058
-
};
10059
-
return Object.defineProperties(new Error(message), {
10060
-
code: {
10061
-
...propertySpec,
10062
-
value: code
10063
-
},
10064
-
pnpCode: {
10065
-
...propertySpec,
10066
-
value: pnpCode
10067
-
},
10068
-
data: {
10069
-
...propertySpec,
10070
-
value: data
10071
-
}
10072
-
});
10073
-
}
10074
-
function getIssuerModule(parent) {
10075
-
let issuer = parent;
10076
-
while (issuer && (issuer.id === `[eval]` || issuer.id === `<repl>` || !issuer.filename))
10077
-
issuer = issuer.parent;
10078
-
return issuer || null;
10079
-
}
10080
-
function getPathForDisplay(p) {
10081
-
return npath.normalize(npath.fromPortablePath(p));
10082
-
}
10083
-
10084
-
const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10));
10085
-
const WATCH_MODE_MESSAGE_USES_ARRAYS = major > 19 || major === 19 && minor >= 2 || major === 18 && minor >= 13;
10086
-
10087
-
const builtinModules = new Set(require$$0.Module.builtinModules || Object.keys(process.binding(`natives`)));
10088
-
const isBuiltinModule = (request) => request.startsWith(`node:`) || builtinModules.has(request);
10089
-
function readPackageScope(checkPath) {
10090
-
const rootSeparatorIndex = checkPath.indexOf(npath.sep);
10091
-
let separatorIndex;
10092
-
do {
10093
-
separatorIndex = checkPath.lastIndexOf(npath.sep);
10094
-
checkPath = checkPath.slice(0, separatorIndex);
10095
-
if (checkPath.endsWith(`${npath.sep}node_modules`))
10096
-
return false;
10097
-
const pjson = readPackage(checkPath + npath.sep);
10098
-
if (pjson) {
10099
-
return {
10100
-
data: pjson,
10101
-
path: checkPath
10102
-
};
10103
-
}
10104
-
} while (separatorIndex > rootSeparatorIndex);
10105
-
return false;
10106
-
}
10107
-
function readPackage(requestPath) {
10108
-
const jsonPath = npath.resolve(requestPath, `package.json`);
10109
-
if (!fs__default.default.existsSync(jsonPath))
10110
-
return null;
10111
-
return JSON.parse(fs__default.default.readFileSync(jsonPath, `utf8`));
10112
-
}
10113
-
function ERR_REQUIRE_ESM(filename, parentPath = null) {
10114
-
const basename = parentPath && path__default.default.basename(filename) === path__default.default.basename(parentPath) ? filename : path__default.default.basename(filename);
10115
-
const msg = `require() of ES Module ${filename}${parentPath ? ` from ${parentPath}` : ``} not supported.
10116
-
Instead change the require of ${basename} in ${parentPath} to a dynamic import() which is available in all CommonJS modules.`;
10117
-
const err = new Error(msg);
10118
-
err.code = `ERR_REQUIRE_ESM`;
10119
-
return err;
10120
-
}
10121
-
function reportRequiredFilesToWatchMode(files) {
10122
-
if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) {
10123
-
files = files.map((filename) => npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename))));
10124
-
if (WATCH_MODE_MESSAGE_USES_ARRAYS) {
10125
-
process.send({ "watch:require": files });
10126
-
} else {
10127
-
for (const filename of files) {
10128
-
process.send({ "watch:require": filename });
10129
-
}
10130
-
}
10131
-
}
10132
-
}
10133
-
10134
-
function applyPatch(pnpapi, opts) {
10135
-
const defaultCache = {};
10136
-
let enableNativeHooks = true;
10137
-
process.versions.pnp = String(pnpapi.VERSIONS.std);
10138
-
const moduleExports = require$$0__default.default;
10139
-
moduleExports.findPnpApi = (lookupSource) => {
10140
-
const lookupPath = lookupSource instanceof url.URL ? url.fileURLToPath(lookupSource) : lookupSource;
10141
-
const apiPath = opts.manager.findApiPathFor(lookupPath);
10142
-
if (apiPath === null)
10143
-
return null;
10144
-
const apiEntry = opts.manager.getApiEntry(apiPath, true);
10145
-
return apiEntry.instance.findPackageLocator(lookupPath) ? apiEntry.instance : null;
10146
-
};
10147
-
function getRequireStack(parent) {
10148
-
const requireStack = [];
10149
-
for (let cursor = parent; cursor; cursor = cursor.parent)
10150
-
requireStack.push(cursor.filename || cursor.id);
10151
-
return requireStack;
10152
-
}
10153
-
const originalModuleLoad = require$$0.Module._load;
10154
-
require$$0.Module._load = function(request, parent, isMain) {
10155
-
if (!enableNativeHooks)
10156
-
return originalModuleLoad.call(require$$0.Module, request, parent, isMain);
10157
-
if (isBuiltinModule(request)) {
10158
-
try {
10159
-
enableNativeHooks = false;
10160
-
return originalModuleLoad.call(require$$0.Module, request, parent, isMain);
10161
-
} finally {
10162
-
enableNativeHooks = true;
10163
-
}
10164
-
}
10165
-
const parentApiPath = opts.manager.getApiPathFromParent(parent);
10166
-
const parentApi = parentApiPath !== null ? opts.manager.getApiEntry(parentApiPath, true).instance : null;
10167
-
if (parentApi === null)
10168
-
return originalModuleLoad(request, parent, isMain);
10169
-
if (request === `pnpapi`)
10170
-
return parentApi;
10171
-
const modulePath = require$$0.Module._resolveFilename(request, parent, isMain);
10172
-
const isOwnedByRuntime = parentApi !== null ? parentApi.findPackageLocator(modulePath) !== null : false;
10173
-
const moduleApiPath = isOwnedByRuntime ? parentApiPath : opts.manager.findApiPathFor(npath.dirname(modulePath));
10174
-
const entry = moduleApiPath !== null ? opts.manager.getApiEntry(moduleApiPath) : { instance: null, cache: defaultCache };
10175
-
const cacheEntry = entry.cache[modulePath];
10176
-
if (cacheEntry) {
10177
-
if (cacheEntry.loaded === false && cacheEntry.isLoading !== true) {
10178
-
try {
10179
-
cacheEntry.isLoading = true;
10180
-
if (isMain) {
10181
-
process.mainModule = cacheEntry;
10182
-
cacheEntry.id = `.`;
10183
-
}
10184
-
cacheEntry.load(modulePath);
10185
-
} finally {
10186
-
cacheEntry.isLoading = false;
10187
-
}
10188
-
}
10189
-
return cacheEntry.exports;
10190
-
}
10191
-
const module = new require$$0.Module(modulePath, parent != null ? parent : void 0);
10192
-
module.pnpApiPath = moduleApiPath;
10193
-
reportRequiredFilesToWatchMode([modulePath]);
10194
-
entry.cache[modulePath] = module;
10195
-
if (isMain) {
10196
-
process.mainModule = module;
10197
-
module.id = `.`;
10198
-
}
10199
-
let hasThrown = true;
10200
-
try {
10201
-
module.isLoading = true;
10202
-
module.load(modulePath);
10203
-
hasThrown = false;
10204
-
} finally {
10205
-
module.isLoading = false;
10206
-
if (hasThrown) {
10207
-
delete require$$0.Module._cache[modulePath];
10208
-
}
10209
-
}
10210
-
return module.exports;
10211
-
};
10212
-
function getIssuerSpecsFromPaths(paths) {
10213
-
return paths.map((path) => ({
10214
-
apiPath: opts.manager.findApiPathFor(path),
10215
-
path,
10216
-
module: null
10217
-
}));
10218
-
}
10219
-
function getIssuerSpecsFromModule(module) {
10220
-
var _a;
10221
-
if (module && module.id !== `<repl>` && module.id !== `internal/preload` && !module.parent && !module.filename && module.paths.length > 0) {
10222
-
return [{
10223
-
apiPath: opts.manager.findApiPathFor(module.paths[0]),
10224
-
path: module.paths[0],
10225
-
module
10226
-
}];
10227
-
}
10228
-
const issuer = getIssuerModule(module);
10229
-
if (issuer !== null) {
10230
-
const path = npath.dirname(issuer.filename);
10231
-
const apiPath = opts.manager.getApiPathFromParent(issuer);
10232
-
return [{ apiPath, path, module }];
10233
-
} else {
10234
-
const path = process.cwd();
10235
-
const apiPath = (_a = opts.manager.findApiPathFor(npath.join(path, `[file]`))) != null ? _a : opts.manager.getApiPathFromParent(null);
10236
-
return [{ apiPath, path, module }];
10237
-
}
10238
-
}
10239
-
function makeFakeParent(path) {
10240
-
const fakeParent = new require$$0.Module(``);
10241
-
const fakeFilePath = npath.join(path, `[file]`);
10242
-
fakeParent.paths = require$$0.Module._nodeModulePaths(fakeFilePath);
10243
-
return fakeParent;
10244
-
}
10245
-
const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:@[^/]+\/)?[^/]+)\/*(.*|)$/;
10246
-
const originalModuleResolveFilename = require$$0.Module._resolveFilename;
10247
-
require$$0.Module._resolveFilename = function(request, parent, isMain, options) {
10248
-
if (isBuiltinModule(request))
10249
-
return request;
10250
-
if (!enableNativeHooks)
10251
-
return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, options);
10252
-
if (options && options.plugnplay === false) {
10253
-
const { plugnplay, ...rest } = options;
10254
-
const forwardedOptions = Object.keys(rest).length > 0 ? rest : void 0;
10255
-
try {
10256
-
enableNativeHooks = false;
10257
-
return originalModuleResolveFilename.call(require$$0.Module, request, parent, isMain, forwardedOptions);
10258
-
} finally {
10259
-
enableNativeHooks = true;
10260
-
}
10261
-
}
10262
-
if (options) {
10263
-
const optionNames = new Set(Object.keys(options));
10264
-
optionNames.delete(`paths`);
10265
-
optionNames.delete(`plugnplay`);
10266
-
if (optionNames.size > 0) {
10267
-
throw makeError(
10268
-
ErrorCode.UNSUPPORTED,
10269
-
`Some options passed to require() aren't supported by PnP yet (${Array.from(optionNames).join(`, `)})`
10270
-
);
10271
-
}
10272
-
}
10273
-
const issuerSpecs = options && options.paths ? getIssuerSpecsFromPaths(options.paths) : getIssuerSpecsFromModule(parent);
10274
-
if (request.match(pathRegExp) === null) {
10275
-
const parentDirectory = (parent == null ? void 0 : parent.filename) != null ? npath.dirname(parent.filename) : null;
10276
-
const absoluteRequest = npath.isAbsolute(request) ? request : parentDirectory !== null ? npath.resolve(parentDirectory, request) : null;
10277
-
if (absoluteRequest !== null) {
10278
-
const apiPath = parentDirectory === npath.dirname(absoluteRequest) && (parent == null ? void 0 : parent.pnpApiPath) ? parent.pnpApiPath : opts.manager.findApiPathFor(absoluteRequest);
10279
-
if (apiPath !== null) {
10280
-
issuerSpecs.unshift({
10281
-
apiPath,
10282
-
path: parentDirectory,
10283
-
module: null
10284
-
});
10285
-
}
10286
-
}
10287
-
}
10288
-
let firstError;
10289
-
for (const { apiPath, path, module } of issuerSpecs) {
10290
-
let resolution;
10291
-
const issuerApi = apiPath !== null ? opts.manager.getApiEntry(apiPath, true).instance : null;
10292
-
try {
10293
-
if (issuerApi !== null) {
10294
-
resolution = issuerApi.resolveRequest(request, path !== null ? `${path}/` : null);
10295
-
} else {
10296
-
if (path === null)
10297
-
throw new Error(`Assertion failed: Expected the path to be set`);
10298
-
resolution = originalModuleResolveFilename.call(require$$0.Module, request, module || makeFakeParent(path), isMain);
10299
-
}
10300
-
} catch (error) {
10301
-
firstError = firstError || error;
10302
-
continue;
10303
-
}
10304
-
if (resolution !== null) {
10305
-
return resolution;
10306
-
}
10307
-
}
10308
-
const requireStack = getRequireStack(parent);
10309
-
Object.defineProperty(firstError, `requireStack`, {
10310
-
configurable: true,
10311
-
writable: true,
10312
-
enumerable: false,
10313
-
value: requireStack
10314
-
});
10315
-
if (requireStack.length > 0)
10316
-
firstError.message += `
10317
-
Require stack:
10318
-
- ${requireStack.join(`
10319
-
- `)}`;
10320
-
if (typeof firstError.pnpCode === `string`)
10321
-
Error.captureStackTrace(firstError);
10322
-
throw firstError;
10323
-
};
10324
-
const originalFindPath = require$$0.Module._findPath;
10325
-
require$$0.Module._findPath = function(request, paths, isMain) {
10326
-
if (request === `pnpapi`)
10327
-
return false;
10328
-
if (!enableNativeHooks)
10329
-
return originalFindPath.call(require$$0.Module, request, paths, isMain);
10330
-
const isAbsolute = npath.isAbsolute(request);
10331
-
if (isAbsolute)
10332
-
paths = [``];
10333
-
else if (!paths || paths.length === 0)
10334
-
return false;
10335
-
for (const path of paths) {
10336
-
let resolution;
10337
-
try {
10338
-
const pnpApiPath = opts.manager.findApiPathFor(isAbsolute ? request : path);
10339
-
if (pnpApiPath !== null) {
10340
-
const api = opts.manager.getApiEntry(pnpApiPath, true).instance;
10341
-
resolution = api.resolveRequest(request, path) || false;
10342
-
} else {
10343
-
resolution = originalFindPath.call(require$$0.Module, request, [path], isMain);
10344
-
}
10345
-
} catch (error) {
10346
-
continue;
10347
-
}
10348
-
if (resolution) {
10349
-
return resolution;
10350
-
}
10351
-
}
10352
-
return false;
10353
-
};
10354
-
const originalExtensionJSFunction = require$$0.Module._extensions[`.js`];
10355
-
require$$0.Module._extensions[`.js`] = function(module, filename) {
10356
-
var _a, _b;
10357
-
if (filename.endsWith(`.js`)) {
10358
-
const pkg = readPackageScope(filename);
10359
-
if (pkg && ((_a = pkg.data) == null ? void 0 : _a.type) === `module`) {
10360
-
const err = ERR_REQUIRE_ESM(filename, (_b = module.parent) == null ? void 0 : _b.filename);
10361
-
Error.captureStackTrace(err);
10362
-
throw err;
10363
-
}
10364
-
}
10365
-
originalExtensionJSFunction.call(this, module, filename);
10366
-
};
10367
-
const originalDlopen = process.dlopen;
10368
-
process.dlopen = function(...args) {
10369
-
const [module, filename, ...rest] = args;
10370
-
return originalDlopen.call(
10371
-
this,
10372
-
module,
10373
-
npath.fromPortablePath(VirtualFS.resolveVirtual(npath.toPortablePath(filename))),
10374
-
...rest
10375
-
);
10376
-
};
10377
-
const originalEmit = process.emit;
10378
-
process.emit = function(name, data, ...args) {
10379
-
if (name === `warning` && typeof data === `object` && data.name === `ExperimentalWarning` && (data.message.includes(`--experimental-loader`) || data.message.includes(`Custom ESM Loaders is an experimental feature`)))
10380
-
return false;
10381
-
return originalEmit.apply(process, arguments);
10382
-
};
10383
-
patchFs(fs__default.default, new PosixFS(opts.fakeFs));
10384
-
}
10385
-
10386
-
function hydrateRuntimeState(data, { basePath }) {
10387
-
const portablePath = npath.toPortablePath(basePath);
10388
-
const absolutePortablePath = ppath.resolve(portablePath);
10389
-
const ignorePattern = data.ignorePatternData !== null ? new RegExp(data.ignorePatternData) : null;
10390
-
const packageLocatorsByLocations = /* @__PURE__ */ new Map();
10391
-
const packageRegistry = new Map(data.packageRegistryData.map(([packageName, packageStoreData]) => {
10392
-
return [packageName, new Map(packageStoreData.map(([packageReference, packageInformationData]) => {
10393
-
var _a;
10394
-
if (packageName === null !== (packageReference === null))
10395
-
throw new Error(`Assertion failed: The name and reference should be null, or neither should`);
10396
-
const discardFromLookup = (_a = packageInformationData.discardFromLookup) != null ? _a : false;
10397
-
const packageLocator = { name: packageName, reference: packageReference };
10398
-
const entry = packageLocatorsByLocations.get(packageInformationData.packageLocation);
10399
-
if (!entry) {
10400
-
packageLocatorsByLocations.set(packageInformationData.packageLocation, { locator: packageLocator, discardFromLookup });
10401
-
} else {
10402
-
entry.discardFromLookup = entry.discardFromLookup && discardFromLookup;
10403
-
if (!discardFromLookup) {
10404
-
entry.locator = packageLocator;
10405
-
}
10406
-
}
10407
-
let resolvedPackageLocation = null;
10408
-
return [packageReference, {
10409
-
packageDependencies: new Map(packageInformationData.packageDependencies),
10410
-
packagePeers: new Set(packageInformationData.packagePeers),
10411
-
linkType: packageInformationData.linkType,
10412
-
discardFromLookup,
10413
-
get packageLocation() {
10414
-
return resolvedPackageLocation || (resolvedPackageLocation = ppath.join(absolutePortablePath, packageInformationData.packageLocation));
10415
-
}
10416
-
}];
10417
-
}))];
10418
-
}));
10419
-
const fallbackExclusionList = new Map(data.fallbackExclusionList.map(([packageName, packageReferences]) => {
10420
-
return [packageName, new Set(packageReferences)];
10421
-
}));
10422
-
const fallbackPool = new Map(data.fallbackPool);
10423
-
const dependencyTreeRoots = data.dependencyTreeRoots;
10424
-
const enableTopLevelFallback = data.enableTopLevelFallback;
10425
-
return {
10426
-
basePath: portablePath,
10427
-
dependencyTreeRoots,
10428
-
enableTopLevelFallback,
10429
-
fallbackExclusionList,
10430
-
fallbackPool,
10431
-
ignorePattern,
10432
-
packageLocatorsByLocations,
10433
-
packageRegistry
10434
-
};
10435
-
}
10436
-
10437
-
/**
10438
-
* @param {object} exports
10439
-
* @param {Set<string>} keys
10440
-
*/
10441
-
function loop(exports, keys) {
10442
-
if (typeof exports === 'string') {
10443
-
return exports;
10444
-
}
10445
-
10446
-
if (exports) {
10447
-
let idx, tmp;
10448
-
if (Array.isArray(exports)) {
10449
-
for (idx=0; idx < exports.length; idx++) {
10450
-
if (tmp = loop(exports[idx], keys)) return tmp;
10451
-
}
10452
-
} else {
10453
-
for (idx in exports) {
10454
-
if (keys.has(idx)) {
10455
-
return loop(exports[idx], keys);
10456
-
}
10457
-
}
10458
-
}
10459
-
}
10460
-
}
10461
-
10462
-
/**
10463
-
* @param {string} name The package name
10464
-
* @param {string} entry The target entry, eg "."
10465
-
* @param {number} [condition] Unmatched condition?
10466
-
*/
10467
-
function bail(name, entry, condition) {
10468
-
throw new Error(
10469
-
condition
10470
-
? `No known conditions for "${entry}" entry in "${name}" package`
10471
-
: `Missing "${entry}" export in "${name}" package`
10472
-
);
10473
-
}
10474
-
10475
-
/**
10476
-
* @param {string} name the package name
10477
-
* @param {string} entry the target path/import
10478
-
*/
10479
-
function toName(name, entry) {
10480
-
return entry === name ? '.'
10481
-
: entry[0] === '.' ? entry
10482
-
: entry.replace(new RegExp('^' + name + '\/'), './');
10483
-
}
10484
-
10485
-
/**
10486
-
* @param {object} pkg package.json contents
10487
-
* @param {string} [entry] entry name or import path
10488
-
* @param {object} [options]
10489
-
* @param {boolean} [options.browser]
10490
-
* @param {boolean} [options.require]
10491
-
* @param {string[]} [options.conditions]
10492
-
* @param {boolean} [options.unsafe]
10493
-
*/
10494
-
function resolve(pkg, entry='.', options={}) {
10495
-
let { name, exports } = pkg;
10496
-
10497
-
if (exports) {
10498
-
let { browser, require, unsafe, conditions=[] } = options;
10499
-
10500
-
let target = toName(name, entry);
10501
-
if (target[0] !== '.') target = './' + target;
10502
-
10503
-
if (typeof exports === 'string') {
10504
-
return target === '.' ? exports : bail(name, target);
10505
-
}
10506
-
10507
-
let allows = new Set(['default', ...conditions]);
10508
-
unsafe || allows.add(require ? 'require' : 'import');
10509
-
unsafe || allows.add(browser ? 'browser' : 'node');
10510
-
10511
-
let key, tmp, isSingle=false;
10512
-
10513
-
for (key in exports) {
10514
-
isSingle = key[0] !== '.';
10515
-
break;
10516
-
}
10517
-
10518
-
if (isSingle) {
10519
-
return target === '.'
10520
-
? loop(exports, allows) || bail(name, target, 1)
10521
-
: bail(name, target);
10522
-
}
10523
-
10524
-
if (tmp = exports[target]) {
10525
-
return loop(tmp, allows) || bail(name, target, 1);
10526
-
}
10527
-
10528
-
for (key in exports) {
10529
-
tmp = key[key.length - 1];
10530
-
if (tmp === '/' && target.startsWith(key)) {
10531
-
return (tmp = loop(exports[key], allows))
10532
-
? (tmp + target.substring(key.length))
10533
-
: bail(name, target, 1);
10534
-
}
10535
-
if (tmp === '*' && target.startsWith(key.slice(0, -1))) {
10536
-
// do not trigger if no *content* to inject
10537
-
if (target.substring(key.length - 1).length > 0) {
10538
-
return (tmp = loop(exports[key], allows))
10539
-
? tmp.replace('*', target.substring(key.length - 1))
10540
-
: bail(name, target, 1);
10541
-
}
10542
-
}
10543
-
}
10544
-
10545
-
return bail(name, target);
10546
-
}
10547
-
}
10548
-
10549
-
const ArrayIsArray = Array.isArray;
10550
-
const JSONStringify = JSON.stringify;
10551
-
const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames;
10552
-
const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
10553
-
const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string);
10554
-
const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest);
10555
-
const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest);
10556
-
const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest);
10557
-
const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest);
10558
-
const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest);
10559
-
const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest);
10560
-
const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest);
10561
-
const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest);
10562
-
const SafeMap = Map;
10563
-
const JSONParse = JSON.parse;
10564
-
10565
-
function createErrorType(code, messageCreator, errorType) {
10566
-
return class extends errorType {
10567
-
constructor(...args) {
10568
-
super(messageCreator(...args));
10569
-
this.code = code;
10570
-
this.name = `${errorType.name} [${code}]`;
10571
-
}
10572
-
};
10573
-
}
10574
-
const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType(
10575
-
`ERR_PACKAGE_IMPORT_NOT_DEFINED`,
10576
-
(specifier, packagePath, base) => {
10577
-
return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`;
10578
-
},
10579
-
TypeError
10580
-
);
10581
-
const ERR_INVALID_MODULE_SPECIFIER = createErrorType(
10582
-
`ERR_INVALID_MODULE_SPECIFIER`,
10583
-
(request, reason, base = void 0) => {
10584
-
return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`;
10585
-
},
10586
-
TypeError
10587
-
);
10588
-
const ERR_INVALID_PACKAGE_TARGET = createErrorType(
10589
-
`ERR_INVALID_PACKAGE_TARGET`,
10590
-
(pkgPath, key, target, isImport = false, base = void 0) => {
10591
-
const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`);
10592
-
if (key === `.`) {
10593
-
assert__default.default(isImport === false);
10594
-
return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`;
10595
-
}
10596
-
return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify(
10597
-
target
10598
-
)} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`;
10599
-
},
10600
-
Error
10601
-
);
10602
-
const ERR_INVALID_PACKAGE_CONFIG = createErrorType(
10603
-
`ERR_INVALID_PACKAGE_CONFIG`,
10604
-
(path, base, message) => {
10605
-
return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`;
10606
-
},
10607
-
Error
10608
-
);
10609
-
10610
-
function filterOwnProperties(source, keys) {
10611
-
const filtered = /* @__PURE__ */ Object.create(null);
10612
-
for (let i = 0; i < keys.length; i++) {
10613
-
const key = keys[i];
10614
-
if (ObjectPrototypeHasOwnProperty(source, key)) {
10615
-
filtered[key] = source[key];
10616
-
}
10617
-
}
10618
-
return filtered;
10619
-
}
10620
-
10621
-
const packageJSONCache = new SafeMap();
10622
-
function getPackageConfig(path, specifier, base, readFileSyncFn) {
10623
-
const existing = packageJSONCache.get(path);
10624
-
if (existing !== void 0) {
10625
-
return existing;
10626
-
}
10627
-
const source = readFileSyncFn(path);
10628
-
if (source === void 0) {
10629
-
const packageConfig2 = {
10630
-
pjsonPath: path,
10631
-
exists: false,
10632
-
main: void 0,
10633
-
name: void 0,
10634
-
type: "none",
10635
-
exports: void 0,
10636
-
imports: void 0
10637
-
};
10638
-
packageJSONCache.set(path, packageConfig2);
10639
-
return packageConfig2;
10640
-
}
10641
-
let packageJSON;
10642
-
try {
10643
-
packageJSON = JSONParse(source);
10644
-
} catch (error) {
10645
-
throw new ERR_INVALID_PACKAGE_CONFIG(
10646
-
path,
10647
-
(base ? `"${specifier}" from ` : "") + url.fileURLToPath(base || specifier),
10648
-
error.message
10649
-
);
10650
-
}
10651
-
let { imports, main, name, type } = filterOwnProperties(packageJSON, [
10652
-
"imports",
10653
-
"main",
10654
-
"name",
10655
-
"type"
10656
-
]);
10657
-
const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0;
10658
-
if (typeof imports !== "object" || imports === null) {
10659
-
imports = void 0;
10660
-
}
10661
-
if (typeof main !== "string") {
10662
-
main = void 0;
10663
-
}
10664
-
if (typeof name !== "string") {
10665
-
name = void 0;
10666
-
}
10667
-
if (type !== "module" && type !== "commonjs") {
10668
-
type = "none";
10669
-
}
10670
-
const packageConfig = {
10671
-
pjsonPath: path,
10672
-
exists: true,
10673
-
main,
10674
-
name,
10675
-
type,
10676
-
exports,
10677
-
imports
10678
-
};
10679
-
packageJSONCache.set(path, packageConfig);
10680
-
return packageConfig;
10681
-
}
10682
-
function getPackageScopeConfig(resolved, readFileSyncFn) {
10683
-
let packageJSONUrl = new URL("./package.json", resolved);
10684
-
while (true) {
10685
-
const packageJSONPath2 = packageJSONUrl.pathname;
10686
-
if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) {
10687
-
break;
10688
-
}
10689
-
const packageConfig2 = getPackageConfig(
10690
-
url.fileURLToPath(packageJSONUrl),
10691
-
resolved,
10692
-
void 0,
10693
-
readFileSyncFn
10694
-
);
10695
-
if (packageConfig2.exists) {
10696
-
return packageConfig2;
10697
-
}
10698
-
const lastPackageJSONUrl = packageJSONUrl;
10699
-
packageJSONUrl = new URL("../package.json", packageJSONUrl);
10700
-
if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) {
10701
-
break;
10702
-
}
10703
-
}
10704
-
const packageJSONPath = url.fileURLToPath(packageJSONUrl);
10705
-
const packageConfig = {
10706
-
pjsonPath: packageJSONPath,
10707
-
exists: false,
10708
-
main: void 0,
10709
-
name: void 0,
10710
-
type: "none",
10711
-
exports: void 0,
10712
-
imports: void 0
10713
-
};
10714
-
packageJSONCache.set(packageJSONPath, packageConfig);
10715
-
return packageConfig;
10716
-
}
10717
-
10718
-
/**
10719
-
@license
10720
-
Copyright Node.js contributors. All rights reserved.
10721
-
10722
-
Permission is hereby granted, free of charge, to any person obtaining a copy
10723
-
of this software and associated documentation files (the "Software"), to
10724
-
deal in the Software without restriction, including without limitation the
10725
-
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10726
-
sell copies of the Software, and to permit persons to whom the Software is
10727
-
furnished to do so, subject to the following conditions:
10728
-
10729
-
The above copyright notice and this permission notice shall be included in
10730
-
all copies or substantial portions of the Software.
10731
-
10732
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
10733
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10734
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
10735
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
10736
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
10737
-
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
10738
-
IN THE SOFTWARE.
10739
-
*/
10740
-
function throwImportNotDefined(specifier, packageJSONUrl, base) {
10741
-
throw new ERR_PACKAGE_IMPORT_NOT_DEFINED(
10742
-
specifier,
10743
-
packageJSONUrl && url.fileURLToPath(new URL(".", packageJSONUrl)),
10744
-
url.fileURLToPath(base)
10745
-
);
10746
-
}
10747
-
function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) {
10748
-
const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${url.fileURLToPath(packageJSONUrl)}`;
10749
-
throw new ERR_INVALID_MODULE_SPECIFIER(
10750
-
subpath,
10751
-
reason,
10752
-
base && url.fileURLToPath(base)
10753
-
);
10754
-
}
10755
-
function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) {
10756
-
if (typeof target === "object" && target !== null) {
10757
-
target = JSONStringify(target, null, "");
10758
-
} else {
10759
-
target = `${target}`;
10760
-
}
10761
-
throw new ERR_INVALID_PACKAGE_TARGET(
10762
-
url.fileURLToPath(new URL(".", packageJSONUrl)),
10763
-
subpath,
10764
-
target,
10765
-
internal,
10766
-
base && url.fileURLToPath(base)
10767
-
);
10768
-
}
10769
-
const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i;
10770
-
const patternRegEx = /\*/g;
10771
-
function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) {
10772
-
if (subpath !== "" && !pattern && target[target.length - 1] !== "/")
10773
-
throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base);
10774
-
if (!StringPrototypeStartsWith(target, "./")) {
10775
-
if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) {
10776
-
let isURL = false;
10777
-
try {
10778
-
new URL(target);
10779
-
isURL = true;
10780
-
} catch {
10781
-
}
10782
-
if (!isURL) {
10783
-
const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath;
10784
-
return exportTarget;
10785
-
}
10786
-
}
10787
-
throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base);
10788
-
}
10789
-
if (RegExpPrototypeExec(
10790
-
invalidSegmentRegEx,
10791
-
StringPrototypeSlice(target, 2)
10792
-
) !== null)
10793
-
throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base);
10794
-
const resolved = new URL(target, packageJSONUrl);
10795
-
const resolvedPath = resolved.pathname;
10796
-
const packagePath = new URL(".", packageJSONUrl).pathname;
10797
-
if (!StringPrototypeStartsWith(resolvedPath, packagePath))
10798
-
throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base);
10799
-
if (subpath === "")
10800
-
return resolved;
10801
-
if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) {
10802
-
const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath;
10803
-
throwInvalidSubpath(request, packageJSONUrl, internal, base);
10804
-
}
10805
-
if (pattern) {
10806
-
return new URL(
10807
-
RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath)
10808
-
);
10809
-
}
10810
-
return new URL(subpath, resolved);
10811
-
}
10812
-
function isArrayIndex(key) {
10813
-
const keyNum = +key;
10814
-
if (`${keyNum}` !== key)
10815
-
return false;
10816
-
return keyNum >= 0 && keyNum < 4294967295;
10817
-
}
10818
-
function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) {
10819
-
if (typeof target === "string") {
10820
-
return resolvePackageTargetString(
10821
-
target,
10822
-
subpath,
10823
-
packageSubpath,
10824
-
packageJSONUrl,
10825
-
base,
10826
-
pattern,
10827
-
internal);
10828
-
} else if (ArrayIsArray(target)) {
10829
-
if (target.length === 0) {
10830
-
return null;
10831
-
}
10832
-
let lastException;
10833
-
for (let i = 0; i < target.length; i++) {
10834
-
const targetItem = target[i];
10835
-
let resolveResult;
10836
-
try {
10837
-
resolveResult = resolvePackageTarget(
10838
-
packageJSONUrl,
10839
-
targetItem,
10840
-
subpath,
10841
-
packageSubpath,
10842
-
base,
10843
-
pattern,
10844
-
internal,
10845
-
conditions
10846
-
);
10847
-
} catch (e) {
10848
-
lastException = e;
10849
-
if (e.code === "ERR_INVALID_PACKAGE_TARGET") {
10850
-
continue;
10851
-
}
10852
-
throw e;
10853
-
}
10854
-
if (resolveResult === void 0) {
10855
-
continue;
10856
-
}
10857
-
if (resolveResult === null) {
10858
-
lastException = null;
10859
-
continue;
10860
-
}
10861
-
return resolveResult;
10862
-
}
10863
-
if (lastException === void 0 || lastException === null)
10864
-
return lastException;
10865
-
throw lastException;
10866
-
} else if (typeof target === "object" && target !== null) {
10867
-
const keys = ObjectGetOwnPropertyNames(target);
10868
-
for (let i = 0; i < keys.length; i++) {
10869
-
const key = keys[i];
10870
-
if (isArrayIndex(key)) {
10871
-
throw new ERR_INVALID_PACKAGE_CONFIG(
10872
-
url.fileURLToPath(packageJSONUrl),
10873
-
base,
10874
-
'"exports" cannot contain numeric property keys.'
10875
-
);
10876
-
}
10877
-
}
10878
-
for (let i = 0; i < keys.length; i++) {
10879
-
const key = keys[i];
10880
-
if (key === "default" || conditions.has(key)) {
10881
-
const conditionalTarget = target[key];
10882
-
const resolveResult = resolvePackageTarget(
10883
-
packageJSONUrl,
10884
-
conditionalTarget,
10885
-
subpath,
10886
-
packageSubpath,
10887
-
base,
10888
-
pattern,
10889
-
internal,
10890
-
conditions
10891
-
);
10892
-
if (resolveResult === void 0)
10893
-
continue;
10894
-
return resolveResult;
10895
-
}
10896
-
}
10897
-
return void 0;
10898
-
} else if (target === null) {
10899
-
return null;
10900
-
}
10901
-
throwInvalidPackageTarget(
10902
-
packageSubpath,
10903
-
target,
10904
-
packageJSONUrl,
10905
-
internal,
10906
-
base
10907
-
);
10908
-
}
10909
-
function patternKeyCompare(a, b) {
10910
-
const aPatternIndex = StringPrototypeIndexOf(a, "*");
10911
-
const bPatternIndex = StringPrototypeIndexOf(b, "*");
10912
-
const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1;
10913
-
const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1;
10914
-
if (baseLenA > baseLenB)
10915
-
return -1;
10916
-
if (baseLenB > baseLenA)
10917
-
return 1;
10918
-
if (aPatternIndex === -1)
10919
-
return 1;
10920
-
if (bPatternIndex === -1)
10921
-
return -1;
10922
-
if (a.length > b.length)
10923
-
return -1;
10924
-
if (b.length > a.length)
10925
-
return 1;
10926
-
return 0;
10927
-
}
10928
-
function packageImportsResolve({
10929
-
name,
10930
-
base,
10931
-
conditions,
10932
-
readFileSyncFn
10933
-
}) {
10934
-
if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) {
10935
-
const reason = "is not a valid internal imports specifier name";
10936
-
throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, url.fileURLToPath(base));
10937
-
}
10938
-
let packageJSONUrl;
10939
-
const packageConfig = getPackageScopeConfig(base, readFileSyncFn);
10940
-
if (packageConfig.exists) {
10941
-
packageJSONUrl = url.pathToFileURL(packageConfig.pjsonPath);
10942
-
const imports = packageConfig.imports;
10943
-
if (imports) {
10944
-
if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) {
10945
-
const resolveResult = resolvePackageTarget(
10946
-
packageJSONUrl,
10947
-
imports[name],
10948
-
"",
10949
-
name,
10950
-
base,
10951
-
false,
10952
-
true,
10953
-
conditions
10954
-
);
10955
-
if (resolveResult != null) {
10956
-
return resolveResult;
10957
-
}
10958
-
} else {
10959
-
let bestMatch = "";
10960
-
let bestMatchSubpath;
10961
-
const keys = ObjectGetOwnPropertyNames(imports);
10962
-
for (let i = 0; i < keys.length; i++) {
10963
-
const key = keys[i];
10964
-
const patternIndex = StringPrototypeIndexOf(key, "*");
10965
-
if (patternIndex !== -1 && StringPrototypeStartsWith(
10966
-
name,
10967
-
StringPrototypeSlice(key, 0, patternIndex)
10968
-
)) {
10969
-
const patternTrailer = StringPrototypeSlice(key, patternIndex + 1);
10970
-
if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) {
10971
-
bestMatch = key;
10972
-
bestMatchSubpath = StringPrototypeSlice(
10973
-
name,
10974
-
patternIndex,
10975
-
name.length - patternTrailer.length
10976
-
);
10977
-
}
10978
-
}
10979
-
}
10980
-
if (bestMatch) {
10981
-
const target = imports[bestMatch];
10982
-
const resolveResult = resolvePackageTarget(
10983
-
packageJSONUrl,
10984
-
target,
10985
-
bestMatchSubpath,
10986
-
bestMatch,
10987
-
base,
10988
-
true,
10989
-
true,
10990
-
conditions
10991
-
);
10992
-
if (resolveResult != null) {
10993
-
return resolveResult;
10994
-
}
10995
-
}
10996
-
}
10997
-
}
10998
-
}
10999
-
throwImportNotDefined(name, packageJSONUrl, base);
11000
-
}
11001
-
11002
-
const flagSymbol = Symbol('arg flag');
11003
-
11004
-
class ArgError extends Error {
11005
-
constructor(msg, code) {
11006
-
super(msg);
11007
-
this.name = 'ArgError';
11008
-
this.code = code;
11009
-
11010
-
Object.setPrototypeOf(this, ArgError.prototype);
11011
-
}
11012
-
}
11013
-
11014
-
function arg(
11015
-
opts,
11016
-
{
11017
-
argv = process.argv.slice(2),
11018
-
permissive = false,
11019
-
stopAtPositional = false
11020
-
} = {}
11021
-
) {
11022
-
if (!opts) {
11023
-
throw new ArgError(
11024
-
'argument specification object is required',
11025
-
'ARG_CONFIG_NO_SPEC'
11026
-
);
11027
-
}
11028
-
11029
-
const result = { _: [] };
11030
-
11031
-
const aliases = {};
11032
-
const handlers = {};
11033
-
11034
-
for (const key of Object.keys(opts)) {
11035
-
if (!key) {
11036
-
throw new ArgError(
11037
-
'argument key cannot be an empty string',
11038
-
'ARG_CONFIG_EMPTY_KEY'
11039
-
);
11040
-
}
11041
-
11042
-
if (key[0] !== '-') {
11043
-
throw new ArgError(
11044
-
`argument key must start with '-' but found: '${key}'`,
11045
-
'ARG_CONFIG_NONOPT_KEY'
11046
-
);
11047
-
}
11048
-
11049
-
if (key.length === 1) {
11050
-
throw new ArgError(
11051
-
`argument key must have a name; singular '-' keys are not allowed: ${key}`,
11052
-
'ARG_CONFIG_NONAME_KEY'
11053
-
);
11054
-
}
11055
-
11056
-
if (typeof opts[key] === 'string') {
11057
-
aliases[key] = opts[key];
11058
-
continue;
11059
-
}
11060
-
11061
-
let type = opts[key];
11062
-
let isFlag = false;
11063
-
11064
-
if (
11065
-
Array.isArray(type) &&
11066
-
type.length === 1 &&
11067
-
typeof type[0] === 'function'
11068
-
) {
11069
-
const [fn] = type;
11070
-
type = (value, name, prev = []) => {
11071
-
prev.push(fn(value, name, prev[prev.length - 1]));
11072
-
return prev;
11073
-
};
11074
-
isFlag = fn === Boolean || fn[flagSymbol] === true;
11075
-
} else if (typeof type === 'function') {
11076
-
isFlag = type === Boolean || type[flagSymbol] === true;
11077
-
} else {
11078
-
throw new ArgError(
11079
-
`type missing or not a function or valid array type: ${key}`,
11080
-
'ARG_CONFIG_VAD_TYPE'
11081
-
);
11082
-
}
11083
-
11084
-
if (key[1] !== '-' && key.length > 2) {
11085
-
throw new ArgError(
11086
-
`short argument keys (with a single hyphen) must have only one character: ${key}`,
11087
-
'ARG_CONFIG_SHORTOPT_TOOLONG'
11088
-
);
11089
-
}
11090
-
11091
-
handlers[key] = [type, isFlag];
11092
-
}
11093
-
11094
-
for (let i = 0, len = argv.length; i < len; i++) {
11095
-
const wholeArg = argv[i];
11096
-
11097
-
if (stopAtPositional && result._.length > 0) {
11098
-
result._ = result._.concat(argv.slice(i));
11099
-
break;
11100
-
}
11101
-
11102
-
if (wholeArg === '--') {
11103
-
result._ = result._.concat(argv.slice(i + 1));
11104
-
break;
11105
-
}
11106
-
11107
-
if (wholeArg.length > 1 && wholeArg[0] === '-') {
11108
-
/* eslint-disable operator-linebreak */
11109
-
const separatedArguments =
11110
-
wholeArg[1] === '-' || wholeArg.length === 2
11111
-
? [wholeArg]
11112
-
: wholeArg
11113
-
.slice(1)
11114
-
.split('')
11115
-
.map((a) => `-${a}`);
11116
-
/* eslint-enable operator-linebreak */
11117
-
11118
-
for (let j = 0; j < separatedArguments.length; j++) {
11119
-
const arg = separatedArguments[j];
11120
-
const [originalArgName, argStr] =
11121
-
arg[1] === '-' ? arg.split(/=(.*)/, 2) : [arg, undefined];
11122
-
11123
-
let argName = originalArgName;
11124
-
while (argName in aliases) {
11125
-
argName = aliases[argName];
11126
-
}
11127
-
11128
-
if (!(argName in handlers)) {
11129
-
if (permissive) {
11130
-
result._.push(arg);
11131
-
continue;
11132
-
} else {
11133
-
throw new ArgError(
11134
-
`unknown or unexpected option: ${originalArgName}`,
11135
-
'ARG_UNKNOWN_OPTION'
11136
-
);
11137
-
}
11138
-
}
11139
-
11140
-
const [type, isFlag] = handlers[argName];
11141
-
11142
-
if (!isFlag && j + 1 < separatedArguments.length) {
11143
-
throw new ArgError(
11144
-
`option requires argument (but was followed by another short argument): ${originalArgName}`,
11145
-
'ARG_MISSING_REQUIRED_SHORTARG'
11146
-
);
11147
-
}
11148
-
11149
-
if (isFlag) {
11150
-
result[argName] = type(true, argName, result[argName]);
11151
-
} else if (argStr === undefined) {
11152
-
if (
11153
-
argv.length < i + 2 ||
11154
-
(argv[i + 1].length > 1 &&
11155
-
argv[i + 1][0] === '-' &&
11156
-
!(
11157
-
argv[i + 1].match(/^-?\d*(\.(?=\d))?\d*$/) &&
11158
-
(type === Number ||
11159
-
// eslint-disable-next-line no-undef
11160
-
(typeof BigInt !== 'undefined' && type === BigInt))
11161
-
))
11162
-
) {
11163
-
const extended =
11164
-
originalArgName === argName ? '' : ` (alias for ${argName})`;
11165
-
throw new ArgError(
11166
-
`option requires argument: ${originalArgName}${extended}`,
11167
-
'ARG_MISSING_REQUIRED_LONGARG'
11168
-
);
11169
-
}
11170
-
11171
-
result[argName] = type(argv[i + 1], argName, result[argName]);
11172
-
++i;
11173
-
} else {
11174
-
result[argName] = type(argStr, argName, result[argName]);
11175
-
}
11176
-
}
11177
-
} else {
11178
-
result._.push(wholeArg);
11179
-
}
11180
-
}
11181
-
11182
-
return result;
11183
-
}
11184
-
11185
-
arg.flag = (fn) => {
11186
-
fn[flagSymbol] = true;
11187
-
return fn;
11188
-
};
11189
-
11190
-
// Utility types
11191
-
arg.COUNT = arg.flag((v, name, existingCount) => (existingCount || 0) + 1);
11192
-
11193
-
// Expose error class
11194
-
arg.ArgError = ArgError;
11195
-
11196
-
var arg_1 = arg;
11197
-
11198
-
/**
11199
-
@license
11200
-
The MIT License (MIT)
11201
-
11202
-
Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)
11203
-
11204
-
Permission is hereby granted, free of charge, to any person obtaining a copy
11205
-
of this software and associated documentation files (the "Software"), to deal
11206
-
in the Software without restriction, including without limitation the rights
11207
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11208
-
copies of the Software, and to permit persons to whom the Software is
11209
-
furnished to do so, subject to the following conditions:
11210
-
11211
-
The above copyright notice and this permission notice shall be included in
11212
-
all copies or substantial portions of the Software.
11213
-
11214
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
11215
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
11216
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
11217
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
11218
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
11219
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
11220
-
THE SOFTWARE.
11221
-
*/
11222
-
function getOptionValue(opt) {
11223
-
parseOptions();
11224
-
return options[opt];
11225
-
}
11226
-
let options;
11227
-
function parseOptions() {
11228
-
if (!options) {
11229
-
options = {
11230
-
"--conditions": [],
11231
-
...parseArgv(getNodeOptionsEnvArgv()),
11232
-
...parseArgv(process.execArgv)
11233
-
};
11234
-
}
11235
-
}
11236
-
function parseArgv(argv) {
11237
-
return arg_1(
11238
-
{
11239
-
"--conditions": [String],
11240
-
"-C": "--conditions"
11241
-
},
11242
-
{
11243
-
argv,
11244
-
permissive: true
11245
-
}
11246
-
);
11247
-
}
11248
-
function getNodeOptionsEnvArgv() {
11249
-
const errors = [];
11250
-
const envArgv = ParseNodeOptionsEnvVar(process.env.NODE_OPTIONS || "", errors);
11251
-
if (errors.length !== 0) ;
11252
-
return envArgv;
11253
-
}
11254
-
function ParseNodeOptionsEnvVar(node_options, errors) {
11255
-
const env_argv = [];
11256
-
let is_in_string = false;
11257
-
let will_start_new_arg = true;
11258
-
for (let index = 0; index < node_options.length; ++index) {
11259
-
let c = node_options[index];
11260
-
if (c === "\\" && is_in_string) {
11261
-
if (index + 1 === node_options.length) {
11262
-
errors.push("invalid value for NODE_OPTIONS (invalid escape)\n");
11263
-
return env_argv;
11264
-
} else {
11265
-
c = node_options[++index];
11266
-
}
11267
-
} else if (c === " " && !is_in_string) {
11268
-
will_start_new_arg = true;
11269
-
continue;
11270
-
} else if (c === '"') {
11271
-
is_in_string = !is_in_string;
11272
-
continue;
11273
-
}
11274
-
if (will_start_new_arg) {
11275
-
env_argv.push(c);
11276
-
will_start_new_arg = false;
11277
-
} else {
11278
-
env_argv[env_argv.length - 1] += c;
11279
-
}
11280
-
}
11281
-
if (is_in_string) {
11282
-
errors.push("invalid value for NODE_OPTIONS (unterminated string)\n");
11283
-
}
11284
-
return env_argv;
11285
-
}
11286
-
11287
-
function makeApi(runtimeState, opts) {
11288
-
const alwaysWarnOnFallback = Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK) > 0;
11289
-
const debugLevel = Number(process.env.PNP_DEBUG_LEVEL);
11290
-
const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/;
11291
-
const isStrictRegExp = /^(\/|\.{1,2}(\/|$))/;
11292
-
const isDirRegExp = /\/$/;
11293
-
const isRelativeRegexp = /^\.{0,2}\//;
11294
-
const topLevelLocator = { name: null, reference: null };
11295
-
const fallbackLocators = [];
11296
-
const emittedWarnings = /* @__PURE__ */ new Set();
11297
-
if (runtimeState.enableTopLevelFallback === true)
11298
-
fallbackLocators.push(topLevelLocator);
11299
-
if (opts.compatibilityMode !== false) {
11300
-
for (const name of [`react-scripts`, `gatsby`]) {
11301
-
const packageStore = runtimeState.packageRegistry.get(name);
11302
-
if (packageStore) {
11303
-
for (const reference of packageStore.keys()) {
11304
-
if (reference === null) {
11305
-
throw new Error(`Assertion failed: This reference shouldn't be null`);
11306
-
} else {
11307
-
fallbackLocators.push({ name, reference });
11308
-
}
11309
-
}
11310
-
}
11311
-
}
11312
-
}
11313
-
const {
11314
-
ignorePattern,
11315
-
packageRegistry,
11316
-
packageLocatorsByLocations
11317
-
} = runtimeState;
11318
-
function makeLogEntry(name, args) {
11319
-
return {
11320
-
fn: name,
11321
-
args,
11322
-
error: null,
11323
-
result: null
11324
-
};
11325
-
}
11326
-
function trace(entry) {
11327
-
var _a, _b, _c, _d, _e, _f;
11328
-
const colors = (_c = (_b = (_a = process.stderr) == null ? void 0 : _a.hasColors) == null ? void 0 : _b.call(_a)) != null ? _c : process.stdout.isTTY;
11329
-
const c = (n, str) => `\x1B[${n}m${str}\x1B[0m`;
11330
-
const error = entry.error;
11331
-
if (error)
11332
-
console.error(c(`31;1`, `\u2716 ${(_d = entry.error) == null ? void 0 : _d.message.replace(/\n.*/s, ``)}`));
11333
-
else
11334
-
console.error(c(`33;1`, `\u203C Resolution`));
11335
-
if (entry.args.length > 0)
11336
-
console.error();
11337
-
for (const arg of entry.args)
11338
-
console.error(` ${c(`37;1`, `In \u2190`)} ${nodeUtils.inspect(arg, { colors, compact: true })}`);
11339
-
if (entry.result) {
11340
-
console.error();
11341
-
console.error(` ${c(`37;1`, `Out \u2192`)} ${nodeUtils.inspect(entry.result, { colors, compact: true })}`);
11342
-
}
11343
-
const stack = (_f = (_e = new Error().stack.match(/(?<=^ +)at.*/gm)) == null ? void 0 : _e.slice(2)) != null ? _f : [];
11344
-
if (stack.length > 0) {
11345
-
console.error();
11346
-
for (const line of stack) {
11347
-
console.error(` ${c(`38;5;244`, line)}`);
11348
-
}
11349
-
}
11350
-
console.error();
11351
-
}
11352
-
function maybeLog(name, fn) {
11353
-
if (opts.allowDebug === false)
11354
-
return fn;
11355
-
if (Number.isFinite(debugLevel)) {
11356
-
if (debugLevel >= 2) {
11357
-
return (...args) => {
11358
-
const logEntry = makeLogEntry(name, args);
11359
-
try {
11360
-
return logEntry.result = fn(...args);
11361
-
} catch (error) {
11362
-
throw logEntry.error = error;
11363
-
} finally {
11364
-
trace(logEntry);
11365
-
}
11366
-
};
11367
-
} else if (debugLevel >= 1) {
11368
-
return (...args) => {
11369
-
try {
11370
-
return fn(...args);
11371
-
} catch (error) {
11372
-
const logEntry = makeLogEntry(name, args);
11373
-
logEntry.error = error;
11374
-
trace(logEntry);
11375
-
throw error;
11376
-
}
11377
-
};
11378
-
}
11379
-
}
11380
-
return fn;
11381
-
}
11382
-
function getPackageInformationSafe(packageLocator) {
11383
-
const packageInformation = getPackageInformation(packageLocator);
11384
-
if (!packageInformation) {
11385
-
throw makeError(
11386
-
ErrorCode.INTERNAL,
11387
-
`Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)`
11388
-
);
11389
-
}
11390
-
return packageInformation;
11391
-
}
11392
-
function isDependencyTreeRoot(packageLocator) {
11393
-
if (packageLocator.name === null)
11394
-
return true;
11395
-
for (const dependencyTreeRoot of runtimeState.dependencyTreeRoots)
11396
-
if (dependencyTreeRoot.name === packageLocator.name && dependencyTreeRoot.reference === packageLocator.reference)
11397
-
return true;
11398
-
return false;
11399
-
}
11400
-
const defaultExportsConditions = /* @__PURE__ */ new Set([
11401
-
`default`,
11402
-
`node`,
11403
-
`require`,
11404
-
...getOptionValue(`--conditions`)
11405
-
]);
11406
-
function applyNodeExportsResolution(unqualifiedPath, conditions = defaultExportsConditions) {
11407
-
const locator = findPackageLocator(ppath.join(unqualifiedPath, `internal.js`), {
11408
-
resolveIgnored: true,
11409
-
includeDiscardFromLookup: true
11410
-
});
11411
-
if (locator === null) {
11412
-
throw makeError(
11413
-
ErrorCode.INTERNAL,
11414
-
`The locator that owns the "${unqualifiedPath}" path can't be found inside the dependency tree (this is probably an internal error)`
11415
-
);
11416
-
}
11417
-
const { packageLocation } = getPackageInformationSafe(locator);
11418
-
const manifestPath = ppath.join(packageLocation, Filename.manifest);
11419
-
if (!opts.fakeFs.existsSync(manifestPath))
11420
-
return null;
11421
-
const pkgJson = JSON.parse(opts.fakeFs.readFileSync(manifestPath, `utf8`));
11422
-
let subpath = ppath.contains(packageLocation, unqualifiedPath);
11423
-
if (subpath === null) {
11424
-
throw makeError(
11425
-
ErrorCode.INTERNAL,
11426
-
`unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)`
11427
-
);
11428
-
}
11429
-
if (!isRelativeRegexp.test(subpath))
11430
-
subpath = `./${subpath}`;
11431
-
let resolvedExport;
11432
-
try {
11433
-
resolvedExport = resolve(pkgJson, ppath.normalize(subpath), {
11434
-
conditions,
11435
-
unsafe: true
11436
-
});
11437
-
} catch (error) {
11438
-
throw makeError(
11439
-
ErrorCode.EXPORTS_RESOLUTION_FAILED,
11440
-
error.message,
11441
-
{ unqualifiedPath: getPathForDisplay(unqualifiedPath), locator, pkgJson, subpath: getPathForDisplay(subpath), conditions },
11442
-
`ERR_PACKAGE_PATH_NOT_EXPORTED`
11443
-
);
11444
-
}
11445
-
if (typeof resolvedExport === `string`)
11446
-
return ppath.join(packageLocation, resolvedExport);
11447
-
return null;
11448
-
}
11449
-
function applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions }) {
11450
-
let stat;
11451
-
try {
11452
-
candidates.push(unqualifiedPath);
11453
-
stat = opts.fakeFs.statSync(unqualifiedPath);
11454
-
} catch (error) {
11455
-
}
11456
-
if (stat && !stat.isDirectory())
11457
-
return opts.fakeFs.realpathSync(unqualifiedPath);
11458
-
if (stat && stat.isDirectory()) {
11459
-
let pkgJson;
11460
-
try {
11461
-
pkgJson = JSON.parse(opts.fakeFs.readFileSync(ppath.join(unqualifiedPath, Filename.manifest), `utf8`));
11462
-
} catch (error) {
11463
-
}
11464
-
let nextUnqualifiedPath;
11465
-
if (pkgJson && pkgJson.main)
11466
-
nextUnqualifiedPath = ppath.resolve(unqualifiedPath, pkgJson.main);
11467
-
if (nextUnqualifiedPath && nextUnqualifiedPath !== unqualifiedPath) {
11468
-
const resolution = applyNodeExtensionResolution(nextUnqualifiedPath, candidates, { extensions });
11469
-
if (resolution !== null) {
11470
-
return resolution;
11471
-
}
11472
-
}
11473
-
}
11474
-
for (let i = 0, length = extensions.length; i < length; i++) {
11475
-
const candidateFile = `${unqualifiedPath}${extensions[i]}`;
11476
-
candidates.push(candidateFile);
11477
-
if (opts.fakeFs.existsSync(candidateFile)) {
11478
-
return candidateFile;
11479
-
}
11480
-
}
11481
-
if (stat && stat.isDirectory()) {
11482
-
for (let i = 0, length = extensions.length; i < length; i++) {
11483
-
const candidateFile = ppath.format({ dir: unqualifiedPath, name: `index`, ext: extensions[i] });
11484
-
candidates.push(candidateFile);
11485
-
if (opts.fakeFs.existsSync(candidateFile)) {
11486
-
return candidateFile;
11487
-
}
11488
-
}
11489
-
}
11490
-
return null;
11491
-
}
11492
-
function makeFakeModule(path) {
11493
-
const fakeModule = new require$$0.Module(path, null);
11494
-
fakeModule.filename = path;
11495
-
fakeModule.paths = require$$0.Module._nodeModulePaths(path);
11496
-
return fakeModule;
11497
-
}
11498
-
function callNativeResolution(request, issuer) {
11499
-
if (issuer.endsWith(`/`))
11500
-
issuer = ppath.join(issuer, `internal.js`);
11501
-
return require$$0.Module._resolveFilename(npath.fromPortablePath(request), makeFakeModule(npath.fromPortablePath(issuer)), false, { plugnplay: false });
11502
-
}
11503
-
function isPathIgnored(path) {
11504
-
if (ignorePattern === null)
11505
-
return false;
11506
-
const subPath = ppath.contains(runtimeState.basePath, path);
11507
-
if (subPath === null)
11508
-
return false;
11509
-
if (ignorePattern.test(subPath.replace(/\/$/, ``))) {
11510
-
return true;
11511
-
} else {
11512
-
return false;
11513
-
}
11514
-
}
11515
-
const VERSIONS = { std: 3, resolveVirtual: 1, getAllLocators: 1 };
11516
-
const topLevel = topLevelLocator;
11517
-
function getPackageInformation({ name, reference }) {
11518
-
const packageInformationStore = packageRegistry.get(name);
11519
-
if (!packageInformationStore)
11520
-
return null;
11521
-
const packageInformation = packageInformationStore.get(reference);
11522
-
if (!packageInformation)
11523
-
return null;
11524
-
return packageInformation;
11525
-
}
11526
-
function findPackageDependents({ name, reference }) {
11527
-
const dependents = [];
11528
-
for (const [dependentName, packageInformationStore] of packageRegistry) {
11529
-
if (dependentName === null)
11530
-
continue;
11531
-
for (const [dependentReference, packageInformation] of packageInformationStore) {
11532
-
if (dependentReference === null)
11533
-
continue;
11534
-
const dependencyReference = packageInformation.packageDependencies.get(name);
11535
-
if (dependencyReference !== reference)
11536
-
continue;
11537
-
if (dependentName === name && dependentReference === reference)
11538
-
continue;
11539
-
dependents.push({
11540
-
name: dependentName,
11541
-
reference: dependentReference
11542
-
});
11543
-
}
11544
-
}
11545
-
return dependents;
11546
-
}
11547
-
function findBrokenPeerDependencies(dependency, initialPackage) {
11548
-
const brokenPackages = /* @__PURE__ */ new Map();
11549
-
const alreadyVisited = /* @__PURE__ */ new Set();
11550
-
const traversal = (currentPackage) => {
11551
-
const identifier = JSON.stringify(currentPackage.name);
11552
-
if (alreadyVisited.has(identifier))
11553
-
return;
11554
-
alreadyVisited.add(identifier);
11555
-
const dependents = findPackageDependents(currentPackage);
11556
-
for (const dependent of dependents) {
11557
-
const dependentInformation = getPackageInformationSafe(dependent);
11558
-
if (dependentInformation.packagePeers.has(dependency)) {
11559
-
traversal(dependent);
11560
-
} else {
11561
-
let brokenSet = brokenPackages.get(dependent.name);
11562
-
if (typeof brokenSet === `undefined`)
11563
-
brokenPackages.set(dependent.name, brokenSet = /* @__PURE__ */ new Set());
11564
-
brokenSet.add(dependent.reference);
11565
-
}
11566
-
}
11567
-
};
11568
-
traversal(initialPackage);
11569
-
const brokenList = [];
11570
-
for (const name of [...brokenPackages.keys()].sort())
11571
-
for (const reference of [...brokenPackages.get(name)].sort())
11572
-
brokenList.push({ name, reference });
11573
-
return brokenList;
11574
-
}
11575
-
function findPackageLocator(location, { resolveIgnored = false, includeDiscardFromLookup = false } = {}) {
11576
-
if (isPathIgnored(location) && !resolveIgnored)
11577
-
return null;
11578
-
let relativeLocation = ppath.relative(runtimeState.basePath, location);
11579
-
if (!relativeLocation.match(isStrictRegExp))
11580
-
relativeLocation = `./${relativeLocation}`;
11581
-
if (!relativeLocation.endsWith(`/`))
11582
-
relativeLocation = `${relativeLocation}/`;
11583
-
do {
11584
-
const entry = packageLocatorsByLocations.get(relativeLocation);
11585
-
if (typeof entry === `undefined` || entry.discardFromLookup && !includeDiscardFromLookup) {
11586
-
relativeLocation = relativeLocation.substring(0, relativeLocation.lastIndexOf(`/`, relativeLocation.length - 2) + 1);
11587
-
continue;
11588
-
}
11589
-
return entry.locator;
11590
-
} while (relativeLocation !== ``);
11591
-
return null;
11592
-
}
11593
-
function tryReadFile(filePath) {
11594
-
try {
11595
-
return opts.fakeFs.readFileSync(npath.toPortablePath(filePath), `utf8`);
11596
-
} catch (err) {
11597
-
if (err.code === `ENOENT`)
11598
-
return void 0;
11599
-
throw err;
11600
-
}
11601
-
}
11602
-
function resolveToUnqualified(request, issuer, { considerBuiltins = true } = {}) {
11603
-
if (request.startsWith(`#`))
11604
-
throw new Error(`resolveToUnqualified can not handle private import mappings`);
11605
-
if (request === `pnpapi`)
11606
-
return npath.toPortablePath(opts.pnpapiResolution);
11607
-
if (considerBuiltins && isBuiltinModule(request))
11608
-
return null;
11609
-
const requestForDisplay = getPathForDisplay(request);
11610
-
const issuerForDisplay = issuer && getPathForDisplay(issuer);
11611
-
if (issuer && isPathIgnored(issuer)) {
11612
-
if (!ppath.isAbsolute(request) || findPackageLocator(request) === null) {
11613
-
const result = callNativeResolution(request, issuer);
11614
-
if (result === false) {
11615
-
throw makeError(
11616
-
ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED,
11617
-
`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)
11618
-
11619
-
Require request: "${requestForDisplay}"
11620
-
Required by: ${issuerForDisplay}
11621
-
`,
11622
-
{ request: requestForDisplay, issuer: issuerForDisplay }
11623
-
);
11624
-
}
11625
-
return npath.toPortablePath(result);
11626
-
}
11627
-
}
11628
-
let unqualifiedPath;
11629
-
const dependencyNameMatch = request.match(pathRegExp);
11630
-
if (!dependencyNameMatch) {
11631
-
if (ppath.isAbsolute(request)) {
11632
-
unqualifiedPath = ppath.normalize(request);
11633
-
} else {
11634
-
if (!issuer) {
11635
-
throw makeError(
11636
-
ErrorCode.API_ERROR,
11637
-
`The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`,
11638
-
{ request: requestForDisplay, issuer: issuerForDisplay }
11639
-
);
11640
-
}
11641
-
const absoluteIssuer = ppath.resolve(issuer);
11642
-
if (issuer.match(isDirRegExp)) {
11643
-
unqualifiedPath = ppath.normalize(ppath.join(absoluteIssuer, request));
11644
-
} else {
11645
-
unqualifiedPath = ppath.normalize(ppath.join(ppath.dirname(absoluteIssuer), request));
11646
-
}
11647
-
}
11648
-
} else {
11649
-
if (!issuer) {
11650
-
throw makeError(
11651
-
ErrorCode.API_ERROR,
11652
-
`The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute`,
11653
-
{ request: requestForDisplay, issuer: issuerForDisplay }
11654
-
);
11655
-
}
11656
-
const [, dependencyName, subPath] = dependencyNameMatch;
11657
-
const issuerLocator = findPackageLocator(issuer);
11658
-
if (!issuerLocator) {
11659
-
const result = callNativeResolution(request, issuer);
11660
-
if (result === false) {
11661
-
throw makeError(
11662
-
ErrorCode.BUILTIN_NODE_RESOLUTION_FAILED,
11663
-
`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).
11664
-
11665
-
Require path: "${requestForDisplay}"
11666
-
Required by: ${issuerForDisplay}
11667
-
`,
11668
-
{ request: requestForDisplay, issuer: issuerForDisplay }
11669
-
);
11670
-
}
11671
-
return npath.toPortablePath(result);
11672
-
}
11673
-
const issuerInformation = getPackageInformationSafe(issuerLocator);
11674
-
let dependencyReference = issuerInformation.packageDependencies.get(dependencyName);
11675
-
let fallbackReference = null;
11676
-
if (dependencyReference == null) {
11677
-
if (issuerLocator.name !== null) {
11678
-
const exclusionEntry = runtimeState.fallbackExclusionList.get(issuerLocator.name);
11679
-
const canUseFallbacks = !exclusionEntry || !exclusionEntry.has(issuerLocator.reference);
11680
-
if (canUseFallbacks) {
11681
-
for (let t = 0, T = fallbackLocators.length; t < T; ++t) {
11682
-
const fallbackInformation = getPackageInformationSafe(fallbackLocators[t]);
11683
-
const reference = fallbackInformation.packageDependencies.get(dependencyName);
11684
-
if (reference == null)
11685
-
continue;
11686
-
if (alwaysWarnOnFallback)
11687
-
fallbackReference = reference;
11688
-
else
11689
-
dependencyReference = reference;
11690
-
break;
11691
-
}
11692
-
if (runtimeState.enableTopLevelFallback) {
11693
-
if (dependencyReference == null && fallbackReference === null) {
11694
-
const reference = runtimeState.fallbackPool.get(dependencyName);
11695
-
if (reference != null) {
11696
-
fallbackReference = reference;
11697
-
}
11698
-
}
11699
-
}
11700
-
}
11701
-
}
11702
-
}
11703
-
let error = null;
11704
-
if (dependencyReference === null) {
11705
-
if (isDependencyTreeRoot(issuerLocator)) {
11706
-
error = makeError(
11707
-
ErrorCode.MISSING_PEER_DEPENDENCY,
11708
-
`Your application tried to access ${dependencyName} (a peer dependency); this isn't allowed as there is no ancestor to satisfy the requirement. Use a devDependency if needed.
11709
-
11710
-
Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
11711
-
Required by: ${issuerForDisplay}
11712
-
`,
11713
-
{ request: requestForDisplay, issuer: issuerForDisplay, dependencyName }
11714
-
);
11715
-
} else {
11716
-
const brokenAncestors = findBrokenPeerDependencies(dependencyName, issuerLocator);
11717
-
if (brokenAncestors.every((ancestor) => isDependencyTreeRoot(ancestor))) {
11718
-
error = makeError(
11719
-
ErrorCode.MISSING_PEER_DEPENDENCY,
11720
-
`${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.
11721
-
11722
-
Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
11723
-
Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay})
11724
-
${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference}
11725
-
`).join(``)}
11726
-
`,
11727
-
{ request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors }
11728
-
);
11729
-
} else {
11730
-
error = makeError(
11731
-
ErrorCode.MISSING_PEER_DEPENDENCY,
11732
-
`${issuerLocator.name} tried to access ${dependencyName} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.
11733
-
11734
-
Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
11735
-
Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay})
11736
-
11737
-
${brokenAncestors.map((ancestorLocator) => `Ancestor breaking the chain: ${ancestorLocator.name}@${ancestorLocator.reference}
11738
-
`).join(``)}
11739
-
`,
11740
-
{ request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName, brokenAncestors }
11741
-
);
11742
-
}
11743
-
}
11744
-
} else if (dependencyReference === void 0) {
11745
-
if (!considerBuiltins && isBuiltinModule(request)) {
11746
-
if (isDependencyTreeRoot(issuerLocator)) {
11747
-
error = makeError(
11748
-
ErrorCode.UNDECLARED_DEPENDENCY,
11749
-
`Your application tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.
11750
-
11751
-
Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
11752
-
Required by: ${issuerForDisplay}
11753
-
`,
11754
-
{ request: requestForDisplay, issuer: issuerForDisplay, dependencyName }
11755
-
);
11756
-
} else {
11757
-
error = makeError(
11758
-
ErrorCode.UNDECLARED_DEPENDENCY,
11759
-
`${issuerLocator.name} tried to access ${dependencyName}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${dependencyName} isn't otherwise declared in ${issuerLocator.name}'s dependencies, this makes the require call ambiguous and unsound.
11760
-
11761
-
Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
11762
-
Required by: ${issuerForDisplay}
11763
-
`,
11764
-
{ request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName }
11765
-
);
11766
-
}
11767
-
} else {
11768
-
if (isDependencyTreeRoot(issuerLocator)) {
11769
-
error = makeError(
11770
-
ErrorCode.UNDECLARED_DEPENDENCY,
11771
-
`Your application tried to access ${dependencyName}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.
11772
-
11773
-
Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
11774
-
Required by: ${issuerForDisplay}
11775
-
`,
11776
-
{ request: requestForDisplay, issuer: issuerForDisplay, dependencyName }
11777
-
);
11778
-
} else {
11779
-
error = makeError(
11780
-
ErrorCode.UNDECLARED_DEPENDENCY,
11781
-
`${issuerLocator.name} tried to access ${dependencyName}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.
11782
-
11783
-
Required package: ${dependencyName}${dependencyName !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
11784
-
Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay})
11785
-
`,
11786
-
{ request: requestForDisplay, issuer: issuerForDisplay, issuerLocator: Object.assign({}, issuerLocator), dependencyName }
11787
-
);
11788
-
}
11789
-
}
11790
-
}
11791
-
if (dependencyReference == null) {
11792
-
if (fallbackReference === null || error === null)
11793
-
throw error || new Error(`Assertion failed: Expected an error to have been set`);
11794
-
dependencyReference = fallbackReference;
11795
-
const message = error.message.replace(/\n.*/g, ``);
11796
-
error.message = message;
11797
-
if (!emittedWarnings.has(message) && debugLevel !== 0) {
11798
-
emittedWarnings.add(message);
11799
-
process.emitWarning(error);
11800
-
}
11801
-
}
11802
-
const dependencyLocator = Array.isArray(dependencyReference) ? { name: dependencyReference[0], reference: dependencyReference[1] } : { name: dependencyName, reference: dependencyReference };
11803
-
const dependencyInformation = getPackageInformationSafe(dependencyLocator);
11804
-
if (!dependencyInformation.packageLocation) {
11805
-
throw makeError(
11806
-
ErrorCode.MISSING_DEPENDENCY,
11807
-
`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.
11808
-
11809
-
Required package: ${dependencyLocator.name}@${dependencyLocator.reference}${dependencyLocator.name !== requestForDisplay ? ` (via "${requestForDisplay}")` : ``}
11810
-
Required by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuerForDisplay})
11811
-
`,
11812
-
{ request: requestForDisplay, issuer: issuerForDisplay, dependencyLocator: Object.assign({}, dependencyLocator) }
11813
-
);
11814
-
}
11815
-
const dependencyLocation = dependencyInformation.packageLocation;
11816
-
if (subPath) {
11817
-
unqualifiedPath = ppath.join(dependencyLocation, subPath);
11818
-
} else {
11819
-
unqualifiedPath = dependencyLocation;
11820
-
}
11821
-
}
11822
-
return ppath.normalize(unqualifiedPath);
11823
-
}
11824
-
function resolveUnqualifiedExport(request, unqualifiedPath, conditions = defaultExportsConditions) {
11825
-
if (isStrictRegExp.test(request))
11826
-
return unqualifiedPath;
11827
-
const unqualifiedExportPath = applyNodeExportsResolution(unqualifiedPath, conditions);
11828
-
if (unqualifiedExportPath) {
11829
-
return ppath.normalize(unqualifiedExportPath);
11830
-
} else {
11831
-
return unqualifiedPath;
11832
-
}
11833
-
}
11834
-
function resolveUnqualified(unqualifiedPath, { extensions = Object.keys(require$$0.Module._extensions) } = {}) {
11835
-
var _a, _b;
11836
-
const candidates = [];
11837
-
const qualifiedPath = applyNodeExtensionResolution(unqualifiedPath, candidates, { extensions });
11838
-
if (qualifiedPath) {
11839
-
return ppath.normalize(qualifiedPath);
11840
-
} else {
11841
-
reportRequiredFilesToWatchMode(candidates.map((candidate) => npath.fromPortablePath(candidate)));
11842
-
const unqualifiedPathForDisplay = getPathForDisplay(unqualifiedPath);
11843
-
const containingPackage = findPackageLocator(unqualifiedPath);
11844
-
if (containingPackage) {
11845
-
const { packageLocation } = getPackageInformationSafe(containingPackage);
11846
-
let exists = true;
11847
-
try {
11848
-
opts.fakeFs.accessSync(packageLocation);
11849
-
} catch (err) {
11850
-
if ((err == null ? void 0 : err.code) === `ENOENT`) {
11851
-
exists = false;
11852
-
} else {
11853
-
const readableError = ((_b = (_a = err == null ? void 0 : err.message) != null ? _a : err) != null ? _b : `empty exception thrown`).replace(/^[A-Z]/, ($0) => $0.toLowerCase());
11854
-
throw makeError(ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED, `Required package exists but could not be accessed (${readableError}).
11855
-
11856
-
Missing package: ${containingPackage.name}@${containingPackage.reference}
11857
-
Expected package location: ${getPathForDisplay(packageLocation)}
11858
-
`, { unqualifiedPath: unqualifiedPathForDisplay, extensions });
11859
-
}
11860
-
}
11861
-
if (!exists) {
11862
-
const errorMessage = packageLocation.includes(`/unplugged/`) ? `Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).` : `Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.`;
11863
-
throw makeError(
11864
-
ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED,
11865
-
`${errorMessage}
11866
-
11867
-
Missing package: ${containingPackage.name}@${containingPackage.reference}
11868
-
Expected package location: ${getPathForDisplay(packageLocation)}
11869
-
`,
11870
-
{ unqualifiedPath: unqualifiedPathForDisplay, extensions }
11871
-
);
11872
-
}
11873
-
}
11874
-
throw makeError(
11875
-
ErrorCode.QUALIFIED_PATH_RESOLUTION_FAILED,
11876
-
`Qualified path resolution failed: we looked for the following paths, but none could be accessed.
11877
-
11878
-
Source path: ${unqualifiedPathForDisplay}
11879
-
${candidates.map((candidate) => `Not found: ${getPathForDisplay(candidate)}
11880
-
`).join(``)}`,
11881
-
{ unqualifiedPath: unqualifiedPathForDisplay, extensions }
11882
-
);
11883
-
}
11884
-
}
11885
-
function resolvePrivateRequest(request, issuer, opts2) {
11886
-
var _a;
11887
-
if (!issuer)
11888
-
throw new Error(`Assertion failed: An issuer is required to resolve private import mappings`);
11889
-
const resolved = packageImportsResolve({
11890
-
name: request,
11891
-
base: url.pathToFileURL(npath.fromPortablePath(issuer)),
11892
-
conditions: (_a = opts2.conditions) != null ? _a : defaultExportsConditions,
11893
-
readFileSyncFn: tryReadFile
11894
-
});
11895
-
if (resolved instanceof url.URL) {
11896
-
return resolveUnqualified(npath.toPortablePath(url.fileURLToPath(resolved)), { extensions: opts2.extensions });
11897
-
} else {
11898
-
if (resolved.startsWith(`#`))
11899
-
throw new Error(`Mapping from one private import to another isn't allowed`);
11900
-
return resolveRequest(resolved, issuer, opts2);
11901
-
}
11902
-
}
11903
-
function resolveRequest(request, issuer, opts2 = {}) {
11904
-
try {
11905
-
if (request.startsWith(`#`))
11906
-
return resolvePrivateRequest(request, issuer, opts2);
11907
-
const { considerBuiltins, extensions, conditions } = opts2;
11908
-
const unqualifiedPath = resolveToUnqualified(request, issuer, { considerBuiltins });
11909
-
if (request === `pnpapi`)
11910
-
return unqualifiedPath;
11911
-
if (unqualifiedPath === null)
11912
-
return null;
11913
-
const isIssuerIgnored = () => issuer !== null ? isPathIgnored(issuer) : false;
11914
-
const remappedPath = (!considerBuiltins || !isBuiltinModule(request)) && !isIssuerIgnored() ? resolveUnqualifiedExport(request, unqualifiedPath, conditions) : unqualifiedPath;
11915
-
return resolveUnqualified(remappedPath, { extensions });
11916
-
} catch (error) {
11917
-
if (Object.prototype.hasOwnProperty.call(error, `pnpCode`))
11918
-
Object.assign(error.data, { request: getPathForDisplay(request), issuer: issuer && getPathForDisplay(issuer) });
11919
-
throw error;
11920
-
}
11921
-
}
11922
-
function resolveVirtual(request) {
11923
-
const normalized = ppath.normalize(request);
11924
-
const resolved = VirtualFS.resolveVirtual(normalized);
11925
-
return resolved !== normalized ? resolved : null;
11926
-
}
11927
-
return {
11928
-
VERSIONS,
11929
-
topLevel,
11930
-
getLocator: (name, referencish) => {
11931
-
if (Array.isArray(referencish)) {
11932
-
return { name: referencish[0], reference: referencish[1] };
11933
-
} else {
11934
-
return { name, reference: referencish };
11935
-
}
11936
-
},
11937
-
getDependencyTreeRoots: () => {
11938
-
return [...runtimeState.dependencyTreeRoots];
11939
-
},
11940
-
getAllLocators() {
11941
-
const locators = [];
11942
-
for (const [name, entry] of packageRegistry)
11943
-
for (const reference of entry.keys())
11944
-
if (name !== null && reference !== null)
11945
-
locators.push({ name, reference });
11946
-
return locators;
11947
-
},
11948
-
getPackageInformation: (locator) => {
11949
-
const info = getPackageInformation(locator);
11950
-
if (info === null)
11951
-
return null;
11952
-
const packageLocation = npath.fromPortablePath(info.packageLocation);
11953
-
const nativeInfo = { ...info, packageLocation };
11954
-
return nativeInfo;
11955
-
},
11956
-
findPackageLocator: (path) => {
11957
-
return findPackageLocator(npath.toPortablePath(path));
11958
-
},
11959
-
resolveToUnqualified: maybeLog(`resolveToUnqualified`, (request, issuer, opts2) => {
11960
-
const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null;
11961
-
const resolution = resolveToUnqualified(npath.toPortablePath(request), portableIssuer, opts2);
11962
-
if (resolution === null)
11963
-
return null;
11964
-
return npath.fromPortablePath(resolution);
11965
-
}),
11966
-
resolveUnqualified: maybeLog(`resolveUnqualified`, (unqualifiedPath, opts2) => {
11967
-
return npath.fromPortablePath(resolveUnqualified(npath.toPortablePath(unqualifiedPath), opts2));
11968
-
}),
11969
-
resolveRequest: maybeLog(`resolveRequest`, (request, issuer, opts2) => {
11970
-
const portableIssuer = issuer !== null ? npath.toPortablePath(issuer) : null;
11971
-
const resolution = resolveRequest(npath.toPortablePath(request), portableIssuer, opts2);
11972
-
if (resolution === null)
11973
-
return null;
11974
-
return npath.fromPortablePath(resolution);
11975
-
}),
11976
-
resolveVirtual: maybeLog(`resolveVirtual`, (path) => {
11977
-
const result = resolveVirtual(npath.toPortablePath(path));
11978
-
if (result !== null) {
11979
-
return npath.fromPortablePath(result);
11980
-
} else {
11981
-
return null;
11982
-
}
11983
-
})
11984
-
};
11985
-
}
11986
-
11987
-
function makeManager(pnpapi, opts) {
11988
-
const initialApiPath = npath.toPortablePath(pnpapi.resolveToUnqualified(`pnpapi`, null));
11989
-
const initialApiStats = opts.fakeFs.statSync(npath.toPortablePath(initialApiPath));
11990
-
const apiMetadata = /* @__PURE__ */ new Map([
11991
-
[initialApiPath, {
11992
-
cache: require$$0.Module._cache,
11993
-
instance: pnpapi,
11994
-
stats: initialApiStats,
11995
-
lastRefreshCheck: Date.now()
11996
-
}]
11997
-
]);
11998
-
function loadApiInstance(pnpApiPath) {
11999
-
const nativePath = npath.fromPortablePath(pnpApiPath);
12000
-
const module = new require$$0.Module(nativePath, null);
12001
-
module.load(nativePath);
12002
-
return module.exports;
12003
-
}
12004
-
function refreshApiEntry(pnpApiPath, apiEntry) {
12005
-
const timeNow = Date.now();
12006
-
if (timeNow - apiEntry.lastRefreshCheck < 500)
12007
-
return;
12008
-
apiEntry.lastRefreshCheck = timeNow;
12009
-
const stats = opts.fakeFs.statSync(pnpApiPath);
12010
-
if (stats.mtime > apiEntry.stats.mtime) {
12011
-
process.emitWarning(`[Warning] The runtime detected new informations in a PnP file; reloading the API instance (${npath.fromPortablePath(pnpApiPath)})`);
12012
-
apiEntry.stats = stats;
12013
-
apiEntry.instance = loadApiInstance(pnpApiPath);
12014
-
}
12015
-
}
12016
-
function getApiEntry(pnpApiPath, refresh = false) {
12017
-
let apiEntry = apiMetadata.get(pnpApiPath);
12018
-
if (typeof apiEntry !== `undefined`) {
12019
-
if (refresh) {
12020
-
refreshApiEntry(pnpApiPath, apiEntry);
12021
-
}
12022
-
} else {
12023
-
apiMetadata.set(pnpApiPath, apiEntry = {
12024
-
cache: {},
12025
-
instance: loadApiInstance(pnpApiPath),
12026
-
stats: opts.fakeFs.statSync(pnpApiPath),
12027
-
lastRefreshCheck: Date.now()
12028
-
});
12029
-
}
12030
-
return apiEntry;
12031
-
}
12032
-
const findApiPathCache = /* @__PURE__ */ new Map();
12033
-
function addToCacheAndReturn(start, end, target) {
12034
-
if (target !== null)
12035
-
target = VirtualFS.resolveVirtual(target);
12036
-
let curr;
12037
-
let next = start;
12038
-
do {
12039
-
curr = next;
12040
-
findApiPathCache.set(curr, target);
12041
-
next = ppath.dirname(curr);
12042
-
} while (curr !== end);
12043
-
return target;
12044
-
}
12045
-
function findApiPathFor(modulePath) {
12046
-
let bestCandidate = null;
12047
-
for (const [apiPath, apiEntry] of apiMetadata) {
12048
-
const locator = apiEntry.instance.findPackageLocator(modulePath);
12049
-
if (!locator)
12050
-
continue;
12051
-
if (apiMetadata.size === 1)
12052
-
return apiPath;
12053
-
const packageInformation = apiEntry.instance.getPackageInformation(locator);
12054
-
if (!packageInformation)
12055
-
throw new Error(`Assertion failed: Couldn't get package information for '${modulePath}'`);
12056
-
if (!bestCandidate)
12057
-
bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [] };
12058
-
if (packageInformation.packageLocation === bestCandidate.packageLocation) {
12059
-
bestCandidate.apiPaths.push(apiPath);
12060
-
} else if (packageInformation.packageLocation.length > bestCandidate.packageLocation.length) {
12061
-
bestCandidate = { packageLocation: packageInformation.packageLocation, apiPaths: [apiPath] };
12062
-
}
12063
-
}
12064
-
if (bestCandidate) {
12065
-
if (bestCandidate.apiPaths.length === 1)
12066
-
return bestCandidate.apiPaths[0];
12067
-
const controlSegment = bestCandidate.apiPaths.map((apiPath) => ` ${npath.fromPortablePath(apiPath)}`).join(`
12068
-
`);
12069
-
throw new Error(`Unable to locate pnpapi, the module '${modulePath}' is controlled by multiple pnpapi instances.
12070
-
This is usually caused by using the global cache (enableGlobalCache: true)
12071
-
12072
-
Controlled by:
12073
-
${controlSegment}
12074
-
`);
12075
-
}
12076
-
const start = ppath.resolve(npath.toPortablePath(modulePath));
12077
-
let curr;
12078
-
let next = start;
12079
-
do {
12080
-
curr = next;
12081
-
const cached = findApiPathCache.get(curr);
12082
-
if (cached !== void 0)
12083
-
return addToCacheAndReturn(start, curr, cached);
12084
-
const cjsCandidate = ppath.join(curr, Filename.pnpCjs);
12085
-
if (opts.fakeFs.existsSync(cjsCandidate) && opts.fakeFs.statSync(cjsCandidate).isFile())
12086
-
return addToCacheAndReturn(start, curr, cjsCandidate);
12087
-
const legacyCjsCandidate = ppath.join(curr, Filename.pnpJs);
12088
-
if (opts.fakeFs.existsSync(legacyCjsCandidate) && opts.fakeFs.statSync(legacyCjsCandidate).isFile())
12089
-
return addToCacheAndReturn(start, curr, legacyCjsCandidate);
12090
-
next = ppath.dirname(curr);
12091
-
} while (curr !== PortablePath.root);
12092
-
return addToCacheAndReturn(start, curr, null);
12093
-
}
12094
-
function getApiPathFromParent(parent) {
12095
-
if (parent == null)
12096
-
return initialApiPath;
12097
-
if (typeof parent.pnpApiPath === `undefined`) {
12098
-
if (parent.filename !== null) {
12099
-
return parent.pnpApiPath = findApiPathFor(parent.filename);
12100
-
} else {
12101
-
return initialApiPath;
12102
-
}
12103
-
}
12104
-
if (parent.pnpApiPath !== null)
12105
-
return parent.pnpApiPath;
12106
-
return null;
12107
-
}
12108
-
return {
12109
-
getApiPathFromParent,
12110
-
findApiPathFor,
12111
-
getApiEntry
12112
-
};
12113
-
}
12114
-
12115
-
const localFs = { ...fs__default.default };
12116
-
const nodeFs = new NodeFS(localFs);
12117
-
const defaultRuntimeState = $$SETUP_STATE(hydrateRuntimeState);
12118
-
const defaultPnpapiResolution = __filename;
12119
-
const defaultFsLayer = new VirtualFS({
12120
-
baseFs: new ZipOpenFS({
12121
-
baseFs: nodeFs,
12122
-
libzip: () => getLibzipSync(),
12123
-
maxOpenFiles: 80,
12124
-
readOnlyArchives: true
12125
-
})
12126
-
});
12127
-
class DynamicFS extends ProxiedFS {
12128
-
constructor() {
12129
-
super(ppath);
12130
-
this.baseFs = defaultFsLayer;
12131
-
}
12132
-
mapToBase(p) {
12133
-
return p;
12134
-
}
12135
-
mapFromBase(p) {
12136
-
return p;
12137
-
}
12138
-
}
12139
-
const dynamicFsLayer = new DynamicFS();
12140
-
let manager;
12141
-
const defaultApi = Object.assign(makeApi(defaultRuntimeState, {
12142
-
fakeFs: dynamicFsLayer,
12143
-
pnpapiResolution: defaultPnpapiResolution
12144
-
}), {
12145
-
makeApi: ({
12146
-
basePath = void 0,
12147
-
fakeFs = dynamicFsLayer,
12148
-
pnpapiResolution = defaultPnpapiResolution,
12149
-
...rest
12150
-
}) => {
12151
-
const apiRuntimeState = typeof basePath !== `undefined` ? $$SETUP_STATE(hydrateRuntimeState, basePath) : defaultRuntimeState;
12152
-
return makeApi(apiRuntimeState, {
12153
-
fakeFs,
12154
-
pnpapiResolution,
12155
-
...rest
12156
-
});
12157
-
},
12158
-
setup: (api) => {
12159
-
applyPatch(api || defaultApi, {
12160
-
fakeFs: defaultFsLayer,
12161
-
manager
12162
-
});
12163
-
dynamicFsLayer.baseFs = new NodeFS(fs__default.default);
12164
-
}
12165
-
});
12166
-
manager = makeManager(defaultApi, {
12167
-
fakeFs: dynamicFsLayer
12168
-
});
12169
-
if (module.parent && module.parent.id === `internal/preload`) {
12170
-
defaultApi.setup();
12171
-
if (module.filename) {
12172
-
delete require$$0__default.default._cache[module.filename];
12173
-
}
12174
-
}
12175
-
if (process.mainModule === module) {
12176
-
const reportError = (code, message, data) => {
12177
-
process.stdout.write(`${JSON.stringify([{ code, message, data }, null])}
12178
-
`);
12179
-
};
12180
-
const reportSuccess = (resolution) => {
12181
-
process.stdout.write(`${JSON.stringify([null, resolution])}
12182
-
`);
12183
-
};
12184
-
const processResolution = (request, issuer) => {
12185
-
try {
12186
-
reportSuccess(defaultApi.resolveRequest(request, issuer));
12187
-
} catch (error) {
12188
-
reportError(error.code, error.message, error.data);
12189
-
}
12190
-
};
12191
-
const processRequest = (data) => {
12192
-
try {
12193
-
const [request, issuer] = JSON.parse(data);
12194
-
processResolution(request, issuer);
12195
-
} catch (error) {
12196
-
reportError(`INVALID_JSON`, error.message, error.data);
12197
-
}
12198
-
};
12199
-
if (process.argv.length > 2) {
12200
-
if (process.argv.length !== 4) {
12201
-
process.stderr.write(`Usage: ${process.argv[0]} ${process.argv[1]} <request> <issuer>
12202
-
`);
12203
-
process.exitCode = 64;
12204
-
} else {
12205
-
processResolution(process.argv[2], process.argv[3]);
12206
-
}
12207
-
} else {
12208
-
let buffer = ``;
12209
-
const decoder = new StringDecoder__default.default.StringDecoder();
12210
-
process.stdin.on(`data`, (chunk) => {
12211
-
buffer += decoder.write(chunk);
12212
-
do {
12213
-
const index = buffer.indexOf(`
12214
-
`);
12215
-
if (index === -1)
12216
-
break;
12217
-
const line = buffer.slice(0, index);
12218
-
buffer = buffer.slice(index + 1);
12219
-
processRequest(line);
12220
-
} while (true);
12221
-
});
12222
-
}
12223
-
}
12224
-
12225
-
module.exports = defaultApi;
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
-2040
buttplug/buttplug-device-config/.pnp.loader.mjs
···
1
-
import { URL as URL$1, fileURLToPath, pathToFileURL } from 'url';
2
-
import fs from 'fs';
3
-
import path from 'path';
4
-
import moduleExports, { Module } from 'module';
5
-
import { EOL } from 'os';
6
-
import assert from 'assert';
7
-
8
-
const SAFE_TIME = 456789e3;
9
-
10
-
const PortablePath = {
11
-
root: `/`,
12
-
dot: `.`,
13
-
parent: `..`
14
-
};
15
-
const npath = Object.create(path);
16
-
const ppath = Object.create(path.posix);
17
-
npath.cwd = () => process.cwd();
18
-
ppath.cwd = () => toPortablePath(process.cwd());
19
-
ppath.resolve = (...segments) => {
20
-
if (segments.length > 0 && ppath.isAbsolute(segments[0])) {
21
-
return path.posix.resolve(...segments);
22
-
} else {
23
-
return path.posix.resolve(ppath.cwd(), ...segments);
24
-
}
25
-
};
26
-
const contains = function(pathUtils, from, to) {
27
-
from = pathUtils.normalize(from);
28
-
to = pathUtils.normalize(to);
29
-
if (from === to)
30
-
return `.`;
31
-
if (!from.endsWith(pathUtils.sep))
32
-
from = from + pathUtils.sep;
33
-
if (to.startsWith(from)) {
34
-
return to.slice(from.length);
35
-
} else {
36
-
return null;
37
-
}
38
-
};
39
-
npath.fromPortablePath = fromPortablePath;
40
-
npath.toPortablePath = toPortablePath;
41
-
npath.contains = (from, to) => contains(npath, from, to);
42
-
ppath.contains = (from, to) => contains(ppath, from, to);
43
-
const WINDOWS_PATH_REGEXP = /^([a-zA-Z]:.*)$/;
44
-
const UNC_WINDOWS_PATH_REGEXP = /^\/\/(\.\/)?(.*)$/;
45
-
const PORTABLE_PATH_REGEXP = /^\/([a-zA-Z]:.*)$/;
46
-
const UNC_PORTABLE_PATH_REGEXP = /^\/unc\/(\.dot\/)?(.*)$/;
47
-
function fromPortablePath(p) {
48
-
if (process.platform !== `win32`)
49
-
return p;
50
-
let portablePathMatch, uncPortablePathMatch;
51
-
if (portablePathMatch = p.match(PORTABLE_PATH_REGEXP))
52
-
p = portablePathMatch[1];
53
-
else if (uncPortablePathMatch = p.match(UNC_PORTABLE_PATH_REGEXP))
54
-
p = `\\\\${uncPortablePathMatch[1] ? `.\\` : ``}${uncPortablePathMatch[2]}`;
55
-
else
56
-
return p;
57
-
return p.replace(/\//g, `\\`);
58
-
}
59
-
function toPortablePath(p) {
60
-
if (process.platform !== `win32`)
61
-
return p;
62
-
p = p.replace(/\\/g, `/`);
63
-
let windowsPathMatch, uncWindowsPathMatch;
64
-
if (windowsPathMatch = p.match(WINDOWS_PATH_REGEXP))
65
-
p = `/${windowsPathMatch[1]}`;
66
-
else if (uncWindowsPathMatch = p.match(UNC_WINDOWS_PATH_REGEXP))
67
-
p = `/unc/${uncWindowsPathMatch[1] ? `.dot/` : ``}${uncWindowsPathMatch[2]}`;
68
-
return p;
69
-
}
70
-
function convertPath(targetPathUtils, sourcePath) {
71
-
return targetPathUtils === npath ? fromPortablePath(sourcePath) : toPortablePath(sourcePath);
72
-
}
73
-
74
-
const defaultTime = new Date(SAFE_TIME * 1e3);
75
-
async function copyPromise(destinationFs, destination, sourceFs, source, opts) {
76
-
const normalizedDestination = destinationFs.pathUtils.normalize(destination);
77
-
const normalizedSource = sourceFs.pathUtils.normalize(source);
78
-
const prelayout = [];
79
-
const postlayout = [];
80
-
const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : await sourceFs.lstatPromise(normalizedSource);
81
-
await destinationFs.mkdirpPromise(destinationFs.pathUtils.dirname(destination), { utimes: [atime, mtime] });
82
-
const updateTime = typeof destinationFs.lutimesPromise === `function` ? destinationFs.lutimesPromise.bind(destinationFs) : destinationFs.utimesPromise.bind(destinationFs);
83
-
await copyImpl(prelayout, postlayout, updateTime, destinationFs, normalizedDestination, sourceFs, normalizedSource, { ...opts, didParentExist: true });
84
-
for (const operation of prelayout)
85
-
await operation();
86
-
await Promise.all(postlayout.map((operation) => {
87
-
return operation();
88
-
}));
89
-
}
90
-
async function copyImpl(prelayout, postlayout, updateTime, destinationFs, destination, sourceFs, source, opts) {
91
-
var _a, _b;
92
-
const destinationStat = opts.didParentExist ? await maybeLStat(destinationFs, destination) : null;
93
-
const sourceStat = await sourceFs.lstatPromise(source);
94
-
const { atime, mtime } = opts.stableTime ? { atime: defaultTime, mtime: defaultTime } : sourceStat;
95
-
let updated;
96
-
switch (true) {
97
-
case sourceStat.isDirectory():
98
-
{
99
-
updated = await copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
100
-
}
101
-
break;
102
-
case sourceStat.isFile():
103
-
{
104
-
updated = await copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
105
-
}
106
-
break;
107
-
case sourceStat.isSymbolicLink():
108
-
{
109
-
updated = await copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts);
110
-
}
111
-
break;
112
-
default:
113
-
{
114
-
throw new Error(`Unsupported file type (${sourceStat.mode})`);
115
-
}
116
-
}
117
-
if (updated || ((_a = destinationStat == null ? void 0 : destinationStat.mtime) == null ? void 0 : _a.getTime()) !== mtime.getTime() || ((_b = destinationStat == null ? void 0 : destinationStat.atime) == null ? void 0 : _b.getTime()) !== atime.getTime()) {
118
-
postlayout.push(() => updateTime(destination, atime, mtime));
119
-
updated = true;
120
-
}
121
-
if (destinationStat === null || (destinationStat.mode & 511) !== (sourceStat.mode & 511)) {
122
-
postlayout.push(() => destinationFs.chmodPromise(destination, sourceStat.mode & 511));
123
-
updated = true;
124
-
}
125
-
return updated;
126
-
}
127
-
async function maybeLStat(baseFs, p) {
128
-
try {
129
-
return await baseFs.lstatPromise(p);
130
-
} catch (e) {
131
-
return null;
132
-
}
133
-
}
134
-
async function copyFolder(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
135
-
if (destinationStat !== null && !destinationStat.isDirectory()) {
136
-
if (opts.overwrite) {
137
-
prelayout.push(async () => destinationFs.removePromise(destination));
138
-
destinationStat = null;
139
-
} else {
140
-
return false;
141
-
}
142
-
}
143
-
let updated = false;
144
-
if (destinationStat === null) {
145
-
prelayout.push(async () => {
146
-
try {
147
-
await destinationFs.mkdirPromise(destination, { mode: sourceStat.mode });
148
-
} catch (err) {
149
-
if (err.code !== `EEXIST`) {
150
-
throw err;
151
-
}
152
-
}
153
-
});
154
-
updated = true;
155
-
}
156
-
const entries = await sourceFs.readdirPromise(source);
157
-
const nextOpts = opts.didParentExist && !destinationStat ? { ...opts, didParentExist: false } : opts;
158
-
if (opts.stableSort) {
159
-
for (const entry of entries.sort()) {
160
-
if (await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts)) {
161
-
updated = true;
162
-
}
163
-
}
164
-
} else {
165
-
const entriesUpdateStatus = await Promise.all(entries.map(async (entry) => {
166
-
await copyImpl(prelayout, postlayout, updateTime, destinationFs, destinationFs.pathUtils.join(destination, entry), sourceFs, sourceFs.pathUtils.join(source, entry), nextOpts);
167
-
}));
168
-
if (entriesUpdateStatus.some((status) => status)) {
169
-
updated = true;
170
-
}
171
-
}
172
-
return updated;
173
-
}
174
-
const isCloneSupportedCache = /* @__PURE__ */ new WeakMap();
175
-
function makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy) {
176
-
return async () => {
177
-
await opFs.linkPromise(source, destination);
178
-
if (linkStrategy === "readOnly" /* ReadOnly */) {
179
-
sourceStat.mode &= ~146;
180
-
await opFs.chmodPromise(destination, sourceStat.mode);
181
-
}
182
-
};
183
-
}
184
-
function makeCloneLinkOperation(opFs, destination, source, sourceStat, linkStrategy) {
185
-
const isCloneSupported = isCloneSupportedCache.get(opFs);
186
-
if (typeof isCloneSupported === `undefined`) {
187
-
return async () => {
188
-
try {
189
-
await opFs.copyFilePromise(source, destination, fs.constants.COPYFILE_FICLONE_FORCE);
190
-
isCloneSupportedCache.set(opFs, true);
191
-
} catch (err) {
192
-
if (err.code === `ENOSYS` || err.code === `ENOTSUP`) {
193
-
isCloneSupportedCache.set(opFs, false);
194
-
await makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy)();
195
-
} else {
196
-
throw err;
197
-
}
198
-
}
199
-
};
200
-
} else {
201
-
if (isCloneSupported) {
202
-
return async () => opFs.copyFilePromise(source, destination, fs.constants.COPYFILE_FICLONE_FORCE);
203
-
} else {
204
-
return makeLinkOperation(opFs, destination, source, sourceStat, linkStrategy);
205
-
}
206
-
}
207
-
}
208
-
async function copyFile(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
209
-
var _a;
210
-
if (destinationStat !== null) {
211
-
if (opts.overwrite) {
212
-
prelayout.push(async () => destinationFs.removePromise(destination));
213
-
destinationStat = null;
214
-
} else {
215
-
return false;
216
-
}
217
-
}
218
-
const linkStrategy = (_a = opts.linkStrategy) != null ? _a : null;
219
-
const op = destinationFs === sourceFs ? linkStrategy !== null ? makeCloneLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.copyFilePromise(source, destination, fs.constants.COPYFILE_FICLONE) : linkStrategy !== null ? makeLinkOperation(destinationFs, destination, source, sourceStat, linkStrategy) : async () => destinationFs.writeFilePromise(destination, await sourceFs.readFilePromise(source));
220
-
prelayout.push(async () => op());
221
-
return true;
222
-
}
223
-
async function copySymlink(prelayout, postlayout, updateTime, destinationFs, destination, destinationStat, sourceFs, source, sourceStat, opts) {
224
-
if (destinationStat !== null) {
225
-
if (opts.overwrite) {
226
-
prelayout.push(async () => destinationFs.removePromise(destination));
227
-
destinationStat = null;
228
-
} else {
229
-
return false;
230
-
}
231
-
}
232
-
prelayout.push(async () => {
233
-
await destinationFs.symlinkPromise(convertPath(destinationFs.pathUtils, await sourceFs.readlinkPromise(source)), destination);
234
-
});
235
-
return true;
236
-
}
237
-
238
-
function makeError(code, message) {
239
-
return Object.assign(new Error(`${code}: ${message}`), { code });
240
-
}
241
-
function ENOSYS(message, reason) {
242
-
return makeError(`ENOSYS`, `${message}, ${reason}`);
243
-
}
244
-
245
-
class FakeFS {
246
-
constructor(pathUtils) {
247
-
this.pathUtils = pathUtils;
248
-
}
249
-
async *genTraversePromise(init, { stableSort = false } = {}) {
250
-
const stack = [init];
251
-
while (stack.length > 0) {
252
-
const p = stack.shift();
253
-
const entry = await this.lstatPromise(p);
254
-
if (entry.isDirectory()) {
255
-
const entries = await this.readdirPromise(p);
256
-
if (stableSort) {
257
-
for (const entry2 of entries.sort()) {
258
-
stack.push(this.pathUtils.join(p, entry2));
259
-
}
260
-
} else {
261
-
throw new Error(`Not supported`);
262
-
}
263
-
} else {
264
-
yield p;
265
-
}
266
-
}
267
-
}
268
-
async removePromise(p, { recursive = true, maxRetries = 5 } = {}) {
269
-
let stat;
270
-
try {
271
-
stat = await this.lstatPromise(p);
272
-
} catch (error) {
273
-
if (error.code === `ENOENT`) {
274
-
return;
275
-
} else {
276
-
throw error;
277
-
}
278
-
}
279
-
if (stat.isDirectory()) {
280
-
if (recursive) {
281
-
const entries = await this.readdirPromise(p);
282
-
await Promise.all(entries.map((entry) => {
283
-
return this.removePromise(this.pathUtils.resolve(p, entry));
284
-
}));
285
-
}
286
-
for (let t = 0; t <= maxRetries; t++) {
287
-
try {
288
-
await this.rmdirPromise(p);
289
-
break;
290
-
} catch (error) {
291
-
if (error.code !== `EBUSY` && error.code !== `ENOTEMPTY`) {
292
-
throw error;
293
-
} else if (t < maxRetries) {
294
-
await new Promise((resolve) => setTimeout(resolve, t * 100));
295
-
}
296
-
}
297
-
}
298
-
} else {
299
-
await this.unlinkPromise(p);
300
-
}
301
-
}
302
-
removeSync(p, { recursive = true } = {}) {
303
-
let stat;
304
-
try {
305
-
stat = this.lstatSync(p);
306
-
} catch (error) {
307
-
if (error.code === `ENOENT`) {
308
-
return;
309
-
} else {
310
-
throw error;
311
-
}
312
-
}
313
-
if (stat.isDirectory()) {
314
-
if (recursive)
315
-
for (const entry of this.readdirSync(p))
316
-
this.removeSync(this.pathUtils.resolve(p, entry));
317
-
this.rmdirSync(p);
318
-
} else {
319
-
this.unlinkSync(p);
320
-
}
321
-
}
322
-
async mkdirpPromise(p, { chmod, utimes } = {}) {
323
-
p = this.resolve(p);
324
-
if (p === this.pathUtils.dirname(p))
325
-
return void 0;
326
-
const parts = p.split(this.pathUtils.sep);
327
-
let createdDirectory;
328
-
for (let u = 2; u <= parts.length; ++u) {
329
-
const subPath = parts.slice(0, u).join(this.pathUtils.sep);
330
-
if (!this.existsSync(subPath)) {
331
-
try {
332
-
await this.mkdirPromise(subPath);
333
-
} catch (error) {
334
-
if (error.code === `EEXIST`) {
335
-
continue;
336
-
} else {
337
-
throw error;
338
-
}
339
-
}
340
-
createdDirectory != null ? createdDirectory : createdDirectory = subPath;
341
-
if (chmod != null)
342
-
await this.chmodPromise(subPath, chmod);
343
-
if (utimes != null) {
344
-
await this.utimesPromise(subPath, utimes[0], utimes[1]);
345
-
} else {
346
-
const parentStat = await this.statPromise(this.pathUtils.dirname(subPath));
347
-
await this.utimesPromise(subPath, parentStat.atime, parentStat.mtime);
348
-
}
349
-
}
350
-
}
351
-
return createdDirectory;
352
-
}
353
-
mkdirpSync(p, { chmod, utimes } = {}) {
354
-
p = this.resolve(p);
355
-
if (p === this.pathUtils.dirname(p))
356
-
return void 0;
357
-
const parts = p.split(this.pathUtils.sep);
358
-
let createdDirectory;
359
-
for (let u = 2; u <= parts.length; ++u) {
360
-
const subPath = parts.slice(0, u).join(this.pathUtils.sep);
361
-
if (!this.existsSync(subPath)) {
362
-
try {
363
-
this.mkdirSync(subPath);
364
-
} catch (error) {
365
-
if (error.code === `EEXIST`) {
366
-
continue;
367
-
} else {
368
-
throw error;
369
-
}
370
-
}
371
-
createdDirectory != null ? createdDirectory : createdDirectory = subPath;
372
-
if (chmod != null)
373
-
this.chmodSync(subPath, chmod);
374
-
if (utimes != null) {
375
-
this.utimesSync(subPath, utimes[0], utimes[1]);
376
-
} else {
377
-
const parentStat = this.statSync(this.pathUtils.dirname(subPath));
378
-
this.utimesSync(subPath, parentStat.atime, parentStat.mtime);
379
-
}
380
-
}
381
-
}
382
-
return createdDirectory;
383
-
}
384
-
async copyPromise(destination, source, { baseFs = this, overwrite = true, stableSort = false, stableTime = false, linkStrategy = null } = {}) {
385
-
return await copyPromise(this, destination, baseFs, source, { overwrite, stableSort, stableTime, linkStrategy });
386
-
}
387
-
copySync(destination, source, { baseFs = this, overwrite = true } = {}) {
388
-
const stat = baseFs.lstatSync(source);
389
-
const exists = this.existsSync(destination);
390
-
if (stat.isDirectory()) {
391
-
this.mkdirpSync(destination);
392
-
const directoryListing = baseFs.readdirSync(source);
393
-
for (const entry of directoryListing) {
394
-
this.copySync(this.pathUtils.join(destination, entry), baseFs.pathUtils.join(source, entry), { baseFs, overwrite });
395
-
}
396
-
} else if (stat.isFile()) {
397
-
if (!exists || overwrite) {
398
-
if (exists)
399
-
this.removeSync(destination);
400
-
const content = baseFs.readFileSync(source);
401
-
this.writeFileSync(destination, content);
402
-
}
403
-
} else if (stat.isSymbolicLink()) {
404
-
if (!exists || overwrite) {
405
-
if (exists)
406
-
this.removeSync(destination);
407
-
const target = baseFs.readlinkSync(source);
408
-
this.symlinkSync(convertPath(this.pathUtils, target), destination);
409
-
}
410
-
} else {
411
-
throw new Error(`Unsupported file type (file: ${source}, mode: 0o${stat.mode.toString(8).padStart(6, `0`)})`);
412
-
}
413
-
const mode = stat.mode & 511;
414
-
this.chmodSync(destination, mode);
415
-
}
416
-
async changeFilePromise(p, content, opts = {}) {
417
-
if (Buffer.isBuffer(content)) {
418
-
return this.changeFileBufferPromise(p, content, opts);
419
-
} else {
420
-
return this.changeFileTextPromise(p, content, opts);
421
-
}
422
-
}
423
-
async changeFileBufferPromise(p, content, { mode } = {}) {
424
-
let current = Buffer.alloc(0);
425
-
try {
426
-
current = await this.readFilePromise(p);
427
-
} catch (error) {
428
-
}
429
-
if (Buffer.compare(current, content) === 0)
430
-
return;
431
-
await this.writeFilePromise(p, content, { mode });
432
-
}
433
-
async changeFileTextPromise(p, content, { automaticNewlines, mode } = {}) {
434
-
let current = ``;
435
-
try {
436
-
current = await this.readFilePromise(p, `utf8`);
437
-
} catch (error) {
438
-
}
439
-
const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content;
440
-
if (current === normalizedContent)
441
-
return;
442
-
await this.writeFilePromise(p, normalizedContent, { mode });
443
-
}
444
-
changeFileSync(p, content, opts = {}) {
445
-
if (Buffer.isBuffer(content)) {
446
-
return this.changeFileBufferSync(p, content, opts);
447
-
} else {
448
-
return this.changeFileTextSync(p, content, opts);
449
-
}
450
-
}
451
-
changeFileBufferSync(p, content, { mode } = {}) {
452
-
let current = Buffer.alloc(0);
453
-
try {
454
-
current = this.readFileSync(p);
455
-
} catch (error) {
456
-
}
457
-
if (Buffer.compare(current, content) === 0)
458
-
return;
459
-
this.writeFileSync(p, content, { mode });
460
-
}
461
-
changeFileTextSync(p, content, { automaticNewlines = false, mode } = {}) {
462
-
let current = ``;
463
-
try {
464
-
current = this.readFileSync(p, `utf8`);
465
-
} catch (error) {
466
-
}
467
-
const normalizedContent = automaticNewlines ? normalizeLineEndings(current, content) : content;
468
-
if (current === normalizedContent)
469
-
return;
470
-
this.writeFileSync(p, normalizedContent, { mode });
471
-
}
472
-
async movePromise(fromP, toP) {
473
-
try {
474
-
await this.renamePromise(fromP, toP);
475
-
} catch (error) {
476
-
if (error.code === `EXDEV`) {
477
-
await this.copyPromise(toP, fromP);
478
-
await this.removePromise(fromP);
479
-
} else {
480
-
throw error;
481
-
}
482
-
}
483
-
}
484
-
moveSync(fromP, toP) {
485
-
try {
486
-
this.renameSync(fromP, toP);
487
-
} catch (error) {
488
-
if (error.code === `EXDEV`) {
489
-
this.copySync(toP, fromP);
490
-
this.removeSync(fromP);
491
-
} else {
492
-
throw error;
493
-
}
494
-
}
495
-
}
496
-
async lockPromise(affectedPath, callback) {
497
-
const lockPath = `${affectedPath}.flock`;
498
-
const interval = 1e3 / 60;
499
-
const startTime = Date.now();
500
-
let fd = null;
501
-
const isAlive = async () => {
502
-
let pid;
503
-
try {
504
-
[pid] = await this.readJsonPromise(lockPath);
505
-
} catch (error) {
506
-
return Date.now() - startTime < 500;
507
-
}
508
-
try {
509
-
process.kill(pid, 0);
510
-
return true;
511
-
} catch (error) {
512
-
return false;
513
-
}
514
-
};
515
-
while (fd === null) {
516
-
try {
517
-
fd = await this.openPromise(lockPath, `wx`);
518
-
} catch (error) {
519
-
if (error.code === `EEXIST`) {
520
-
if (!await isAlive()) {
521
-
try {
522
-
await this.unlinkPromise(lockPath);
523
-
continue;
524
-
} catch (error2) {
525
-
}
526
-
}
527
-
if (Date.now() - startTime < 60 * 1e3) {
528
-
await new Promise((resolve) => setTimeout(resolve, interval));
529
-
} else {
530
-
throw new Error(`Couldn't acquire a lock in a reasonable time (via ${lockPath})`);
531
-
}
532
-
} else {
533
-
throw error;
534
-
}
535
-
}
536
-
}
537
-
await this.writePromise(fd, JSON.stringify([process.pid]));
538
-
try {
539
-
return await callback();
540
-
} finally {
541
-
try {
542
-
await this.closePromise(fd);
543
-
await this.unlinkPromise(lockPath);
544
-
} catch (error) {
545
-
}
546
-
}
547
-
}
548
-
async readJsonPromise(p) {
549
-
const content = await this.readFilePromise(p, `utf8`);
550
-
try {
551
-
return JSON.parse(content);
552
-
} catch (error) {
553
-
error.message += ` (in ${p})`;
554
-
throw error;
555
-
}
556
-
}
557
-
readJsonSync(p) {
558
-
const content = this.readFileSync(p, `utf8`);
559
-
try {
560
-
return JSON.parse(content);
561
-
} catch (error) {
562
-
error.message += ` (in ${p})`;
563
-
throw error;
564
-
}
565
-
}
566
-
async writeJsonPromise(p, data) {
567
-
return await this.writeFilePromise(p, `${JSON.stringify(data, null, 2)}
568
-
`);
569
-
}
570
-
writeJsonSync(p, data) {
571
-
return this.writeFileSync(p, `${JSON.stringify(data, null, 2)}
572
-
`);
573
-
}
574
-
async preserveTimePromise(p, cb) {
575
-
const stat = await this.lstatPromise(p);
576
-
const result = await cb();
577
-
if (typeof result !== `undefined`)
578
-
p = result;
579
-
if (this.lutimesPromise) {
580
-
await this.lutimesPromise(p, stat.atime, stat.mtime);
581
-
} else if (!stat.isSymbolicLink()) {
582
-
await this.utimesPromise(p, stat.atime, stat.mtime);
583
-
}
584
-
}
585
-
async preserveTimeSync(p, cb) {
586
-
const stat = this.lstatSync(p);
587
-
const result = cb();
588
-
if (typeof result !== `undefined`)
589
-
p = result;
590
-
if (this.lutimesSync) {
591
-
this.lutimesSync(p, stat.atime, stat.mtime);
592
-
} else if (!stat.isSymbolicLink()) {
593
-
this.utimesSync(p, stat.atime, stat.mtime);
594
-
}
595
-
}
596
-
}
597
-
class BasePortableFakeFS extends FakeFS {
598
-
constructor() {
599
-
super(ppath);
600
-
}
601
-
}
602
-
function getEndOfLine(content) {
603
-
const matches = content.match(/\r?\n/g);
604
-
if (matches === null)
605
-
return EOL;
606
-
const crlf = matches.filter((nl) => nl === `\r
607
-
`).length;
608
-
const lf = matches.length - crlf;
609
-
return crlf > lf ? `\r
610
-
` : `
611
-
`;
612
-
}
613
-
function normalizeLineEndings(originalContent, newContent) {
614
-
return newContent.replace(/\r?\n/g, getEndOfLine(originalContent));
615
-
}
616
-
617
-
class NodeFS extends BasePortableFakeFS {
618
-
constructor(realFs = fs) {
619
-
super();
620
-
this.realFs = realFs;
621
-
if (typeof this.realFs.lutimes !== `undefined`) {
622
-
this.lutimesPromise = this.lutimesPromiseImpl;
623
-
this.lutimesSync = this.lutimesSyncImpl;
624
-
}
625
-
}
626
-
getExtractHint() {
627
-
return false;
628
-
}
629
-
getRealPath() {
630
-
return PortablePath.root;
631
-
}
632
-
resolve(p) {
633
-
return ppath.resolve(p);
634
-
}
635
-
async openPromise(p, flags, mode) {
636
-
return await new Promise((resolve, reject) => {
637
-
this.realFs.open(npath.fromPortablePath(p), flags, mode, this.makeCallback(resolve, reject));
638
-
});
639
-
}
640
-
openSync(p, flags, mode) {
641
-
return this.realFs.openSync(npath.fromPortablePath(p), flags, mode);
642
-
}
643
-
async opendirPromise(p, opts) {
644
-
return await new Promise((resolve, reject) => {
645
-
if (typeof opts !== `undefined`) {
646
-
this.realFs.opendir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
647
-
} else {
648
-
this.realFs.opendir(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
649
-
}
650
-
}).then((dir) => {
651
-
return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true });
652
-
});
653
-
}
654
-
opendirSync(p, opts) {
655
-
const dir = typeof opts !== `undefined` ? this.realFs.opendirSync(npath.fromPortablePath(p), opts) : this.realFs.opendirSync(npath.fromPortablePath(p));
656
-
return Object.defineProperty(dir, `path`, { value: p, configurable: true, writable: true });
657
-
}
658
-
async readPromise(fd, buffer, offset = 0, length = 0, position = -1) {
659
-
return await new Promise((resolve, reject) => {
660
-
this.realFs.read(fd, buffer, offset, length, position, (error, bytesRead) => {
661
-
if (error) {
662
-
reject(error);
663
-
} else {
664
-
resolve(bytesRead);
665
-
}
666
-
});
667
-
});
668
-
}
669
-
readSync(fd, buffer, offset, length, position) {
670
-
return this.realFs.readSync(fd, buffer, offset, length, position);
671
-
}
672
-
async writePromise(fd, buffer, offset, length, position) {
673
-
return await new Promise((resolve, reject) => {
674
-
if (typeof buffer === `string`) {
675
-
return this.realFs.write(fd, buffer, offset, this.makeCallback(resolve, reject));
676
-
} else {
677
-
return this.realFs.write(fd, buffer, offset, length, position, this.makeCallback(resolve, reject));
678
-
}
679
-
});
680
-
}
681
-
writeSync(fd, buffer, offset, length, position) {
682
-
if (typeof buffer === `string`) {
683
-
return this.realFs.writeSync(fd, buffer, offset);
684
-
} else {
685
-
return this.realFs.writeSync(fd, buffer, offset, length, position);
686
-
}
687
-
}
688
-
async closePromise(fd) {
689
-
await new Promise((resolve, reject) => {
690
-
this.realFs.close(fd, this.makeCallback(resolve, reject));
691
-
});
692
-
}
693
-
closeSync(fd) {
694
-
this.realFs.closeSync(fd);
695
-
}
696
-
createReadStream(p, opts) {
697
-
const realPath = p !== null ? npath.fromPortablePath(p) : p;
698
-
return this.realFs.createReadStream(realPath, opts);
699
-
}
700
-
createWriteStream(p, opts) {
701
-
const realPath = p !== null ? npath.fromPortablePath(p) : p;
702
-
return this.realFs.createWriteStream(realPath, opts);
703
-
}
704
-
async realpathPromise(p) {
705
-
return await new Promise((resolve, reject) => {
706
-
this.realFs.realpath(npath.fromPortablePath(p), {}, this.makeCallback(resolve, reject));
707
-
}).then((path) => {
708
-
return npath.toPortablePath(path);
709
-
});
710
-
}
711
-
realpathSync(p) {
712
-
return npath.toPortablePath(this.realFs.realpathSync(npath.fromPortablePath(p), {}));
713
-
}
714
-
async existsPromise(p) {
715
-
return await new Promise((resolve) => {
716
-
this.realFs.exists(npath.fromPortablePath(p), resolve);
717
-
});
718
-
}
719
-
accessSync(p, mode) {
720
-
return this.realFs.accessSync(npath.fromPortablePath(p), mode);
721
-
}
722
-
async accessPromise(p, mode) {
723
-
return await new Promise((resolve, reject) => {
724
-
this.realFs.access(npath.fromPortablePath(p), mode, this.makeCallback(resolve, reject));
725
-
});
726
-
}
727
-
existsSync(p) {
728
-
return this.realFs.existsSync(npath.fromPortablePath(p));
729
-
}
730
-
async statPromise(p, opts) {
731
-
return await new Promise((resolve, reject) => {
732
-
if (opts) {
733
-
this.realFs.stat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
734
-
} else {
735
-
this.realFs.stat(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
736
-
}
737
-
});
738
-
}
739
-
statSync(p, opts) {
740
-
if (opts) {
741
-
return this.realFs.statSync(npath.fromPortablePath(p), opts);
742
-
} else {
743
-
return this.realFs.statSync(npath.fromPortablePath(p));
744
-
}
745
-
}
746
-
async fstatPromise(fd, opts) {
747
-
return await new Promise((resolve, reject) => {
748
-
if (opts) {
749
-
this.realFs.fstat(fd, opts, this.makeCallback(resolve, reject));
750
-
} else {
751
-
this.realFs.fstat(fd, this.makeCallback(resolve, reject));
752
-
}
753
-
});
754
-
}
755
-
fstatSync(fd, opts) {
756
-
if (opts) {
757
-
return this.realFs.fstatSync(fd, opts);
758
-
} else {
759
-
return this.realFs.fstatSync(fd);
760
-
}
761
-
}
762
-
async lstatPromise(p, opts) {
763
-
return await new Promise((resolve, reject) => {
764
-
if (opts) {
765
-
this.realFs.lstat(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
766
-
} else {
767
-
this.realFs.lstat(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
768
-
}
769
-
});
770
-
}
771
-
lstatSync(p, opts) {
772
-
if (opts) {
773
-
return this.realFs.lstatSync(npath.fromPortablePath(p), opts);
774
-
} else {
775
-
return this.realFs.lstatSync(npath.fromPortablePath(p));
776
-
}
777
-
}
778
-
async fchmodPromise(fd, mask) {
779
-
return await new Promise((resolve, reject) => {
780
-
this.realFs.fchmod(fd, mask, this.makeCallback(resolve, reject));
781
-
});
782
-
}
783
-
fchmodSync(fd, mask) {
784
-
return this.realFs.fchmodSync(fd, mask);
785
-
}
786
-
async chmodPromise(p, mask) {
787
-
return await new Promise((resolve, reject) => {
788
-
this.realFs.chmod(npath.fromPortablePath(p), mask, this.makeCallback(resolve, reject));
789
-
});
790
-
}
791
-
chmodSync(p, mask) {
792
-
return this.realFs.chmodSync(npath.fromPortablePath(p), mask);
793
-
}
794
-
async fchownPromise(fd, uid, gid) {
795
-
return await new Promise((resolve, reject) => {
796
-
this.realFs.fchown(fd, uid, gid, this.makeCallback(resolve, reject));
797
-
});
798
-
}
799
-
fchownSync(fd, uid, gid) {
800
-
return this.realFs.fchownSync(fd, uid, gid);
801
-
}
802
-
async chownPromise(p, uid, gid) {
803
-
return await new Promise((resolve, reject) => {
804
-
this.realFs.chown(npath.fromPortablePath(p), uid, gid, this.makeCallback(resolve, reject));
805
-
});
806
-
}
807
-
chownSync(p, uid, gid) {
808
-
return this.realFs.chownSync(npath.fromPortablePath(p), uid, gid);
809
-
}
810
-
async renamePromise(oldP, newP) {
811
-
return await new Promise((resolve, reject) => {
812
-
this.realFs.rename(npath.fromPortablePath(oldP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject));
813
-
});
814
-
}
815
-
renameSync(oldP, newP) {
816
-
return this.realFs.renameSync(npath.fromPortablePath(oldP), npath.fromPortablePath(newP));
817
-
}
818
-
async copyFilePromise(sourceP, destP, flags = 0) {
819
-
return await new Promise((resolve, reject) => {
820
-
this.realFs.copyFile(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags, this.makeCallback(resolve, reject));
821
-
});
822
-
}
823
-
copyFileSync(sourceP, destP, flags = 0) {
824
-
return this.realFs.copyFileSync(npath.fromPortablePath(sourceP), npath.fromPortablePath(destP), flags);
825
-
}
826
-
async appendFilePromise(p, content, opts) {
827
-
return await new Promise((resolve, reject) => {
828
-
const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
829
-
if (opts) {
830
-
this.realFs.appendFile(fsNativePath, content, opts, this.makeCallback(resolve, reject));
831
-
} else {
832
-
this.realFs.appendFile(fsNativePath, content, this.makeCallback(resolve, reject));
833
-
}
834
-
});
835
-
}
836
-
appendFileSync(p, content, opts) {
837
-
const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
838
-
if (opts) {
839
-
this.realFs.appendFileSync(fsNativePath, content, opts);
840
-
} else {
841
-
this.realFs.appendFileSync(fsNativePath, content);
842
-
}
843
-
}
844
-
async writeFilePromise(p, content, opts) {
845
-
return await new Promise((resolve, reject) => {
846
-
const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
847
-
if (opts) {
848
-
this.realFs.writeFile(fsNativePath, content, opts, this.makeCallback(resolve, reject));
849
-
} else {
850
-
this.realFs.writeFile(fsNativePath, content, this.makeCallback(resolve, reject));
851
-
}
852
-
});
853
-
}
854
-
writeFileSync(p, content, opts) {
855
-
const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
856
-
if (opts) {
857
-
this.realFs.writeFileSync(fsNativePath, content, opts);
858
-
} else {
859
-
this.realFs.writeFileSync(fsNativePath, content);
860
-
}
861
-
}
862
-
async unlinkPromise(p) {
863
-
return await new Promise((resolve, reject) => {
864
-
this.realFs.unlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
865
-
});
866
-
}
867
-
unlinkSync(p) {
868
-
return this.realFs.unlinkSync(npath.fromPortablePath(p));
869
-
}
870
-
async utimesPromise(p, atime, mtime) {
871
-
return await new Promise((resolve, reject) => {
872
-
this.realFs.utimes(npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject));
873
-
});
874
-
}
875
-
utimesSync(p, atime, mtime) {
876
-
this.realFs.utimesSync(npath.fromPortablePath(p), atime, mtime);
877
-
}
878
-
async lutimesPromiseImpl(p, atime, mtime) {
879
-
const lutimes = this.realFs.lutimes;
880
-
if (typeof lutimes === `undefined`)
881
-
throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`);
882
-
return await new Promise((resolve, reject) => {
883
-
lutimes.call(this.realFs, npath.fromPortablePath(p), atime, mtime, this.makeCallback(resolve, reject));
884
-
});
885
-
}
886
-
lutimesSyncImpl(p, atime, mtime) {
887
-
const lutimesSync = this.realFs.lutimesSync;
888
-
if (typeof lutimesSync === `undefined`)
889
-
throw ENOSYS(`unavailable Node binding`, `lutimes '${p}'`);
890
-
lutimesSync.call(this.realFs, npath.fromPortablePath(p), atime, mtime);
891
-
}
892
-
async mkdirPromise(p, opts) {
893
-
return await new Promise((resolve, reject) => {
894
-
this.realFs.mkdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
895
-
});
896
-
}
897
-
mkdirSync(p, opts) {
898
-
return this.realFs.mkdirSync(npath.fromPortablePath(p), opts);
899
-
}
900
-
async rmdirPromise(p, opts) {
901
-
return await new Promise((resolve, reject) => {
902
-
if (opts) {
903
-
this.realFs.rmdir(npath.fromPortablePath(p), opts, this.makeCallback(resolve, reject));
904
-
} else {
905
-
this.realFs.rmdir(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
906
-
}
907
-
});
908
-
}
909
-
rmdirSync(p, opts) {
910
-
return this.realFs.rmdirSync(npath.fromPortablePath(p), opts);
911
-
}
912
-
async linkPromise(existingP, newP) {
913
-
return await new Promise((resolve, reject) => {
914
-
this.realFs.link(npath.fromPortablePath(existingP), npath.fromPortablePath(newP), this.makeCallback(resolve, reject));
915
-
});
916
-
}
917
-
linkSync(existingP, newP) {
918
-
return this.realFs.linkSync(npath.fromPortablePath(existingP), npath.fromPortablePath(newP));
919
-
}
920
-
async symlinkPromise(target, p, type) {
921
-
return await new Promise((resolve, reject) => {
922
-
this.realFs.symlink(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type, this.makeCallback(resolve, reject));
923
-
});
924
-
}
925
-
symlinkSync(target, p, type) {
926
-
return this.realFs.symlinkSync(npath.fromPortablePath(target.replace(/\/+$/, ``)), npath.fromPortablePath(p), type);
927
-
}
928
-
async readFilePromise(p, encoding) {
929
-
return await new Promise((resolve, reject) => {
930
-
const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
931
-
this.realFs.readFile(fsNativePath, encoding, this.makeCallback(resolve, reject));
932
-
});
933
-
}
934
-
readFileSync(p, encoding) {
935
-
const fsNativePath = typeof p === `string` ? npath.fromPortablePath(p) : p;
936
-
return this.realFs.readFileSync(fsNativePath, encoding);
937
-
}
938
-
async readdirPromise(p, opts) {
939
-
return await new Promise((resolve, reject) => {
940
-
if (opts == null ? void 0 : opts.withFileTypes) {
941
-
this.realFs.readdir(npath.fromPortablePath(p), { withFileTypes: true }, this.makeCallback(resolve, reject));
942
-
} else {
943
-
this.realFs.readdir(npath.fromPortablePath(p), this.makeCallback((value) => resolve(value), reject));
944
-
}
945
-
});
946
-
}
947
-
readdirSync(p, opts) {
948
-
if (opts == null ? void 0 : opts.withFileTypes) {
949
-
return this.realFs.readdirSync(npath.fromPortablePath(p), { withFileTypes: true });
950
-
} else {
951
-
return this.realFs.readdirSync(npath.fromPortablePath(p));
952
-
}
953
-
}
954
-
async readlinkPromise(p) {
955
-
return await new Promise((resolve, reject) => {
956
-
this.realFs.readlink(npath.fromPortablePath(p), this.makeCallback(resolve, reject));
957
-
}).then((path) => {
958
-
return npath.toPortablePath(path);
959
-
});
960
-
}
961
-
readlinkSync(p) {
962
-
return npath.toPortablePath(this.realFs.readlinkSync(npath.fromPortablePath(p)));
963
-
}
964
-
async truncatePromise(p, len) {
965
-
return await new Promise((resolve, reject) => {
966
-
this.realFs.truncate(npath.fromPortablePath(p), len, this.makeCallback(resolve, reject));
967
-
});
968
-
}
969
-
truncateSync(p, len) {
970
-
return this.realFs.truncateSync(npath.fromPortablePath(p), len);
971
-
}
972
-
async ftruncatePromise(fd, len) {
973
-
return await new Promise((resolve, reject) => {
974
-
this.realFs.ftruncate(fd, len, this.makeCallback(resolve, reject));
975
-
});
976
-
}
977
-
ftruncateSync(fd, len) {
978
-
return this.realFs.ftruncateSync(fd, len);
979
-
}
980
-
watch(p, a, b) {
981
-
return this.realFs.watch(
982
-
npath.fromPortablePath(p),
983
-
a,
984
-
b
985
-
);
986
-
}
987
-
watchFile(p, a, b) {
988
-
return this.realFs.watchFile(
989
-
npath.fromPortablePath(p),
990
-
a,
991
-
b
992
-
);
993
-
}
994
-
unwatchFile(p, cb) {
995
-
return this.realFs.unwatchFile(npath.fromPortablePath(p), cb);
996
-
}
997
-
makeCallback(resolve, reject) {
998
-
return (err, result) => {
999
-
if (err) {
1000
-
reject(err);
1001
-
} else {
1002
-
resolve(result);
1003
-
}
1004
-
};
1005
-
}
1006
-
}
1007
-
1008
-
class ProxiedFS extends FakeFS {
1009
-
getExtractHint(hints) {
1010
-
return this.baseFs.getExtractHint(hints);
1011
-
}
1012
-
resolve(path) {
1013
-
return this.mapFromBase(this.baseFs.resolve(this.mapToBase(path)));
1014
-
}
1015
-
getRealPath() {
1016
-
return this.mapFromBase(this.baseFs.getRealPath());
1017
-
}
1018
-
async openPromise(p, flags, mode) {
1019
-
return this.baseFs.openPromise(this.mapToBase(p), flags, mode);
1020
-
}
1021
-
openSync(p, flags, mode) {
1022
-
return this.baseFs.openSync(this.mapToBase(p), flags, mode);
1023
-
}
1024
-
async opendirPromise(p, opts) {
1025
-
return Object.assign(await this.baseFs.opendirPromise(this.mapToBase(p), opts), { path: p });
1026
-
}
1027
-
opendirSync(p, opts) {
1028
-
return Object.assign(this.baseFs.opendirSync(this.mapToBase(p), opts), { path: p });
1029
-
}
1030
-
async readPromise(fd, buffer, offset, length, position) {
1031
-
return await this.baseFs.readPromise(fd, buffer, offset, length, position);
1032
-
}
1033
-
readSync(fd, buffer, offset, length, position) {
1034
-
return this.baseFs.readSync(fd, buffer, offset, length, position);
1035
-
}
1036
-
async writePromise(fd, buffer, offset, length, position) {
1037
-
if (typeof buffer === `string`) {
1038
-
return await this.baseFs.writePromise(fd, buffer, offset);
1039
-
} else {
1040
-
return await this.baseFs.writePromise(fd, buffer, offset, length, position);
1041
-
}
1042
-
}
1043
-
writeSync(fd, buffer, offset, length, position) {
1044
-
if (typeof buffer === `string`) {
1045
-
return this.baseFs.writeSync(fd, buffer, offset);
1046
-
} else {
1047
-
return this.baseFs.writeSync(fd, buffer, offset, length, position);
1048
-
}
1049
-
}
1050
-
async closePromise(fd) {
1051
-
return this.baseFs.closePromise(fd);
1052
-
}
1053
-
closeSync(fd) {
1054
-
this.baseFs.closeSync(fd);
1055
-
}
1056
-
createReadStream(p, opts) {
1057
-
return this.baseFs.createReadStream(p !== null ? this.mapToBase(p) : p, opts);
1058
-
}
1059
-
createWriteStream(p, opts) {
1060
-
return this.baseFs.createWriteStream(p !== null ? this.mapToBase(p) : p, opts);
1061
-
}
1062
-
async realpathPromise(p) {
1063
-
return this.mapFromBase(await this.baseFs.realpathPromise(this.mapToBase(p)));
1064
-
}
1065
-
realpathSync(p) {
1066
-
return this.mapFromBase(this.baseFs.realpathSync(this.mapToBase(p)));
1067
-
}
1068
-
async existsPromise(p) {
1069
-
return this.baseFs.existsPromise(this.mapToBase(p));
1070
-
}
1071
-
existsSync(p) {
1072
-
return this.baseFs.existsSync(this.mapToBase(p));
1073
-
}
1074
-
accessSync(p, mode) {
1075
-
return this.baseFs.accessSync(this.mapToBase(p), mode);
1076
-
}
1077
-
async accessPromise(p, mode) {
1078
-
return this.baseFs.accessPromise(this.mapToBase(p), mode);
1079
-
}
1080
-
async statPromise(p, opts) {
1081
-
return this.baseFs.statPromise(this.mapToBase(p), opts);
1082
-
}
1083
-
statSync(p, opts) {
1084
-
return this.baseFs.statSync(this.mapToBase(p), opts);
1085
-
}
1086
-
async fstatPromise(fd, opts) {
1087
-
return this.baseFs.fstatPromise(fd, opts);
1088
-
}
1089
-
fstatSync(fd, opts) {
1090
-
return this.baseFs.fstatSync(fd, opts);
1091
-
}
1092
-
lstatPromise(p, opts) {
1093
-
return this.baseFs.lstatPromise(this.mapToBase(p), opts);
1094
-
}
1095
-
lstatSync(p, opts) {
1096
-
return this.baseFs.lstatSync(this.mapToBase(p), opts);
1097
-
}
1098
-
async fchmodPromise(fd, mask) {
1099
-
return this.baseFs.fchmodPromise(fd, mask);
1100
-
}
1101
-
fchmodSync(fd, mask) {
1102
-
return this.baseFs.fchmodSync(fd, mask);
1103
-
}
1104
-
async chmodPromise(p, mask) {
1105
-
return this.baseFs.chmodPromise(this.mapToBase(p), mask);
1106
-
}
1107
-
chmodSync(p, mask) {
1108
-
return this.baseFs.chmodSync(this.mapToBase(p), mask);
1109
-
}
1110
-
async fchownPromise(fd, uid, gid) {
1111
-
return this.baseFs.fchownPromise(fd, uid, gid);
1112
-
}
1113
-
fchownSync(fd, uid, gid) {
1114
-
return this.baseFs.fchownSync(fd, uid, gid);
1115
-
}
1116
-
async chownPromise(p, uid, gid) {
1117
-
return this.baseFs.chownPromise(this.mapToBase(p), uid, gid);
1118
-
}
1119
-
chownSync(p, uid, gid) {
1120
-
return this.baseFs.chownSync(this.mapToBase(p), uid, gid);
1121
-
}
1122
-
async renamePromise(oldP, newP) {
1123
-
return this.baseFs.renamePromise(this.mapToBase(oldP), this.mapToBase(newP));
1124
-
}
1125
-
renameSync(oldP, newP) {
1126
-
return this.baseFs.renameSync(this.mapToBase(oldP), this.mapToBase(newP));
1127
-
}
1128
-
async copyFilePromise(sourceP, destP, flags = 0) {
1129
-
return this.baseFs.copyFilePromise(this.mapToBase(sourceP), this.mapToBase(destP), flags);
1130
-
}
1131
-
copyFileSync(sourceP, destP, flags = 0) {
1132
-
return this.baseFs.copyFileSync(this.mapToBase(sourceP), this.mapToBase(destP), flags);
1133
-
}
1134
-
async appendFilePromise(p, content, opts) {
1135
-
return this.baseFs.appendFilePromise(this.fsMapToBase(p), content, opts);
1136
-
}
1137
-
appendFileSync(p, content, opts) {
1138
-
return this.baseFs.appendFileSync(this.fsMapToBase(p), content, opts);
1139
-
}
1140
-
async writeFilePromise(p, content, opts) {
1141
-
return this.baseFs.writeFilePromise(this.fsMapToBase(p), content, opts);
1142
-
}
1143
-
writeFileSync(p, content, opts) {
1144
-
return this.baseFs.writeFileSync(this.fsMapToBase(p), content, opts);
1145
-
}
1146
-
async unlinkPromise(p) {
1147
-
return this.baseFs.unlinkPromise(this.mapToBase(p));
1148
-
}
1149
-
unlinkSync(p) {
1150
-
return this.baseFs.unlinkSync(this.mapToBase(p));
1151
-
}
1152
-
async utimesPromise(p, atime, mtime) {
1153
-
return this.baseFs.utimesPromise(this.mapToBase(p), atime, mtime);
1154
-
}
1155
-
utimesSync(p, atime, mtime) {
1156
-
return this.baseFs.utimesSync(this.mapToBase(p), atime, mtime);
1157
-
}
1158
-
async mkdirPromise(p, opts) {
1159
-
return this.baseFs.mkdirPromise(this.mapToBase(p), opts);
1160
-
}
1161
-
mkdirSync(p, opts) {
1162
-
return this.baseFs.mkdirSync(this.mapToBase(p), opts);
1163
-
}
1164
-
async rmdirPromise(p, opts) {
1165
-
return this.baseFs.rmdirPromise(this.mapToBase(p), opts);
1166
-
}
1167
-
rmdirSync(p, opts) {
1168
-
return this.baseFs.rmdirSync(this.mapToBase(p), opts);
1169
-
}
1170
-
async linkPromise(existingP, newP) {
1171
-
return this.baseFs.linkPromise(this.mapToBase(existingP), this.mapToBase(newP));
1172
-
}
1173
-
linkSync(existingP, newP) {
1174
-
return this.baseFs.linkSync(this.mapToBase(existingP), this.mapToBase(newP));
1175
-
}
1176
-
async symlinkPromise(target, p, type) {
1177
-
const mappedP = this.mapToBase(p);
1178
-
if (this.pathUtils.isAbsolute(target))
1179
-
return this.baseFs.symlinkPromise(this.mapToBase(target), mappedP, type);
1180
-
const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target));
1181
-
const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget);
1182
-
return this.baseFs.symlinkPromise(mappedTarget, mappedP, type);
1183
-
}
1184
-
symlinkSync(target, p, type) {
1185
-
const mappedP = this.mapToBase(p);
1186
-
if (this.pathUtils.isAbsolute(target))
1187
-
return this.baseFs.symlinkSync(this.mapToBase(target), mappedP, type);
1188
-
const mappedAbsoluteTarget = this.mapToBase(this.pathUtils.join(this.pathUtils.dirname(p), target));
1189
-
const mappedTarget = this.baseFs.pathUtils.relative(this.baseFs.pathUtils.dirname(mappedP), mappedAbsoluteTarget);
1190
-
return this.baseFs.symlinkSync(mappedTarget, mappedP, type);
1191
-
}
1192
-
async readFilePromise(p, encoding) {
1193
-
if (encoding === `utf8`) {
1194
-
return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding);
1195
-
} else {
1196
-
return this.baseFs.readFilePromise(this.fsMapToBase(p), encoding);
1197
-
}
1198
-
}
1199
-
readFileSync(p, encoding) {
1200
-
if (encoding === `utf8`) {
1201
-
return this.baseFs.readFileSync(this.fsMapToBase(p), encoding);
1202
-
} else {
1203
-
return this.baseFs.readFileSync(this.fsMapToBase(p), encoding);
1204
-
}
1205
-
}
1206
-
async readdirPromise(p, opts) {
1207
-
return this.baseFs.readdirPromise(this.mapToBase(p), opts);
1208
-
}
1209
-
readdirSync(p, opts) {
1210
-
return this.baseFs.readdirSync(this.mapToBase(p), opts);
1211
-
}
1212
-
async readlinkPromise(p) {
1213
-
return this.mapFromBase(await this.baseFs.readlinkPromise(this.mapToBase(p)));
1214
-
}
1215
-
readlinkSync(p) {
1216
-
return this.mapFromBase(this.baseFs.readlinkSync(this.mapToBase(p)));
1217
-
}
1218
-
async truncatePromise(p, len) {
1219
-
return this.baseFs.truncatePromise(this.mapToBase(p), len);
1220
-
}
1221
-
truncateSync(p, len) {
1222
-
return this.baseFs.truncateSync(this.mapToBase(p), len);
1223
-
}
1224
-
async ftruncatePromise(fd, len) {
1225
-
return this.baseFs.ftruncatePromise(fd, len);
1226
-
}
1227
-
ftruncateSync(fd, len) {
1228
-
return this.baseFs.ftruncateSync(fd, len);
1229
-
}
1230
-
watch(p, a, b) {
1231
-
return this.baseFs.watch(
1232
-
this.mapToBase(p),
1233
-
a,
1234
-
b
1235
-
);
1236
-
}
1237
-
watchFile(p, a, b) {
1238
-
return this.baseFs.watchFile(
1239
-
this.mapToBase(p),
1240
-
a,
1241
-
b
1242
-
);
1243
-
}
1244
-
unwatchFile(p, cb) {
1245
-
return this.baseFs.unwatchFile(this.mapToBase(p), cb);
1246
-
}
1247
-
fsMapToBase(p) {
1248
-
if (typeof p === `number`) {
1249
-
return p;
1250
-
} else {
1251
-
return this.mapToBase(p);
1252
-
}
1253
-
}
1254
-
}
1255
-
1256
-
const NUMBER_REGEXP = /^[0-9]+$/;
1257
-
const VIRTUAL_REGEXP = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/;
1258
-
const VALID_COMPONENT = /^([^/]+-)?[a-f0-9]+$/;
1259
-
class VirtualFS extends ProxiedFS {
1260
-
constructor({ baseFs = new NodeFS() } = {}) {
1261
-
super(ppath);
1262
-
this.baseFs = baseFs;
1263
-
}
1264
-
static makeVirtualPath(base, component, to) {
1265
-
if (ppath.basename(base) !== `__virtual__`)
1266
-
throw new Error(`Assertion failed: Virtual folders must be named "__virtual__"`);
1267
-
if (!ppath.basename(component).match(VALID_COMPONENT))
1268
-
throw new Error(`Assertion failed: Virtual components must be ended by an hexadecimal hash`);
1269
-
const target = ppath.relative(ppath.dirname(base), to);
1270
-
const segments = target.split(`/`);
1271
-
let depth = 0;
1272
-
while (depth < segments.length && segments[depth] === `..`)
1273
-
depth += 1;
1274
-
const finalSegments = segments.slice(depth);
1275
-
const fullVirtualPath = ppath.join(base, component, String(depth), ...finalSegments);
1276
-
return fullVirtualPath;
1277
-
}
1278
-
static resolveVirtual(p) {
1279
-
const match = p.match(VIRTUAL_REGEXP);
1280
-
if (!match || !match[3] && match[5])
1281
-
return p;
1282
-
const target = ppath.dirname(match[1]);
1283
-
if (!match[3] || !match[4])
1284
-
return target;
1285
-
const isnum = NUMBER_REGEXP.test(match[4]);
1286
-
if (!isnum)
1287
-
return p;
1288
-
const depth = Number(match[4]);
1289
-
const backstep = `../`.repeat(depth);
1290
-
const subpath = match[5] || `.`;
1291
-
return VirtualFS.resolveVirtual(ppath.join(target, backstep, subpath));
1292
-
}
1293
-
getExtractHint(hints) {
1294
-
return this.baseFs.getExtractHint(hints);
1295
-
}
1296
-
getRealPath() {
1297
-
return this.baseFs.getRealPath();
1298
-
}
1299
-
realpathSync(p) {
1300
-
const match = p.match(VIRTUAL_REGEXP);
1301
-
if (!match)
1302
-
return this.baseFs.realpathSync(p);
1303
-
if (!match[5])
1304
-
return p;
1305
-
const realpath = this.baseFs.realpathSync(this.mapToBase(p));
1306
-
return VirtualFS.makeVirtualPath(match[1], match[3], realpath);
1307
-
}
1308
-
async realpathPromise(p) {
1309
-
const match = p.match(VIRTUAL_REGEXP);
1310
-
if (!match)
1311
-
return await this.baseFs.realpathPromise(p);
1312
-
if (!match[5])
1313
-
return p;
1314
-
const realpath = await this.baseFs.realpathPromise(this.mapToBase(p));
1315
-
return VirtualFS.makeVirtualPath(match[1], match[3], realpath);
1316
-
}
1317
-
mapToBase(p) {
1318
-
if (p === ``)
1319
-
return p;
1320
-
if (this.pathUtils.isAbsolute(p))
1321
-
return VirtualFS.resolveVirtual(p);
1322
-
const resolvedRoot = VirtualFS.resolveVirtual(this.baseFs.resolve(PortablePath.dot));
1323
-
const resolvedP = VirtualFS.resolveVirtual(this.baseFs.resolve(p));
1324
-
return ppath.relative(resolvedRoot, resolvedP) || PortablePath.dot;
1325
-
}
1326
-
mapFromBase(p) {
1327
-
return p;
1328
-
}
1329
-
}
1330
-
1331
-
const builtinModules = new Set(Module.builtinModules || Object.keys(process.binding(`natives`)));
1332
-
const isBuiltinModule = (request) => request.startsWith(`node:`) || builtinModules.has(request);
1333
-
function readPackageScope(checkPath) {
1334
-
const rootSeparatorIndex = checkPath.indexOf(npath.sep);
1335
-
let separatorIndex;
1336
-
do {
1337
-
separatorIndex = checkPath.lastIndexOf(npath.sep);
1338
-
checkPath = checkPath.slice(0, separatorIndex);
1339
-
if (checkPath.endsWith(`${npath.sep}node_modules`))
1340
-
return false;
1341
-
const pjson = readPackage(checkPath + npath.sep);
1342
-
if (pjson) {
1343
-
return {
1344
-
data: pjson,
1345
-
path: checkPath
1346
-
};
1347
-
}
1348
-
} while (separatorIndex > rootSeparatorIndex);
1349
-
return false;
1350
-
}
1351
-
function readPackage(requestPath) {
1352
-
const jsonPath = npath.resolve(requestPath, `package.json`);
1353
-
if (!fs.existsSync(jsonPath))
1354
-
return null;
1355
-
return JSON.parse(fs.readFileSync(jsonPath, `utf8`));
1356
-
}
1357
-
1358
-
const [major, minor] = process.versions.node.split(`.`).map((value) => parseInt(value, 10));
1359
-
const HAS_CONSOLIDATED_HOOKS = major > 16 || major === 16 && minor >= 12;
1360
-
const HAS_UNFLAGGED_JSON_MODULES = major > 17 || major === 17 && minor >= 5 || major === 16 && minor >= 15;
1361
-
const HAS_JSON_IMPORT_ASSERTION_REQUIREMENT = major > 17 || major === 17 && minor >= 1 || major === 16 && minor > 14;
1362
-
1363
-
async function tryReadFile$1(path2) {
1364
-
try {
1365
-
return await fs.promises.readFile(path2, `utf8`);
1366
-
} catch (error) {
1367
-
if (error.code === `ENOENT`)
1368
-
return null;
1369
-
throw error;
1370
-
}
1371
-
}
1372
-
function tryParseURL(str, base) {
1373
-
try {
1374
-
return new URL$1(str, base);
1375
-
} catch {
1376
-
return null;
1377
-
}
1378
-
}
1379
-
let entrypointPath = null;
1380
-
function setEntrypointPath(file) {
1381
-
entrypointPath = file;
1382
-
}
1383
-
function getFileFormat(filepath) {
1384
-
var _a, _b;
1385
-
const ext = path.extname(filepath);
1386
-
switch (ext) {
1387
-
case `.mjs`: {
1388
-
return `module`;
1389
-
}
1390
-
case `.cjs`: {
1391
-
return `commonjs`;
1392
-
}
1393
-
case `.wasm`: {
1394
-
throw new Error(
1395
-
`Unknown file extension ".wasm" for ${filepath}`
1396
-
);
1397
-
}
1398
-
case `.json`: {
1399
-
if (HAS_UNFLAGGED_JSON_MODULES)
1400
-
return `json`;
1401
-
throw new Error(
1402
-
`Unknown file extension ".json" for ${filepath}`
1403
-
);
1404
-
}
1405
-
case `.js`: {
1406
-
const pkg = readPackageScope(filepath);
1407
-
if (!pkg)
1408
-
return `commonjs`;
1409
-
return (_a = pkg.data.type) != null ? _a : `commonjs`;
1410
-
}
1411
-
default: {
1412
-
if (entrypointPath !== filepath)
1413
-
return null;
1414
-
const pkg = readPackageScope(filepath);
1415
-
if (!pkg)
1416
-
return `commonjs`;
1417
-
if (pkg.data.type === `module`)
1418
-
return null;
1419
-
return (_b = pkg.data.type) != null ? _b : `commonjs`;
1420
-
}
1421
-
}
1422
-
}
1423
-
1424
-
async function getFormat$1(resolved, context, defaultGetFormat) {
1425
-
const url = tryParseURL(resolved);
1426
-
if ((url == null ? void 0 : url.protocol) !== `file:`)
1427
-
return defaultGetFormat(resolved, context, defaultGetFormat);
1428
-
const format = getFileFormat(fileURLToPath(url));
1429
-
if (format) {
1430
-
return {
1431
-
format
1432
-
};
1433
-
}
1434
-
return defaultGetFormat(resolved, context, defaultGetFormat);
1435
-
}
1436
-
1437
-
async function getSource$1(urlString, context, defaultGetSource) {
1438
-
const url = tryParseURL(urlString);
1439
-
if ((url == null ? void 0 : url.protocol) !== `file:`)
1440
-
return defaultGetSource(urlString, context, defaultGetSource);
1441
-
return {
1442
-
source: await fs.promises.readFile(fileURLToPath(url), `utf8`)
1443
-
};
1444
-
}
1445
-
1446
-
async function load$1(urlString, context, nextLoad) {
1447
-
var _a;
1448
-
const url = tryParseURL(urlString);
1449
-
if ((url == null ? void 0 : url.protocol) !== `file:`)
1450
-
return nextLoad(urlString, context, nextLoad);
1451
-
const filePath = fileURLToPath(url);
1452
-
const format = getFileFormat(filePath);
1453
-
if (!format)
1454
-
return nextLoad(urlString, context, nextLoad);
1455
-
if (HAS_JSON_IMPORT_ASSERTION_REQUIREMENT && format === `json` && ((_a = context.importAssertions) == null ? void 0 : _a.type) !== `json`) {
1456
-
const err = new TypeError(`[ERR_IMPORT_ASSERTION_TYPE_MISSING]: Module "${urlString}" needs an import assertion of type "json"`);
1457
-
err.code = `ERR_IMPORT_ASSERTION_TYPE_MISSING`;
1458
-
throw err;
1459
-
}
1460
-
if (process.env.WATCH_REPORT_DEPENDENCIES && process.send) {
1461
-
process.send({
1462
-
"watch:import": pathToFileURL(
1463
-
npath.fromPortablePath(
1464
-
VirtualFS.resolveVirtual(npath.toPortablePath(filePath))
1465
-
)
1466
-
).href
1467
-
});
1468
-
}
1469
-
return {
1470
-
format,
1471
-
source: await fs.promises.readFile(filePath, `utf8`),
1472
-
shortCircuit: true
1473
-
};
1474
-
}
1475
-
1476
-
const ArrayIsArray = Array.isArray;
1477
-
const JSONStringify = JSON.stringify;
1478
-
const ObjectGetOwnPropertyNames = Object.getOwnPropertyNames;
1479
-
const ObjectPrototypeHasOwnProperty = (obj, prop) => Object.prototype.hasOwnProperty.call(obj, prop);
1480
-
const RegExpPrototypeExec = (obj, string) => RegExp.prototype.exec.call(obj, string);
1481
-
const RegExpPrototypeSymbolReplace = (obj, ...rest) => RegExp.prototype[Symbol.replace].apply(obj, rest);
1482
-
const StringPrototypeEndsWith = (str, ...rest) => String.prototype.endsWith.apply(str, rest);
1483
-
const StringPrototypeIncludes = (str, ...rest) => String.prototype.includes.apply(str, rest);
1484
-
const StringPrototypeLastIndexOf = (str, ...rest) => String.prototype.lastIndexOf.apply(str, rest);
1485
-
const StringPrototypeIndexOf = (str, ...rest) => String.prototype.indexOf.apply(str, rest);
1486
-
const StringPrototypeReplace = (str, ...rest) => String.prototype.replace.apply(str, rest);
1487
-
const StringPrototypeSlice = (str, ...rest) => String.prototype.slice.apply(str, rest);
1488
-
const StringPrototypeStartsWith = (str, ...rest) => String.prototype.startsWith.apply(str, rest);
1489
-
const SafeMap = Map;
1490
-
const JSONParse = JSON.parse;
1491
-
1492
-
function createErrorType(code, messageCreator, errorType) {
1493
-
return class extends errorType {
1494
-
constructor(...args) {
1495
-
super(messageCreator(...args));
1496
-
this.code = code;
1497
-
this.name = `${errorType.name} [${code}]`;
1498
-
}
1499
-
};
1500
-
}
1501
-
const ERR_PACKAGE_IMPORT_NOT_DEFINED = createErrorType(
1502
-
`ERR_PACKAGE_IMPORT_NOT_DEFINED`,
1503
-
(specifier, packagePath, base) => {
1504
-
return `Package import specifier "${specifier}" is not defined${packagePath ? ` in package ${packagePath}package.json` : ``} imported from ${base}`;
1505
-
},
1506
-
TypeError
1507
-
);
1508
-
const ERR_INVALID_MODULE_SPECIFIER = createErrorType(
1509
-
`ERR_INVALID_MODULE_SPECIFIER`,
1510
-
(request, reason, base = void 0) => {
1511
-
return `Invalid module "${request}" ${reason}${base ? ` imported from ${base}` : ``}`;
1512
-
},
1513
-
TypeError
1514
-
);
1515
-
const ERR_INVALID_PACKAGE_TARGET = createErrorType(
1516
-
`ERR_INVALID_PACKAGE_TARGET`,
1517
-
(pkgPath, key, target, isImport = false, base = void 0) => {
1518
-
const relError = typeof target === `string` && !isImport && target.length && !StringPrototypeStartsWith(target, `./`);
1519
-
if (key === `.`) {
1520
-
assert(isImport === false);
1521
-
return `Invalid "exports" main target ${JSONStringify(target)} defined in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`;
1522
-
}
1523
-
return `Invalid "${isImport ? `imports` : `exports`}" target ${JSONStringify(
1524
-
target
1525
-
)} defined for '${key}' in the package config ${pkgPath}package.json${base ? ` imported from ${base}` : ``}${relError ? `; targets must start with "./"` : ``}`;
1526
-
},
1527
-
Error
1528
-
);
1529
-
const ERR_INVALID_PACKAGE_CONFIG = createErrorType(
1530
-
`ERR_INVALID_PACKAGE_CONFIG`,
1531
-
(path, base, message) => {
1532
-
return `Invalid package config ${path}${base ? ` while importing ${base}` : ``}${message ? `. ${message}` : ``}`;
1533
-
},
1534
-
Error
1535
-
);
1536
-
1537
-
function filterOwnProperties(source, keys) {
1538
-
const filtered = /* @__PURE__ */ Object.create(null);
1539
-
for (let i = 0; i < keys.length; i++) {
1540
-
const key = keys[i];
1541
-
if (ObjectPrototypeHasOwnProperty(source, key)) {
1542
-
filtered[key] = source[key];
1543
-
}
1544
-
}
1545
-
return filtered;
1546
-
}
1547
-
1548
-
const packageJSONCache = new SafeMap();
1549
-
function getPackageConfig(path, specifier, base, readFileSyncFn) {
1550
-
const existing = packageJSONCache.get(path);
1551
-
if (existing !== void 0) {
1552
-
return existing;
1553
-
}
1554
-
const source = readFileSyncFn(path);
1555
-
if (source === void 0) {
1556
-
const packageConfig2 = {
1557
-
pjsonPath: path,
1558
-
exists: false,
1559
-
main: void 0,
1560
-
name: void 0,
1561
-
type: "none",
1562
-
exports: void 0,
1563
-
imports: void 0
1564
-
};
1565
-
packageJSONCache.set(path, packageConfig2);
1566
-
return packageConfig2;
1567
-
}
1568
-
let packageJSON;
1569
-
try {
1570
-
packageJSON = JSONParse(source);
1571
-
} catch (error) {
1572
-
throw new ERR_INVALID_PACKAGE_CONFIG(
1573
-
path,
1574
-
(base ? `"${specifier}" from ` : "") + fileURLToPath(base || specifier),
1575
-
error.message
1576
-
);
1577
-
}
1578
-
let { imports, main, name, type } = filterOwnProperties(packageJSON, [
1579
-
"imports",
1580
-
"main",
1581
-
"name",
1582
-
"type"
1583
-
]);
1584
-
const exports = ObjectPrototypeHasOwnProperty(packageJSON, "exports") ? packageJSON.exports : void 0;
1585
-
if (typeof imports !== "object" || imports === null) {
1586
-
imports = void 0;
1587
-
}
1588
-
if (typeof main !== "string") {
1589
-
main = void 0;
1590
-
}
1591
-
if (typeof name !== "string") {
1592
-
name = void 0;
1593
-
}
1594
-
if (type !== "module" && type !== "commonjs") {
1595
-
type = "none";
1596
-
}
1597
-
const packageConfig = {
1598
-
pjsonPath: path,
1599
-
exists: true,
1600
-
main,
1601
-
name,
1602
-
type,
1603
-
exports,
1604
-
imports
1605
-
};
1606
-
packageJSONCache.set(path, packageConfig);
1607
-
return packageConfig;
1608
-
}
1609
-
function getPackageScopeConfig(resolved, readFileSyncFn) {
1610
-
let packageJSONUrl = new URL("./package.json", resolved);
1611
-
while (true) {
1612
-
const packageJSONPath2 = packageJSONUrl.pathname;
1613
-
if (StringPrototypeEndsWith(packageJSONPath2, "node_modules/package.json")) {
1614
-
break;
1615
-
}
1616
-
const packageConfig2 = getPackageConfig(
1617
-
fileURLToPath(packageJSONUrl),
1618
-
resolved,
1619
-
void 0,
1620
-
readFileSyncFn
1621
-
);
1622
-
if (packageConfig2.exists) {
1623
-
return packageConfig2;
1624
-
}
1625
-
const lastPackageJSONUrl = packageJSONUrl;
1626
-
packageJSONUrl = new URL("../package.json", packageJSONUrl);
1627
-
if (packageJSONUrl.pathname === lastPackageJSONUrl.pathname) {
1628
-
break;
1629
-
}
1630
-
}
1631
-
const packageJSONPath = fileURLToPath(packageJSONUrl);
1632
-
const packageConfig = {
1633
-
pjsonPath: packageJSONPath,
1634
-
exists: false,
1635
-
main: void 0,
1636
-
name: void 0,
1637
-
type: "none",
1638
-
exports: void 0,
1639
-
imports: void 0
1640
-
};
1641
-
packageJSONCache.set(packageJSONPath, packageConfig);
1642
-
return packageConfig;
1643
-
}
1644
-
1645
-
/**
1646
-
@license
1647
-
Copyright Node.js contributors. All rights reserved.
1648
-
1649
-
Permission is hereby granted, free of charge, to any person obtaining a copy
1650
-
of this software and associated documentation files (the "Software"), to
1651
-
deal in the Software without restriction, including without limitation the
1652
-
rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
1653
-
sell copies of the Software, and to permit persons to whom the Software is
1654
-
furnished to do so, subject to the following conditions:
1655
-
1656
-
The above copyright notice and this permission notice shall be included in
1657
-
all copies or substantial portions of the Software.
1658
-
1659
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
1660
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
1661
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
1662
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
1663
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
1664
-
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
1665
-
IN THE SOFTWARE.
1666
-
*/
1667
-
function throwImportNotDefined(specifier, packageJSONUrl, base) {
1668
-
throw new ERR_PACKAGE_IMPORT_NOT_DEFINED(
1669
-
specifier,
1670
-
packageJSONUrl && fileURLToPath(new URL(".", packageJSONUrl)),
1671
-
fileURLToPath(base)
1672
-
);
1673
-
}
1674
-
function throwInvalidSubpath(subpath, packageJSONUrl, internal, base) {
1675
-
const reason = `request is not a valid subpath for the "${internal ? "imports" : "exports"}" resolution of ${fileURLToPath(packageJSONUrl)}`;
1676
-
throw new ERR_INVALID_MODULE_SPECIFIER(
1677
-
subpath,
1678
-
reason,
1679
-
base && fileURLToPath(base)
1680
-
);
1681
-
}
1682
-
function throwInvalidPackageTarget(subpath, target, packageJSONUrl, internal, base) {
1683
-
if (typeof target === "object" && target !== null) {
1684
-
target = JSONStringify(target, null, "");
1685
-
} else {
1686
-
target = `${target}`;
1687
-
}
1688
-
throw new ERR_INVALID_PACKAGE_TARGET(
1689
-
fileURLToPath(new URL(".", packageJSONUrl)),
1690
-
subpath,
1691
-
target,
1692
-
internal,
1693
-
base && fileURLToPath(base)
1694
-
);
1695
-
}
1696
-
const invalidSegmentRegEx = /(^|\\|\/)((\.|%2e)(\.|%2e)?|(n|%6e|%4e)(o|%6f|%4f)(d|%64|%44)(e|%65|%45)(_|%5f)(m|%6d|%4d)(o|%6f|%4f)(d|%64|%44)(u|%75|%55)(l|%6c|%4c)(e|%65|%45)(s|%73|%53))(\\|\/|$)/i;
1697
-
const patternRegEx = /\*/g;
1698
-
function resolvePackageTargetString(target, subpath, match, packageJSONUrl, base, pattern, internal, conditions) {
1699
-
if (subpath !== "" && !pattern && target[target.length - 1] !== "/")
1700
-
throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base);
1701
-
if (!StringPrototypeStartsWith(target, "./")) {
1702
-
if (internal && !StringPrototypeStartsWith(target, "../") && !StringPrototypeStartsWith(target, "/")) {
1703
-
let isURL = false;
1704
-
try {
1705
-
new URL(target);
1706
-
isURL = true;
1707
-
} catch {
1708
-
}
1709
-
if (!isURL) {
1710
-
const exportTarget = pattern ? RegExpPrototypeSymbolReplace(patternRegEx, target, () => subpath) : target + subpath;
1711
-
return exportTarget;
1712
-
}
1713
-
}
1714
-
throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base);
1715
-
}
1716
-
if (RegExpPrototypeExec(
1717
-
invalidSegmentRegEx,
1718
-
StringPrototypeSlice(target, 2)
1719
-
) !== null)
1720
-
throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base);
1721
-
const resolved = new URL(target, packageJSONUrl);
1722
-
const resolvedPath = resolved.pathname;
1723
-
const packagePath = new URL(".", packageJSONUrl).pathname;
1724
-
if (!StringPrototypeStartsWith(resolvedPath, packagePath))
1725
-
throwInvalidPackageTarget(match, target, packageJSONUrl, internal, base);
1726
-
if (subpath === "")
1727
-
return resolved;
1728
-
if (RegExpPrototypeExec(invalidSegmentRegEx, subpath) !== null) {
1729
-
const request = pattern ? StringPrototypeReplace(match, "*", () => subpath) : match + subpath;
1730
-
throwInvalidSubpath(request, packageJSONUrl, internal, base);
1731
-
}
1732
-
if (pattern) {
1733
-
return new URL(
1734
-
RegExpPrototypeSymbolReplace(patternRegEx, resolved.href, () => subpath)
1735
-
);
1736
-
}
1737
-
return new URL(subpath, resolved);
1738
-
}
1739
-
function isArrayIndex(key) {
1740
-
const keyNum = +key;
1741
-
if (`${keyNum}` !== key)
1742
-
return false;
1743
-
return keyNum >= 0 && keyNum < 4294967295;
1744
-
}
1745
-
function resolvePackageTarget(packageJSONUrl, target, subpath, packageSubpath, base, pattern, internal, conditions) {
1746
-
if (typeof target === "string") {
1747
-
return resolvePackageTargetString(
1748
-
target,
1749
-
subpath,
1750
-
packageSubpath,
1751
-
packageJSONUrl,
1752
-
base,
1753
-
pattern,
1754
-
internal);
1755
-
} else if (ArrayIsArray(target)) {
1756
-
if (target.length === 0) {
1757
-
return null;
1758
-
}
1759
-
let lastException;
1760
-
for (let i = 0; i < target.length; i++) {
1761
-
const targetItem = target[i];
1762
-
let resolveResult;
1763
-
try {
1764
-
resolveResult = resolvePackageTarget(
1765
-
packageJSONUrl,
1766
-
targetItem,
1767
-
subpath,
1768
-
packageSubpath,
1769
-
base,
1770
-
pattern,
1771
-
internal,
1772
-
conditions
1773
-
);
1774
-
} catch (e) {
1775
-
lastException = e;
1776
-
if (e.code === "ERR_INVALID_PACKAGE_TARGET") {
1777
-
continue;
1778
-
}
1779
-
throw e;
1780
-
}
1781
-
if (resolveResult === void 0) {
1782
-
continue;
1783
-
}
1784
-
if (resolveResult === null) {
1785
-
lastException = null;
1786
-
continue;
1787
-
}
1788
-
return resolveResult;
1789
-
}
1790
-
if (lastException === void 0 || lastException === null)
1791
-
return lastException;
1792
-
throw lastException;
1793
-
} else if (typeof target === "object" && target !== null) {
1794
-
const keys = ObjectGetOwnPropertyNames(target);
1795
-
for (let i = 0; i < keys.length; i++) {
1796
-
const key = keys[i];
1797
-
if (isArrayIndex(key)) {
1798
-
throw new ERR_INVALID_PACKAGE_CONFIG(
1799
-
fileURLToPath(packageJSONUrl),
1800
-
base,
1801
-
'"exports" cannot contain numeric property keys.'
1802
-
);
1803
-
}
1804
-
}
1805
-
for (let i = 0; i < keys.length; i++) {
1806
-
const key = keys[i];
1807
-
if (key === "default" || conditions.has(key)) {
1808
-
const conditionalTarget = target[key];
1809
-
const resolveResult = resolvePackageTarget(
1810
-
packageJSONUrl,
1811
-
conditionalTarget,
1812
-
subpath,
1813
-
packageSubpath,
1814
-
base,
1815
-
pattern,
1816
-
internal,
1817
-
conditions
1818
-
);
1819
-
if (resolveResult === void 0)
1820
-
continue;
1821
-
return resolveResult;
1822
-
}
1823
-
}
1824
-
return void 0;
1825
-
} else if (target === null) {
1826
-
return null;
1827
-
}
1828
-
throwInvalidPackageTarget(
1829
-
packageSubpath,
1830
-
target,
1831
-
packageJSONUrl,
1832
-
internal,
1833
-
base
1834
-
);
1835
-
}
1836
-
function patternKeyCompare(a, b) {
1837
-
const aPatternIndex = StringPrototypeIndexOf(a, "*");
1838
-
const bPatternIndex = StringPrototypeIndexOf(b, "*");
1839
-
const baseLenA = aPatternIndex === -1 ? a.length : aPatternIndex + 1;
1840
-
const baseLenB = bPatternIndex === -1 ? b.length : bPatternIndex + 1;
1841
-
if (baseLenA > baseLenB)
1842
-
return -1;
1843
-
if (baseLenB > baseLenA)
1844
-
return 1;
1845
-
if (aPatternIndex === -1)
1846
-
return 1;
1847
-
if (bPatternIndex === -1)
1848
-
return -1;
1849
-
if (a.length > b.length)
1850
-
return -1;
1851
-
if (b.length > a.length)
1852
-
return 1;
1853
-
return 0;
1854
-
}
1855
-
function packageImportsResolve({
1856
-
name,
1857
-
base,
1858
-
conditions,
1859
-
readFileSyncFn
1860
-
}) {
1861
-
if (name === "#" || StringPrototypeStartsWith(name, "#/") || StringPrototypeEndsWith(name, "/")) {
1862
-
const reason = "is not a valid internal imports specifier name";
1863
-
throw new ERR_INVALID_MODULE_SPECIFIER(name, reason, fileURLToPath(base));
1864
-
}
1865
-
let packageJSONUrl;
1866
-
const packageConfig = getPackageScopeConfig(base, readFileSyncFn);
1867
-
if (packageConfig.exists) {
1868
-
packageJSONUrl = pathToFileURL(packageConfig.pjsonPath);
1869
-
const imports = packageConfig.imports;
1870
-
if (imports) {
1871
-
if (ObjectPrototypeHasOwnProperty(imports, name) && !StringPrototypeIncludes(name, "*")) {
1872
-
const resolveResult = resolvePackageTarget(
1873
-
packageJSONUrl,
1874
-
imports[name],
1875
-
"",
1876
-
name,
1877
-
base,
1878
-
false,
1879
-
true,
1880
-
conditions
1881
-
);
1882
-
if (resolveResult != null) {
1883
-
return resolveResult;
1884
-
}
1885
-
} else {
1886
-
let bestMatch = "";
1887
-
let bestMatchSubpath;
1888
-
const keys = ObjectGetOwnPropertyNames(imports);
1889
-
for (let i = 0; i < keys.length; i++) {
1890
-
const key = keys[i];
1891
-
const patternIndex = StringPrototypeIndexOf(key, "*");
1892
-
if (patternIndex !== -1 && StringPrototypeStartsWith(
1893
-
name,
1894
-
StringPrototypeSlice(key, 0, patternIndex)
1895
-
)) {
1896
-
const patternTrailer = StringPrototypeSlice(key, patternIndex + 1);
1897
-
if (name.length >= key.length && StringPrototypeEndsWith(name, patternTrailer) && patternKeyCompare(bestMatch, key) === 1 && StringPrototypeLastIndexOf(key, "*") === patternIndex) {
1898
-
bestMatch = key;
1899
-
bestMatchSubpath = StringPrototypeSlice(
1900
-
name,
1901
-
patternIndex,
1902
-
name.length - patternTrailer.length
1903
-
);
1904
-
}
1905
-
}
1906
-
}
1907
-
if (bestMatch) {
1908
-
const target = imports[bestMatch];
1909
-
const resolveResult = resolvePackageTarget(
1910
-
packageJSONUrl,
1911
-
target,
1912
-
bestMatchSubpath,
1913
-
bestMatch,
1914
-
base,
1915
-
true,
1916
-
true,
1917
-
conditions
1918
-
);
1919
-
if (resolveResult != null) {
1920
-
return resolveResult;
1921
-
}
1922
-
}
1923
-
}
1924
-
}
1925
-
}
1926
-
throwImportNotDefined(name, packageJSONUrl, base);
1927
-
}
1928
-
1929
-
const pathRegExp = /^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/;
1930
-
const isRelativeRegexp = /^\.{0,2}\//;
1931
-
function tryReadFile(filePath) {
1932
-
try {
1933
-
return fs.readFileSync(filePath, `utf8`);
1934
-
} catch (err) {
1935
-
if (err.code === `ENOENT`)
1936
-
return void 0;
1937
-
throw err;
1938
-
}
1939
-
}
1940
-
async function resolvePrivateRequest(specifier, issuer, context, nextResolve) {
1941
-
const resolved = packageImportsResolve({
1942
-
name: specifier,
1943
-
base: pathToFileURL(issuer),
1944
-
conditions: new Set(context.conditions),
1945
-
readFileSyncFn: tryReadFile
1946
-
});
1947
-
if (resolved instanceof URL) {
1948
-
return { url: resolved.href, shortCircuit: true };
1949
-
} else {
1950
-
if (resolved.startsWith(`#`))
1951
-
throw new Error(`Mapping from one private import to another isn't allowed`);
1952
-
return resolve$1(resolved, context, nextResolve);
1953
-
}
1954
-
}
1955
-
async function resolve$1(originalSpecifier, context, nextResolve) {
1956
-
var _a;
1957
-
const { findPnpApi } = moduleExports;
1958
-
if (!findPnpApi || isBuiltinModule(originalSpecifier))
1959
-
return nextResolve(originalSpecifier, context, nextResolve);
1960
-
let specifier = originalSpecifier;
1961
-
const url = tryParseURL(specifier, isRelativeRegexp.test(specifier) ? context.parentURL : void 0);
1962
-
if (url) {
1963
-
if (url.protocol !== `file:`)
1964
-
return nextResolve(originalSpecifier, context, nextResolve);
1965
-
specifier = fileURLToPath(url);
1966
-
}
1967
-
const { parentURL, conditions = [] } = context;
1968
-
const issuer = parentURL ? fileURLToPath(parentURL) : process.cwd();
1969
-
const pnpapi = (_a = findPnpApi(issuer)) != null ? _a : url ? findPnpApi(specifier) : null;
1970
-
if (!pnpapi)
1971
-
return nextResolve(originalSpecifier, context, nextResolve);
1972
-
if (specifier.startsWith(`#`))
1973
-
return resolvePrivateRequest(specifier, issuer, context, nextResolve);
1974
-
const dependencyNameMatch = specifier.match(pathRegExp);
1975
-
let allowLegacyResolve = false;
1976
-
if (dependencyNameMatch) {
1977
-
const [, dependencyName, subPath] = dependencyNameMatch;
1978
-
if (subPath === ``) {
1979
-
const resolved = pnpapi.resolveToUnqualified(`${dependencyName}/package.json`, issuer);
1980
-
if (resolved) {
1981
-
const content = await tryReadFile$1(resolved);
1982
-
if (content) {
1983
-
const pkg = JSON.parse(content);
1984
-
allowLegacyResolve = pkg.exports == null;
1985
-
}
1986
-
}
1987
-
}
1988
-
}
1989
-
const result = pnpapi.resolveRequest(specifier, issuer, {
1990
-
conditions: new Set(conditions),
1991
-
extensions: allowLegacyResolve ? void 0 : []
1992
-
});
1993
-
if (!result)
1994
-
throw new Error(`Resolving '${specifier}' from '${issuer}' failed`);
1995
-
const resultURL = pathToFileURL(result);
1996
-
if (url) {
1997
-
resultURL.search = url.search;
1998
-
resultURL.hash = url.hash;
1999
-
}
2000
-
if (!parentURL)
2001
-
setEntrypointPath(fileURLToPath(resultURL));
2002
-
return {
2003
-
url: resultURL.href,
2004
-
shortCircuit: true
2005
-
};
2006
-
}
2007
-
2008
-
const binding = process.binding(`fs`);
2009
-
const originalfstat = binding.fstat;
2010
-
const ZIP_MASK = 4278190080;
2011
-
const ZIP_MAGIC = 704643072;
2012
-
binding.fstat = function(...args) {
2013
-
const [fd, useBigint, req] = args;
2014
-
if ((fd & ZIP_MASK) === ZIP_MAGIC && useBigint === false && req === void 0) {
2015
-
try {
2016
-
const stats = fs.fstatSync(fd);
2017
-
return new Float64Array([
2018
-
stats.dev,
2019
-
stats.mode,
2020
-
stats.nlink,
2021
-
stats.uid,
2022
-
stats.gid,
2023
-
stats.rdev,
2024
-
stats.blksize,
2025
-
stats.ino,
2026
-
stats.size,
2027
-
stats.blocks
2028
-
]);
2029
-
} catch {
2030
-
}
2031
-
}
2032
-
return originalfstat.apply(this, args);
2033
-
};
2034
-
2035
-
const resolve = resolve$1;
2036
-
const getFormat = HAS_CONSOLIDATED_HOOKS ? void 0 : getFormat$1;
2037
-
const getSource = HAS_CONSOLIDATED_HOOKS ? void 0 : getSource$1;
2038
-
const load = HAS_CONSOLIDATED_HOOKS ? load$1 : void 0;
2039
-
2040
-
export { getFormat, getSource, load, resolve };
···
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0