remove node-modules
This commit is contained in:
parent
272fb9e060
commit
f901e060b4
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
node_modules
|
||||||
|
-R
|
1
node_modules/.bin/acorn
generated
vendored
1
node_modules/.bin/acorn
generated
vendored
@ -1 +0,0 @@
|
|||||||
../acorn/bin/acorn
|
|
1
node_modules/.bin/browserslist
generated
vendored
1
node_modules/.bin/browserslist
generated
vendored
@ -1 +0,0 @@
|
|||||||
../browserslist/cli.js
|
|
1
node_modules/.bin/envinfo
generated
vendored
1
node_modules/.bin/envinfo
generated
vendored
@ -1 +0,0 @@
|
|||||||
../envinfo/dist/cli.js
|
|
1
node_modules/.bin/flat
generated
vendored
1
node_modules/.bin/flat
generated
vendored
@ -1 +0,0 @@
|
|||||||
../flat/cli.js
|
|
1
node_modules/.bin/import-local-fixture
generated
vendored
1
node_modules/.bin/import-local-fixture
generated
vendored
@ -1 +0,0 @@
|
|||||||
../import-local/fixtures/cli.js
|
|
1
node_modules/.bin/is-docker
generated
vendored
1
node_modules/.bin/is-docker
generated
vendored
@ -1 +0,0 @@
|
|||||||
../is-docker/cli.js
|
|
1
node_modules/.bin/node-which
generated
vendored
1
node_modules/.bin/node-which
generated
vendored
@ -1 +0,0 @@
|
|||||||
../which/bin/node-which
|
|
1
node_modules/.bin/nodemon
generated
vendored
1
node_modules/.bin/nodemon
generated
vendored
@ -1 +0,0 @@
|
|||||||
../nodemon/bin/nodemon.js
|
|
1
node_modules/.bin/nodetouch
generated
vendored
1
node_modules/.bin/nodetouch
generated
vendored
@ -1 +0,0 @@
|
|||||||
../touch/bin/nodetouch.js
|
|
1
node_modules/.bin/rc
generated
vendored
1
node_modules/.bin/rc
generated
vendored
@ -1 +0,0 @@
|
|||||||
../rc/cli.js
|
|
1
node_modules/.bin/resolve
generated
vendored
1
node_modules/.bin/resolve
generated
vendored
@ -1 +0,0 @@
|
|||||||
../resolve/bin/resolve
|
|
1
node_modules/.bin/semver
generated
vendored
1
node_modules/.bin/semver
generated
vendored
@ -1 +0,0 @@
|
|||||||
../semver/bin/semver.js
|
|
1
node_modules/.bin/serve
generated
vendored
1
node_modules/.bin/serve
generated
vendored
@ -1 +0,0 @@
|
|||||||
../serve/build/main.js
|
|
1
node_modules/.bin/terser
generated
vendored
1
node_modules/.bin/terser
generated
vendored
@ -1 +0,0 @@
|
|||||||
../terser/bin/terser
|
|
1
node_modules/.bin/ts-node
generated
vendored
1
node_modules/.bin/ts-node
generated
vendored
@ -1 +0,0 @@
|
|||||||
../ts-node/dist/bin.js
|
|
1
node_modules/.bin/ts-node-cwd
generated
vendored
1
node_modules/.bin/ts-node-cwd
generated
vendored
@ -1 +0,0 @@
|
|||||||
../ts-node/dist/bin-cwd.js
|
|
1
node_modules/.bin/ts-node-esm
generated
vendored
1
node_modules/.bin/ts-node-esm
generated
vendored
@ -1 +0,0 @@
|
|||||||
../ts-node/dist/bin-esm.js
|
|
1
node_modules/.bin/ts-node-script
generated
vendored
1
node_modules/.bin/ts-node-script
generated
vendored
@ -1 +0,0 @@
|
|||||||
../ts-node/dist/bin-script.js
|
|
1
node_modules/.bin/ts-node-transpile-only
generated
vendored
1
node_modules/.bin/ts-node-transpile-only
generated
vendored
@ -1 +0,0 @@
|
|||||||
../ts-node/dist/bin-transpile.js
|
|
1
node_modules/.bin/ts-script
generated
vendored
1
node_modules/.bin/ts-script
generated
vendored
@ -1 +0,0 @@
|
|||||||
../ts-node/dist/bin-script-deprecated.js
|
|
1
node_modules/.bin/tsc
generated
vendored
1
node_modules/.bin/tsc
generated
vendored
@ -1 +0,0 @@
|
|||||||
../typescript/bin/tsc
|
|
1
node_modules/.bin/tsserver
generated
vendored
1
node_modules/.bin/tsserver
generated
vendored
@ -1 +0,0 @@
|
|||||||
../typescript/bin/tsserver
|
|
1
node_modules/.bin/update-browserslist-db
generated
vendored
1
node_modules/.bin/update-browserslist-db
generated
vendored
@ -1 +0,0 @@
|
|||||||
../update-browserslist-db/cli.js
|
|
1
node_modules/.bin/webpack
generated
vendored
1
node_modules/.bin/webpack
generated
vendored
@ -1 +0,0 @@
|
|||||||
../webpack/bin/webpack.js
|
|
1
node_modules/.bin/webpack-cli
generated
vendored
1
node_modules/.bin/webpack-cli
generated
vendored
@ -1 +0,0 @@
|
|||||||
../webpack-cli/bin/cli.js
|
|
2806
node_modules/.package-lock.json
generated
vendored
2806
node_modules/.package-lock.json
generated
vendored
File diff suppressed because it is too large
Load Diff
21
node_modules/@cspotcode/source-map-support/LICENSE.md
generated
vendored
21
node_modules/@cspotcode/source-map-support/LICENSE.md
generated
vendored
@ -1,21 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2014 Evan Wallace
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
289
node_modules/@cspotcode/source-map-support/README.md
generated
vendored
289
node_modules/@cspotcode/source-map-support/README.md
generated
vendored
@ -1,289 +0,0 @@
|
|||||||
# Source Map Support
|
|
||||||
|
|
||||||
[](https://npmjs.org/package/@cspotcode/source-map-support)
|
|
||||||
[](https://npmjs.org/package/@cspotcode/source-map-support)
|
|
||||||
[](https://github.com/cspotcode/node-source-map-support/actions?query=workflow%3A%22Continuous+Integration%22)
|
|
||||||
|
|
||||||
This module provides source map support for stack traces in node via the [V8 stack trace API](https://github.com/v8/v8/wiki/Stack-Trace-API). It uses the [source-map](https://github.com/mozilla/source-map) module to replace the paths and line numbers of source-mapped files with their original paths and line numbers. The output mimics node's stack trace format with the goal of making every compile-to-JS language more of a first-class citizen. Source maps are completely general (not specific to any one language) so you can use source maps with multiple compile-to-JS languages in the same node process.
|
|
||||||
|
|
||||||
## Installation and Usage
|
|
||||||
|
|
||||||
#### Node support
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install @cspotcode/source-map-support
|
|
||||||
```
|
|
||||||
|
|
||||||
Source maps can be generated using libraries such as [source-map-index-generator](https://github.com/twolfson/source-map-index-generator). Once you have a valid source map, place a source mapping comment somewhere in the file (usually done automatically or with an option by your transpiler):
|
|
||||||
|
|
||||||
```
|
|
||||||
//# sourceMappingURL=path/to/source.map
|
|
||||||
```
|
|
||||||
|
|
||||||
If multiple sourceMappingURL comments exist in one file, the last sourceMappingURL comment will be
|
|
||||||
respected (e.g. if a file mentions the comment in code, or went through multiple transpilers).
|
|
||||||
The path should either be absolute or relative to the compiled file.
|
|
||||||
|
|
||||||
From here you have two options.
|
|
||||||
|
|
||||||
##### CLI Usage
|
|
||||||
|
|
||||||
```bash
|
|
||||||
node -r @cspotcode/source-map-support/register compiled.js
|
|
||||||
# Or to enable hookRequire
|
|
||||||
node -r @cspotcode/source-map-support/register-hook-require compiled.js
|
|
||||||
```
|
|
||||||
|
|
||||||
##### Programmatic Usage
|
|
||||||
|
|
||||||
Put the following line at the top of the compiled file.
|
|
||||||
|
|
||||||
```js
|
|
||||||
require('@cspotcode/source-map-support').install();
|
|
||||||
```
|
|
||||||
|
|
||||||
It is also possible to install the source map support directly by
|
|
||||||
requiring the `register` module which can be handy with ES6:
|
|
||||||
|
|
||||||
```js
|
|
||||||
import '@cspotcode/source-map-support/register'
|
|
||||||
|
|
||||||
// Instead of:
|
|
||||||
import sourceMapSupport from '@cspotcode/source-map-support'
|
|
||||||
sourceMapSupport.install()
|
|
||||||
```
|
|
||||||
Note: if you're using babel-register, it includes source-map-support already.
|
|
||||||
|
|
||||||
It is also very useful with Mocha:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ mocha --require @cspotcode/source-map-support/register tests/
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Browser support
|
|
||||||
|
|
||||||
This library also works in Chrome. While the DevTools console already supports source maps, the V8 engine doesn't and `Error.prototype.stack` will be incorrect without this library. Everything will just work if you deploy your source files using [browserify](http://browserify.org/). Just make sure to pass the `--debug` flag to the browserify command so your source maps are included in the bundled code.
|
|
||||||
|
|
||||||
This library also works if you use another build process or just include the source files directly. In this case, include the file `browser-source-map-support.js` in your page and call `sourceMapSupport.install()`. It contains the whole library already bundled for the browser using browserify.
|
|
||||||
|
|
||||||
```html
|
|
||||||
<script src="browser-source-map-support.js"></script>
|
|
||||||
<script>sourceMapSupport.install();</script>
|
|
||||||
```
|
|
||||||
|
|
||||||
This library also works if you use AMD (Asynchronous Module Definition), which is used in tools like [RequireJS](http://requirejs.org/). Just list `browser-source-map-support` as a dependency:
|
|
||||||
|
|
||||||
```html
|
|
||||||
<script>
|
|
||||||
define(['browser-source-map-support'], function(sourceMapSupport) {
|
|
||||||
sourceMapSupport.install();
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Options
|
|
||||||
|
|
||||||
This module installs two things: a change to the `stack` property on `Error` objects and a handler for uncaught exceptions that mimics node's default exception handler (the handler can be seen in the demos below). You may want to disable the handler if you have your own uncaught exception handler. This can be done by passing an argument to the installer:
|
|
||||||
|
|
||||||
```js
|
|
||||||
require('@cspotcode/source-map-support').install({
|
|
||||||
handleUncaughtExceptions: false
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
This module loads source maps from the filesystem by default. You can provide alternate loading behavior through a callback as shown below. For example, [Meteor](https://github.com/meteor) keeps all source maps cached in memory to avoid disk access.
|
|
||||||
|
|
||||||
```js
|
|
||||||
require('@cspotcode/source-map-support').install({
|
|
||||||
retrieveSourceMap: function(source) {
|
|
||||||
if (source === 'compiled.js') {
|
|
||||||
return {
|
|
||||||
url: 'original.js',
|
|
||||||
map: fs.readFileSync('compiled.js.map', 'utf8')
|
|
||||||
};
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
The module will by default assume a browser environment if XMLHttpRequest and window are defined. If either of these do not exist it will instead assume a node environment.
|
|
||||||
In some rare cases, e.g. when running a browser emulation and where both variables are also set, you can explictly specify the environment to be either 'browser' or 'node'.
|
|
||||||
|
|
||||||
```js
|
|
||||||
require('@cspotcode/source-map-support').install({
|
|
||||||
environment: 'node'
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
To support files with inline source maps, the `hookRequire` options can be specified, which will monitor all source files for inline source maps.
|
|
||||||
|
|
||||||
|
|
||||||
```js
|
|
||||||
require('@cspotcode/source-map-support').install({
|
|
||||||
hookRequire: true
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
This monkey patches the `require` module loading chain, so is not enabled by default and is not recommended for any sort of production usage.
|
|
||||||
|
|
||||||
## Demos
|
|
||||||
|
|
||||||
#### Basic Demo
|
|
||||||
|
|
||||||
original.js:
|
|
||||||
|
|
||||||
```js
|
|
||||||
throw new Error('test'); // This is the original code
|
|
||||||
```
|
|
||||||
|
|
||||||
compiled.js:
|
|
||||||
|
|
||||||
```js
|
|
||||||
require('@cspotcode/source-map-support').install();
|
|
||||||
|
|
||||||
throw new Error('test'); // This is the compiled code
|
|
||||||
// The next line defines the sourceMapping.
|
|
||||||
//# sourceMappingURL=compiled.js.map
|
|
||||||
```
|
|
||||||
|
|
||||||
compiled.js.map:
|
|
||||||
|
|
||||||
```json
|
|
||||||
{
|
|
||||||
"version": 3,
|
|
||||||
"file": "compiled.js",
|
|
||||||
"sources": ["original.js"],
|
|
||||||
"names": [],
|
|
||||||
"mappings": ";;AAAA,MAAM,IAAI"
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Run compiled.js using node (notice how the stack trace uses original.js instead of compiled.js):
|
|
||||||
|
|
||||||
```
|
|
||||||
$ node compiled.js
|
|
||||||
|
|
||||||
original.js:1
|
|
||||||
throw new Error('test'); // This is the original code
|
|
||||||
^
|
|
||||||
Error: test
|
|
||||||
at Object.<anonymous> (original.js:1:7)
|
|
||||||
at Module._compile (module.js:456:26)
|
|
||||||
at Object.Module._extensions..js (module.js:474:10)
|
|
||||||
at Module.load (module.js:356:32)
|
|
||||||
at Function.Module._load (module.js:312:12)
|
|
||||||
at Function.Module.runMain (module.js:497:10)
|
|
||||||
at startup (node.js:119:16)
|
|
||||||
at node.js:901:3
|
|
||||||
```
|
|
||||||
|
|
||||||
#### TypeScript Demo
|
|
||||||
|
|
||||||
demo.ts:
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
declare function require(name: string);
|
|
||||||
require('@cspotcode/source-map-support').install();
|
|
||||||
class Foo {
|
|
||||||
constructor() { this.bar(); }
|
|
||||||
bar() { throw new Error('this is a demo'); }
|
|
||||||
}
|
|
||||||
new Foo();
|
|
||||||
```
|
|
||||||
|
|
||||||
Compile and run the file using the TypeScript compiler from the terminal:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install source-map-support typescript
|
|
||||||
$ node_modules/typescript/bin/tsc -sourcemap demo.ts
|
|
||||||
$ node demo.js
|
|
||||||
|
|
||||||
demo.ts:5
|
|
||||||
bar() { throw new Error('this is a demo'); }
|
|
||||||
^
|
|
||||||
Error: this is a demo
|
|
||||||
at Foo.bar (demo.ts:5:17)
|
|
||||||
at new Foo (demo.ts:4:24)
|
|
||||||
at Object.<anonymous> (demo.ts:7:1)
|
|
||||||
at Module._compile (module.js:456:26)
|
|
||||||
at Object.Module._extensions..js (module.js:474:10)
|
|
||||||
at Module.load (module.js:356:32)
|
|
||||||
at Function.Module._load (module.js:312:12)
|
|
||||||
at Function.Module.runMain (module.js:497:10)
|
|
||||||
at startup (node.js:119:16)
|
|
||||||
at node.js:901:3
|
|
||||||
```
|
|
||||||
|
|
||||||
There is also the option to use `-r source-map-support/register` with typescript, without the need add the `require('@cspotcode/source-map-support').install()` in the code base:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ npm install source-map-support typescript
|
|
||||||
$ node_modules/typescript/bin/tsc -sourcemap demo.ts
|
|
||||||
$ node -r source-map-support/register demo.js
|
|
||||||
|
|
||||||
demo.ts:5
|
|
||||||
bar() { throw new Error('this is a demo'); }
|
|
||||||
^
|
|
||||||
Error: this is a demo
|
|
||||||
at Foo.bar (demo.ts:5:17)
|
|
||||||
at new Foo (demo.ts:4:24)
|
|
||||||
at Object.<anonymous> (demo.ts:7:1)
|
|
||||||
at Module._compile (module.js:456:26)
|
|
||||||
at Object.Module._extensions..js (module.js:474:10)
|
|
||||||
at Module.load (module.js:356:32)
|
|
||||||
at Function.Module._load (module.js:312:12)
|
|
||||||
at Function.Module.runMain (module.js:497:10)
|
|
||||||
at startup (node.js:119:16)
|
|
||||||
at node.js:901:3
|
|
||||||
```
|
|
||||||
|
|
||||||
#### CoffeeScript Demo
|
|
||||||
|
|
||||||
demo.coffee:
|
|
||||||
|
|
||||||
```coffee
|
|
||||||
require('@cspotcode/source-map-support').install()
|
|
||||||
foo = ->
|
|
||||||
bar = -> throw new Error 'this is a demo'
|
|
||||||
bar()
|
|
||||||
foo()
|
|
||||||
```
|
|
||||||
|
|
||||||
Compile and run the file using the CoffeeScript compiler from the terminal:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
$ npm install @cspotcode/source-map-support coffeescript
|
|
||||||
$ node_modules/.bin/coffee --map --compile demo.coffee
|
|
||||||
$ node demo.js
|
|
||||||
|
|
||||||
demo.coffee:3
|
|
||||||
bar = -> throw new Error 'this is a demo'
|
|
||||||
^
|
|
||||||
Error: this is a demo
|
|
||||||
at bar (demo.coffee:3:22)
|
|
||||||
at foo (demo.coffee:4:3)
|
|
||||||
at Object.<anonymous> (demo.coffee:5:1)
|
|
||||||
at Object.<anonymous> (demo.coffee:1:1)
|
|
||||||
at Module._compile (module.js:456:26)
|
|
||||||
at Object.Module._extensions..js (module.js:474:10)
|
|
||||||
at Module.load (module.js:356:32)
|
|
||||||
at Function.Module._load (module.js:312:12)
|
|
||||||
at Function.Module.runMain (module.js:497:10)
|
|
||||||
at startup (node.js:119:16)
|
|
||||||
```
|
|
||||||
|
|
||||||
## Tests
|
|
||||||
|
|
||||||
This repo contains both automated tests for node and manual tests for the browser. The automated tests can be run using mocha (type `mocha` in the root directory). To run the manual tests:
|
|
||||||
|
|
||||||
* Build the tests using `build.js`
|
|
||||||
* Launch the HTTP server (`npm run serve-tests`) and visit
|
|
||||||
* http://127.0.0.1:1336/amd-test
|
|
||||||
* http://127.0.0.1:1336/browser-test
|
|
||||||
* http://127.0.0.1:1336/browserify-test - **Currently not working** due to a bug with browserify (see [pull request #66](https://github.com/evanw/node-source-map-support/pull/66) for details).
|
|
||||||
* For `header-test`, run `server.js` inside that directory and visit http://127.0.0.1:1337/
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
This code is available under the [MIT license](http://opensource.org/licenses/MIT).
|
|
114
node_modules/@cspotcode/source-map-support/browser-source-map-support.js
generated
vendored
114
node_modules/@cspotcode/source-map-support/browser-source-map-support.js
generated
vendored
@ -1,114 +0,0 @@
|
|||||||
/*
|
|
||||||
* Support for source maps in V8 stack traces
|
|
||||||
* https://github.com/evanw/node-source-map-support
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
The buffer module from node.js, for the browser.
|
|
||||||
|
|
||||||
@author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
|
|
||||||
license MIT
|
|
||||||
*/
|
|
||||||
(this.define||function(R,U){this.sourceMapSupport=U()})("browser-source-map-support",function(R){(function e(C,J,A){function p(f,c){if(!J[f]){if(!C[f]){var l="function"==typeof require&&require;if(!c&&l)return l(f,!0);if(t)return t(f,!0);throw Error("Cannot find module '"+f+"'");}l=J[f]={exports:{}};C[f][0].call(l.exports,function(q){var r=C[f][1][q];return p(r?r:q)},l,l.exports,e,C,J,A)}return J[f].exports}for(var t="function"==typeof require&&require,m=0;m<A.length;m++)p(A[m]);return p})({1:[function(C,
|
|
||||||
J,A){R=C("./source-map-support")},{"./source-map-support":21}],2:[function(C,J,A){(function(e){function p(m){m=m.charCodeAt(0);if(43===m)return 62;if(47===m)return 63;if(48>m)return-1;if(58>m)return m-48+52;if(91>m)return m-65;if(123>m)return m-97+26}var t="undefined"!==typeof Uint8Array?Uint8Array:Array;e.toByteArray=function(m){function f(d){q[k++]=d}if(0<m.length%4)throw Error("Invalid string. Length must be a multiple of 4");var c=m.length;var l="="===m.charAt(c-2)?2:"="===m.charAt(c-1)?1:0;var q=
|
|
||||||
new t(3*m.length/4-l);var r=0<l?m.length-4:m.length;var k=0;for(c=0;c<r;c+=4){var u=p(m.charAt(c))<<18|p(m.charAt(c+1))<<12|p(m.charAt(c+2))<<6|p(m.charAt(c+3));f((u&16711680)>>16);f((u&65280)>>8);f(u&255)}2===l?(u=p(m.charAt(c))<<2|p(m.charAt(c+1))>>4,f(u&255)):1===l&&(u=p(m.charAt(c))<<10|p(m.charAt(c+1))<<4|p(m.charAt(c+2))>>2,f(u>>8&255),f(u&255));return q};e.fromByteArray=function(m){var f=m.length%3,c="",l;var q=0;for(l=m.length-f;q<l;q+=3){var r=(m[q]<<16)+(m[q+1]<<8)+m[q+2];r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>
|
|
||||||
18&63)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>12&63)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>6&63)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r&63);c+=r}switch(f){case 1:r=m[m.length-1];c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>2);c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r<<4&63);c+="==";break;case 2:r=(m[m.length-2]<<8)+
|
|
||||||
m[m.length-1],c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>10),c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>4&63),c+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r<<2&63),c+="="}return c}})("undefined"===typeof A?this.base64js={}:A)},{}],3:[function(C,J,A){},{}],4:[function(C,J,A){(function(e){var p=Object.prototype.toString,t="function"===typeof e.alloc&&"function"===typeof e.allocUnsafe&&"function"===
|
|
||||||
typeof e.from;J.exports=function(m,f,c){if("number"===typeof m)throw new TypeError('"value" argument must not be a number');if("ArrayBuffer"===p.call(m).slice(8,-1)){f>>>=0;var l=m.byteLength-f;if(0>l)throw new RangeError("'offset' is out of bounds");if(void 0===c)c=l;else if(c>>>=0,c>l)throw new RangeError("'length' is out of bounds");return t?e.from(m.slice(f,f+c)):new e(new Uint8Array(m.slice(f,f+c)))}if("string"===typeof m){c=f;if("string"!==typeof c||""===c)c="utf8";if(!e.isEncoding(c))throw new TypeError('"encoding" must be a valid string encoding');
|
|
||||||
return t?e.from(m,c):new e(m,c)}return t?e.from(m):new e(m)}}).call(this,C("buffer").Buffer)},{buffer:5}],5:[function(C,J,A){function e(a,b,h){if(!(this instanceof e))return new e(a,b,h);var w=typeof a;if("number"===w)var y=0<a?a>>>0:0;else if("string"===w){if("base64"===b)for(a=(a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")).replace(L,"");0!==a.length%4;)a+="=";y=e.byteLength(a,b)}else if("object"===w&&null!==a)"Buffer"===a.type&&z(a.data)&&(a=a.data),y=0<+a.length?Math.floor(+a.length):0;else throw new TypeError("must start with number, buffer, array or string");
|
|
||||||
if(this.length>G)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+G.toString(16)+" bytes");if(e.TYPED_ARRAY_SUPPORT)var I=e._augment(new Uint8Array(y));else I=this,I.length=y,I._isBuffer=!0;if(e.TYPED_ARRAY_SUPPORT&&"number"===typeof a.byteLength)I._set(a);else{var K=a;if(z(K)||e.isBuffer(K)||K&&"object"===typeof K&&"number"===typeof K.length)if(e.isBuffer(a))for(b=0;b<y;b++)I[b]=a.readUInt8(b);else for(b=0;b<y;b++)I[b]=(a[b]%256+256)%256;else if("string"===w)I.write(a,
|
|
||||||
0,b);else if("number"===w&&!e.TYPED_ARRAY_SUPPORT&&!h)for(b=0;b<y;b++)I[b]=0}return I}function p(a,b,h){var w="";for(h=Math.min(a.length,h);b<h;b++)w+=String.fromCharCode(a[b]);return w}function t(a,b,h){if(0!==a%1||0>a)throw new RangeError("offset is not uint");if(a+b>h)throw new RangeError("Trying to access beyond buffer length");}function m(a,b,h,w,y,I){if(!e.isBuffer(a))throw new TypeError("buffer must be a Buffer instance");if(b>y||b<I)throw new TypeError("value is out of bounds");if(h+w>a.length)throw new TypeError("index out of range");
|
|
||||||
}function f(a,b,h,w){0>b&&(b=65535+b+1);for(var y=0,I=Math.min(a.length-h,2);y<I;y++)a[h+y]=(b&255<<8*(w?y:1-y))>>>8*(w?y:1-y)}function c(a,b,h,w){0>b&&(b=4294967295+b+1);for(var y=0,I=Math.min(a.length-h,4);y<I;y++)a[h+y]=b>>>8*(w?y:3-y)&255}function l(a,b,h,w,y,I){if(b>y||b<I)throw new TypeError("value is out of bounds");if(h+w>a.length)throw new TypeError("index out of range");}function q(a,b,h,w,y){y||l(a,b,h,4,3.4028234663852886E38,-3.4028234663852886E38);v.write(a,b,h,w,23,4);return h+4}function r(a,
|
|
||||||
b,h,w,y){y||l(a,b,h,8,1.7976931348623157E308,-1.7976931348623157E308);v.write(a,b,h,w,52,8);return h+8}function k(a){for(var b=[],h=0;h<a.length;h++){var w=a.charCodeAt(h);if(127>=w)b.push(w);else{var y=h;55296<=w&&57343>=w&&h++;w=encodeURIComponent(a.slice(y,h+1)).substr(1).split("%");for(y=0;y<w.length;y++)b.push(parseInt(w[y],16))}}return b}function u(a){for(var b=[],h=0;h<a.length;h++)b.push(a.charCodeAt(h)&255);return b}function d(a,b,h,w,y){y&&(w-=w%y);for(y=0;y<w&&!(y+h>=b.length||y>=a.length);y++)b[y+
|
|
||||||
h]=a[y];return y}function g(a){try{return decodeURIComponent(a)}catch(b){return String.fromCharCode(65533)}}var n=C("base64-js"),v=C("ieee754"),z=C("is-array");A.Buffer=e;A.SlowBuffer=e;A.INSPECT_MAX_BYTES=50;e.poolSize=8192;var G=1073741823;e.TYPED_ARRAY_SUPPORT=function(){try{var a=new ArrayBuffer(0),b=new Uint8Array(a);b.foo=function(){return 42};return 42===b.foo()&&"function"===typeof b.subarray&&0===(new Uint8Array(1)).subarray(1,1).byteLength}catch(h){return!1}}();e.isBuffer=function(a){return!(null==
|
|
||||||
a||!a._isBuffer)};e.compare=function(a,b){if(!e.isBuffer(a)||!e.isBuffer(b))throw new TypeError("Arguments must be Buffers");for(var h=a.length,w=b.length,y=0,I=Math.min(h,w);y<I&&a[y]===b[y];y++);y!==I&&(h=a[y],w=b[y]);return h<w?-1:w<h?1:0};e.isEncoding=function(a){switch(String(a).toLowerCase()){case "hex":case "utf8":case "utf-8":case "ascii":case "binary":case "base64":case "raw":case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":return!0;default:return!1}};e.concat=function(a,b){if(!z(a))throw new TypeError("Usage: Buffer.concat(list[, length])");
|
|
||||||
if(0===a.length)return new e(0);if(1===a.length)return a[0];var h;if(void 0===b)for(h=b=0;h<a.length;h++)b+=a[h].length;var w=new e(b),y=0;for(h=0;h<a.length;h++){var I=a[h];I.copy(w,y);y+=I.length}return w};e.byteLength=function(a,b){a+="";switch(b||"utf8"){case "ascii":case "binary":case "raw":var h=a.length;break;case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":h=2*a.length;break;case "hex":h=a.length>>>1;break;case "utf8":case "utf-8":h=k(a).length;break;case "base64":h=n.toByteArray(a).length;
|
|
||||||
break;default:h=a.length}return h};e.prototype.length=void 0;e.prototype.parent=void 0;e.prototype.toString=function(a,b,h){var w=!1;b>>>=0;h=void 0===h||Infinity===h?this.length:h>>>0;a||(a="utf8");0>b&&(b=0);h>this.length&&(h=this.length);if(h<=b)return"";for(;;)switch(a){case "hex":a=b;b=h;h=this.length;if(!a||0>a)a=0;if(!b||0>b||b>h)b=h;w="";for(h=a;h<b;h++)a=w,w=this[h],w=16>w?"0"+w.toString(16):w.toString(16),w=a+w;return w;case "utf8":case "utf-8":w=a="";for(h=Math.min(this.length,h);b<h;b++)127>=
|
|
||||||
this[b]?(a+=g(w)+String.fromCharCode(this[b]),w=""):w+="%"+this[b].toString(16);return a+g(w);case "ascii":return p(this,b,h);case "binary":return p(this,b,h);case "base64":return b=0===b&&h===this.length?n.fromByteArray(this):n.fromByteArray(this.slice(b,h)),b;case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":b=this.slice(b,h);h="";for(a=0;a<b.length;a+=2)h+=String.fromCharCode(b[a]+256*b[a+1]);return h;default:if(w)throw new TypeError("Unknown encoding: "+a);a=(a+"").toLowerCase();w=!0}};
|
|
||||||
e.prototype.equals=function(a){if(!e.isBuffer(a))throw new TypeError("Argument must be a Buffer");return 0===e.compare(this,a)};e.prototype.inspect=function(){var a="",b=A.INSPECT_MAX_BYTES;0<this.length&&(a=this.toString("hex",0,b).match(/.{2}/g).join(" "),this.length>b&&(a+=" ... "));return"<Buffer "+a+">"};e.prototype.compare=function(a){if(!e.isBuffer(a))throw new TypeError("Argument must be a Buffer");return e.compare(this,a)};e.prototype.get=function(a){console.log(".get() is deprecated. Access using array indexes instead.");
|
|
||||||
return this.readUInt8(a)};e.prototype.set=function(a,b){console.log(".set() is deprecated. Access using array indexes instead.");return this.writeUInt8(a,b)};e.prototype.write=function(a,b,h,w){if(isFinite(b))isFinite(h)||(w=h,h=void 0);else{var y=w;w=b;b=h;h=y}b=Number(b)||0;y=this.length-b;h?(h=Number(h),h>y&&(h=y)):h=y;w=String(w||"utf8").toLowerCase();switch(w){case "hex":b=Number(b)||0;w=this.length-b;h?(h=Number(h),h>w&&(h=w)):h=w;w=a.length;if(0!==w%2)throw Error("Invalid hex string");h>w/
|
|
||||||
2&&(h=w/2);for(w=0;w<h;w++){y=parseInt(a.substr(2*w,2),16);if(isNaN(y))throw Error("Invalid hex string");this[b+w]=y}a=w;break;case "utf8":case "utf-8":a=d(k(a),this,b,h);break;case "ascii":a=d(u(a),this,b,h);break;case "binary":a=d(u(a),this,b,h);break;case "base64":a=d(n.toByteArray(a),this,b,h);break;case "ucs2":case "ucs-2":case "utf16le":case "utf-16le":y=[];for(var I=0;I<a.length;I++){var K=a.charCodeAt(I);w=K>>8;K%=256;y.push(K);y.push(w)}a=d(y,this,b,h,2);break;default:throw new TypeError("Unknown encoding: "+
|
|
||||||
w);}return a};e.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};e.prototype.slice=function(a,b){var h=this.length;a=~~a;b=void 0===b?h:~~b;0>a?(a+=h,0>a&&(a=0)):a>h&&(a=h);0>b?(b+=h,0>b&&(b=0)):b>h&&(b=h);b<a&&(b=a);if(e.TYPED_ARRAY_SUPPORT)return e._augment(this.subarray(a,b));h=b-a;for(var w=new e(h,void 0,!0),y=0;y<h;y++)w[y]=this[y+a];return w};e.prototype.readUInt8=function(a,b){b||t(a,1,this.length);return this[a]};e.prototype.readUInt16LE=
|
|
||||||
function(a,b){b||t(a,2,this.length);return this[a]|this[a+1]<<8};e.prototype.readUInt16BE=function(a,b){b||t(a,2,this.length);return this[a]<<8|this[a+1]};e.prototype.readUInt32LE=function(a,b){b||t(a,4,this.length);return(this[a]|this[a+1]<<8|this[a+2]<<16)+16777216*this[a+3]};e.prototype.readUInt32BE=function(a,b){b||t(a,4,this.length);return 16777216*this[a]+(this[a+1]<<16|this[a+2]<<8|this[a+3])};e.prototype.readInt8=function(a,b){b||t(a,1,this.length);return this[a]&128?-1*(255-this[a]+1):this[a]};
|
|
||||||
e.prototype.readInt16LE=function(a,b){b||t(a,2,this.length);var h=this[a]|this[a+1]<<8;return h&32768?h|4294901760:h};e.prototype.readInt16BE=function(a,b){b||t(a,2,this.length);var h=this[a+1]|this[a]<<8;return h&32768?h|4294901760:h};e.prototype.readInt32LE=function(a,b){b||t(a,4,this.length);return this[a]|this[a+1]<<8|this[a+2]<<16|this[a+3]<<24};e.prototype.readInt32BE=function(a,b){b||t(a,4,this.length);return this[a]<<24|this[a+1]<<16|this[a+2]<<8|this[a+3]};e.prototype.readFloatLE=function(a,
|
|
||||||
b){b||t(a,4,this.length);return v.read(this,a,!0,23,4)};e.prototype.readFloatBE=function(a,b){b||t(a,4,this.length);return v.read(this,a,!1,23,4)};e.prototype.readDoubleLE=function(a,b){b||t(a,8,this.length);return v.read(this,a,!0,52,8)};e.prototype.readDoubleBE=function(a,b){b||t(a,8,this.length);return v.read(this,a,!1,52,8)};e.prototype.writeUInt8=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,1,255,0);e.TYPED_ARRAY_SUPPORT||(a=Math.floor(a));this[b]=a;return b+1};e.prototype.writeUInt16LE=function(a,
|
|
||||||
b,h){a=+a;b>>>=0;h||m(this,a,b,2,65535,0);e.TYPED_ARRAY_SUPPORT?(this[b]=a,this[b+1]=a>>>8):f(this,a,b,!0);return b+2};e.prototype.writeUInt16BE=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,2,65535,0);e.TYPED_ARRAY_SUPPORT?(this[b]=a>>>8,this[b+1]=a):f(this,a,b,!1);return b+2};e.prototype.writeUInt32LE=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,4,4294967295,0);e.TYPED_ARRAY_SUPPORT?(this[b+3]=a>>>24,this[b+2]=a>>>16,this[b+1]=a>>>8,this[b]=a):c(this,a,b,!0);return b+4};e.prototype.writeUInt32BE=function(a,
|
|
||||||
b,h){a=+a;b>>>=0;h||m(this,a,b,4,4294967295,0);e.TYPED_ARRAY_SUPPORT?(this[b]=a>>>24,this[b+1]=a>>>16,this[b+2]=a>>>8,this[b+3]=a):c(this,a,b,!1);return b+4};e.prototype.writeInt8=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,1,127,-128);e.TYPED_ARRAY_SUPPORT||(a=Math.floor(a));0>a&&(a=255+a+1);this[b]=a;return b+1};e.prototype.writeInt16LE=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,2,32767,-32768);e.TYPED_ARRAY_SUPPORT?(this[b]=a,this[b+1]=a>>>8):f(this,a,b,!0);return b+2};e.prototype.writeInt16BE=function(a,
|
|
||||||
b,h){a=+a;b>>>=0;h||m(this,a,b,2,32767,-32768);e.TYPED_ARRAY_SUPPORT?(this[b]=a>>>8,this[b+1]=a):f(this,a,b,!1);return b+2};e.prototype.writeInt32LE=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,4,2147483647,-2147483648);e.TYPED_ARRAY_SUPPORT?(this[b]=a,this[b+1]=a>>>8,this[b+2]=a>>>16,this[b+3]=a>>>24):c(this,a,b,!0);return b+4};e.prototype.writeInt32BE=function(a,b,h){a=+a;b>>>=0;h||m(this,a,b,4,2147483647,-2147483648);0>a&&(a=4294967295+a+1);e.TYPED_ARRAY_SUPPORT?(this[b]=a>>>24,this[b+1]=a>>>16,this[b+
|
|
||||||
2]=a>>>8,this[b+3]=a):c(this,a,b,!1);return b+4};e.prototype.writeFloatLE=function(a,b,h){return q(this,a,b,!0,h)};e.prototype.writeFloatBE=function(a,b,h){return q(this,a,b,!1,h)};e.prototype.writeDoubleLE=function(a,b,h){return r(this,a,b,!0,h)};e.prototype.writeDoubleBE=function(a,b,h){return r(this,a,b,!1,h)};e.prototype.copy=function(a,b,h,w){h||(h=0);w||0===w||(w=this.length);b||(b=0);if(w!==h&&0!==a.length&&0!==this.length){if(w<h)throw new TypeError("sourceEnd < sourceStart");if(0>b||b>=a.length)throw new TypeError("targetStart out of bounds");
|
|
||||||
if(0>h||h>=this.length)throw new TypeError("sourceStart out of bounds");if(0>w||w>this.length)throw new TypeError("sourceEnd out of bounds");w>this.length&&(w=this.length);a.length-b<w-h&&(w=a.length-b+h);w-=h;if(1E3>w||!e.TYPED_ARRAY_SUPPORT)for(var y=0;y<w;y++)a[y+b]=this[y+h];else a._set(this.subarray(h,h+w),b)}};e.prototype.fill=function(a,b,h){a||(a=0);b||(b=0);h||(h=this.length);if(h<b)throw new TypeError("end < start");if(h!==b&&0!==this.length){if(0>b||b>=this.length)throw new TypeError("start out of bounds");
|
|
||||||
if(0>h||h>this.length)throw new TypeError("end out of bounds");if("number"===typeof a)for(;b<h;b++)this[b]=a;else{a=k(a.toString());for(var w=a.length;b<h;b++)this[b]=a[b%w]}return this}};e.prototype.toArrayBuffer=function(){if("undefined"!==typeof Uint8Array){if(e.TYPED_ARRAY_SUPPORT)return(new e(this)).buffer;for(var a=new Uint8Array(this.length),b=0,h=a.length;b<h;b+=1)a[b]=this[b];return a.buffer}throw new TypeError("Buffer.toArrayBuffer not supported in this browser");};var D=e.prototype;e._augment=
|
|
||||||
function(a){a.constructor=e;a._isBuffer=!0;a._get=a.get;a._set=a.set;a.get=D.get;a.set=D.set;a.write=D.write;a.toString=D.toString;a.toLocaleString=D.toString;a.toJSON=D.toJSON;a.equals=D.equals;a.compare=D.compare;a.copy=D.copy;a.slice=D.slice;a.readUInt8=D.readUInt8;a.readUInt16LE=D.readUInt16LE;a.readUInt16BE=D.readUInt16BE;a.readUInt32LE=D.readUInt32LE;a.readUInt32BE=D.readUInt32BE;a.readInt8=D.readInt8;a.readInt16LE=D.readInt16LE;a.readInt16BE=D.readInt16BE;a.readInt32LE=D.readInt32LE;a.readInt32BE=
|
|
||||||
D.readInt32BE;a.readFloatLE=D.readFloatLE;a.readFloatBE=D.readFloatBE;a.readDoubleLE=D.readDoubleLE;a.readDoubleBE=D.readDoubleBE;a.writeUInt8=D.writeUInt8;a.writeUInt16LE=D.writeUInt16LE;a.writeUInt16BE=D.writeUInt16BE;a.writeUInt32LE=D.writeUInt32LE;a.writeUInt32BE=D.writeUInt32BE;a.writeInt8=D.writeInt8;a.writeInt16LE=D.writeInt16LE;a.writeInt16BE=D.writeInt16BE;a.writeInt32LE=D.writeInt32LE;a.writeInt32BE=D.writeInt32BE;a.writeFloatLE=D.writeFloatLE;a.writeFloatBE=D.writeFloatBE;a.writeDoubleLE=
|
|
||||||
D.writeDoubleLE;a.writeDoubleBE=D.writeDoubleBE;a.fill=D.fill;a.inspect=D.inspect;a.toArrayBuffer=D.toArrayBuffer;return a};var L=/[^+\/0-9A-z]/g},{"base64-js":2,ieee754:6,"is-array":7}],6:[function(C,J,A){A.read=function(e,p,t,m,f){var c=8*f-m-1;var l=(1<<c)-1,q=l>>1,r=-7;f=t?f-1:0;var k=t?-1:1,u=e[p+f];f+=k;t=u&(1<<-r)-1;u>>=-r;for(r+=c;0<r;t=256*t+e[p+f],f+=k,r-=8);c=t&(1<<-r)-1;t>>=-r;for(r+=m;0<r;c=256*c+e[p+f],f+=k,r-=8);if(0===t)t=1-q;else{if(t===l)return c?NaN:Infinity*(u?-1:1);c+=Math.pow(2,
|
|
||||||
m);t-=q}return(u?-1:1)*c*Math.pow(2,t-m)};A.write=function(e,p,t,m,f,c){var l,q=8*c-f-1,r=(1<<q)-1,k=r>>1,u=23===f?Math.pow(2,-24)-Math.pow(2,-77):0;c=m?0:c-1;var d=m?1:-1,g=0>p||0===p&&0>1/p?1:0;p=Math.abs(p);isNaN(p)||Infinity===p?(p=isNaN(p)?1:0,m=r):(m=Math.floor(Math.log(p)/Math.LN2),1>p*(l=Math.pow(2,-m))&&(m--,l*=2),p=1<=m+k?p+u/l:p+u*Math.pow(2,1-k),2<=p*l&&(m++,l/=2),m+k>=r?(p=0,m=r):1<=m+k?(p=(p*l-1)*Math.pow(2,f),m+=k):(p=p*Math.pow(2,k-1)*Math.pow(2,f),m=0));for(;8<=f;e[t+c]=p&255,c+=
|
|
||||||
d,p/=256,f-=8);m=m<<f|p;for(q+=f;0<q;e[t+c]=m&255,c+=d,m/=256,q-=8);e[t+c-d]|=128*g}},{}],7:[function(C,J,A){var e=Object.prototype.toString;J.exports=Array.isArray||function(p){return!!p&&"[object Array]"==e.call(p)}},{}],8:[function(C,J,A){(function(e){function p(c,l){for(var q=0,r=c.length-1;0<=r;r--){var k=c[r];"."===k?c.splice(r,1):".."===k?(c.splice(r,1),q++):q&&(c.splice(r,1),q--)}if(l)for(;q--;q)c.unshift("..");return c}function t(c,l){if(c.filter)return c.filter(l);for(var q=[],r=0;r<c.length;r++)l(c[r],
|
|
||||||
r,c)&&q.push(c[r]);return q}var m=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;A.resolve=function(){for(var c="",l=!1,q=arguments.length-1;-1<=q&&!l;q--){var r=0<=q?arguments[q]:e.cwd();if("string"!==typeof r)throw new TypeError("Arguments to path.resolve must be strings");r&&(c=r+"/"+c,l="/"===r.charAt(0))}c=p(t(c.split("/"),function(k){return!!k}),!l).join("/");return(l?"/":"")+c||"."};A.normalize=function(c){var l=A.isAbsolute(c),q="/"===f(c,-1);(c=p(t(c.split("/"),function(r){return!!r}),
|
|
||||||
!l).join("/"))||l||(c=".");c&&q&&(c+="/");return(l?"/":"")+c};A.isAbsolute=function(c){return"/"===c.charAt(0)};A.join=function(){var c=Array.prototype.slice.call(arguments,0);return A.normalize(t(c,function(l,q){if("string"!==typeof l)throw new TypeError("Arguments to path.join must be strings");return l}).join("/"))};A.relative=function(c,l){function q(n){for(var v=0;v<n.length&&""===n[v];v++);for(var z=n.length-1;0<=z&&""===n[z];z--);return v>z?[]:n.slice(v,z-v+1)}c=A.resolve(c).substr(1);l=A.resolve(l).substr(1);
|
|
||||||
for(var r=q(c.split("/")),k=q(l.split("/")),u=Math.min(r.length,k.length),d=u,g=0;g<u;g++)if(r[g]!==k[g]){d=g;break}u=[];for(g=d;g<r.length;g++)u.push("..");u=u.concat(k.slice(d));return u.join("/")};A.sep="/";A.delimiter=":";A.dirname=function(c){var l=m.exec(c).slice(1);c=l[0];l=l[1];if(!c&&!l)return".";l&&(l=l.substr(0,l.length-1));return c+l};A.basename=function(c,l){var q=m.exec(c).slice(1)[2];l&&q.substr(-1*l.length)===l&&(q=q.substr(0,q.length-l.length));return q};A.extname=function(c){return m.exec(c).slice(1)[3]};
|
|
||||||
var f="b"==="ab".substr(-1)?function(c,l,q){return c.substr(l,q)}:function(c,l,q){0>l&&(l=c.length+l);return c.substr(l,q)}}).call(this,C("g5I+bs"))},{"g5I+bs":9}],9:[function(C,J,A){function e(){}C=J.exports={};C.nextTick=function(){if("undefined"!==typeof window&&window.setImmediate)return function(t){return window.setImmediate(t)};if("undefined"!==typeof window&&window.postMessage&&window.addEventListener){var p=[];window.addEventListener("message",function(t){var m=t.source;m!==window&&null!==
|
|
||||||
m||"process-tick"!==t.data||(t.stopPropagation(),0<p.length&&p.shift()())},!0);return function(t){p.push(t);window.postMessage("process-tick","*")}}return function(t){setTimeout(t,0)}}();C.title="browser";C.browser=!0;C.env={};C.argv=[];C.on=e;C.addListener=e;C.once=e;C.off=e;C.removeListener=e;C.removeAllListeners=e;C.emit=e;C.binding=function(p){throw Error("process.binding is not supported");};C.cwd=function(){return"/"};C.chdir=function(p){throw Error("process.chdir is not supported");}},{}],
|
|
||||||
10:[function(C,J,A){function e(){this._array=[];this._set=m?new Map:Object.create(null)}var p=C("./util"),t=Object.prototype.hasOwnProperty,m="undefined"!==typeof Map;e.fromArray=function(f,c){for(var l=new e,q=0,r=f.length;q<r;q++)l.add(f[q],c);return l};e.prototype.size=function(){return m?this._set.size:Object.getOwnPropertyNames(this._set).length};e.prototype.add=function(f,c){var l=m?f:p.toSetString(f),q=m?this.has(f):t.call(this._set,l),r=this._array.length;q&&!c||this._array.push(f);q||(m?
|
|
||||||
this._set.set(f,r):this._set[l]=r)};e.prototype.has=function(f){if(m)return this._set.has(f);f=p.toSetString(f);return t.call(this._set,f)};e.prototype.indexOf=function(f){if(m){var c=this._set.get(f);if(0<=c)return c}else if(c=p.toSetString(f),t.call(this._set,c))return this._set[c];throw Error('"'+f+'" is not in the set.');};e.prototype.at=function(f){if(0<=f&&f<this._array.length)return this._array[f];throw Error("No element indexed by "+f);};e.prototype.toArray=function(){return this._array.slice()};
|
|
||||||
A.ArraySet=e},{"./util":19}],11:[function(C,J,A){var e=C("./base64");A.encode=function(p){var t="",m=0>p?(-p<<1)+1:p<<1;do p=m&31,m>>>=5,0<m&&(p|=32),t+=e.encode(p);while(0<m);return t};A.decode=function(p,t,m){var f=p.length,c=0,l=0;do{if(t>=f)throw Error("Expected more digits in base 64 VLQ value.");var q=e.decode(p.charCodeAt(t++));if(-1===q)throw Error("Invalid base64 digit: "+p.charAt(t-1));var r=!!(q&32);q&=31;c+=q<<l;l+=5}while(r);p=c>>1;m.value=1===(c&1)?-p:p;m.rest=t}},{"./base64":12}],12:[function(C,
|
|
||||||
J,A){var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");A.encode=function(p){if(0<=p&&p<e.length)return e[p];throw new TypeError("Must be between 0 and 63: "+p);};A.decode=function(p){return 65<=p&&90>=p?p-65:97<=p&&122>=p?p-97+26:48<=p&&57>=p?p-48+52:43==p?62:47==p?63:-1}},{}],13:[function(C,J,A){function e(p,t,m,f,c,l){var q=Math.floor((t-p)/2)+p,r=c(m,f[q],!0);return 0===r?q:0<r?1<t-q?e(q,t,m,f,c,l):l==A.LEAST_UPPER_BOUND?t<f.length?t:-1:q:1<q-p?e(p,q,m,f,c,l):l==
|
|
||||||
A.LEAST_UPPER_BOUND?q:0>p?-1:p}A.GREATEST_LOWER_BOUND=1;A.LEAST_UPPER_BOUND=2;A.search=function(p,t,m,f){if(0===t.length)return-1;p=e(-1,t.length,p,t,m,f||A.GREATEST_LOWER_BOUND);if(0>p)return-1;for(;0<=p-1&&0===m(t[p],t[p-1],!0);)--p;return p}},{}],14:[function(C,J,A){function e(){this._array=[];this._sorted=!0;this._last={generatedLine:-1,generatedColumn:0}}var p=C("./util");e.prototype.unsortedForEach=function(t,m){this._array.forEach(t,m)};e.prototype.add=function(t){var m=this._last,f=m.generatedLine,
|
|
||||||
c=t.generatedLine,l=m.generatedColumn,q=t.generatedColumn;c>f||c==f&&q>=l||0>=p.compareByGeneratedPositionsInflated(m,t)?this._last=t:this._sorted=!1;this._array.push(t)};e.prototype.toArray=function(){this._sorted||(this._array.sort(p.compareByGeneratedPositionsInflated),this._sorted=!0);return this._array};A.MappingList=e},{"./util":19}],15:[function(C,J,A){function e(t,m,f){var c=t[m];t[m]=t[f];t[f]=c}function p(t,m,f,c){if(f<c){var l=f-1;e(t,Math.round(f+Math.random()*(c-f)),c);for(var q=t[c],
|
|
||||||
r=f;r<c;r++)0>=m(t[r],q)&&(l+=1,e(t,l,r));e(t,l+1,r);l+=1;p(t,m,f,l-1);p(t,m,l+1,c)}}A.quickSort=function(t,m){p(t,m,0,t.length-1)}},{}],16:[function(C,J,A){function e(k,u){var d=k;"string"===typeof k&&(d=f.parseSourceMapInput(k));return null!=d.sections?new m(d,u):new p(d,u)}function p(k,u){var d=k;"string"===typeof k&&(d=f.parseSourceMapInput(k));var g=f.getArg(d,"version"),n=f.getArg(d,"sources"),v=f.getArg(d,"names",[]),z=f.getArg(d,"sourceRoot",null),G=f.getArg(d,"sourcesContent",null),D=f.getArg(d,
|
|
||||||
"mappings");d=f.getArg(d,"file",null);if(g!=this._version)throw Error("Unsupported version: "+g);z&&(z=f.normalize(z));n=n.map(String).map(f.normalize).map(function(L){return z&&f.isAbsolute(z)&&f.isAbsolute(L)?f.relative(z,L):L});this._names=l.fromArray(v.map(String),!0);this._sources=l.fromArray(n,!0);this.sourceRoot=z;this.sourcesContent=G;this._mappings=D;this._sourceMapURL=u;this.file=d}function t(){this.generatedColumn=this.generatedLine=0;this.name=this.originalColumn=this.originalLine=this.source=
|
|
||||||
null}function m(k,u){var d=k;"string"===typeof k&&(d=f.parseSourceMapInput(k));var g=f.getArg(d,"version");d=f.getArg(d,"sections");if(g!=this._version)throw Error("Unsupported version: "+g);this._sources=new l;this._names=new l;var n={line:-1,column:0};this._sections=d.map(function(v){if(v.url)throw Error("Support for url field in sections not implemented.");var z=f.getArg(v,"offset"),G=f.getArg(z,"line"),D=f.getArg(z,"column");if(G<n.line||G===n.line&&D<n.column)throw Error("Section offsets must be ordered and non-overlapping.");
|
|
||||||
n=z;return{generatedOffset:{generatedLine:G+1,generatedColumn:D+1},consumer:new e(f.getArg(v,"map"),u)}})}var f=C("./util"),c=C("./binary-search"),l=C("./array-set").ArraySet,q=C("./base64-vlq"),r=C("./quick-sort").quickSort;e.fromSourceMap=function(k){return p.fromSourceMap(k)};e.prototype._version=3;e.prototype.__generatedMappings=null;Object.defineProperty(e.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){this.__generatedMappings||this._parseMappings(this._mappings,
|
|
||||||
this.sourceRoot);return this.__generatedMappings}});e.prototype.__originalMappings=null;Object.defineProperty(e.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot);return this.__originalMappings}});e.prototype._charIsMappingSeparator=function(k,u){var d=k.charAt(u);return";"===d||","===d};e.prototype._parseMappings=function(k,u){throw Error("Subclasses must implement _parseMappings");};e.GENERATED_ORDER=
|
|
||||||
1;e.ORIGINAL_ORDER=2;e.GREATEST_LOWER_BOUND=1;e.LEAST_UPPER_BOUND=2;e.prototype.eachMapping=function(k,u,d){u=u||null;switch(d||e.GENERATED_ORDER){case e.GENERATED_ORDER:d=this._generatedMappings;break;case e.ORIGINAL_ORDER:d=this._originalMappings;break;default:throw Error("Unknown order of iteration.");}var g=this.sourceRoot;d.map(function(n){var v=null===n.source?null:this._sources.at(n.source);v=f.computeSourceURL(g,v,this._sourceMapURL);return{source:v,generatedLine:n.generatedLine,generatedColumn:n.generatedColumn,
|
|
||||||
originalLine:n.originalLine,originalColumn:n.originalColumn,name:null===n.name?null:this._names.at(n.name)}},this).forEach(k,u)};e.prototype.allGeneratedPositionsFor=function(k){var u=f.getArg(k,"line"),d={source:f.getArg(k,"source"),originalLine:u,originalColumn:f.getArg(k,"column",0)};null!=this.sourceRoot&&(d.source=f.relative(this.sourceRoot,d.source));if(!this._sources.has(d.source))return[];d.source=this._sources.indexOf(d.source);var g=[];d=this._findMapping(d,this._originalMappings,"originalLine",
|
|
||||||
"originalColumn",f.compareByOriginalPositions,c.LEAST_UPPER_BOUND);if(0<=d){var n=this._originalMappings[d];if(void 0===k.column)for(u=n.originalLine;n&&n.originalLine===u;)g.push({line:f.getArg(n,"generatedLine",null),column:f.getArg(n,"generatedColumn",null),lastColumn:f.getArg(n,"lastGeneratedColumn",null)}),n=this._originalMappings[++d];else for(k=n.originalColumn;n&&n.originalLine===u&&n.originalColumn==k;)g.push({line:f.getArg(n,"generatedLine",null),column:f.getArg(n,"generatedColumn",null),
|
|
||||||
lastColumn:f.getArg(n,"lastGeneratedColumn",null)}),n=this._originalMappings[++d]}return g};A.SourceMapConsumer=e;p.prototype=Object.create(e.prototype);p.prototype.consumer=e;p.fromSourceMap=function(k,u){var d=Object.create(p.prototype),g=d._names=l.fromArray(k._names.toArray(),!0),n=d._sources=l.fromArray(k._sources.toArray(),!0);d.sourceRoot=k._sourceRoot;d.sourcesContent=k._generateSourcesContent(d._sources.toArray(),d.sourceRoot);d.file=k._file;d._sourceMapURL=u;for(var v=k._mappings.toArray().slice(),
|
|
||||||
z=d.__generatedMappings=[],G=d.__originalMappings=[],D=0,L=v.length;D<L;D++){var a=v[D],b=new t;b.generatedLine=a.generatedLine;b.generatedColumn=a.generatedColumn;a.source&&(b.source=n.indexOf(a.source),b.originalLine=a.originalLine,b.originalColumn=a.originalColumn,a.name&&(b.name=g.indexOf(a.name)),G.push(b));z.push(b)}r(d.__originalMappings,f.compareByOriginalPositions);return d};p.prototype._version=3;Object.defineProperty(p.prototype,"sources",{get:function(){return this._sources.toArray().map(function(k){return f.computeSourceURL(this.sourceRoot,
|
|
||||||
k,this._sourceMapURL)},this)}});p.prototype._parseMappings=function(k,u){for(var d=1,g=0,n=0,v=0,z=0,G=0,D=k.length,L=0,a={},b={},h=[],w=[],y,I,K,N,P;L<D;)if(";"===k.charAt(L))d++,L++,g=0;else if(","===k.charAt(L))L++;else{y=new t;y.generatedLine=d;for(N=L;N<D&&!this._charIsMappingSeparator(k,N);N++);I=k.slice(L,N);if(K=a[I])L+=I.length;else{for(K=[];L<N;)q.decode(k,L,b),P=b.value,L=b.rest,K.push(P);if(2===K.length)throw Error("Found a source, but no line and column");if(3===K.length)throw Error("Found a source and line, but no column");
|
|
||||||
a[I]=K}y.generatedColumn=g+K[0];g=y.generatedColumn;1<K.length&&(y.source=z+K[1],z+=K[1],y.originalLine=n+K[2],n=y.originalLine,y.originalLine+=1,y.originalColumn=v+K[3],v=y.originalColumn,4<K.length&&(y.name=G+K[4],G+=K[4]));w.push(y);"number"===typeof y.originalLine&&h.push(y)}r(w,f.compareByGeneratedPositionsDeflated);this.__generatedMappings=w;r(h,f.compareByOriginalPositions);this.__originalMappings=h};p.prototype._findMapping=function(k,u,d,g,n,v){if(0>=k[d])throw new TypeError("Line must be greater than or equal to 1, got "+
|
|
||||||
k[d]);if(0>k[g])throw new TypeError("Column must be greater than or equal to 0, got "+k[g]);return c.search(k,u,n,v)};p.prototype.computeColumnSpans=function(){for(var k=0;k<this._generatedMappings.length;++k){var u=this._generatedMappings[k];if(k+1<this._generatedMappings.length){var d=this._generatedMappings[k+1];if(u.generatedLine===d.generatedLine){u.lastGeneratedColumn=d.generatedColumn-1;continue}}u.lastGeneratedColumn=Infinity}};p.prototype.originalPositionFor=function(k){var u={generatedLine:f.getArg(k,
|
|
||||||
"line"),generatedColumn:f.getArg(k,"column")};k=this._findMapping(u,this._generatedMappings,"generatedLine","generatedColumn",f.compareByGeneratedPositionsDeflated,f.getArg(k,"bias",e.GREATEST_LOWER_BOUND));if(0<=k&&(k=this._generatedMappings[k],k.generatedLine===u.generatedLine)){u=f.getArg(k,"source",null);null!==u&&(u=this._sources.at(u),u=f.computeSourceURL(this.sourceRoot,u,this._sourceMapURL));var d=f.getArg(k,"name",null);null!==d&&(d=this._names.at(d));return{source:u,line:f.getArg(k,"originalLine",
|
|
||||||
null),column:f.getArg(k,"originalColumn",null),name:d}}return{source:null,line:null,column:null,name:null}};p.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(k){return null==k}):!1};p.prototype.sourceContentFor=function(k,u){if(!this.sourcesContent)return null;var d=k;null!=this.sourceRoot&&(d=f.relative(this.sourceRoot,d));if(this._sources.has(d))return this.sourcesContent[this._sources.indexOf(d)];
|
|
||||||
var g=this.sources,n;for(n=0;n<g.length;++n)if(g[n]==k)return this.sourcesContent[n];var v;if(null!=this.sourceRoot&&(v=f.urlParse(this.sourceRoot))){g=d.replace(/^file:\/\//,"");if("file"==v.scheme&&this._sources.has(g))return this.sourcesContent[this._sources.indexOf(g)];if((!v.path||"/"==v.path)&&this._sources.has("/"+d))return this.sourcesContent[this._sources.indexOf("/"+d)]}if(u)return null;throw Error('"'+d+'" is not in the SourceMap.');};p.prototype.generatedPositionFor=function(k){var u=
|
|
||||||
f.getArg(k,"source");null!=this.sourceRoot&&(u=f.relative(this.sourceRoot,u));if(!this._sources.has(u))return{line:null,column:null,lastColumn:null};u=this._sources.indexOf(u);u={source:u,originalLine:f.getArg(k,"line"),originalColumn:f.getArg(k,"column")};k=this._findMapping(u,this._originalMappings,"originalLine","originalColumn",f.compareByOriginalPositions,f.getArg(k,"bias",e.GREATEST_LOWER_BOUND));return 0<=k&&(k=this._originalMappings[k],k.source===u.source)?{line:f.getArg(k,"generatedLine",
|
|
||||||
null),column:f.getArg(k,"generatedColumn",null),lastColumn:f.getArg(k,"lastGeneratedColumn",null)}:{line:null,column:null,lastColumn:null}};A.BasicSourceMapConsumer=p;m.prototype=Object.create(e.prototype);m.prototype.constructor=e;m.prototype._version=3;Object.defineProperty(m.prototype,"sources",{get:function(){for(var k=[],u=0;u<this._sections.length;u++)for(var d=0;d<this._sections[u].consumer.sources.length;d++)k.push(this._sections[u].consumer.sources[d]);return k}});m.prototype.originalPositionFor=
|
|
||||||
function(k){var u={generatedLine:f.getArg(k,"line"),generatedColumn:f.getArg(k,"column")},d=c.search(u,this._sections,function(g,n){var v=g.generatedLine-n.generatedOffset.generatedLine;return v?v:g.generatedColumn-n.generatedOffset.generatedColumn});return(d=this._sections[d])?d.consumer.originalPositionFor({line:u.generatedLine-(d.generatedOffset.generatedLine-1),column:u.generatedColumn-(d.generatedOffset.generatedLine===u.generatedLine?d.generatedOffset.generatedColumn-1:0),bias:k.bias}):{source:null,
|
|
||||||
line:null,column:null,name:null}};m.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(k){return k.consumer.hasContentsOfAllSources()})};m.prototype.sourceContentFor=function(k,u){for(var d=0;d<this._sections.length;d++){var g=this._sections[d].consumer.sourceContentFor(k,!0);if(g)return g}if(u)return null;throw Error('"'+k+'" is not in the SourceMap.');};m.prototype.generatedPositionFor=function(k){for(var u=0;u<this._sections.length;u++){var d=this._sections[u];if(-1!==
|
|
||||||
d.consumer.sources.indexOf(f.getArg(k,"source"))){var g=d.consumer.generatedPositionFor(k);if(g)return{line:g.line+(d.generatedOffset.generatedLine-1),column:g.column+(d.generatedOffset.generatedLine===g.line?d.generatedOffset.generatedColumn-1:0)}}}return{line:null,column:null}};m.prototype._parseMappings=function(k,u){this.__generatedMappings=[];this.__originalMappings=[];for(var d=0;d<this._sections.length;d++)for(var g=this._sections[d],n=g.consumer._generatedMappings,v=0;v<n.length;v++){var z=
|
|
||||||
n[v],G=g.consumer._sources.at(z.source);G=f.computeSourceURL(g.consumer.sourceRoot,G,this._sourceMapURL);this._sources.add(G);G=this._sources.indexOf(G);var D=null;z.name&&(D=g.consumer._names.at(z.name),this._names.add(D),D=this._names.indexOf(D));z={source:G,generatedLine:z.generatedLine+(g.generatedOffset.generatedLine-1),generatedColumn:z.generatedColumn+(g.generatedOffset.generatedLine===z.generatedLine?g.generatedOffset.generatedColumn-1:0),originalLine:z.originalLine,originalColumn:z.originalColumn,
|
|
||||||
name:D};this.__generatedMappings.push(z);"number"===typeof z.originalLine&&this.__originalMappings.push(z)}r(this.__generatedMappings,f.compareByGeneratedPositionsDeflated);r(this.__originalMappings,f.compareByOriginalPositions)};A.IndexedSourceMapConsumer=m},{"./array-set":10,"./base64-vlq":11,"./binary-search":13,"./quick-sort":15,"./util":19}],17:[function(C,J,A){function e(c){c||(c={});this._file=t.getArg(c,"file",null);this._sourceRoot=t.getArg(c,"sourceRoot",null);this._skipValidation=t.getArg(c,
|
|
||||||
"skipValidation",!1);this._sources=new m;this._names=new m;this._mappings=new f;this._sourcesContents=null}var p=C("./base64-vlq"),t=C("./util"),m=C("./array-set").ArraySet,f=C("./mapping-list").MappingList;e.prototype._version=3;e.fromSourceMap=function(c){var l=c.sourceRoot,q=new e({file:c.file,sourceRoot:l});c.eachMapping(function(r){var k={generated:{line:r.generatedLine,column:r.generatedColumn}};null!=r.source&&(k.source=r.source,null!=l&&(k.source=t.relative(l,k.source)),k.original={line:r.originalLine,
|
|
||||||
column:r.originalColumn},null!=r.name&&(k.name=r.name));q.addMapping(k)});c.sources.forEach(function(r){var k=r;null!==l&&(k=t.relative(l,r));q._sources.has(k)||q._sources.add(k);k=c.sourceContentFor(r);null!=k&&q.setSourceContent(r,k)});return q};e.prototype.addMapping=function(c){var l=t.getArg(c,"generated"),q=t.getArg(c,"original",null),r=t.getArg(c,"source",null);c=t.getArg(c,"name",null);this._skipValidation||this._validateMapping(l,q,r,c);null!=r&&(r=String(r),this._sources.has(r)||this._sources.add(r));
|
|
||||||
null!=c&&(c=String(c),this._names.has(c)||this._names.add(c));this._mappings.add({generatedLine:l.line,generatedColumn:l.column,originalLine:null!=q&&q.line,originalColumn:null!=q&&q.column,source:r,name:c})};e.prototype.setSourceContent=function(c,l){var q=c;null!=this._sourceRoot&&(q=t.relative(this._sourceRoot,q));null!=l?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[t.toSetString(q)]=l):this._sourcesContents&&(delete this._sourcesContents[t.toSetString(q)],
|
|
||||||
0===Object.keys(this._sourcesContents).length&&(this._sourcesContents=null))};e.prototype.applySourceMap=function(c,l,q){var r=l;if(null==l){if(null==c.file)throw Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map\'s "file" property. Both were omitted.');r=c.file}var k=this._sourceRoot;null!=k&&(r=t.relative(k,r));var u=new m,d=new m;this._mappings.unsortedForEach(function(g){if(g.source===r&&null!=g.originalLine){var n=c.originalPositionFor({line:g.originalLine,
|
|
||||||
column:g.originalColumn});null!=n.source&&(g.source=n.source,null!=q&&(g.source=t.join(q,g.source)),null!=k&&(g.source=t.relative(k,g.source)),g.originalLine=n.line,g.originalColumn=n.column,null!=n.name&&(g.name=n.name))}n=g.source;null==n||u.has(n)||u.add(n);g=g.name;null==g||d.has(g)||d.add(g)},this);this._sources=u;this._names=d;c.sources.forEach(function(g){var n=c.sourceContentFor(g);null!=n&&(null!=q&&(g=t.join(q,g)),null!=k&&(g=t.relative(k,g)),this.setSourceContent(g,n))},this)};e.prototype._validateMapping=
|
|
||||||
function(c,l,q,r){if(l&&"number"!==typeof l.line&&"number"!==typeof l.column)throw Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if(!(c&&"line"in c&&"column"in c&&0<c.line&&0<=c.column&&!l&&!q&&!r||c&&"line"in c&&"column"in c&&l&&"line"in l&&"column"in l&&0<c.line&&0<=c.column&&0<l.line&&0<=l.column&&
|
|
||||||
q))throw Error("Invalid mapping: "+JSON.stringify({generated:c,source:q,original:l,name:r}));};e.prototype._serializeMappings=function(){for(var c=0,l=1,q=0,r=0,k=0,u=0,d="",g,n,v,z=this._mappings.toArray(),G=0,D=z.length;G<D;G++){n=z[G];g="";if(n.generatedLine!==l)for(c=0;n.generatedLine!==l;)g+=";",l++;else if(0<G){if(!t.compareByGeneratedPositionsInflated(n,z[G-1]))continue;g+=","}g+=p.encode(n.generatedColumn-c);c=n.generatedColumn;null!=n.source&&(v=this._sources.indexOf(n.source),g+=p.encode(v-
|
|
||||||
u),u=v,g+=p.encode(n.originalLine-1-r),r=n.originalLine-1,g+=p.encode(n.originalColumn-q),q=n.originalColumn,null!=n.name&&(n=this._names.indexOf(n.name),g+=p.encode(n-k),k=n));d+=g}return d};e.prototype._generateSourcesContent=function(c,l){return c.map(function(q){if(!this._sourcesContents)return null;null!=l&&(q=t.relative(l,q));q=t.toSetString(q);return Object.prototype.hasOwnProperty.call(this._sourcesContents,q)?this._sourcesContents[q]:null},this)};e.prototype.toJSON=function(){var c={version:this._version,
|
|
||||||
sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};null!=this._file&&(c.file=this._file);null!=this._sourceRoot&&(c.sourceRoot=this._sourceRoot);this._sourcesContents&&(c.sourcesContent=this._generateSourcesContent(c.sources,c.sourceRoot));return c};e.prototype.toString=function(){return JSON.stringify(this.toJSON())};A.SourceMapGenerator=e},{"./array-set":10,"./base64-vlq":11,"./mapping-list":14,"./util":19}],18:[function(C,J,A){function e(f,c,l,q,r){this.children=
|
|
||||||
[];this.sourceContents={};this.line=null==f?null:f;this.column=null==c?null:c;this.source=null==l?null:l;this.name=null==r?null:r;this.$$$isSourceNode$$$=!0;null!=q&&this.add(q)}var p=C("./source-map-generator").SourceMapGenerator,t=C("./util"),m=/(\r?\n)/;e.fromStringWithSourceMap=function(f,c,l){function q(z,G){if(null===z||void 0===z.source)r.add(G);else{var D=l?t.join(l,z.source):z.source;r.add(new e(z.originalLine,z.originalColumn,D,G,z.name))}}var r=new e,k=f.split(m),u=0,d=function(){var z=
|
|
||||||
u<k.length?k[u++]:void 0,G=(u<k.length?k[u++]:void 0)||"";return z+G},g=1,n=0,v=null;c.eachMapping(function(z){if(null!==v)if(g<z.generatedLine)q(v,d()),g++,n=0;else{var G=k[u]||"",D=G.substr(0,z.generatedColumn-n);k[u]=G.substr(z.generatedColumn-n);n=z.generatedColumn;q(v,D);v=z;return}for(;g<z.generatedLine;)r.add(d()),g++;n<z.generatedColumn&&(G=k[u]||"",r.add(G.substr(0,z.generatedColumn)),k[u]=G.substr(z.generatedColumn),n=z.generatedColumn);v=z},this);u<k.length&&(v&&q(v,d()),r.add(k.splice(u).join("")));
|
|
||||||
c.sources.forEach(function(z){var G=c.sourceContentFor(z);null!=G&&(null!=l&&(z=t.join(l,z)),r.setSourceContent(z,G))});return r};e.prototype.add=function(f){if(Array.isArray(f))f.forEach(function(c){this.add(c)},this);else if(f.$$$isSourceNode$$$||"string"===typeof f)f&&this.children.push(f);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+f);return this};e.prototype.prepend=function(f){if(Array.isArray(f))for(var c=f.length-1;0<=c;c--)this.prepend(f[c]);
|
|
||||||
else if(f.$$$isSourceNode$$$||"string"===typeof f)this.children.unshift(f);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+f);return this};e.prototype.walk=function(f){for(var c,l=0,q=this.children.length;l<q;l++)c=this.children[l],c.$$$isSourceNode$$$?c.walk(f):""!==c&&f(c,{source:this.source,line:this.line,column:this.column,name:this.name})};e.prototype.join=function(f){var c,l=this.children.length;if(0<l){var q=[];for(c=0;c<l-1;c++)q.push(this.children[c]),
|
|
||||||
q.push(f);q.push(this.children[c]);this.children=q}return this};e.prototype.replaceRight=function(f,c){var l=this.children[this.children.length-1];l.$$$isSourceNode$$$?l.replaceRight(f,c):"string"===typeof l?this.children[this.children.length-1]=l.replace(f,c):this.children.push("".replace(f,c));return this};e.prototype.setSourceContent=function(f,c){this.sourceContents[t.toSetString(f)]=c};e.prototype.walkSourceContents=function(f){for(var c=0,l=this.children.length;c<l;c++)this.children[c].$$$isSourceNode$$$&&
|
|
||||||
this.children[c].walkSourceContents(f);var q=Object.keys(this.sourceContents);c=0;for(l=q.length;c<l;c++)f(t.fromSetString(q[c]),this.sourceContents[q[c]])};e.prototype.toString=function(){var f="";this.walk(function(c){f+=c});return f};e.prototype.toStringWithSourceMap=function(f){var c="",l=1,q=0,r=new p(f),k=!1,u=null,d=null,g=null,n=null;this.walk(function(v,z){c+=v;null!==z.source&&null!==z.line&&null!==z.column?(u===z.source&&d===z.line&&g===z.column&&n===z.name||r.addMapping({source:z.source,
|
|
||||||
original:{line:z.line,column:z.column},generated:{line:l,column:q},name:z.name}),u=z.source,d=z.line,g=z.column,n=z.name,k=!0):k&&(r.addMapping({generated:{line:l,column:q}}),u=null,k=!1);for(var G=0,D=v.length;G<D;G++)10===v.charCodeAt(G)?(l++,q=0,G+1===D?(u=null,k=!1):k&&r.addMapping({source:z.source,original:{line:z.line,column:z.column},generated:{line:l,column:q},name:z.name})):q++});this.walkSourceContents(function(v,z){r.setSourceContent(v,z)});return{code:c,map:r}};A.SourceNode=e},{"./source-map-generator":17,
|
|
||||||
"./util":19}],19:[function(C,J,A){function e(d){return(d=d.match(k))?{scheme:d[1],auth:d[2],host:d[3],port:d[4],path:d[5]}:null}function p(d){var g="";d.scheme&&(g+=d.scheme+":");g+="//";d.auth&&(g+=d.auth+"@");d.host&&(g+=d.host);d.port&&(g+=":"+d.port);d.path&&(g+=d.path);return g}function t(d){var g=d,n=e(d);if(n){if(!n.path)return d;g=n.path}d=A.isAbsolute(g);g=g.split(/\/+/);for(var v,z=0,G=g.length-1;0<=G;G--)v=g[G],"."===v?g.splice(G,1):".."===v?z++:0<z&&(""===v?(g.splice(G+1,z),z=0):(g.splice(G,
|
|
||||||
2),z--));g=g.join("/");""===g&&(g=d?"/":".");return n?(n.path=g,p(n)):g}function m(d,g){""===d&&(d=".");""===g&&(g=".");var n=e(g),v=e(d);v&&(d=v.path||"/");if(n&&!n.scheme)return v&&(n.scheme=v.scheme),p(n);if(n||g.match(u))return g;if(v&&!v.host&&!v.path)return v.host=g,p(v);n="/"===g.charAt(0)?g:t(d.replace(/\/+$/,"")+"/"+g);return v?(v.path=n,p(v)):n}function f(d){return d}function c(d){return q(d)?"$"+d:d}function l(d){return q(d)?d.slice(1):d}function q(d){if(!d)return!1;var g=d.length;if(9>
|
|
||||||
g||95!==d.charCodeAt(g-1)||95!==d.charCodeAt(g-2)||111!==d.charCodeAt(g-3)||116!==d.charCodeAt(g-4)||111!==d.charCodeAt(g-5)||114!==d.charCodeAt(g-6)||112!==d.charCodeAt(g-7)||95!==d.charCodeAt(g-8)||95!==d.charCodeAt(g-9))return!1;for(g-=10;0<=g;g--)if(36!==d.charCodeAt(g))return!1;return!0}function r(d,g){return d===g?0:null===d?1:null===g?-1:d>g?1:-1}A.getArg=function(d,g,n){if(g in d)return d[g];if(3===arguments.length)return n;throw Error('"'+g+'" is a required argument.');};var k=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,
|
|
||||||
u=/^data:.+,.+$/;A.urlParse=e;A.urlGenerate=p;A.normalize=t;A.join=m;A.isAbsolute=function(d){return"/"===d.charAt(0)||k.test(d)};A.relative=function(d,g){""===d&&(d=".");d=d.replace(/\/$/,"");for(var n=0;0!==g.indexOf(d+"/");){var v=d.lastIndexOf("/");if(0>v)return g;d=d.slice(0,v);if(d.match(/^([^\/]+:\/)?\/*$/))return g;++n}return Array(n+1).join("../")+g.substr(d.length+1)};C=!("__proto__"in Object.create(null));A.toSetString=C?f:c;A.fromSetString=C?f:l;A.compareByOriginalPositions=function(d,
|
|
||||||
g,n){var v=r(d.source,g.source);if(0!==v)return v;v=d.originalLine-g.originalLine;if(0!==v)return v;v=d.originalColumn-g.originalColumn;if(0!==v||n)return v;v=d.generatedColumn-g.generatedColumn;if(0!==v)return v;v=d.generatedLine-g.generatedLine;return 0!==v?v:r(d.name,g.name)};A.compareByGeneratedPositionsDeflated=function(d,g,n){var v=d.generatedLine-g.generatedLine;if(0!==v)return v;v=d.generatedColumn-g.generatedColumn;if(0!==v||n)return v;v=r(d.source,g.source);if(0!==v)return v;v=d.originalLine-
|
|
||||||
g.originalLine;if(0!==v)return v;v=d.originalColumn-g.originalColumn;return 0!==v?v:r(d.name,g.name)};A.compareByGeneratedPositionsInflated=function(d,g){var n=d.generatedLine-g.generatedLine;if(0!==n)return n;n=d.generatedColumn-g.generatedColumn;if(0!==n)return n;n=r(d.source,g.source);if(0!==n)return n;n=d.originalLine-g.originalLine;if(0!==n)return n;n=d.originalColumn-g.originalColumn;return 0!==n?n:r(d.name,g.name)};A.parseSourceMapInput=function(d){return JSON.parse(d.replace(/^\)]}'[^\n]*\n/,
|
|
||||||
""))};A.computeSourceURL=function(d,g,n){g=g||"";d&&("/"!==d[d.length-1]&&"/"!==g[0]&&(d+="/"),g=d+g);if(n){d=e(n);if(!d)throw Error("sourceMapURL could not be parsed");d.path&&(n=d.path.lastIndexOf("/"),0<=n&&(d.path=d.path.substring(0,n+1)));g=m(p(d),g)}return t(g)}},{}],20:[function(C,J,A){A.SourceMapGenerator=C("./lib/source-map-generator").SourceMapGenerator;A.SourceMapConsumer=C("./lib/source-map-consumer").SourceMapConsumer;A.SourceNode=C("./lib/source-node").SourceNode},{"./lib/source-map-consumer":16,
|
|
||||||
"./lib/source-map-generator":17,"./lib/source-node":18}],21:[function(C,J,A){(function(e){function p(){return"browser"===a?!0:"node"===a?!1:"undefined"!==typeof window&&"function"===typeof XMLHttpRequest&&!(window.require&&window.module&&window.process&&"renderer"===window.process.type)}function t(x){return function(B){for(var F=0;F<x.length;F++){var E=x[F](B);if(E)return E}return null}}function m(x,B){if(!x)return B;var F=n.dirname(x),E=/^\w+:\/\/[^\/]*/.exec(F);E=E?E[0]:"";var H=F.slice(E.length);
|
|
||||||
return E&&/^\/\w:/.test(H)?(E+="/",E+n.resolve(F.slice(E.length),B).replace(/\\/g,"/")):E+n.resolve(F.slice(E.length),B)}function f(x){var B=h[x.source];if(!B){var F=N(x.source);F?(B=h[x.source]={url:F.url,map:new g(F.map)},B.map.sourcesContent&&B.map.sources.forEach(function(E,H){var M=B.map.sourcesContent[H];if(M){var S=m(B.url,E);b[S]=M}})):B=h[x.source]={url:null,map:null}}return B&&B.map&&"function"===typeof B.map.originalPositionFor&&(F=B.map.originalPositionFor(x),null!==F.source)?(F.source=
|
|
||||||
m(B.url,F.source),F):x}function c(x){var B=/^eval at ([^(]+) \((.+):(\d+):(\d+)\)$/.exec(x);return B?(x=f({source:B[2],line:+B[3],column:B[4]-1}),"eval at "+B[1]+" ("+x.source+":"+x.line+":"+(x.column+1)+")"):(B=/^eval at ([^(]+) \((.+)\)$/.exec(x))?"eval at "+B[1]+" ("+c(B[2])+")":x}function l(){var x="";if(this.isNative())x="native";else{var B=this.getScriptNameOrSourceURL();!B&&this.isEval()&&(x=this.getEvalOrigin(),x+=", ");x=B?x+B:x+"<anonymous>";B=this.getLineNumber();null!=B&&(x+=":"+B,(B=
|
|
||||||
this.getColumnNumber())&&(x+=":"+B))}B="";var F=this.getFunctionName(),E=!0,H=this.isConstructor();if(this.isToplevel()||H)H?B+="new "+(F||"<anonymous>"):F?B+=F:(B+=x,E=!1);else{H=this.getTypeName();"[object Object]"===H&&(H="null");var M=this.getMethodName();F?(H&&0!=F.indexOf(H)&&(B+=H+"."),B+=F,M&&F.indexOf("."+M)!=F.length-M.length-1&&(B+=" [as "+M+"]")):B+=H+"."+(M||"<anonymous>")}E&&(B+=" ("+x+")");return B}function q(x){var B={};Object.getOwnPropertyNames(Object.getPrototypeOf(x)).forEach(function(F){B[F]=
|
|
||||||
/^(?:is|get)/.test(F)?function(){return x[F].call(x)}:x[F]});B.toString=l;return B}function r(x,B){void 0===B&&(B={nextPosition:null,curPosition:null});if(x.isNative())return B.curPosition=null,x;var F=x.getFileName()||x.getScriptNameOrSourceURL();if(F){var E=x.getLineNumber(),H=x.getColumnNumber()-1,M=/^v(10\.1[6-9]|10\.[2-9][0-9]|10\.[0-9]{3,}|1[2-9]\d*|[2-9]\d|\d{3,}|11\.11)/,S=M.test;var V="object"===typeof e&&null!==e?e.version:"";M=S.call(M,V)?0:62;1===E&&H>M&&!p()&&!x.isEval()&&(H-=M);var O=
|
|
||||||
f({source:F,line:E,column:H});B.curPosition=O;x=q(x);var T=x.getFunctionName;x.getFunctionName=function(){return null==B.nextPosition?T():B.nextPosition.name||T()};x.getFileName=function(){return O.source};x.getLineNumber=function(){return O.line};x.getColumnNumber=function(){return O.column+1};x.getScriptNameOrSourceURL=function(){return O.source};return x}var Q=x.isEval()&&x.getEvalOrigin();Q&&(Q=c(Q),x=q(x),x.getEvalOrigin=function(){return Q});return x}function k(x,B){L&&(b={},h={});for(var F=
|
|
||||||
(x.name||"Error")+": "+(x.message||""),E={nextPosition:null,curPosition:null},H=[],M=B.length-1;0<=M;M--)H.push("\n at "+r(B[M],E)),E.nextPosition=E.curPosition;E.curPosition=E.nextPosition=null;return F+H.reverse().join("")}function u(x){var B=/\n at [^(]+ \((.*):(\d+):(\d+)\)/.exec(x.stack);if(B){x=B[1];var F=+B[2];B=+B[3];var E=b[x];if(!E&&v&&v.existsSync(x))try{E=v.readFileSync(x,"utf8")}catch(H){E=""}if(E&&(E=E.split(/(?:\r\n|\r|\n)/)[F-1]))return x+":"+F+"\n"+E+"\n"+Array(B).join(" ")+
|
|
||||||
"^"}return null}function d(){var x=e.emit;e.emit=function(B){if("uncaughtException"===B){var F=arguments[1]&&arguments[1].stack,E=0<this.listeners(B).length;if(F&&!E){F=arguments[1];E=u(F);var H="object"===typeof e&&null!==e?e.stderr:void 0;H&&H._handle&&H._handle.setBlocking&&H._handle.setBlocking(!0);E&&(console.error(),console.error(E));console.error(F.stack);"object"===typeof e&&null!==e&&"function"===typeof e.exit&&e.exit(1);return}}return x.apply(this,arguments)}}var g=C("source-map").SourceMapConsumer,
|
|
||||||
n=C("path");try{var v=C("fs");v.existsSync&&v.readFileSync||(v=null)}catch(x){}var z=C("buffer-from"),G=!1,D=!1,L=!1,a="auto",b={},h={},w=/^data:application\/json[^,]+base64,/,y=[],I=[],K=t(y);y.push(function(x){x=x.trim();/^file:/.test(x)&&(x=x.replace(/file:\/\/\/(\w:)?/,function(E,H){return H?"":"/"}));if(x in b)return b[x];var B="";try{if(v)v.existsSync(x)&&(B=v.readFileSync(x,"utf8"));else{var F=new XMLHttpRequest;F.open("GET",x,!1);F.send(null);4===F.readyState&&200===F.status&&(B=F.responseText)}}catch(E){}return b[x]=
|
|
||||||
B});var N=t(I);I.push(function(x){a:{if(p())try{var B=new XMLHttpRequest;B.open("GET",x,!1);B.send(null);var F=B.getResponseHeader("SourceMap")||B.getResponseHeader("X-SourceMap");if(F){var E=F;break a}}catch(M){}E=K(x);B=/(?:\/\/[@#][\s]*sourceMappingURL=([^\s'"]+)[\s]*$)|(?:\/\*[@#][\s]*sourceMappingURL=([^\s*'"]+)[\s]*(?:\*\/)[\s]*$)/mg;for(var H;F=B.exec(E);)H=F;E=H?H[1]:null}if(!E)return null;w.test(E)?(H=E.slice(E.indexOf(",")+1),H=z(H,"base64").toString(),E=x):(E=m(x,E),H=K(E));return H?{url:E,
|
|
||||||
map:H}:null});var P=y.slice(0),W=I.slice(0);A.wrapCallSite=r;A.getErrorSource=u;A.mapSourcePosition=f;A.retrieveSourceMap=N;A.install=function(x){x=x||{};if(x.environment&&(a=x.environment,-1===["node","browser","auto"].indexOf(a)))throw Error("environment "+a+" was unknown. Available options are {auto, browser, node}");x.retrieveFile&&(x.overrideRetrieveFile&&(y.length=0),y.unshift(x.retrieveFile));x.retrieveSourceMap&&(x.overrideRetrieveSourceMap&&(I.length=0),I.unshift(x.retrieveSourceMap));if(x.hookRequire&&
|
|
||||||
!p()){var B=J.require("module"),F=B.prototype._compile;F.__sourceMapSupport||(B.prototype._compile=function(E,H){b[H]=E;h[H]=void 0;return F.call(this,E,H)},B.prototype._compile.__sourceMapSupport=!0)}L||(L="emptyCacheBetweenOperations"in x?x.emptyCacheBetweenOperations:!1);G||(G=!0,Error.prepareStackTrace=k);if(!D){x="handleUncaughtExceptions"in x?x.handleUncaughtExceptions:!0;try{!1===J.require("worker_threads").isMainThread&&(x=!1)}catch(E){}x&&"object"===typeof e&&null!==e&&"function"===typeof e.on&&
|
|
||||||
(D=!0,d())}};A.resetRetrieveHandlers=function(){y.length=0;I.length=0;y=P.slice(0);I=W.slice(0);N=t(I);K=t(y)}}).call(this,C("g5I+bs"))},{"buffer-from":4,fs:3,"g5I+bs":9,path:8,"source-map":20}]},{},[1]);return R});
|
|
50
node_modules/@cspotcode/source-map-support/package.json
generated
vendored
50
node_modules/@cspotcode/source-map-support/package.json
generated
vendored
@ -1,50 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@cspotcode/source-map-support",
|
|
||||||
"description": "Fixes stack traces for files with source maps",
|
|
||||||
"version": "0.8.1",
|
|
||||||
"main": "./source-map-support.js",
|
|
||||||
"types": "./source-map-support.d.ts",
|
|
||||||
"scripts": {
|
|
||||||
"build": "node build.js",
|
|
||||||
"serve-tests": "http-server -p 1336",
|
|
||||||
"test": "mocha"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"/register.d.ts",
|
|
||||||
"/register.js",
|
|
||||||
"/register-hook-require.d.ts",
|
|
||||||
"/register-hook-require.js",
|
|
||||||
"/source-map-support.d.ts",
|
|
||||||
"/source-map-support.js",
|
|
||||||
"/browser-source-map-support.js"
|
|
||||||
],
|
|
||||||
"dependencies": {
|
|
||||||
"@jridgewell/trace-mapping": "0.3.9"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/lodash": "^4.14.182",
|
|
||||||
"browserify": "^4.2.3",
|
|
||||||
"coffeescript": "^1.12.7",
|
|
||||||
"http-server": "^0.11.1",
|
|
||||||
"lodash": "^4.17.21",
|
|
||||||
"mocha": "^3.5.3",
|
|
||||||
"semver": "^7.3.7",
|
|
||||||
"source-map": "0.6.1",
|
|
||||||
"webpack": "^1.15.0"
|
|
||||||
},
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/cspotcode/node-source-map-support"
|
|
||||||
},
|
|
||||||
"bugs": {
|
|
||||||
"url": "https://github.com/cspotcode/node-source-map-support/issues"
|
|
||||||
},
|
|
||||||
"license": "MIT",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12"
|
|
||||||
},
|
|
||||||
"volta": {
|
|
||||||
"node": "16.11.0",
|
|
||||||
"npm": "7.24.2"
|
|
||||||
}
|
|
||||||
}
|
|
7
node_modules/@cspotcode/source-map-support/register-hook-require.d.ts
generated
vendored
7
node_modules/@cspotcode/source-map-support/register-hook-require.d.ts
generated
vendored
@ -1,7 +0,0 @@
|
|||||||
// tslint:disable:no-useless-files
|
|
||||||
|
|
||||||
// For following usage:
|
|
||||||
// import '@cspotcode/source-map-support/register-hook-require'
|
|
||||||
// Instead of:
|
|
||||||
// import sourceMapSupport from '@cspotcode/source-map-support'
|
|
||||||
// sourceMapSupport.install({hookRequire: true})
|
|
3
node_modules/@cspotcode/source-map-support/register-hook-require.js
generated
vendored
3
node_modules/@cspotcode/source-map-support/register-hook-require.js
generated
vendored
@ -1,3 +0,0 @@
|
|||||||
require('./').install({
|
|
||||||
hookRequire: true
|
|
||||||
});
|
|
7
node_modules/@cspotcode/source-map-support/register.d.ts
generated
vendored
7
node_modules/@cspotcode/source-map-support/register.d.ts
generated
vendored
@ -1,7 +0,0 @@
|
|||||||
// tslint:disable:no-useless-files
|
|
||||||
|
|
||||||
// For following usage:
|
|
||||||
// import '@cspotcode/source-map-support/register'
|
|
||||||
// Instead of:
|
|
||||||
// import sourceMapSupport from '@cspotcode/source-map-support'
|
|
||||||
// sourceMapSupport.install()
|
|
1
node_modules/@cspotcode/source-map-support/register.js
generated
vendored
1
node_modules/@cspotcode/source-map-support/register.js
generated
vendored
@ -1 +0,0 @@
|
|||||||
require('./').install();
|
|
76
node_modules/@cspotcode/source-map-support/source-map-support.d.ts
generated
vendored
76
node_modules/@cspotcode/source-map-support/source-map-support.d.ts
generated
vendored
@ -1,76 +0,0 @@
|
|||||||
// Type definitions for source-map-support 0.5
|
|
||||||
// Project: https://github.com/evanw/node-source-map-support
|
|
||||||
// Definitions by: Bart van der Schoor <https://github.com/Bartvds>
|
|
||||||
// Jason Cheatham <https://github.com/jason0x43>
|
|
||||||
// Alcedo Nathaniel De Guzman Jr <https://github.com/natealcedo>
|
|
||||||
// Griffin Yourick <https://github.com/tough-griff>
|
|
||||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
|
||||||
|
|
||||||
export interface RawSourceMap {
|
|
||||||
version: 3;
|
|
||||||
sources: string[];
|
|
||||||
names: string[];
|
|
||||||
sourceRoot?: string;
|
|
||||||
sourcesContent?: string[];
|
|
||||||
mappings: string;
|
|
||||||
file: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Output of retrieveSourceMap().
|
|
||||||
* From source-map-support:
|
|
||||||
* The map field may be either a string or the parsed JSON object (i.e.,
|
|
||||||
* it must be a valid argument to the SourceMapConsumer constructor).
|
|
||||||
*/
|
|
||||||
export interface UrlAndMap {
|
|
||||||
url: string;
|
|
||||||
map: string | RawSourceMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Options to install().
|
|
||||||
*/
|
|
||||||
export interface Options {
|
|
||||||
handleUncaughtExceptions?: boolean | undefined;
|
|
||||||
hookRequire?: boolean | undefined;
|
|
||||||
emptyCacheBetweenOperations?: boolean | undefined;
|
|
||||||
environment?: 'auto' | 'browser' | 'node' | undefined;
|
|
||||||
overrideRetrieveFile?: boolean | undefined;
|
|
||||||
overrideRetrieveSourceMap?: boolean | undefined;
|
|
||||||
retrieveFile?(path: string): string;
|
|
||||||
retrieveSourceMap?(source: string): UrlAndMap | null;
|
|
||||||
/**
|
|
||||||
* Set false to disable redirection of require / import `source-map-support` to `@cspotcode/source-map-support`
|
|
||||||
*/
|
|
||||||
redirectConflictingLibrary?: boolean;
|
|
||||||
/**
|
|
||||||
* Callback will be called every time we redirect due to `redirectConflictingLibrary`
|
|
||||||
* This allows consumers to log helpful warnings if they choose.
|
|
||||||
* @param parent NodeJS.Module which made the require() or require.resolve() call
|
|
||||||
* @param options options object internally passed to node's `_resolveFilename` hook
|
|
||||||
*/
|
|
||||||
onConflictingLibraryRedirect?: (request: string, parent: any, isMain: boolean, options: any, redirectedRequest: string) => void;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface Position {
|
|
||||||
source: string;
|
|
||||||
line: number;
|
|
||||||
column: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function wrapCallSite(frame: any /* StackFrame */): any /* StackFrame */;
|
|
||||||
export function getErrorSource(error: Error): string | null;
|
|
||||||
export function mapSourcePosition(position: Position): Position;
|
|
||||||
export function retrieveSourceMap(source: string): UrlAndMap | null;
|
|
||||||
export function resetRetrieveHandlers(): void;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Install SourceMap support.
|
|
||||||
* @param options Can be used to e.g. disable uncaughtException handler.
|
|
||||||
*/
|
|
||||||
export function install(options?: Options): void;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Uninstall SourceMap support.
|
|
||||||
*/
|
|
||||||
export function uninstall(): void;
|
|
938
node_modules/@cspotcode/source-map-support/source-map-support.js
generated
vendored
938
node_modules/@cspotcode/source-map-support/source-map-support.js
generated
vendored
@ -1,938 +0,0 @@
|
|||||||
const { TraceMap, originalPositionFor, AnyMap } = require('@jridgewell/trace-mapping');
|
|
||||||
var path = require('path');
|
|
||||||
const { fileURLToPath, pathToFileURL } = require('url');
|
|
||||||
var util = require('util');
|
|
||||||
|
|
||||||
var fs;
|
|
||||||
try {
|
|
||||||
fs = require('fs');
|
|
||||||
if (!fs.existsSync || !fs.readFileSync) {
|
|
||||||
// fs doesn't have all methods we need
|
|
||||||
fs = null;
|
|
||||||
}
|
|
||||||
} catch (err) {
|
|
||||||
/* nop */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Requires a module which is protected against bundler minification.
|
|
||||||
*
|
|
||||||
* @param {NodeModule} mod
|
|
||||||
* @param {string} request
|
|
||||||
*/
|
|
||||||
function dynamicRequire(mod, request) {
|
|
||||||
return mod.require(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @typedef {{
|
|
||||||
* enabled: boolean;
|
|
||||||
* originalValue: any;
|
|
||||||
* installedValue: any;
|
|
||||||
* }} HookState
|
|
||||||
* Used for installing and uninstalling hooks
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Increment this if the format of sharedData changes in a breaking way.
|
|
||||||
var sharedDataVersion = 1;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @template T
|
|
||||||
* @param {T} defaults
|
|
||||||
* @returns {T}
|
|
||||||
*/
|
|
||||||
function initializeSharedData(defaults) {
|
|
||||||
var sharedDataKey = 'source-map-support/sharedData';
|
|
||||||
if (typeof Symbol !== 'undefined') {
|
|
||||||
sharedDataKey = Symbol.for(sharedDataKey);
|
|
||||||
}
|
|
||||||
var sharedData = this[sharedDataKey];
|
|
||||||
if (!sharedData) {
|
|
||||||
sharedData = { version: sharedDataVersion };
|
|
||||||
if (Object.defineProperty) {
|
|
||||||
Object.defineProperty(this, sharedDataKey, { value: sharedData });
|
|
||||||
} else {
|
|
||||||
this[sharedDataKey] = sharedData;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (sharedDataVersion !== sharedData.version) {
|
|
||||||
throw new Error("Multiple incompatible instances of source-map-support were loaded");
|
|
||||||
}
|
|
||||||
for (var key in defaults) {
|
|
||||||
if (!(key in sharedData)) {
|
|
||||||
sharedData[key] = defaults[key];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sharedData;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If multiple instances of source-map-support are loaded into the same
|
|
||||||
// context, they shouldn't overwrite each other. By storing handlers, caches,
|
|
||||||
// and other state on a shared object, different instances of
|
|
||||||
// source-map-support can work together in a limited way. This does require
|
|
||||||
// that future versions of source-map-support continue to support the fields on
|
|
||||||
// this object. If this internal contract ever needs to be broken, increment
|
|
||||||
// sharedDataVersion. (This version number is not the same as any of the
|
|
||||||
// package's version numbers, which should reflect the *external* API of
|
|
||||||
// source-map-support.)
|
|
||||||
var sharedData = initializeSharedData({
|
|
||||||
|
|
||||||
// Only install once if called multiple times
|
|
||||||
// Remember how the environment looked before installation so we can restore if able
|
|
||||||
/** @type {HookState} */
|
|
||||||
errorPrepareStackTraceHook: undefined,
|
|
||||||
/** @type {HookState} */
|
|
||||||
processEmitHook: undefined,
|
|
||||||
/** @type {HookState} */
|
|
||||||
moduleResolveFilenameHook: undefined,
|
|
||||||
|
|
||||||
/** @type {Array<(request: string, parent: any, isMain: boolean, options: any, redirectedRequest: string) => void>} */
|
|
||||||
onConflictingLibraryRedirectArr: [],
|
|
||||||
|
|
||||||
// If true, the caches are reset before a stack trace formatting operation
|
|
||||||
emptyCacheBetweenOperations: false,
|
|
||||||
|
|
||||||
// Maps a file path to a string containing the file contents
|
|
||||||
fileContentsCache: Object.create(null),
|
|
||||||
|
|
||||||
// Maps a file path to a source map for that file
|
|
||||||
/** @type {Record<string, {url: string, map: TraceMap}} */
|
|
||||||
sourceMapCache: Object.create(null),
|
|
||||||
|
|
||||||
// Priority list of retrieve handlers
|
|
||||||
retrieveFileHandlers: [],
|
|
||||||
retrieveMapHandlers: [],
|
|
||||||
|
|
||||||
// Priority list of internally-implemented handlers.
|
|
||||||
// When resetting state, we must keep these.
|
|
||||||
internalRetrieveFileHandlers: [],
|
|
||||||
internalRetrieveMapHandlers: [],
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
// Supports {browser, node, auto}
|
|
||||||
var environment = "auto";
|
|
||||||
|
|
||||||
// Regex for detecting source maps
|
|
||||||
var reSourceMap = /^data:application\/json[^,]+base64,/;
|
|
||||||
|
|
||||||
function isInBrowser() {
|
|
||||||
if (environment === "browser")
|
|
||||||
return true;
|
|
||||||
if (environment === "node")
|
|
||||||
return false;
|
|
||||||
return ((typeof window !== 'undefined') && (typeof XMLHttpRequest === 'function') && !(window.require && window.module && window.process && window.process.type === "renderer"));
|
|
||||||
}
|
|
||||||
|
|
||||||
function hasGlobalProcessEventEmitter() {
|
|
||||||
return ((typeof process === 'object') && (process !== null) && (typeof process.on === 'function'));
|
|
||||||
}
|
|
||||||
|
|
||||||
function tryFileURLToPath(v) {
|
|
||||||
if(isFileUrl(v)) {
|
|
||||||
return fileURLToPath(v);
|
|
||||||
}
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO un-copy these from resolve-uri; see if they can be exported from that lib
|
|
||||||
function isFileUrl(input) {
|
|
||||||
return input.startsWith('file:');
|
|
||||||
}
|
|
||||||
function isAbsoluteUrl(input) {
|
|
||||||
return schemeRegex.test(input);
|
|
||||||
}
|
|
||||||
// Matches the scheme of a URL, eg "http://"
|
|
||||||
const schemeRegex = /^[\w+.-]+:\/\//;
|
|
||||||
function isSchemeRelativeUrl(input) {
|
|
||||||
return input.startsWith('//');
|
|
||||||
}
|
|
||||||
|
|
||||||
// #region Caches
|
|
||||||
/** @param {string} pathOrFileUrl */
|
|
||||||
function getCacheKey(pathOrFileUrl) {
|
|
||||||
if(pathOrFileUrl.startsWith('node:')) return pathOrFileUrl;
|
|
||||||
if(isFileUrl(pathOrFileUrl)) {
|
|
||||||
// Must normalize spaces to %20, stuff like that
|
|
||||||
return new URL(pathOrFileUrl).toString();
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
return pathToFileURL(pathOrFileUrl).toString();
|
|
||||||
} catch {
|
|
||||||
return pathOrFileUrl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function getFileContentsCache(key) {
|
|
||||||
return sharedData.fileContentsCache[getCacheKey(key)];
|
|
||||||
}
|
|
||||||
function hasFileContentsCacheFromKey(key) {
|
|
||||||
return Object.prototype.hasOwnProperty.call(sharedData.fileContentsCache, key);
|
|
||||||
}
|
|
||||||
function getFileContentsCacheFromKey(key) {
|
|
||||||
return sharedData.fileContentsCache[key];
|
|
||||||
}
|
|
||||||
function setFileContentsCache(key, value) {
|
|
||||||
return sharedData.fileContentsCache[getCacheKey(key)] = value;
|
|
||||||
}
|
|
||||||
function getSourceMapCache(key) {
|
|
||||||
return sharedData.sourceMapCache[getCacheKey(key)];
|
|
||||||
}
|
|
||||||
function setSourceMapCache(key, value) {
|
|
||||||
return sharedData.sourceMapCache[getCacheKey(key)] = value;
|
|
||||||
}
|
|
||||||
function clearCaches() {
|
|
||||||
sharedData.fileContentsCache = Object.create(null);
|
|
||||||
sharedData.sourceMapCache = Object.create(null);
|
|
||||||
}
|
|
||||||
// #endregion Caches
|
|
||||||
|
|
||||||
function handlerExec(list, internalList) {
|
|
||||||
return function(arg) {
|
|
||||||
for (var i = 0; i < list.length; i++) {
|
|
||||||
var ret = list[i](arg);
|
|
||||||
if (ret) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (var i = 0; i < internalList.length; i++) {
|
|
||||||
var ret = internalList[i](arg);
|
|
||||||
if (ret) {
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
var retrieveFile = handlerExec(sharedData.retrieveFileHandlers, sharedData.internalRetrieveFileHandlers);
|
|
||||||
|
|
||||||
sharedData.internalRetrieveFileHandlers.push(function(path) {
|
|
||||||
// Trim the path to make sure there is no extra whitespace.
|
|
||||||
path = path.trim();
|
|
||||||
if (/^file:/.test(path)) {
|
|
||||||
// existsSync/readFileSync can't handle file protocol, but once stripped, it works
|
|
||||||
path = path.replace(/file:\/\/\/(\w:)?/, function(protocol, drive) {
|
|
||||||
return drive ?
|
|
||||||
'' : // file:///C:/dir/file -> C:/dir/file
|
|
||||||
'/'; // file:///root-dir/file -> /root-dir/file
|
|
||||||
});
|
|
||||||
}
|
|
||||||
const key = getCacheKey(path);
|
|
||||||
if(hasFileContentsCacheFromKey(key)) {
|
|
||||||
return getFileContentsCacheFromKey(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
var contents = '';
|
|
||||||
try {
|
|
||||||
if (!fs) {
|
|
||||||
// Use SJAX if we are in the browser
|
|
||||||
var xhr = new XMLHttpRequest();
|
|
||||||
xhr.open('GET', path, /** async */ false);
|
|
||||||
xhr.send(null);
|
|
||||||
if (xhr.readyState === 4 && xhr.status === 200) {
|
|
||||||
contents = xhr.responseText;
|
|
||||||
}
|
|
||||||
} else if (fs.existsSync(path)) {
|
|
||||||
// Otherwise, use the filesystem
|
|
||||||
contents = fs.readFileSync(path, 'utf8');
|
|
||||||
}
|
|
||||||
} catch (er) {
|
|
||||||
/* ignore any errors */
|
|
||||||
}
|
|
||||||
|
|
||||||
return setFileContentsCache(path, contents);
|
|
||||||
});
|
|
||||||
|
|
||||||
// Support URLs relative to a directory, but be careful about a protocol prefix
|
|
||||||
// in case we are in the browser (i.e. directories may start with "http://" or "file:///")
|
|
||||||
function supportRelativeURL(file, url) {
|
|
||||||
if(!file) return url;
|
|
||||||
// given that this happens within error formatting codepath, probably best to
|
|
||||||
// fallback instead of throwing if anything goes wrong
|
|
||||||
try {
|
|
||||||
// if should output a URL
|
|
||||||
if(isAbsoluteUrl(file) || isSchemeRelativeUrl(file)) {
|
|
||||||
if(isAbsoluteUrl(url) || isSchemeRelativeUrl(url)) {
|
|
||||||
return new URL(url, file).toString();
|
|
||||||
}
|
|
||||||
if(path.isAbsolute(url)) {
|
|
||||||
return new URL(pathToFileURL(url), file).toString();
|
|
||||||
}
|
|
||||||
// url is relative path or URL
|
|
||||||
return new URL(url.replace(/\\/g, '/'), file).toString();
|
|
||||||
}
|
|
||||||
// if should output a path (unless URL is something like https://)
|
|
||||||
if(path.isAbsolute(file)) {
|
|
||||||
if(isFileUrl(url)) {
|
|
||||||
return fileURLToPath(url);
|
|
||||||
}
|
|
||||||
if(isSchemeRelativeUrl(url)) {
|
|
||||||
return fileURLToPath(new URL(url, 'file://'));
|
|
||||||
}
|
|
||||||
if(isAbsoluteUrl(url)) {
|
|
||||||
// url is a non-file URL
|
|
||||||
// Go with the URL
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
if(path.isAbsolute(url)) {
|
|
||||||
// Normalize at all? decodeURI or normalize slashes?
|
|
||||||
return path.normalize(url);
|
|
||||||
}
|
|
||||||
// url is relative path or URL
|
|
||||||
return path.join(file, '..', decodeURI(url));
|
|
||||||
}
|
|
||||||
// If we get here, file is relative.
|
|
||||||
// Shouldn't happen since node identifies modules with absolute paths or URLs.
|
|
||||||
// But we can take a stab at returning something meaningful anyway.
|
|
||||||
if(isAbsoluteUrl(url) || isSchemeRelativeUrl(url)) {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
return path.join(file, '..', url);
|
|
||||||
} catch(e) {
|
|
||||||
return url;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return pathOrUrl in the same style as matchStyleOf: either a file URL or a native path
|
|
||||||
function matchStyleOfPathOrUrl(matchStyleOf, pathOrUrl) {
|
|
||||||
try {
|
|
||||||
if(isAbsoluteUrl(matchStyleOf) || isSchemeRelativeUrl(matchStyleOf)) {
|
|
||||||
if(isAbsoluteUrl(pathOrUrl) || isSchemeRelativeUrl(pathOrUrl)) return pathOrUrl;
|
|
||||||
if(path.isAbsolute(pathOrUrl)) return pathToFileURL(pathOrUrl).toString();
|
|
||||||
} else if(path.isAbsolute(matchStyleOf)) {
|
|
||||||
if(isAbsoluteUrl(pathOrUrl) || isSchemeRelativeUrl(pathOrUrl)) {
|
|
||||||
return fileURLToPath(new URL(pathOrUrl, 'file://'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return pathOrUrl;
|
|
||||||
} catch(e) {
|
|
||||||
return pathOrUrl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function retrieveSourceMapURL(source) {
|
|
||||||
var fileData;
|
|
||||||
|
|
||||||
if (isInBrowser()) {
|
|
||||||
try {
|
|
||||||
var xhr = new XMLHttpRequest();
|
|
||||||
xhr.open('GET', source, false);
|
|
||||||
xhr.send(null);
|
|
||||||
fileData = xhr.readyState === 4 ? xhr.responseText : null;
|
|
||||||
|
|
||||||
// Support providing a sourceMappingURL via the SourceMap header
|
|
||||||
var sourceMapHeader = xhr.getResponseHeader("SourceMap") ||
|
|
||||||
xhr.getResponseHeader("X-SourceMap");
|
|
||||||
if (sourceMapHeader) {
|
|
||||||
return sourceMapHeader;
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the URL of the source map
|
|
||||||
fileData = retrieveFile(tryFileURLToPath(source));
|
|
||||||
var re = /(?:\/\/[@#][\s]*sourceMappingURL=([^\s'"]+)[\s]*$)|(?:\/\*[@#][\s]*sourceMappingURL=([^\s*'"]+)[\s]*(?:\*\/)[\s]*$)/mg;
|
|
||||||
// Keep executing the search to find the *last* sourceMappingURL to avoid
|
|
||||||
// picking up sourceMappingURLs from comments, strings, etc.
|
|
||||||
var lastMatch, match;
|
|
||||||
while (match = re.exec(fileData)) lastMatch = match;
|
|
||||||
if (!lastMatch) return null;
|
|
||||||
return lastMatch[1];
|
|
||||||
};
|
|
||||||
|
|
||||||
// Can be overridden by the retrieveSourceMap option to install. Takes a
|
|
||||||
// generated source filename; returns a {map, optional url} object, or null if
|
|
||||||
// there is no source map. The map field may be either a string or the parsed
|
|
||||||
// JSON object (ie, it must be a valid argument to the SourceMapConsumer
|
|
||||||
// constructor).
|
|
||||||
/** @type {(source: string) => import('./source-map-support').UrlAndMap | null} */
|
|
||||||
var retrieveSourceMap = handlerExec(sharedData.retrieveMapHandlers, sharedData.internalRetrieveMapHandlers);
|
|
||||||
sharedData.internalRetrieveMapHandlers.push(function(source) {
|
|
||||||
var sourceMappingURL = retrieveSourceMapURL(source);
|
|
||||||
if (!sourceMappingURL) return null;
|
|
||||||
|
|
||||||
// Read the contents of the source map
|
|
||||||
var sourceMapData;
|
|
||||||
if (reSourceMap.test(sourceMappingURL)) {
|
|
||||||
// Support source map URL as a data url
|
|
||||||
var rawData = sourceMappingURL.slice(sourceMappingURL.indexOf(',') + 1);
|
|
||||||
sourceMapData = Buffer.from(rawData, "base64").toString();
|
|
||||||
sourceMappingURL = source;
|
|
||||||
} else {
|
|
||||||
// Support source map URLs relative to the source URL
|
|
||||||
sourceMappingURL = supportRelativeURL(source, sourceMappingURL);
|
|
||||||
sourceMapData = retrieveFile(tryFileURLToPath(sourceMappingURL));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sourceMapData) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
url: sourceMappingURL,
|
|
||||||
map: sourceMapData
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
function mapSourcePosition(position) {
|
|
||||||
var sourceMap = getSourceMapCache(position.source);
|
|
||||||
if (!sourceMap) {
|
|
||||||
// Call the (overrideable) retrieveSourceMap function to get the source map.
|
|
||||||
var urlAndMap = retrieveSourceMap(position.source);
|
|
||||||
if (urlAndMap) {
|
|
||||||
sourceMap = setSourceMapCache(position.source, {
|
|
||||||
url: urlAndMap.url,
|
|
||||||
map: new AnyMap(urlAndMap.map, urlAndMap.url)
|
|
||||||
});
|
|
||||||
|
|
||||||
// Overwrite trace-mapping's resolutions, because they do not handle
|
|
||||||
// Windows paths the way we want.
|
|
||||||
// TODO Remove now that windows path support was added to resolve-uri and thus trace-mapping?
|
|
||||||
sourceMap.map.resolvedSources = sourceMap.map.sources.map(s => supportRelativeURL(sourceMap.url, s));
|
|
||||||
|
|
||||||
// Load all sources stored inline with the source map into the file cache
|
|
||||||
// to pretend like they are already loaded. They may not exist on disk.
|
|
||||||
if (sourceMap.map.sourcesContent) {
|
|
||||||
sourceMap.map.resolvedSources.forEach(function(resolvedSource, i) {
|
|
||||||
var contents = sourceMap.map.sourcesContent[i];
|
|
||||||
if (contents) {
|
|
||||||
setFileContentsCache(resolvedSource, contents);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
sourceMap = setSourceMapCache(position.source, {
|
|
||||||
url: null,
|
|
||||||
map: null
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Resolve the source URL relative to the URL of the source map
|
|
||||||
if (sourceMap && sourceMap.map) {
|
|
||||||
var originalPosition = originalPositionFor(sourceMap.map, position);
|
|
||||||
|
|
||||||
// Only return the original position if a matching line was found. If no
|
|
||||||
// matching line is found then we return position instead, which will cause
|
|
||||||
// the stack trace to print the path and line for the compiled file. It is
|
|
||||||
// better to give a precise location in the compiled file than a vague
|
|
||||||
// location in the original file.
|
|
||||||
if (originalPosition.source !== null) {
|
|
||||||
// originalPosition.source has *already* been resolved against sourceMap.url
|
|
||||||
// so is *already* as absolute as possible.
|
|
||||||
// However, we want to ensure we output in same format as input: URL or native path
|
|
||||||
originalPosition.source = matchStyleOfPathOrUrl(
|
|
||||||
position.source, originalPosition.source);
|
|
||||||
return originalPosition;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return position;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parses code generated by FormatEvalOrigin(), a function inside V8:
|
|
||||||
// https://code.google.com/p/v8/source/browse/trunk/src/messages.js
|
|
||||||
function mapEvalOrigin(origin) {
|
|
||||||
// Most eval() calls are in this format
|
|
||||||
var match = /^eval at ([^(]+) \((.+):(\d+):(\d+)\)$/.exec(origin);
|
|
||||||
if (match) {
|
|
||||||
var position = mapSourcePosition({
|
|
||||||
source: match[2],
|
|
||||||
line: +match[3],
|
|
||||||
column: match[4] - 1
|
|
||||||
});
|
|
||||||
return 'eval at ' + match[1] + ' (' + position.source + ':' +
|
|
||||||
position.line + ':' + (position.column + 1) + ')';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse nested eval() calls using recursion
|
|
||||||
match = /^eval at ([^(]+) \((.+)\)$/.exec(origin);
|
|
||||||
if (match) {
|
|
||||||
return 'eval at ' + match[1] + ' (' + mapEvalOrigin(match[2]) + ')';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure we still return useful information if we didn't find anything
|
|
||||||
return origin;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is copied almost verbatim from the V8 source code at
|
|
||||||
// https://code.google.com/p/v8/source/browse/trunk/src/messages.js
|
|
||||||
// Update 2022-04-29:
|
|
||||||
// https://github.com/v8/v8/blob/98f6f100c5ab8e390e51422747c4ef644d5ac6f2/src/builtins/builtins-callsite.cc#L175-L179
|
|
||||||
// https://github.com/v8/v8/blob/98f6f100c5ab8e390e51422747c4ef644d5ac6f2/src/objects/call-site-info.cc#L795-L804
|
|
||||||
// https://github.com/v8/v8/blob/98f6f100c5ab8e390e51422747c4ef644d5ac6f2/src/objects/call-site-info.cc#L717-L750
|
|
||||||
// The implementation of wrapCallSite() used to just forward to the actual source
|
|
||||||
// code of CallSite.prototype.toString but unfortunately a new release of V8
|
|
||||||
// did something to the prototype chain and broke the shim. The only fix I
|
|
||||||
// could find was copy/paste.
|
|
||||||
function CallSiteToString() {
|
|
||||||
var fileName;
|
|
||||||
var fileLocation = "";
|
|
||||||
if (this.isNative()) {
|
|
||||||
fileLocation = "native";
|
|
||||||
} else {
|
|
||||||
fileName = this.getScriptNameOrSourceURL();
|
|
||||||
if (!fileName && this.isEval()) {
|
|
||||||
fileLocation = this.getEvalOrigin();
|
|
||||||
fileLocation += ", "; // Expecting source position to follow.
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fileName) {
|
|
||||||
fileLocation += fileName;
|
|
||||||
} else {
|
|
||||||
// Source code does not originate from a file and is not native, but we
|
|
||||||
// can still get the source position inside the source string, e.g. in
|
|
||||||
// an eval string.
|
|
||||||
fileLocation += "<anonymous>";
|
|
||||||
}
|
|
||||||
var lineNumber = this.getLineNumber();
|
|
||||||
if (lineNumber != null) {
|
|
||||||
fileLocation += ":" + lineNumber;
|
|
||||||
var columnNumber = this.getColumnNumber();
|
|
||||||
if (columnNumber) {
|
|
||||||
fileLocation += ":" + columnNumber;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var line = "";
|
|
||||||
var isAsync = this.isAsync ? this.isAsync() : false;
|
|
||||||
if(isAsync) {
|
|
||||||
line += 'async ';
|
|
||||||
var isPromiseAll = this.isPromiseAll ? this.isPromiseAll() : false;
|
|
||||||
var isPromiseAny = this.isPromiseAny ? this.isPromiseAny() : false;
|
|
||||||
if(isPromiseAny || isPromiseAll) {
|
|
||||||
line += isPromiseAll ? 'Promise.all (index ' : 'Promise.any (index ';
|
|
||||||
var promiseIndex = this.getPromiseIndex();
|
|
||||||
line += promiseIndex + ')';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
var functionName = this.getFunctionName();
|
|
||||||
var addSuffix = true;
|
|
||||||
var isConstructor = this.isConstructor();
|
|
||||||
var isMethodCall = !(this.isToplevel() || isConstructor);
|
|
||||||
if (isMethodCall) {
|
|
||||||
var typeName = this.getTypeName();
|
|
||||||
// Fixes shim to be backward compatable with Node v0 to v4
|
|
||||||
if (typeName === "[object Object]") {
|
|
||||||
typeName = "null";
|
|
||||||
}
|
|
||||||
var methodName = this.getMethodName();
|
|
||||||
if (functionName) {
|
|
||||||
if (typeName && functionName.indexOf(typeName) != 0) {
|
|
||||||
line += typeName + ".";
|
|
||||||
}
|
|
||||||
line += functionName;
|
|
||||||
if (methodName && functionName.indexOf("." + methodName) != functionName.length - methodName.length - 1) {
|
|
||||||
line += " [as " + methodName + "]";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
line += typeName + "." + (methodName || "<anonymous>");
|
|
||||||
}
|
|
||||||
} else if (isConstructor) {
|
|
||||||
line += "new " + (functionName || "<anonymous>");
|
|
||||||
} else if (functionName) {
|
|
||||||
line += functionName;
|
|
||||||
} else {
|
|
||||||
line += fileLocation;
|
|
||||||
addSuffix = false;
|
|
||||||
}
|
|
||||||
if (addSuffix) {
|
|
||||||
line += " (" + fileLocation + ")";
|
|
||||||
}
|
|
||||||
return line;
|
|
||||||
}
|
|
||||||
|
|
||||||
function cloneCallSite(frame) {
|
|
||||||
var object = {};
|
|
||||||
Object.getOwnPropertyNames(Object.getPrototypeOf(frame)).forEach(function(name) {
|
|
||||||
object[name] = /^(?:is|get)/.test(name) ? function() { return frame[name].call(frame); } : frame[name];
|
|
||||||
});
|
|
||||||
object.toString = CallSiteToString;
|
|
||||||
return object;
|
|
||||||
}
|
|
||||||
|
|
||||||
function wrapCallSite(frame, state) {
|
|
||||||
// provides interface backward compatibility
|
|
||||||
if (state === undefined) {
|
|
||||||
state = { nextPosition: null, curPosition: null }
|
|
||||||
}
|
|
||||||
if(frame.isNative()) {
|
|
||||||
state.curPosition = null;
|
|
||||||
return frame;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Most call sites will return the source file from getFileName(), but code
|
|
||||||
// passed to eval() ending in "//# sourceURL=..." will return the source file
|
|
||||||
// from getScriptNameOrSourceURL() instead
|
|
||||||
var source = frame.getFileName() || frame.getScriptNameOrSourceURL();
|
|
||||||
if (source) {
|
|
||||||
// v8 does not expose its internal isWasm, etc methods, so we do this instead.
|
|
||||||
if(source.startsWith('wasm://')) {
|
|
||||||
state.curPosition = null;
|
|
||||||
return frame;
|
|
||||||
}
|
|
||||||
|
|
||||||
var line = frame.getLineNumber();
|
|
||||||
var column = frame.getColumnNumber() - 1;
|
|
||||||
|
|
||||||
// Fix position in Node where some (internal) code is prepended.
|
|
||||||
// See https://github.com/evanw/node-source-map-support/issues/36
|
|
||||||
// Header removed in node at ^10.16 || >=11.11.0
|
|
||||||
// v11 is not an LTS candidate, we can just test the one version with it.
|
|
||||||
// Test node versions for: 10.16-19, 10.20+, 12-19, 20-99, 100+, or 11.11
|
|
||||||
var noHeader = /^v(10\.1[6-9]|10\.[2-9][0-9]|10\.[0-9]{3,}|1[2-9]\d*|[2-9]\d|\d{3,}|11\.11)/;
|
|
||||||
var headerLength = noHeader.test(process.version) ? 0 : 62;
|
|
||||||
if (line === 1 && column > headerLength && !isInBrowser() && !frame.isEval()) {
|
|
||||||
column -= headerLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
var position = mapSourcePosition({
|
|
||||||
source: source,
|
|
||||||
line: line,
|
|
||||||
column: column
|
|
||||||
});
|
|
||||||
state.curPosition = position;
|
|
||||||
frame = cloneCallSite(frame);
|
|
||||||
var originalFunctionName = frame.getFunctionName;
|
|
||||||
frame.getFunctionName = function() {
|
|
||||||
if (state.nextPosition == null) {
|
|
||||||
return originalFunctionName();
|
|
||||||
}
|
|
||||||
return state.nextPosition.name || originalFunctionName();
|
|
||||||
};
|
|
||||||
frame.getFileName = function() { return position.source; };
|
|
||||||
frame.getLineNumber = function() { return position.line; };
|
|
||||||
frame.getColumnNumber = function() { return position.column + 1; };
|
|
||||||
frame.getScriptNameOrSourceURL = function() { return position.source; };
|
|
||||||
return frame;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Code called using eval() needs special handling
|
|
||||||
var origin = frame.isEval() && frame.getEvalOrigin();
|
|
||||||
if (origin) {
|
|
||||||
origin = mapEvalOrigin(origin);
|
|
||||||
frame = cloneCallSite(frame);
|
|
||||||
frame.getEvalOrigin = function() { return origin; };
|
|
||||||
return frame;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we get here then we were unable to change the source position
|
|
||||||
return frame;
|
|
||||||
}
|
|
||||||
|
|
||||||
var kIsNodeError = undefined;
|
|
||||||
try {
|
|
||||||
// Get a deliberate ERR_INVALID_ARG_TYPE
|
|
||||||
// TODO is there a better way to reliably get an instance of NodeError?
|
|
||||||
path.resolve(123);
|
|
||||||
} catch(e) {
|
|
||||||
const symbols = Object.getOwnPropertySymbols(e);
|
|
||||||
const symbol = symbols.find(function (s) {return s.toString().indexOf('kIsNodeError') >= 0});
|
|
||||||
if(symbol) kIsNodeError = symbol;
|
|
||||||
}
|
|
||||||
|
|
||||||
const ErrorPrototypeToString = (err) =>Error.prototype.toString.call(err);
|
|
||||||
|
|
||||||
/** @param {HookState} hookState */
|
|
||||||
function createPrepareStackTrace(hookState) {
|
|
||||||
return prepareStackTrace;
|
|
||||||
|
|
||||||
// This function is part of the V8 stack trace API, for more info see:
|
|
||||||
// https://v8.dev/docs/stack-trace-api
|
|
||||||
function prepareStackTrace(error, stack) {
|
|
||||||
if(!hookState.enabled) return hookState.originalValue.apply(this, arguments);
|
|
||||||
|
|
||||||
if (sharedData.emptyCacheBetweenOperations) {
|
|
||||||
clearCaches();
|
|
||||||
}
|
|
||||||
|
|
||||||
// node gives its own errors special treatment. Mimic that behavior
|
|
||||||
// https://github.com/nodejs/node/blob/3cbaabc4622df1b4009b9d026a1a970bdbae6e89/lib/internal/errors.js#L118-L128
|
|
||||||
// https://github.com/nodejs/node/pull/39182
|
|
||||||
var errorString;
|
|
||||||
if (kIsNodeError) {
|
|
||||||
if(kIsNodeError in error) {
|
|
||||||
errorString = `${error.name} [${error.code}]: ${error.message}`;
|
|
||||||
} else {
|
|
||||||
errorString = ErrorPrototypeToString(error);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
var name = error.name || 'Error';
|
|
||||||
var message = error.message || '';
|
|
||||||
errorString = message ? name + ": " + message : name;
|
|
||||||
}
|
|
||||||
|
|
||||||
var state = { nextPosition: null, curPosition: null };
|
|
||||||
var processedStack = [];
|
|
||||||
for (var i = stack.length - 1; i >= 0; i--) {
|
|
||||||
processedStack.push('\n at ' + wrapCallSite(stack[i], state));
|
|
||||||
state.nextPosition = state.curPosition;
|
|
||||||
}
|
|
||||||
state.curPosition = state.nextPosition = null;
|
|
||||||
return errorString + processedStack.reverse().join('');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate position and snippet of original source with pointer
|
|
||||||
function getErrorSource(error) {
|
|
||||||
var match = /\n at [^(]+ \((.*):(\d+):(\d+)\)/.exec(error.stack);
|
|
||||||
if (match) {
|
|
||||||
var source = match[1];
|
|
||||||
var line = +match[2];
|
|
||||||
var column = +match[3];
|
|
||||||
|
|
||||||
// Support the inline sourceContents inside the source map
|
|
||||||
var contents = getFileContentsCache(source);
|
|
||||||
|
|
||||||
const sourceAsPath = tryFileURLToPath(source);
|
|
||||||
|
|
||||||
// Support files on disk
|
|
||||||
if (!contents && fs && fs.existsSync(sourceAsPath)) {
|
|
||||||
try {
|
|
||||||
contents = fs.readFileSync(sourceAsPath, 'utf8');
|
|
||||||
} catch (er) {
|
|
||||||
contents = '';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Format the line from the original source code like node does
|
|
||||||
if (contents) {
|
|
||||||
var code = contents.split(/(?:\r\n|\r|\n)/)[line - 1];
|
|
||||||
if (code) {
|
|
||||||
return source + ':' + line + '\n' + code + '\n' +
|
|
||||||
new Array(column).join(' ') + '^';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
function printFatalErrorUponExit (error) {
|
|
||||||
var source = getErrorSource(error);
|
|
||||||
|
|
||||||
// Ensure error is printed synchronously and not truncated
|
|
||||||
if (process.stderr._handle && process.stderr._handle.setBlocking) {
|
|
||||||
process.stderr._handle.setBlocking(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (source) {
|
|
||||||
console.error(source);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Matches node's behavior for colorized output
|
|
||||||
console.error(
|
|
||||||
util.inspect(error, {
|
|
||||||
customInspect: false,
|
|
||||||
colors: process.stderr.isTTY
|
|
||||||
})
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function shimEmitUncaughtException () {
|
|
||||||
const originalValue = process.emit;
|
|
||||||
var hook = sharedData.processEmitHook = {
|
|
||||||
enabled: true,
|
|
||||||
originalValue,
|
|
||||||
installedValue: undefined
|
|
||||||
};
|
|
||||||
var isTerminatingDueToFatalException = false;
|
|
||||||
var fatalException;
|
|
||||||
|
|
||||||
process.emit = sharedData.processEmitHook.installedValue = function (type) {
|
|
||||||
const hadListeners = originalValue.apply(this, arguments);
|
|
||||||
if(hook.enabled) {
|
|
||||||
if (type === 'uncaughtException' && !hadListeners) {
|
|
||||||
isTerminatingDueToFatalException = true;
|
|
||||||
fatalException = arguments[1];
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
if (type === 'exit' && isTerminatingDueToFatalException) {
|
|
||||||
printFatalErrorUponExit(fatalException);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return hadListeners;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
var originalRetrieveFileHandlers = sharedData.retrieveFileHandlers.slice(0);
|
|
||||||
var originalRetrieveMapHandlers = sharedData.retrieveMapHandlers.slice(0);
|
|
||||||
|
|
||||||
exports.wrapCallSite = wrapCallSite;
|
|
||||||
exports.getErrorSource = getErrorSource;
|
|
||||||
exports.mapSourcePosition = mapSourcePosition;
|
|
||||||
exports.retrieveSourceMap = retrieveSourceMap;
|
|
||||||
|
|
||||||
exports.install = function(options) {
|
|
||||||
options = options || {};
|
|
||||||
|
|
||||||
if (options.environment) {
|
|
||||||
environment = options.environment;
|
|
||||||
if (["node", "browser", "auto"].indexOf(environment) === -1) {
|
|
||||||
throw new Error("environment " + environment + " was unknown. Available options are {auto, browser, node}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Use dynamicRequire to avoid including in browser bundles
|
|
||||||
var Module = dynamicRequire(module, 'module');
|
|
||||||
|
|
||||||
// Redirect subsequent imports of "source-map-support"
|
|
||||||
// to this package
|
|
||||||
const {redirectConflictingLibrary = true, onConflictingLibraryRedirect} = options;
|
|
||||||
if(redirectConflictingLibrary) {
|
|
||||||
if (!sharedData.moduleResolveFilenameHook) {
|
|
||||||
const originalValue = Module._resolveFilename;
|
|
||||||
const moduleResolveFilenameHook = sharedData.moduleResolveFilenameHook = {
|
|
||||||
enabled: true,
|
|
||||||
originalValue,
|
|
||||||
installedValue: undefined,
|
|
||||||
}
|
|
||||||
Module._resolveFilename = sharedData.moduleResolveFilenameHook.installedValue = function (request, parent, isMain, options) {
|
|
||||||
if (moduleResolveFilenameHook.enabled) {
|
|
||||||
// Match all source-map-support entrypoints: source-map-support, source-map-support/register
|
|
||||||
let requestRedirect;
|
|
||||||
if (request === 'source-map-support') {
|
|
||||||
requestRedirect = './';
|
|
||||||
} else if (request === 'source-map-support/register') {
|
|
||||||
requestRedirect = './register';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (requestRedirect !== undefined) {
|
|
||||||
const newRequest = require.resolve(requestRedirect);
|
|
||||||
for (const cb of sharedData.onConflictingLibraryRedirectArr) {
|
|
||||||
cb(request, parent, isMain, options, newRequest);
|
|
||||||
}
|
|
||||||
request = newRequest;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return originalValue.call(this, request, parent, isMain, options);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (onConflictingLibraryRedirect) {
|
|
||||||
sharedData.onConflictingLibraryRedirectArr.push(onConflictingLibraryRedirect);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Allow sources to be found by methods other than reading the files
|
|
||||||
// directly from disk.
|
|
||||||
if (options.retrieveFile) {
|
|
||||||
if (options.overrideRetrieveFile) {
|
|
||||||
sharedData.retrieveFileHandlers.length = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sharedData.retrieveFileHandlers.unshift(options.retrieveFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Allow source maps to be found by methods other than reading the files
|
|
||||||
// directly from disk.
|
|
||||||
if (options.retrieveSourceMap) {
|
|
||||||
if (options.overrideRetrieveSourceMap) {
|
|
||||||
sharedData.retrieveMapHandlers.length = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sharedData.retrieveMapHandlers.unshift(options.retrieveSourceMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Support runtime transpilers that include inline source maps
|
|
||||||
if (options.hookRequire && !isInBrowser()) {
|
|
||||||
var $compile = Module.prototype._compile;
|
|
||||||
|
|
||||||
if (!$compile.__sourceMapSupport) {
|
|
||||||
Module.prototype._compile = function(content, filename) {
|
|
||||||
setFileContentsCache(filename, content);
|
|
||||||
setSourceMapCache(filename, undefined);
|
|
||||||
return $compile.call(this, content, filename);
|
|
||||||
};
|
|
||||||
|
|
||||||
Module.prototype._compile.__sourceMapSupport = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Configure options
|
|
||||||
if (!sharedData.emptyCacheBetweenOperations) {
|
|
||||||
sharedData.emptyCacheBetweenOperations = 'emptyCacheBetweenOperations' in options ?
|
|
||||||
options.emptyCacheBetweenOperations : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Install the error reformatter
|
|
||||||
if (!sharedData.errorPrepareStackTraceHook) {
|
|
||||||
const originalValue = Error.prepareStackTrace;
|
|
||||||
sharedData.errorPrepareStackTraceHook = {
|
|
||||||
enabled: true,
|
|
||||||
originalValue,
|
|
||||||
installedValue: undefined
|
|
||||||
};
|
|
||||||
Error.prepareStackTrace = sharedData.errorPrepareStackTraceHook.installedValue = createPrepareStackTrace(sharedData.errorPrepareStackTraceHook);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!sharedData.processEmitHook) {
|
|
||||||
var installHandler = 'handleUncaughtExceptions' in options ?
|
|
||||||
options.handleUncaughtExceptions : true;
|
|
||||||
|
|
||||||
// Do not override 'uncaughtException' with our own handler in Node.js
|
|
||||||
// Worker threads. Workers pass the error to the main thread as an event,
|
|
||||||
// rather than printing something to stderr and exiting.
|
|
||||||
try {
|
|
||||||
// We need to use `dynamicRequire` because `require` on it's own will be optimized by WebPack/Browserify.
|
|
||||||
var worker_threads = dynamicRequire(module, 'worker_threads');
|
|
||||||
if (worker_threads.isMainThread === false) {
|
|
||||||
installHandler = false;
|
|
||||||
}
|
|
||||||
} catch(e) {}
|
|
||||||
|
|
||||||
// Provide the option to not install the uncaught exception handler. This is
|
|
||||||
// to support other uncaught exception handlers (in test frameworks, for
|
|
||||||
// example). If this handler is not installed and there are no other uncaught
|
|
||||||
// exception handlers, uncaught exceptions will be caught by node's built-in
|
|
||||||
// exception handler and the process will still be terminated. However, the
|
|
||||||
// generated JavaScript code will be shown above the stack trace instead of
|
|
||||||
// the original source code.
|
|
||||||
if (installHandler && hasGlobalProcessEventEmitter()) {
|
|
||||||
shimEmitUncaughtException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.uninstall = function() {
|
|
||||||
if(sharedData.processEmitHook) {
|
|
||||||
// Disable behavior
|
|
||||||
sharedData.processEmitHook.enabled = false;
|
|
||||||
// If possible, remove our hook function. May not be possible if subsequent third-party hooks have wrapped around us.
|
|
||||||
if(process.emit === sharedData.processEmitHook.installedValue) {
|
|
||||||
process.emit = sharedData.processEmitHook.originalValue;
|
|
||||||
}
|
|
||||||
sharedData.processEmitHook = undefined;
|
|
||||||
}
|
|
||||||
if(sharedData.errorPrepareStackTraceHook) {
|
|
||||||
// Disable behavior
|
|
||||||
sharedData.errorPrepareStackTraceHook.enabled = false;
|
|
||||||
// If possible or necessary, remove our hook function.
|
|
||||||
// In vanilla environments, prepareStackTrace is `undefined`.
|
|
||||||
// We cannot delegate to `undefined` the way we can to a function w/`.apply()`; our only option is to remove the function.
|
|
||||||
// If we are the *first* hook installed, and another was installed on top of us, we have no choice but to remove both.
|
|
||||||
if(Error.prepareStackTrace === sharedData.errorPrepareStackTraceHook.installedValue || typeof sharedData.errorPrepareStackTraceHook.originalValue !== 'function') {
|
|
||||||
Error.prepareStackTrace = sharedData.errorPrepareStackTraceHook.originalValue;
|
|
||||||
}
|
|
||||||
sharedData.errorPrepareStackTraceHook = undefined;
|
|
||||||
}
|
|
||||||
if (sharedData.moduleResolveFilenameHook) {
|
|
||||||
// Disable behavior
|
|
||||||
sharedData.moduleResolveFilenameHook.enabled = false;
|
|
||||||
// If possible, remove our hook function. May not be possible if subsequent third-party hooks have wrapped around us.
|
|
||||||
var Module = dynamicRequire(module, 'module');
|
|
||||||
if(Module._resolveFilename === sharedData.moduleResolveFilenameHook.installedValue) {
|
|
||||||
Module._resolveFilename = sharedData.moduleResolveFilenameHook.originalValue;
|
|
||||||
}
|
|
||||||
sharedData.moduleResolveFilenameHook = undefined;
|
|
||||||
}
|
|
||||||
sharedData.onConflictingLibraryRedirectArr.length = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.resetRetrieveHandlers = function() {
|
|
||||||
sharedData.retrieveFileHandlers.length = 0;
|
|
||||||
sharedData.retrieveMapHandlers.length = 0;
|
|
||||||
}
|
|
21
node_modules/@discoveryjs/json-ext/LICENSE
generated
vendored
21
node_modules/@discoveryjs/json-ext/LICENSE
generated
vendored
@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2020-2024 Roman Dvornov <rdvornov@gmail.com>
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
290
node_modules/@discoveryjs/json-ext/README.md
generated
vendored
290
node_modules/@discoveryjs/json-ext/README.md
generated
vendored
@ -1,290 +0,0 @@
|
|||||||
# json-ext
|
|
||||||
|
|
||||||
[](https://www.npmjs.com/package/@discoveryjs/json-ext)
|
|
||||||
[](https://github.com/discoveryjs/json-ext/actions/workflows/ci.yml)
|
|
||||||
[](https://coveralls.io/github/discoveryjs/json-ext)
|
|
||||||
[](https://www.npmjs.com/package/@discoveryjs/json-ext)
|
|
||||||
|
|
||||||
A set of utilities designed to extend JSON's capabilities, especially for handling large JSON data (over 100MB) efficiently:
|
|
||||||
|
|
||||||
- [parseChunked()](#parsechunked) – Parses JSON incrementally; similar to [`JSON.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse), but processing JSON data in chunks.
|
|
||||||
- [stringifyChunked()](#stringifychunked) – Converts JavaScript objects to JSON incrementally; similar to [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify), but returns a generator that yields JSON strings in parts.
|
|
||||||
- [stringifyInfo()](#stringifyinfo) – Estimates the size of the `JSON.stringify()` result and identifies circular references without generating the JSON.
|
|
||||||
- [parseFromWebStream()](#parsefromwebstream) – A helper function to parse JSON chunks directly from a Web Stream.
|
|
||||||
- [createStringifyWebStream()](#createstringifywebstream) – A helper function to generate JSON data as a Web Stream.
|
|
||||||
|
|
||||||
### Key Features
|
|
||||||
|
|
||||||
- Optimized to handle large JSON data with minimal resource usage (see [benchmarks](./benchmarks/README.md))
|
|
||||||
- Works seamlessly with browsers, Node.js, Deno, and Bun
|
|
||||||
- Supports both Node.js and Web streams
|
|
||||||
- Available in both ESM and CommonJS
|
|
||||||
- TypeScript typings included
|
|
||||||
- No external dependencies
|
|
||||||
- Compact size: 9.4Kb (minified), 3.8Kb (min+gzip)
|
|
||||||
|
|
||||||
### Why json-ext?
|
|
||||||
|
|
||||||
- **Handles large JSON files**: Overcomes the limitations of V8 for strings larger than ~500MB, enabling the processing of huge JSON data.
|
|
||||||
- **Prevents main thread blocking**: Distributes parsing and stringifying over time, ensuring the main thread remains responsive during heavy JSON operations.
|
|
||||||
- **Reduces memory usage**: Traditional `JSON.parse()` and `JSON.stringify()` require loading entire data into memory, leading to high memory consumption and increased garbage collection pressure. `parseChunked()` and `stringifyChunked()` process data incrementally, optimizing memory usage.
|
|
||||||
- **Size estimation**: `stringifyInfo()` allows estimating the size of resulting JSON before generating it, enabling better decision-making for JSON generation strategies.
|
|
||||||
|
|
||||||
## Install
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npm install @discoveryjs/json-ext
|
|
||||||
```
|
|
||||||
|
|
||||||
## API
|
|
||||||
|
|
||||||
### parseChunked()
|
|
||||||
|
|
||||||
Functions like [`JSON.parse()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse), iterating over chunks to reconstruct the result object, and returns a [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise).
|
|
||||||
|
|
||||||
> Note: `reviver` parameter is not supported yet.
|
|
||||||
|
|
||||||
```ts
|
|
||||||
function parseChunked(input: Iterable<Chunk> | AsyncIterable<Chunk>): Promise<any>;
|
|
||||||
function parseChunked(input: () => (Iterable<Chunk> | AsyncIterable<Chunk>)): Promise<any>;
|
|
||||||
|
|
||||||
type Chunk = string | Buffer | Uint8Array;
|
|
||||||
```
|
|
||||||
|
|
||||||
[Benchmark](https://github.com/discoveryjs/json-ext/tree/master/benchmarks#parse-chunked)
|
|
||||||
|
|
||||||
Usage:
|
|
||||||
|
|
||||||
```js
|
|
||||||
import { parseChunked } from '@discoveryjs/json-ext';
|
|
||||||
|
|
||||||
const data = await parseChunked(chunkEmitter);
|
|
||||||
```
|
|
||||||
|
|
||||||
Parameter `chunkEmitter` can be an iterable or async iterable that iterates over chunks, or a function returning such a value. A chunk can be a `string`, `Uint8Array`, or Node.js `Buffer`.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
- Generator:
|
|
||||||
```js
|
|
||||||
parseChunked(function*() {
|
|
||||||
yield '{ "hello":';
|
|
||||||
yield Buffer.from(' "wor'); // Node.js only
|
|
||||||
yield new TextEncoder().encode('ld" }'); // returns Uint8Array
|
|
||||||
});
|
|
||||||
```
|
|
||||||
- Async generator:
|
|
||||||
```js
|
|
||||||
parseChunked(async function*() {
|
|
||||||
for await (const chunk of someAsyncSource) {
|
|
||||||
yield chunk;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
- Array:
|
|
||||||
```js
|
|
||||||
parseChunked(['{ "hello":', ' "world"}'])
|
|
||||||
```
|
|
||||||
- Function returning iterable:
|
|
||||||
```js
|
|
||||||
parseChunked(() => ['{ "hello":', ' "world"}'])
|
|
||||||
```
|
|
||||||
- Node.js [`Readable`](https://nodejs.org/dist/latest-v14.x/docs/api/stream.html#stream_readable_streams) stream:
|
|
||||||
```js
|
|
||||||
import fs from 'node:fs';
|
|
||||||
|
|
||||||
parseChunked(fs.createReadStream('path/to/file.json'))
|
|
||||||
```
|
|
||||||
- Web stream (e.g., using [fetch()](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)):
|
|
||||||
> Note: Iterability for Web streams was added later in the Web platform, not all environments support it. Consider using `parseFromWebStream()` for broader compatibility.
|
|
||||||
```js
|
|
||||||
const response = await fetch('https://example.com/data.json');
|
|
||||||
const data = await parseChunked(response.body); // body is ReadableStream
|
|
||||||
```
|
|
||||||
|
|
||||||
### stringifyChunked()
|
|
||||||
|
|
||||||
Functions like [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify), but returns a generator yielding strings instead of a single string.
|
|
||||||
|
|
||||||
> Note: Returns `"null"` when `JSON.stringify()` returns `undefined` (since a chunk cannot be `undefined`).
|
|
||||||
|
|
||||||
```ts
|
|
||||||
function stringifyChunked(value: any, replacer?: Replacer, space?: Space): Generator<string, void, unknown>;
|
|
||||||
function stringifyChunked(value: any, options: StringifyOptions): Generator<string, void, unknown>;
|
|
||||||
|
|
||||||
type Replacer =
|
|
||||||
| ((this: any, key: string, value: any) => any)
|
|
||||||
| (string | number)[]
|
|
||||||
| null;
|
|
||||||
type Space = string | number | null;
|
|
||||||
type StringifyOptions = {
|
|
||||||
replacer?: Replacer;
|
|
||||||
space?: Space;
|
|
||||||
highWaterMark?: number;
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
[Benchmark](https://github.com/discoveryjs/json-ext/tree/master/benchmarks#stream-stringifying)
|
|
||||||
|
|
||||||
Usage:
|
|
||||||
|
|
||||||
- Getting an array of chunks:
|
|
||||||
```js
|
|
||||||
const chunks = [...stringifyChunked(data)];
|
|
||||||
```
|
|
||||||
- Iterating over chunks:
|
|
||||||
```js
|
|
||||||
for (const chunk of stringifyChunked(data)) {
|
|
||||||
console.log(chunk);
|
|
||||||
}
|
|
||||||
```
|
|
||||||
- Specifying the minimum size of a chunk with `highWaterMark` option:
|
|
||||||
```js
|
|
||||||
const data = [1, "hello world", 42];
|
|
||||||
|
|
||||||
console.log([...stringifyChunked(data)]); // default 16kB
|
|
||||||
// ['[1,"hello world",42]']
|
|
||||||
|
|
||||||
console.log([...stringifyChunked(data, { highWaterMark: 16 })]);
|
|
||||||
// ['[1,"hello world"', ',42]']
|
|
||||||
|
|
||||||
console.log([...stringifyChunked(data, { highWaterMark: 1 })]);
|
|
||||||
// ['[1', ',"hello world"', ',42', ']']
|
|
||||||
```
|
|
||||||
- Streaming into a stream with a `Promise` (modern Node.js):
|
|
||||||
```js
|
|
||||||
import { pipeline } from 'node:stream/promises';
|
|
||||||
import fs from 'node:fs';
|
|
||||||
|
|
||||||
await pipeline(
|
|
||||||
stringifyChunked(data),
|
|
||||||
fs.createWriteStream('path/to/file.json')
|
|
||||||
);
|
|
||||||
```
|
|
||||||
- Wrapping into a `Promise` streaming into a stream (legacy Node.js):
|
|
||||||
```js
|
|
||||||
import { Readable } from 'node:stream';
|
|
||||||
|
|
||||||
new Promise((resolve, reject) => {
|
|
||||||
Readable.from(stringifyChunked(data))
|
|
||||||
.on('error', reject)
|
|
||||||
.pipe(stream)
|
|
||||||
.on('error', reject)
|
|
||||||
.on('finish', resolve);
|
|
||||||
});
|
|
||||||
```
|
|
||||||
- Writing into a file synchronously:
|
|
||||||
> Note: Slower than `JSON.stringify()` but uses much less heap space and has no limitation on string length
|
|
||||||
```js
|
|
||||||
import fs from 'node:fs';
|
|
||||||
|
|
||||||
const fd = fs.openSync('output.json', 'w');
|
|
||||||
|
|
||||||
for (const chunk of stringifyChunked(data)) {
|
|
||||||
fs.writeFileSync(fd, chunk);
|
|
||||||
}
|
|
||||||
|
|
||||||
fs.closeSync(fd);
|
|
||||||
```
|
|
||||||
- Using with fetch (JSON streaming):
|
|
||||||
> Note: This feature has limited support in browsers, see [Streaming requests with the fetch API](https://developer.chrome.com/docs/capabilities/web-apis/fetch-streaming-requests)
|
|
||||||
|
|
||||||
> Note: `ReadableStream.from()` has limited [support in browsers](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/from_static), use [`createStringifyWebStream()`](#createstringifywebstream) instead.
|
|
||||||
```js
|
|
||||||
fetch('http://example.com', {
|
|
||||||
method: 'POST',
|
|
||||||
duplex: 'half',
|
|
||||||
body: ReadableStream.from(stringifyChunked(data))
|
|
||||||
});
|
|
||||||
```
|
|
||||||
- Wrapping into `ReadableStream`:
|
|
||||||
> Note: Use `ReadableStream.from()` or [`createStringifyWebStream()`](#createstringifywebstream) when no extra logic is needed
|
|
||||||
```js
|
|
||||||
new ReadableStream({
|
|
||||||
start() {
|
|
||||||
this.generator = stringifyChunked(data);
|
|
||||||
},
|
|
||||||
pull(controller) {
|
|
||||||
const { value, done } = this.generator.next();
|
|
||||||
|
|
||||||
if (done) {
|
|
||||||
controller.close();
|
|
||||||
} else {
|
|
||||||
controller.enqueue(value);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
cancel() {
|
|
||||||
this.generator = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
### stringifyInfo()
|
|
||||||
|
|
||||||
```ts
|
|
||||||
export function stringifyInfo(value: any, replacer?: Replacer, space?: Space): StringifyInfoResult;
|
|
||||||
export function stringifyInfo(value: any, options?: StringifyInfoOptions): StringifyInfoResult;
|
|
||||||
|
|
||||||
type StringifyInfoOptions = {
|
|
||||||
replacer?: Replacer;
|
|
||||||
space?: Space;
|
|
||||||
continueOnCircular?: boolean;
|
|
||||||
}
|
|
||||||
type StringifyInfoResult = {
|
|
||||||
bytes: number; // size of JSON in bytes
|
|
||||||
spaceBytes: number; // size of white spaces in bytes (when space option used)
|
|
||||||
circular: object[]; // list of circular references
|
|
||||||
};
|
|
||||||
```
|
|
||||||
|
|
||||||
Functions like [`JSON.stringify()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify), but returns an object with the expected overall size of the stringify operation and a list of circular references.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
```js
|
|
||||||
import { stringifyInfo } from '@discoveryjs/json-ext';
|
|
||||||
|
|
||||||
console.log(stringifyInfo({ test: true }, null, 4));
|
|
||||||
// {
|
|
||||||
// bytes: 20, // Buffer.byteLength('{\n "test": true\n}')
|
|
||||||
// spaceBytes: 7,
|
|
||||||
// circular: []
|
|
||||||
// }
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Options
|
|
||||||
|
|
||||||
##### continueOnCircular
|
|
||||||
|
|
||||||
Type: `Boolean`
|
|
||||||
Default: `false`
|
|
||||||
|
|
||||||
Determines whether to continue collecting info for a value when a circular reference is found. Setting this option to `true` allows finding all circular references.
|
|
||||||
|
|
||||||
### parseFromWebStream()
|
|
||||||
|
|
||||||
A helper function to consume JSON from a Web Stream. You can use `parseChunked(stream)` instead, but `@@asyncIterator` on `ReadableStream` has limited support in browsers (see [ReadableStream](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream) compatibility table).
|
|
||||||
|
|
||||||
```js
|
|
||||||
import { parseFromWebStream } from '@discoveryjs/json-ext';
|
|
||||||
|
|
||||||
const data = await parseFromWebStream(readableStream);
|
|
||||||
// equivalent to (when ReadableStream[@@asyncIterator] is supported):
|
|
||||||
// await parseChunked(readableStream);
|
|
||||||
```
|
|
||||||
|
|
||||||
### createStringifyWebStream()
|
|
||||||
|
|
||||||
A helper function to convert `stringifyChunked()` into a `ReadableStream` (Web Stream). You can use `ReadableStream.from()` instead, but this method has limited support in browsers (see [ReadableStream.from()](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream/from_static) compatibility table).
|
|
||||||
|
|
||||||
```js
|
|
||||||
import { createStringifyWebStream } from '@discoveryjs/json-ext';
|
|
||||||
|
|
||||||
createStringifyWebStream({ test: true });
|
|
||||||
// equivalent to (when ReadableStream.from() is supported):
|
|
||||||
// ReadableStream.from(stringifyChunked({ test: true }))
|
|
||||||
```
|
|
||||||
|
|
||||||
## License
|
|
||||||
|
|
||||||
MIT
|
|
14
node_modules/@discoveryjs/json-ext/cjs/index.cjs
generated
vendored
14
node_modules/@discoveryjs/json-ext/cjs/index.cjs
generated
vendored
@ -1,14 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
const parseChunked = require('./parse-chunked.cjs');
|
|
||||||
const stringifyChunked = require('./stringify-chunked.cjs');
|
|
||||||
const stringifyInfo = require('./stringify-info.cjs');
|
|
||||||
const webStreams = require('./web-streams.cjs');
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
exports.parseChunked = parseChunked.parseChunked;
|
|
||||||
exports.stringifyChunked = stringifyChunked.stringifyChunked;
|
|
||||||
exports.stringifyInfo = stringifyInfo.stringifyInfo;
|
|
||||||
exports.createStringifyWebStream = webStreams.createStringifyWebStream;
|
|
||||||
exports.parseFromWebStream = webStreams.parseFromWebStream;
|
|
355
node_modules/@discoveryjs/json-ext/cjs/parse-chunked.cjs
generated
vendored
355
node_modules/@discoveryjs/json-ext/cjs/parse-chunked.cjs
generated
vendored
@ -1,355 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
const utils = require('./utils.cjs');
|
|
||||||
|
|
||||||
const STACK_OBJECT = 1;
|
|
||||||
const STACK_ARRAY = 2;
|
|
||||||
const decoder = new TextDecoder();
|
|
||||||
|
|
||||||
function adjustPosition(error, parser) {
|
|
||||||
if (error.name === 'SyntaxError' && parser.jsonParseOffset) {
|
|
||||||
error.message = error.message.replace(/at position (\d+)/, (_, pos) =>
|
|
||||||
'at position ' + (Number(pos) + parser.jsonParseOffset)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
function append(array, elements) {
|
|
||||||
// Note: Avoid to use array.push(...elements) since it may lead to
|
|
||||||
// "RangeError: Maximum call stack size exceeded" for a long arrays
|
|
||||||
const initialLength = array.length;
|
|
||||||
array.length += elements.length;
|
|
||||||
|
|
||||||
for (let i = 0; i < elements.length; i++) {
|
|
||||||
array[initialLength + i] = elements[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function parseChunked(chunkEmitter) {
|
|
||||||
const iterable = typeof chunkEmitter === 'function'
|
|
||||||
? chunkEmitter()
|
|
||||||
: chunkEmitter;
|
|
||||||
|
|
||||||
if (utils.isIterable(iterable)) {
|
|
||||||
let parser = new ChunkParser();
|
|
||||||
|
|
||||||
try {
|
|
||||||
for await (const chunk of iterable) {
|
|
||||||
if (typeof chunk !== 'string' && !ArrayBuffer.isView(chunk)) {
|
|
||||||
throw new TypeError('Invalid chunk: Expected string, TypedArray or Buffer');
|
|
||||||
}
|
|
||||||
|
|
||||||
parser.push(chunk);
|
|
||||||
}
|
|
||||||
|
|
||||||
return parser.finish();
|
|
||||||
} catch (e) {
|
|
||||||
throw adjustPosition(e, parser);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new TypeError(
|
|
||||||
'Invalid chunk emitter: Expected an Iterable, AsyncIterable, generator, ' +
|
|
||||||
'async generator, or a function returning an Iterable or AsyncIterable'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
class ChunkParser {
|
|
||||||
constructor() {
|
|
||||||
this.value = undefined;
|
|
||||||
this.valueStack = null;
|
|
||||||
|
|
||||||
this.stack = new Array(100);
|
|
||||||
this.lastFlushDepth = 0;
|
|
||||||
this.flushDepth = 0;
|
|
||||||
this.stateString = false;
|
|
||||||
this.stateStringEscape = false;
|
|
||||||
this.pendingByteSeq = null;
|
|
||||||
this.pendingChunk = null;
|
|
||||||
this.chunkOffset = 0;
|
|
||||||
this.jsonParseOffset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
parseAndAppend(fragment, wrap) {
|
|
||||||
// Append new entries or elements
|
|
||||||
if (this.stack[this.lastFlushDepth - 1] === STACK_OBJECT) {
|
|
||||||
if (wrap) {
|
|
||||||
this.jsonParseOffset--;
|
|
||||||
fragment = '{' + fragment + '}';
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.assign(this.valueStack.value, JSON.parse(fragment));
|
|
||||||
} else {
|
|
||||||
if (wrap) {
|
|
||||||
this.jsonParseOffset--;
|
|
||||||
fragment = '[' + fragment + ']';
|
|
||||||
}
|
|
||||||
|
|
||||||
append(this.valueStack.value, JSON.parse(fragment));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
prepareAddition(fragment) {
|
|
||||||
const { value } = this.valueStack;
|
|
||||||
const expectComma = Array.isArray(value)
|
|
||||||
? value.length !== 0
|
|
||||||
: Object.keys(value).length !== 0;
|
|
||||||
|
|
||||||
if (expectComma) {
|
|
||||||
// Skip a comma at the beginning of fragment, otherwise it would
|
|
||||||
// fail to parse
|
|
||||||
if (fragment[0] === ',') {
|
|
||||||
this.jsonParseOffset++;
|
|
||||||
return fragment.slice(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// When value (an object or array) is not empty and a fragment
|
|
||||||
// doesn't start with a comma, a single valid fragment starting
|
|
||||||
// is a closing bracket. If it's not, a prefix is adding to fail
|
|
||||||
// parsing. Otherwise, the sequence of chunks can be successfully
|
|
||||||
// parsed, although it should not, e.g. ["[{}", "{}]"]
|
|
||||||
if (fragment[0] !== '}' && fragment[0] !== ']') {
|
|
||||||
this.jsonParseOffset -= 3;
|
|
||||||
return '[[]' + fragment;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return fragment;
|
|
||||||
}
|
|
||||||
|
|
||||||
flush(chunk, start, end) {
|
|
||||||
let fragment = chunk.slice(start, end);
|
|
||||||
|
|
||||||
// Save position correction an error in JSON.parse() if any
|
|
||||||
this.jsonParseOffset = this.chunkOffset + start;
|
|
||||||
|
|
||||||
// Prepend pending chunk if any
|
|
||||||
if (this.pendingChunk !== null) {
|
|
||||||
fragment = this.pendingChunk + fragment;
|
|
||||||
this.jsonParseOffset -= this.pendingChunk.length;
|
|
||||||
this.pendingChunk = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.flushDepth === this.lastFlushDepth) {
|
|
||||||
// Depth didn't changed, so it's a root value or entry/element set
|
|
||||||
if (this.flushDepth > 0) {
|
|
||||||
this.parseAndAppend(this.prepareAddition(fragment), true);
|
|
||||||
} else {
|
|
||||||
// That's an entire value on a top level
|
|
||||||
this.value = JSON.parse(fragment);
|
|
||||||
this.valueStack = {
|
|
||||||
value: this.value,
|
|
||||||
prev: null
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} else if (this.flushDepth > this.lastFlushDepth) {
|
|
||||||
// Add missed closing brackets/parentheses
|
|
||||||
for (let i = this.flushDepth - 1; i >= this.lastFlushDepth; i--) {
|
|
||||||
fragment += this.stack[i] === STACK_OBJECT ? '}' : ']';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.lastFlushDepth === 0) {
|
|
||||||
// That's a root value
|
|
||||||
this.value = JSON.parse(fragment);
|
|
||||||
this.valueStack = {
|
|
||||||
value: this.value,
|
|
||||||
prev: null
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
this.parseAndAppend(this.prepareAddition(fragment), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Move down to the depths to the last object/array, which is current now
|
|
||||||
for (let i = this.lastFlushDepth || 1; i < this.flushDepth; i++) {
|
|
||||||
let value = this.valueStack.value;
|
|
||||||
|
|
||||||
if (this.stack[i - 1] === STACK_OBJECT) {
|
|
||||||
// find last entry
|
|
||||||
let key;
|
|
||||||
// eslint-disable-next-line curly
|
|
||||||
for (key in value);
|
|
||||||
value = value[key];
|
|
||||||
} else {
|
|
||||||
// last element
|
|
||||||
value = value[value.length - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
this.valueStack = {
|
|
||||||
value,
|
|
||||||
prev: this.valueStack
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} else /* this.flushDepth < this.lastFlushDepth */ {
|
|
||||||
fragment = this.prepareAddition(fragment);
|
|
||||||
|
|
||||||
// Add missed opening brackets/parentheses
|
|
||||||
for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
|
|
||||||
this.jsonParseOffset--;
|
|
||||||
fragment = (this.stack[i] === STACK_OBJECT ? '{' : '[') + fragment;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.parseAndAppend(fragment, false);
|
|
||||||
|
|
||||||
for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
|
|
||||||
this.valueStack = this.valueStack.prev;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.lastFlushDepth = this.flushDepth;
|
|
||||||
}
|
|
||||||
|
|
||||||
push(chunk) {
|
|
||||||
if (typeof chunk !== 'string') {
|
|
||||||
// Suppose chunk is Buffer or Uint8Array
|
|
||||||
|
|
||||||
// Prepend uncompleted byte sequence if any
|
|
||||||
if (this.pendingByteSeq !== null) {
|
|
||||||
const origRawChunk = chunk;
|
|
||||||
chunk = new Uint8Array(this.pendingByteSeq.length + origRawChunk.length);
|
|
||||||
chunk.set(this.pendingByteSeq);
|
|
||||||
chunk.set(origRawChunk, this.pendingByteSeq.length);
|
|
||||||
this.pendingByteSeq = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// In case Buffer/Uint8Array, an input is encoded in UTF8
|
|
||||||
// Seek for parts of uncompleted UTF8 symbol on the ending
|
|
||||||
// This makes sense only if we expect more chunks and last char is not multi-bytes
|
|
||||||
if (chunk[chunk.length - 1] > 127) {
|
|
||||||
for (let seqLength = 0; seqLength < chunk.length; seqLength++) {
|
|
||||||
const byte = chunk[chunk.length - 1 - seqLength];
|
|
||||||
|
|
||||||
// 10xxxxxx - 2nd, 3rd or 4th byte
|
|
||||||
// 110xxxxx – first byte of 2-byte sequence
|
|
||||||
// 1110xxxx - first byte of 3-byte sequence
|
|
||||||
// 11110xxx - first byte of 4-byte sequence
|
|
||||||
if (byte >> 6 === 3) {
|
|
||||||
seqLength++;
|
|
||||||
|
|
||||||
// If the sequence is really incomplete, then preserve it
|
|
||||||
// for the future chunk and cut off it from the current chunk
|
|
||||||
if ((seqLength !== 4 && byte >> 3 === 0b11110) ||
|
|
||||||
(seqLength !== 3 && byte >> 4 === 0b1110) ||
|
|
||||||
(seqLength !== 2 && byte >> 5 === 0b110)) {
|
|
||||||
this.pendingByteSeq = chunk.slice(chunk.length - seqLength);
|
|
||||||
chunk = chunk.slice(0, -seqLength);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert chunk to a string, since single decode per chunk
|
|
||||||
// is much effective than decode multiple small substrings
|
|
||||||
chunk = decoder.decode(chunk);
|
|
||||||
}
|
|
||||||
|
|
||||||
const chunkLength = chunk.length;
|
|
||||||
let lastFlushPoint = 0;
|
|
||||||
let flushPoint = 0;
|
|
||||||
|
|
||||||
// Main scan loop
|
|
||||||
scan: for (let i = 0; i < chunkLength; i++) {
|
|
||||||
if (this.stateString) {
|
|
||||||
for (; i < chunkLength; i++) {
|
|
||||||
if (this.stateStringEscape) {
|
|
||||||
this.stateStringEscape = false;
|
|
||||||
} else {
|
|
||||||
switch (chunk.charCodeAt(i)) {
|
|
||||||
case 0x22: /* " */
|
|
||||||
this.stateString = false;
|
|
||||||
continue scan;
|
|
||||||
|
|
||||||
case 0x5C: /* \ */
|
|
||||||
this.stateStringEscape = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (chunk.charCodeAt(i)) {
|
|
||||||
case 0x22: /* " */
|
|
||||||
this.stateString = true;
|
|
||||||
this.stateStringEscape = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x2C: /* , */
|
|
||||||
flushPoint = i;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x7B: /* { */
|
|
||||||
// Open an object
|
|
||||||
flushPoint = i + 1;
|
|
||||||
this.stack[this.flushDepth++] = STACK_OBJECT;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x5B: /* [ */
|
|
||||||
// Open an array
|
|
||||||
flushPoint = i + 1;
|
|
||||||
this.stack[this.flushDepth++] = STACK_ARRAY;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x5D: /* ] */
|
|
||||||
case 0x7D: /* } */
|
|
||||||
// Close an object or array
|
|
||||||
flushPoint = i + 1;
|
|
||||||
this.flushDepth--;
|
|
||||||
|
|
||||||
if (this.flushDepth < this.lastFlushDepth) {
|
|
||||||
this.flush(chunk, lastFlushPoint, flushPoint);
|
|
||||||
lastFlushPoint = flushPoint;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x09: /* \t */
|
|
||||||
case 0x0A: /* \n */
|
|
||||||
case 0x0D: /* \r */
|
|
||||||
case 0x20: /* space */
|
|
||||||
// Move points forward when they points on current position and it's a whitespace
|
|
||||||
if (lastFlushPoint === i) {
|
|
||||||
lastFlushPoint++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flushPoint === i) {
|
|
||||||
flushPoint++;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flushPoint > lastFlushPoint) {
|
|
||||||
this.flush(chunk, lastFlushPoint, flushPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Produce pendingChunk if something left
|
|
||||||
if (flushPoint < chunkLength) {
|
|
||||||
if (this.pendingChunk !== null) {
|
|
||||||
// When there is already a pending chunk then no flush happened,
|
|
||||||
// appending entire chunk to pending one
|
|
||||||
this.pendingChunk += chunk;
|
|
||||||
} else {
|
|
||||||
// Create a pending chunk, it will start with non-whitespace since
|
|
||||||
// flushPoint was moved forward away from whitespaces on scan
|
|
||||||
this.pendingChunk = chunk.slice(flushPoint, chunkLength);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.chunkOffset += chunkLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
finish() {
|
|
||||||
if (this.pendingChunk !== null) {
|
|
||||||
this.flush('', 0, 0);
|
|
||||||
this.pendingChunk = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.parseChunked = parseChunked;
|
|
175
node_modules/@discoveryjs/json-ext/cjs/stringify-chunked.cjs
generated
vendored
175
node_modules/@discoveryjs/json-ext/cjs/stringify-chunked.cjs
generated
vendored
@ -1,175 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
const utils = require('./utils.cjs');
|
|
||||||
|
|
||||||
function encodeString(value) {
|
|
||||||
if (/[^\x20\x21\x23-\x5B\x5D-\uD799]/.test(value)) { // [^\x20-\uD799]|[\x22\x5c]
|
|
||||||
return JSON.stringify(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return '"' + value + '"';
|
|
||||||
}
|
|
||||||
|
|
||||||
function* stringifyChunked(value, ...args) {
|
|
||||||
const { replacer, getKeys, space, ...options } = utils.normalizeStringifyOptions(...args);
|
|
||||||
const highWaterMark = Number(options.highWaterMark) || 0x4000; // 16kb by default
|
|
||||||
|
|
||||||
const keyStrings = new Map();
|
|
||||||
const stack = [];
|
|
||||||
const rootValue = { '': value };
|
|
||||||
let prevState = null;
|
|
||||||
let state = () => printEntry('', value);
|
|
||||||
let stateValue = rootValue;
|
|
||||||
let stateEmpty = true;
|
|
||||||
let stateKeys = [''];
|
|
||||||
let stateIndex = 0;
|
|
||||||
let buffer = '';
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
state();
|
|
||||||
|
|
||||||
if (buffer.length >= highWaterMark || prevState === null) {
|
|
||||||
// flush buffer
|
|
||||||
yield buffer;
|
|
||||||
buffer = '';
|
|
||||||
|
|
||||||
if (prevState === null) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function printObject() {
|
|
||||||
if (stateIndex === 0) {
|
|
||||||
stateKeys = getKeys(stateValue);
|
|
||||||
buffer += '{';
|
|
||||||
}
|
|
||||||
|
|
||||||
// when no keys left
|
|
||||||
if (stateIndex === stateKeys.length) {
|
|
||||||
buffer += space && !stateEmpty
|
|
||||||
? `\n${space.repeat(stack.length - 1)}}`
|
|
||||||
: '}';
|
|
||||||
|
|
||||||
popState();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const key = stateKeys[stateIndex++];
|
|
||||||
printEntry(key, stateValue[key]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function printArray() {
|
|
||||||
if (stateIndex === 0) {
|
|
||||||
buffer += '[';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stateIndex === stateValue.length) {
|
|
||||||
buffer += space && !stateEmpty
|
|
||||||
? `\n${space.repeat(stack.length - 1)}]`
|
|
||||||
: ']';
|
|
||||||
|
|
||||||
popState();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
printEntry(stateIndex, stateValue[stateIndex++]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function printEntryPrelude(key) {
|
|
||||||
if (stateEmpty) {
|
|
||||||
stateEmpty = false;
|
|
||||||
} else {
|
|
||||||
buffer += ',';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (space && prevState !== null) {
|
|
||||||
buffer += `\n${space.repeat(stack.length)}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (state === printObject) {
|
|
||||||
let keyString = keyStrings.get(key);
|
|
||||||
|
|
||||||
if (keyString === undefined) {
|
|
||||||
keyStrings.set(key, keyString = encodeString(key) + (space ? ': ' : ':'));
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer += keyString;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function printEntry(key, value) {
|
|
||||||
value = utils.replaceValue(stateValue, key, value, replacer);
|
|
||||||
|
|
||||||
if (value === null || typeof value !== 'object') {
|
|
||||||
// primitive
|
|
||||||
if (state !== printObject || value !== undefined) {
|
|
||||||
printEntryPrelude(key);
|
|
||||||
pushPrimitive(value);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// If the visited set does not change after adding a value, then it is already in the set
|
|
||||||
if (stack.includes(value)) {
|
|
||||||
throw new TypeError('Converting circular structure to JSON');
|
|
||||||
}
|
|
||||||
|
|
||||||
printEntryPrelude(key);
|
|
||||||
stack.push(value);
|
|
||||||
|
|
||||||
pushState();
|
|
||||||
state = Array.isArray(value) ? printArray : printObject;
|
|
||||||
stateValue = value;
|
|
||||||
stateEmpty = true;
|
|
||||||
stateIndex = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function pushPrimitive(value) {
|
|
||||||
switch (typeof value) {
|
|
||||||
case 'string':
|
|
||||||
buffer += encodeString(value);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'number':
|
|
||||||
buffer += Number.isFinite(value) ? String(value) : 'null';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'boolean':
|
|
||||||
buffer += value ? 'true' : 'false';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'undefined':
|
|
||||||
case 'object': // typeof null === 'object'
|
|
||||||
buffer += 'null';
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new TypeError(`Do not know how to serialize a ${value.constructor?.name || typeof value}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function pushState() {
|
|
||||||
prevState = {
|
|
||||||
keys: stateKeys,
|
|
||||||
index: stateIndex,
|
|
||||||
prev: prevState
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function popState() {
|
|
||||||
stack.pop();
|
|
||||||
const value = stack.length > 0 ? stack[stack.length - 1] : rootValue;
|
|
||||||
|
|
||||||
// restore state
|
|
||||||
state = Array.isArray(value) ? printArray : printObject;
|
|
||||||
stateValue = value;
|
|
||||||
stateEmpty = false;
|
|
||||||
stateKeys = prevState.keys;
|
|
||||||
stateIndex = prevState.index;
|
|
||||||
|
|
||||||
// pop state
|
|
||||||
prevState = prevState.prev;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.stringifyChunked = stringifyChunked;
|
|
250
node_modules/@discoveryjs/json-ext/cjs/stringify-info.cjs
generated
vendored
250
node_modules/@discoveryjs/json-ext/cjs/stringify-info.cjs
generated
vendored
@ -1,250 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
const utils = require('./utils.cjs');
|
|
||||||
|
|
||||||
const hasOwn = typeof Object.hasOwn === 'function'
|
|
||||||
? Object.hasOwn
|
|
||||||
: (object, key) => Object.hasOwnProperty.call(object, key);
|
|
||||||
|
|
||||||
// https://tc39.es/ecma262/#table-json-single-character-escapes
|
|
||||||
const escapableCharCodeSubstitution = { // JSON Single Character Escape Sequences
|
|
||||||
0x08: '\\b',
|
|
||||||
0x09: '\\t',
|
|
||||||
0x0a: '\\n',
|
|
||||||
0x0c: '\\f',
|
|
||||||
0x0d: '\\r',
|
|
||||||
0x22: '\\\"',
|
|
||||||
0x5c: '\\\\'
|
|
||||||
};
|
|
||||||
|
|
||||||
const charLength2048 = Uint8Array.from({ length: 2048 }, (_, code) => {
|
|
||||||
if (hasOwn(escapableCharCodeSubstitution, code)) {
|
|
||||||
return 2; // \X
|
|
||||||
}
|
|
||||||
|
|
||||||
if (code < 0x20) {
|
|
||||||
return 6; // \uXXXX
|
|
||||||
}
|
|
||||||
|
|
||||||
return code < 128 ? 1 : 2; // UTF8 bytes
|
|
||||||
});
|
|
||||||
|
|
||||||
function isLeadingSurrogate(code) {
|
|
||||||
return code >= 0xD800 && code <= 0xDBFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
function isTrailingSurrogate(code) {
|
|
||||||
return code >= 0xDC00 && code <= 0xDFFF;
|
|
||||||
}
|
|
||||||
|
|
||||||
function stringLength(str) {
|
|
||||||
// Fast path to compute length when a string contains only characters encoded as single bytes
|
|
||||||
if (!/[^\x20\x21\x23-\x5B\x5D-\x7F]/.test(str)) {
|
|
||||||
return str.length + 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
let len = 0;
|
|
||||||
let prevLeadingSurrogate = false;
|
|
||||||
|
|
||||||
for (let i = 0; i < str.length; i++) {
|
|
||||||
const code = str.charCodeAt(i);
|
|
||||||
|
|
||||||
if (code < 2048) {
|
|
||||||
len += charLength2048[code];
|
|
||||||
} else if (isLeadingSurrogate(code)) {
|
|
||||||
len += 6; // \uXXXX since no pair with trailing surrogate yet
|
|
||||||
prevLeadingSurrogate = true;
|
|
||||||
continue;
|
|
||||||
} else if (isTrailingSurrogate(code)) {
|
|
||||||
len = prevLeadingSurrogate
|
|
||||||
? len - 2 // surrogate pair (4 bytes), since we calculate prev leading surrogate as 6 bytes, substruct 2 bytes
|
|
||||||
: len + 6; // \uXXXX
|
|
||||||
} else {
|
|
||||||
len += 3; // code >= 2048 is 3 bytes length for UTF8
|
|
||||||
}
|
|
||||||
|
|
||||||
prevLeadingSurrogate = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return len + 2; // +2 for quotes
|
|
||||||
}
|
|
||||||
|
|
||||||
// avoid producing a string from a number
|
|
||||||
function intLength(num) {
|
|
||||||
let len = 0;
|
|
||||||
|
|
||||||
if (num < 0) {
|
|
||||||
len = 1;
|
|
||||||
num = -num;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (num >= 1e9) {
|
|
||||||
len += 9;
|
|
||||||
num = (num - num % 1e9) / 1e9;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (num >= 1e4) {
|
|
||||||
if (num >= 1e6) {
|
|
||||||
return len + (num >= 1e8
|
|
||||||
? 9
|
|
||||||
: num >= 1e7 ? 8 : 7
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return len + (num >= 1e5 ? 6 : 5);
|
|
||||||
}
|
|
||||||
|
|
||||||
return len + (num >= 1e2
|
|
||||||
? num >= 1e3 ? 4 : 3
|
|
||||||
: num >= 10 ? 2 : 1
|
|
||||||
);
|
|
||||||
}
|
|
||||||
function primitiveLength(value) {
|
|
||||||
switch (typeof value) {
|
|
||||||
case 'string':
|
|
||||||
return stringLength(value);
|
|
||||||
|
|
||||||
case 'number':
|
|
||||||
return Number.isFinite(value)
|
|
||||||
? Number.isInteger(value)
|
|
||||||
? intLength(value)
|
|
||||||
: String(value).length
|
|
||||||
: 4 /* null */;
|
|
||||||
|
|
||||||
case 'boolean':
|
|
||||||
return value ? 4 /* true */ : 5 /* false */;
|
|
||||||
|
|
||||||
case 'undefined':
|
|
||||||
case 'object':
|
|
||||||
return 4; /* null */
|
|
||||||
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function stringifyInfo(value, ...args) {
|
|
||||||
const { replacer, getKeys, ...options } = utils.normalizeStringifyOptions(...args);
|
|
||||||
const continueOnCircular = Boolean(options.continueOnCircular);
|
|
||||||
const space = options.space?.length || 0;
|
|
||||||
|
|
||||||
const keysLength = new Map();
|
|
||||||
const visited = new Map();
|
|
||||||
const circular = new Set();
|
|
||||||
const stack = [];
|
|
||||||
const root = { '': value };
|
|
||||||
let stop = false;
|
|
||||||
let bytes = 0;
|
|
||||||
let spaceBytes = 0;
|
|
||||||
let objects = 0;
|
|
||||||
|
|
||||||
walk(root, '', value);
|
|
||||||
|
|
||||||
// when value is undefined or replaced for undefined
|
|
||||||
if (bytes === 0) {
|
|
||||||
bytes += 9; // FIXME: that's the length of undefined, should we normalize behaviour to convert it to null?
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
bytes: isNaN(bytes) ? Infinity : bytes + spaceBytes,
|
|
||||||
spaceBytes: space > 0 && isNaN(bytes) ? Infinity : spaceBytes,
|
|
||||||
circular: [...circular]
|
|
||||||
};
|
|
||||||
|
|
||||||
function walk(holder, key, value) {
|
|
||||||
if (stop) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
value = utils.replaceValue(holder, key, value, replacer);
|
|
||||||
|
|
||||||
if (value === null || typeof value !== 'object') {
|
|
||||||
// primitive
|
|
||||||
if (value !== undefined || Array.isArray(holder)) {
|
|
||||||
bytes += primitiveLength(value);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// check for circular references
|
|
||||||
if (stack.includes(value)) {
|
|
||||||
circular.add(value);
|
|
||||||
bytes += 4; // treat as null
|
|
||||||
|
|
||||||
if (!continueOnCircular) {
|
|
||||||
stop = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Using 'visited' allows avoiding hang-ups in cases of highly interconnected object graphs;
|
|
||||||
// for example, a list of git commits with references to parents can lead to N^2 complexity for traversal,
|
|
||||||
// and N when 'visited' is used
|
|
||||||
if (visited.has(value)) {
|
|
||||||
bytes += visited.get(value);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
objects++;
|
|
||||||
|
|
||||||
const prevObjects = objects;
|
|
||||||
const valueBytes = bytes;
|
|
||||||
let valueLength = 0;
|
|
||||||
|
|
||||||
stack.push(value);
|
|
||||||
|
|
||||||
if (Array.isArray(value)) {
|
|
||||||
// array
|
|
||||||
valueLength = value.length;
|
|
||||||
|
|
||||||
for (let i = 0; i < valueLength; i++) {
|
|
||||||
walk(value, i, value[i]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// object
|
|
||||||
let prevLength = bytes;
|
|
||||||
|
|
||||||
for (const key of getKeys(value)) {
|
|
||||||
walk(value, key, value[key]);
|
|
||||||
|
|
||||||
if (prevLength !== bytes) {
|
|
||||||
let keyLen = keysLength.get(key);
|
|
||||||
|
|
||||||
if (keyLen === undefined) {
|
|
||||||
keysLength.set(key, keyLen = stringLength(key) + 1); // "key":
|
|
||||||
}
|
|
||||||
|
|
||||||
// value is printed
|
|
||||||
bytes += keyLen;
|
|
||||||
valueLength++;
|
|
||||||
prevLength = bytes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bytes += valueLength === 0
|
|
||||||
? 2 // {} or []
|
|
||||||
: 1 + valueLength; // {} or [] + commas
|
|
||||||
|
|
||||||
if (space > 0 && valueLength > 0) {
|
|
||||||
spaceBytes +=
|
|
||||||
// a space between ":" and a value for each object entry
|
|
||||||
(Array.isArray(value) ? 0 : valueLength) +
|
|
||||||
// the formula results from folding the following components:
|
|
||||||
// - for each key-value or element: ident + newline
|
|
||||||
// (1 + stack.length * space) * valueLength
|
|
||||||
// - ident (one space less) before "}" or "]" + newline
|
|
||||||
// (stack.length - 1) * space + 1
|
|
||||||
(1 + stack.length * space) * (valueLength + 1) - space;
|
|
||||||
}
|
|
||||||
|
|
||||||
stack.pop();
|
|
||||||
|
|
||||||
// add to 'visited' only objects that contain nested objects
|
|
||||||
if (prevObjects !== objects) {
|
|
||||||
visited.set(value, bytes - valueBytes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.stringifyInfo = stringifyInfo;
|
|
108
node_modules/@discoveryjs/json-ext/cjs/utils.cjs
generated
vendored
108
node_modules/@discoveryjs/json-ext/cjs/utils.cjs
generated
vendored
@ -1,108 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
function isIterable(value) {
|
|
||||||
return (
|
|
||||||
typeof value === 'object' &&
|
|
||||||
value !== null &&
|
|
||||||
(
|
|
||||||
typeof value[Symbol.iterator] === 'function' ||
|
|
||||||
typeof value[Symbol.asyncIterator] === 'function'
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
function replaceValue(holder, key, value, replacer) {
|
|
||||||
if (value && typeof value.toJSON === 'function') {
|
|
||||||
value = value.toJSON();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (replacer !== null) {
|
|
||||||
value = replacer.call(holder, String(key), value);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (typeof value) {
|
|
||||||
case 'function':
|
|
||||||
case 'symbol':
|
|
||||||
value = undefined;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'object':
|
|
||||||
if (value !== null) {
|
|
||||||
const cls = value.constructor;
|
|
||||||
if (cls === String || cls === Number || cls === Boolean) {
|
|
||||||
value = value.valueOf();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
function normalizeReplacer(replacer) {
|
|
||||||
if (typeof replacer === 'function') {
|
|
||||||
return replacer;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Array.isArray(replacer)) {
|
|
||||||
const allowlist = new Set(replacer
|
|
||||||
.map(item => {
|
|
||||||
const cls = item && item.constructor;
|
|
||||||
return cls === String || cls === Number ? String(item) : null;
|
|
||||||
})
|
|
||||||
.filter(item => typeof item === 'string')
|
|
||||||
);
|
|
||||||
|
|
||||||
return [...allowlist];
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
function normalizeSpace(space) {
|
|
||||||
if (typeof space === 'number') {
|
|
||||||
if (!Number.isFinite(space) || space < 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ' '.repeat(Math.min(space, 10));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof space === 'string') {
|
|
||||||
return space.slice(0, 10) || false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function normalizeStringifyOptions(optionsOrReplacer, space) {
|
|
||||||
if (optionsOrReplacer === null || Array.isArray(optionsOrReplacer) || typeof optionsOrReplacer !== 'object') {
|
|
||||||
optionsOrReplacer = {
|
|
||||||
replacer: optionsOrReplacer,
|
|
||||||
space
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
let replacer = normalizeReplacer(optionsOrReplacer.replacer);
|
|
||||||
let getKeys = Object.keys;
|
|
||||||
|
|
||||||
if (Array.isArray(replacer)) {
|
|
||||||
const allowlist = replacer;
|
|
||||||
|
|
||||||
getKeys = () => allowlist;
|
|
||||||
replacer = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
...optionsOrReplacer,
|
|
||||||
replacer,
|
|
||||||
getKeys,
|
|
||||||
space: normalizeSpace(optionsOrReplacer.space)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.isIterable = isIterable;
|
|
||||||
exports.normalizeReplacer = normalizeReplacer;
|
|
||||||
exports.normalizeSpace = normalizeSpace;
|
|
||||||
exports.normalizeStringifyOptions = normalizeStringifyOptions;
|
|
||||||
exports.replaceValue = replaceValue;
|
|
60
node_modules/@discoveryjs/json-ext/cjs/web-streams.cjs
generated
vendored
60
node_modules/@discoveryjs/json-ext/cjs/web-streams.cjs
generated
vendored
@ -1,60 +0,0 @@
|
|||||||
'use strict';
|
|
||||||
|
|
||||||
const parseChunked = require('./parse-chunked.cjs');
|
|
||||||
const stringifyChunked = require('./stringify-chunked.cjs');
|
|
||||||
const utils = require('./utils.cjs');
|
|
||||||
|
|
||||||
/* eslint-env browser */
|
|
||||||
|
|
||||||
function parseFromWebStream(stream) {
|
|
||||||
// 2024/6/17: currently, an @@asyncIterator on a ReadableStream is not widely supported,
|
|
||||||
// therefore use a fallback using a reader
|
|
||||||
// https://caniuse.com/mdn-api_readablestream_--asynciterator
|
|
||||||
return parseChunked.parseChunked(utils.isIterable(stream) ? stream : async function*() {
|
|
||||||
const reader = stream.getReader();
|
|
||||||
|
|
||||||
try {
|
|
||||||
while (true) {
|
|
||||||
const { value, done } = await reader.read();
|
|
||||||
|
|
||||||
if (done) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
yield value;
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
reader.releaseLock();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function createStringifyWebStream(value, replacer, space) {
|
|
||||||
// 2024/6/17: the ReadableStream.from() static method is supported
|
|
||||||
// in Node.js 20.6+ and Firefox only
|
|
||||||
if (typeof ReadableStream.from === 'function') {
|
|
||||||
return ReadableStream.from(stringifyChunked.stringifyChunked(value, replacer, space));
|
|
||||||
}
|
|
||||||
|
|
||||||
// emulate ReadableStream.from()
|
|
||||||
return new ReadableStream({
|
|
||||||
start() {
|
|
||||||
this.generator = stringifyChunked.stringifyChunked(value, replacer, space);
|
|
||||||
},
|
|
||||||
pull(controller) {
|
|
||||||
const { value, done } = this.generator.next();
|
|
||||||
|
|
||||||
if (done) {
|
|
||||||
controller.close();
|
|
||||||
} else {
|
|
||||||
controller.enqueue(value);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
cancel() {
|
|
||||||
this.generator = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
exports.createStringifyWebStream = createStringifyWebStream;
|
|
||||||
exports.parseFromWebStream = parseFromWebStream;
|
|
705
node_modules/@discoveryjs/json-ext/dist/json-ext.js
generated
vendored
705
node_modules/@discoveryjs/json-ext/dist/json-ext.js
generated
vendored
@ -1,705 +0,0 @@
|
|||||||
(function (global, factory) {
|
|
||||||
typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
|
|
||||||
typeof define === 'function' && define.amd ? define(factory) :
|
|
||||||
(global.jsonExt = factory());
|
|
||||||
}(typeof globalThis != 'undefined' ? globalThis : typeof window != 'undefined' ? window : typeof global != 'undefined' ? global : typeof self != 'undefined' ? self : this, (function () {
|
|
||||||
var exports = (() => {
|
|
||||||
var __defProp = Object.defineProperty;
|
|
||||||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
||||||
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
||||||
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
||||||
var __export = (target, all) => {
|
|
||||||
for (var name in all)
|
|
||||||
__defProp(target, name, { get: all[name], enumerable: true });
|
|
||||||
};
|
|
||||||
var __copyProps = (to, from, except, desc) => {
|
|
||||||
if (from && typeof from === "object" || typeof from === "function") {
|
|
||||||
for (let key of __getOwnPropNames(from))
|
|
||||||
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
||||||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
||||||
}
|
|
||||||
return to;
|
|
||||||
};
|
|
||||||
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
||||||
|
|
||||||
// src/index.js
|
|
||||||
var src_exports = {};
|
|
||||||
__export(src_exports, {
|
|
||||||
createStringifyWebStream: () => createStringifyWebStream,
|
|
||||||
parseChunked: () => parseChunked,
|
|
||||||
parseFromWebStream: () => parseFromWebStream,
|
|
||||||
stringifyChunked: () => stringifyChunked,
|
|
||||||
stringifyInfo: () => stringifyInfo
|
|
||||||
});
|
|
||||||
|
|
||||||
// src/utils.js
|
|
||||||
function isIterable(value) {
|
|
||||||
return typeof value === "object" && value !== null && (typeof value[Symbol.iterator] === "function" || typeof value[Symbol.asyncIterator] === "function");
|
|
||||||
}
|
|
||||||
function replaceValue(holder, key, value, replacer) {
|
|
||||||
if (value && typeof value.toJSON === "function") {
|
|
||||||
value = value.toJSON();
|
|
||||||
}
|
|
||||||
if (replacer !== null) {
|
|
||||||
value = replacer.call(holder, String(key), value);
|
|
||||||
}
|
|
||||||
switch (typeof value) {
|
|
||||||
case "function":
|
|
||||||
case "symbol":
|
|
||||||
value = void 0;
|
|
||||||
break;
|
|
||||||
case "object":
|
|
||||||
if (value !== null) {
|
|
||||||
const cls = value.constructor;
|
|
||||||
if (cls === String || cls === Number || cls === Boolean) {
|
|
||||||
value = value.valueOf();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
function normalizeReplacer(replacer) {
|
|
||||||
if (typeof replacer === "function") {
|
|
||||||
return replacer;
|
|
||||||
}
|
|
||||||
if (Array.isArray(replacer)) {
|
|
||||||
const allowlist = new Set(
|
|
||||||
replacer.map((item) => {
|
|
||||||
const cls = item && item.constructor;
|
|
||||||
return cls === String || cls === Number ? String(item) : null;
|
|
||||||
}).filter((item) => typeof item === "string")
|
|
||||||
);
|
|
||||||
return [...allowlist];
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
function normalizeSpace(space) {
|
|
||||||
if (typeof space === "number") {
|
|
||||||
if (!Number.isFinite(space) || space < 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return " ".repeat(Math.min(space, 10));
|
|
||||||
}
|
|
||||||
if (typeof space === "string") {
|
|
||||||
return space.slice(0, 10) || false;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
function normalizeStringifyOptions(optionsOrReplacer, space) {
|
|
||||||
if (optionsOrReplacer === null || Array.isArray(optionsOrReplacer) || typeof optionsOrReplacer !== "object") {
|
|
||||||
optionsOrReplacer = {
|
|
||||||
replacer: optionsOrReplacer,
|
|
||||||
space
|
|
||||||
};
|
|
||||||
}
|
|
||||||
let replacer = normalizeReplacer(optionsOrReplacer.replacer);
|
|
||||||
let getKeys = Object.keys;
|
|
||||||
if (Array.isArray(replacer)) {
|
|
||||||
const allowlist = replacer;
|
|
||||||
getKeys = () => allowlist;
|
|
||||||
replacer = null;
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
...optionsOrReplacer,
|
|
||||||
replacer,
|
|
||||||
getKeys,
|
|
||||||
space: normalizeSpace(optionsOrReplacer.space)
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// src/parse-chunked.js
|
|
||||||
var STACK_OBJECT = 1;
|
|
||||||
var STACK_ARRAY = 2;
|
|
||||||
var decoder = new TextDecoder();
|
|
||||||
function adjustPosition(error, parser) {
|
|
||||||
if (error.name === "SyntaxError" && parser.jsonParseOffset) {
|
|
||||||
error.message = error.message.replace(
|
|
||||||
/at position (\d+)/,
|
|
||||||
(_, pos) => "at position " + (Number(pos) + parser.jsonParseOffset)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
function append(array, elements) {
|
|
||||||
const initialLength = array.length;
|
|
||||||
array.length += elements.length;
|
|
||||||
for (let i = 0; i < elements.length; i++) {
|
|
||||||
array[initialLength + i] = elements[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
async function parseChunked(chunkEmitter) {
|
|
||||||
const iterable = typeof chunkEmitter === "function" ? chunkEmitter() : chunkEmitter;
|
|
||||||
if (isIterable(iterable)) {
|
|
||||||
let parser = new ChunkParser();
|
|
||||||
try {
|
|
||||||
for await (const chunk of iterable) {
|
|
||||||
if (typeof chunk !== "string" && !ArrayBuffer.isView(chunk)) {
|
|
||||||
throw new TypeError("Invalid chunk: Expected string, TypedArray or Buffer");
|
|
||||||
}
|
|
||||||
parser.push(chunk);
|
|
||||||
}
|
|
||||||
return parser.finish();
|
|
||||||
} catch (e) {
|
|
||||||
throw adjustPosition(e, parser);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
throw new TypeError(
|
|
||||||
"Invalid chunk emitter: Expected an Iterable, AsyncIterable, generator, async generator, or a function returning an Iterable or AsyncIterable"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
var ChunkParser = class {
|
|
||||||
constructor() {
|
|
||||||
this.value = void 0;
|
|
||||||
this.valueStack = null;
|
|
||||||
this.stack = new Array(100);
|
|
||||||
this.lastFlushDepth = 0;
|
|
||||||
this.flushDepth = 0;
|
|
||||||
this.stateString = false;
|
|
||||||
this.stateStringEscape = false;
|
|
||||||
this.pendingByteSeq = null;
|
|
||||||
this.pendingChunk = null;
|
|
||||||
this.chunkOffset = 0;
|
|
||||||
this.jsonParseOffset = 0;
|
|
||||||
}
|
|
||||||
parseAndAppend(fragment, wrap) {
|
|
||||||
if (this.stack[this.lastFlushDepth - 1] === STACK_OBJECT) {
|
|
||||||
if (wrap) {
|
|
||||||
this.jsonParseOffset--;
|
|
||||||
fragment = "{" + fragment + "}";
|
|
||||||
}
|
|
||||||
Object.assign(this.valueStack.value, JSON.parse(fragment));
|
|
||||||
} else {
|
|
||||||
if (wrap) {
|
|
||||||
this.jsonParseOffset--;
|
|
||||||
fragment = "[" + fragment + "]";
|
|
||||||
}
|
|
||||||
append(this.valueStack.value, JSON.parse(fragment));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
prepareAddition(fragment) {
|
|
||||||
const { value } = this.valueStack;
|
|
||||||
const expectComma = Array.isArray(value) ? value.length !== 0 : Object.keys(value).length !== 0;
|
|
||||||
if (expectComma) {
|
|
||||||
if (fragment[0] === ",") {
|
|
||||||
this.jsonParseOffset++;
|
|
||||||
return fragment.slice(1);
|
|
||||||
}
|
|
||||||
if (fragment[0] !== "}" && fragment[0] !== "]") {
|
|
||||||
this.jsonParseOffset -= 3;
|
|
||||||
return "[[]" + fragment;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return fragment;
|
|
||||||
}
|
|
||||||
flush(chunk, start, end) {
|
|
||||||
let fragment = chunk.slice(start, end);
|
|
||||||
this.jsonParseOffset = this.chunkOffset + start;
|
|
||||||
if (this.pendingChunk !== null) {
|
|
||||||
fragment = this.pendingChunk + fragment;
|
|
||||||
this.jsonParseOffset -= this.pendingChunk.length;
|
|
||||||
this.pendingChunk = null;
|
|
||||||
}
|
|
||||||
if (this.flushDepth === this.lastFlushDepth) {
|
|
||||||
if (this.flushDepth > 0) {
|
|
||||||
this.parseAndAppend(this.prepareAddition(fragment), true);
|
|
||||||
} else {
|
|
||||||
this.value = JSON.parse(fragment);
|
|
||||||
this.valueStack = {
|
|
||||||
value: this.value,
|
|
||||||
prev: null
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} else if (this.flushDepth > this.lastFlushDepth) {
|
|
||||||
for (let i = this.flushDepth - 1; i >= this.lastFlushDepth; i--) {
|
|
||||||
fragment += this.stack[i] === STACK_OBJECT ? "}" : "]";
|
|
||||||
}
|
|
||||||
if (this.lastFlushDepth === 0) {
|
|
||||||
this.value = JSON.parse(fragment);
|
|
||||||
this.valueStack = {
|
|
||||||
value: this.value,
|
|
||||||
prev: null
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
this.parseAndAppend(this.prepareAddition(fragment), true);
|
|
||||||
}
|
|
||||||
for (let i = this.lastFlushDepth || 1; i < this.flushDepth; i++) {
|
|
||||||
let value = this.valueStack.value;
|
|
||||||
if (this.stack[i - 1] === STACK_OBJECT) {
|
|
||||||
let key;
|
|
||||||
for (key in value) ;
|
|
||||||
value = value[key];
|
|
||||||
} else {
|
|
||||||
value = value[value.length - 1];
|
|
||||||
}
|
|
||||||
this.valueStack = {
|
|
||||||
value,
|
|
||||||
prev: this.valueStack
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
fragment = this.prepareAddition(fragment);
|
|
||||||
for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
|
|
||||||
this.jsonParseOffset--;
|
|
||||||
fragment = (this.stack[i] === STACK_OBJECT ? "{" : "[") + fragment;
|
|
||||||
}
|
|
||||||
this.parseAndAppend(fragment, false);
|
|
||||||
for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
|
|
||||||
this.valueStack = this.valueStack.prev;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.lastFlushDepth = this.flushDepth;
|
|
||||||
}
|
|
||||||
push(chunk) {
|
|
||||||
if (typeof chunk !== "string") {
|
|
||||||
if (this.pendingByteSeq !== null) {
|
|
||||||
const origRawChunk = chunk;
|
|
||||||
chunk = new Uint8Array(this.pendingByteSeq.length + origRawChunk.length);
|
|
||||||
chunk.set(this.pendingByteSeq);
|
|
||||||
chunk.set(origRawChunk, this.pendingByteSeq.length);
|
|
||||||
this.pendingByteSeq = null;
|
|
||||||
}
|
|
||||||
if (chunk[chunk.length - 1] > 127) {
|
|
||||||
for (let seqLength = 0; seqLength < chunk.length; seqLength++) {
|
|
||||||
const byte = chunk[chunk.length - 1 - seqLength];
|
|
||||||
if (byte >> 6 === 3) {
|
|
||||||
seqLength++;
|
|
||||||
if (seqLength !== 4 && byte >> 3 === 30 || seqLength !== 3 && byte >> 4 === 14 || seqLength !== 2 && byte >> 5 === 6) {
|
|
||||||
this.pendingByteSeq = chunk.slice(chunk.length - seqLength);
|
|
||||||
chunk = chunk.slice(0, -seqLength);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
chunk = decoder.decode(chunk);
|
|
||||||
}
|
|
||||||
const chunkLength = chunk.length;
|
|
||||||
let lastFlushPoint = 0;
|
|
||||||
let flushPoint = 0;
|
|
||||||
scan: for (let i = 0; i < chunkLength; i++) {
|
|
||||||
if (this.stateString) {
|
|
||||||
for (; i < chunkLength; i++) {
|
|
||||||
if (this.stateStringEscape) {
|
|
||||||
this.stateStringEscape = false;
|
|
||||||
} else {
|
|
||||||
switch (chunk.charCodeAt(i)) {
|
|
||||||
case 34:
|
|
||||||
this.stateString = false;
|
|
||||||
continue scan;
|
|
||||||
case 92:
|
|
||||||
this.stateStringEscape = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
switch (chunk.charCodeAt(i)) {
|
|
||||||
case 34:
|
|
||||||
this.stateString = true;
|
|
||||||
this.stateStringEscape = false;
|
|
||||||
break;
|
|
||||||
case 44:
|
|
||||||
flushPoint = i;
|
|
||||||
break;
|
|
||||||
case 123:
|
|
||||||
flushPoint = i + 1;
|
|
||||||
this.stack[this.flushDepth++] = STACK_OBJECT;
|
|
||||||
break;
|
|
||||||
case 91:
|
|
||||||
flushPoint = i + 1;
|
|
||||||
this.stack[this.flushDepth++] = STACK_ARRAY;
|
|
||||||
break;
|
|
||||||
case 93:
|
|
||||||
/* ] */
|
|
||||||
case 125:
|
|
||||||
flushPoint = i + 1;
|
|
||||||
this.flushDepth--;
|
|
||||||
if (this.flushDepth < this.lastFlushDepth) {
|
|
||||||
this.flush(chunk, lastFlushPoint, flushPoint);
|
|
||||||
lastFlushPoint = flushPoint;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case 9:
|
|
||||||
/* \t */
|
|
||||||
case 10:
|
|
||||||
/* \n */
|
|
||||||
case 13:
|
|
||||||
/* \r */
|
|
||||||
case 32:
|
|
||||||
if (lastFlushPoint === i) {
|
|
||||||
lastFlushPoint++;
|
|
||||||
}
|
|
||||||
if (flushPoint === i) {
|
|
||||||
flushPoint++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (flushPoint > lastFlushPoint) {
|
|
||||||
this.flush(chunk, lastFlushPoint, flushPoint);
|
|
||||||
}
|
|
||||||
if (flushPoint < chunkLength) {
|
|
||||||
if (this.pendingChunk !== null) {
|
|
||||||
this.pendingChunk += chunk;
|
|
||||||
} else {
|
|
||||||
this.pendingChunk = chunk.slice(flushPoint, chunkLength);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.chunkOffset += chunkLength;
|
|
||||||
}
|
|
||||||
finish() {
|
|
||||||
if (this.pendingChunk !== null) {
|
|
||||||
this.flush("", 0, 0);
|
|
||||||
this.pendingChunk = null;
|
|
||||||
}
|
|
||||||
return this.value;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// src/stringify-chunked.js
|
|
||||||
function encodeString(value) {
|
|
||||||
if (/[^\x20\x21\x23-\x5B\x5D-\uD799]/.test(value)) {
|
|
||||||
return JSON.stringify(value);
|
|
||||||
}
|
|
||||||
return '"' + value + '"';
|
|
||||||
}
|
|
||||||
function* stringifyChunked(value, ...args) {
|
|
||||||
const { replacer, getKeys, space, ...options } = normalizeStringifyOptions(...args);
|
|
||||||
const highWaterMark = Number(options.highWaterMark) || 16384;
|
|
||||||
const keyStrings = /* @__PURE__ */ new Map();
|
|
||||||
const stack = [];
|
|
||||||
const rootValue = { "": value };
|
|
||||||
let prevState = null;
|
|
||||||
let state = () => printEntry("", value);
|
|
||||||
let stateValue = rootValue;
|
|
||||||
let stateEmpty = true;
|
|
||||||
let stateKeys = [""];
|
|
||||||
let stateIndex = 0;
|
|
||||||
let buffer = "";
|
|
||||||
while (true) {
|
|
||||||
state();
|
|
||||||
if (buffer.length >= highWaterMark || prevState === null) {
|
|
||||||
yield buffer;
|
|
||||||
buffer = "";
|
|
||||||
if (prevState === null) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function printObject() {
|
|
||||||
if (stateIndex === 0) {
|
|
||||||
stateKeys = getKeys(stateValue);
|
|
||||||
buffer += "{";
|
|
||||||
}
|
|
||||||
if (stateIndex === stateKeys.length) {
|
|
||||||
buffer += space && !stateEmpty ? `
|
|
||||||
${space.repeat(stack.length - 1)}}` : "}";
|
|
||||||
popState();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const key = stateKeys[stateIndex++];
|
|
||||||
printEntry(key, stateValue[key]);
|
|
||||||
}
|
|
||||||
function printArray() {
|
|
||||||
if (stateIndex === 0) {
|
|
||||||
buffer += "[";
|
|
||||||
}
|
|
||||||
if (stateIndex === stateValue.length) {
|
|
||||||
buffer += space && !stateEmpty ? `
|
|
||||||
${space.repeat(stack.length - 1)}]` : "]";
|
|
||||||
popState();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
printEntry(stateIndex, stateValue[stateIndex++]);
|
|
||||||
}
|
|
||||||
function printEntryPrelude(key) {
|
|
||||||
if (stateEmpty) {
|
|
||||||
stateEmpty = false;
|
|
||||||
} else {
|
|
||||||
buffer += ",";
|
|
||||||
}
|
|
||||||
if (space && prevState !== null) {
|
|
||||||
buffer += `
|
|
||||||
${space.repeat(stack.length)}`;
|
|
||||||
}
|
|
||||||
if (state === printObject) {
|
|
||||||
let keyString = keyStrings.get(key);
|
|
||||||
if (keyString === void 0) {
|
|
||||||
keyStrings.set(key, keyString = encodeString(key) + (space ? ": " : ":"));
|
|
||||||
}
|
|
||||||
buffer += keyString;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function printEntry(key, value2) {
|
|
||||||
value2 = replaceValue(stateValue, key, value2, replacer);
|
|
||||||
if (value2 === null || typeof value2 !== "object") {
|
|
||||||
if (state !== printObject || value2 !== void 0) {
|
|
||||||
printEntryPrelude(key);
|
|
||||||
pushPrimitive(value2);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (stack.includes(value2)) {
|
|
||||||
throw new TypeError("Converting circular structure to JSON");
|
|
||||||
}
|
|
||||||
printEntryPrelude(key);
|
|
||||||
stack.push(value2);
|
|
||||||
pushState();
|
|
||||||
state = Array.isArray(value2) ? printArray : printObject;
|
|
||||||
stateValue = value2;
|
|
||||||
stateEmpty = true;
|
|
||||||
stateIndex = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function pushPrimitive(value2) {
|
|
||||||
switch (typeof value2) {
|
|
||||||
case "string":
|
|
||||||
buffer += encodeString(value2);
|
|
||||||
break;
|
|
||||||
case "number":
|
|
||||||
buffer += Number.isFinite(value2) ? String(value2) : "null";
|
|
||||||
break;
|
|
||||||
case "boolean":
|
|
||||||
buffer += value2 ? "true" : "false";
|
|
||||||
break;
|
|
||||||
case "undefined":
|
|
||||||
case "object":
|
|
||||||
buffer += "null";
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new TypeError(`Do not know how to serialize a ${value2.constructor?.name || typeof value2}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function pushState() {
|
|
||||||
prevState = {
|
|
||||||
keys: stateKeys,
|
|
||||||
index: stateIndex,
|
|
||||||
prev: prevState
|
|
||||||
};
|
|
||||||
}
|
|
||||||
function popState() {
|
|
||||||
stack.pop();
|
|
||||||
const value2 = stack.length > 0 ? stack[stack.length - 1] : rootValue;
|
|
||||||
state = Array.isArray(value2) ? printArray : printObject;
|
|
||||||
stateValue = value2;
|
|
||||||
stateEmpty = false;
|
|
||||||
stateKeys = prevState.keys;
|
|
||||||
stateIndex = prevState.index;
|
|
||||||
prevState = prevState.prev;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// src/stringify-info.js
|
|
||||||
var hasOwn = typeof Object.hasOwn === "function" ? Object.hasOwn : (object, key) => Object.hasOwnProperty.call(object, key);
|
|
||||||
var escapableCharCodeSubstitution = {
|
|
||||||
// JSON Single Character Escape Sequences
|
|
||||||
8: "\\b",
|
|
||||||
9: "\\t",
|
|
||||||
10: "\\n",
|
|
||||||
12: "\\f",
|
|
||||||
13: "\\r",
|
|
||||||
34: '\\"',
|
|
||||||
92: "\\\\"
|
|
||||||
};
|
|
||||||
var charLength2048 = Uint8Array.from({ length: 2048 }, (_, code) => {
|
|
||||||
if (hasOwn(escapableCharCodeSubstitution, code)) {
|
|
||||||
return 2;
|
|
||||||
}
|
|
||||||
if (code < 32) {
|
|
||||||
return 6;
|
|
||||||
}
|
|
||||||
return code < 128 ? 1 : 2;
|
|
||||||
});
|
|
||||||
function isLeadingSurrogate(code) {
|
|
||||||
return code >= 55296 && code <= 56319;
|
|
||||||
}
|
|
||||||
function isTrailingSurrogate(code) {
|
|
||||||
return code >= 56320 && code <= 57343;
|
|
||||||
}
|
|
||||||
function stringLength(str) {
|
|
||||||
if (!/[^\x20\x21\x23-\x5B\x5D-\x7F]/.test(str)) {
|
|
||||||
return str.length + 2;
|
|
||||||
}
|
|
||||||
let len = 0;
|
|
||||||
let prevLeadingSurrogate = false;
|
|
||||||
for (let i = 0; i < str.length; i++) {
|
|
||||||
const code = str.charCodeAt(i);
|
|
||||||
if (code < 2048) {
|
|
||||||
len += charLength2048[code];
|
|
||||||
} else if (isLeadingSurrogate(code)) {
|
|
||||||
len += 6;
|
|
||||||
prevLeadingSurrogate = true;
|
|
||||||
continue;
|
|
||||||
} else if (isTrailingSurrogate(code)) {
|
|
||||||
len = prevLeadingSurrogate ? len - 2 : len + 6;
|
|
||||||
} else {
|
|
||||||
len += 3;
|
|
||||||
}
|
|
||||||
prevLeadingSurrogate = false;
|
|
||||||
}
|
|
||||||
return len + 2;
|
|
||||||
}
|
|
||||||
function intLength(num) {
|
|
||||||
let len = 0;
|
|
||||||
if (num < 0) {
|
|
||||||
len = 1;
|
|
||||||
num = -num;
|
|
||||||
}
|
|
||||||
if (num >= 1e9) {
|
|
||||||
len += 9;
|
|
||||||
num = (num - num % 1e9) / 1e9;
|
|
||||||
}
|
|
||||||
if (num >= 1e4) {
|
|
||||||
if (num >= 1e6) {
|
|
||||||
return len + (num >= 1e8 ? 9 : num >= 1e7 ? 8 : 7);
|
|
||||||
}
|
|
||||||
return len + (num >= 1e5 ? 6 : 5);
|
|
||||||
}
|
|
||||||
return len + (num >= 100 ? num >= 1e3 ? 4 : 3 : num >= 10 ? 2 : 1);
|
|
||||||
}
|
|
||||||
function primitiveLength(value) {
|
|
||||||
switch (typeof value) {
|
|
||||||
case "string":
|
|
||||||
return stringLength(value);
|
|
||||||
case "number":
|
|
||||||
return Number.isFinite(value) ? Number.isInteger(value) ? intLength(value) : String(value).length : 4;
|
|
||||||
case "boolean":
|
|
||||||
return value ? 4 : 5;
|
|
||||||
case "undefined":
|
|
||||||
case "object":
|
|
||||||
return 4;
|
|
||||||
/* null */
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function stringifyInfo(value, ...args) {
|
|
||||||
const { replacer, getKeys, ...options } = normalizeStringifyOptions(...args);
|
|
||||||
const continueOnCircular = Boolean(options.continueOnCircular);
|
|
||||||
const space = options.space?.length || 0;
|
|
||||||
const keysLength = /* @__PURE__ */ new Map();
|
|
||||||
const visited = /* @__PURE__ */ new Map();
|
|
||||||
const circular = /* @__PURE__ */ new Set();
|
|
||||||
const stack = [];
|
|
||||||
const root = { "": value };
|
|
||||||
let stop = false;
|
|
||||||
let bytes = 0;
|
|
||||||
let spaceBytes = 0;
|
|
||||||
let objects = 0;
|
|
||||||
walk(root, "", value);
|
|
||||||
if (bytes === 0) {
|
|
||||||
bytes += 9;
|
|
||||||
}
|
|
||||||
return {
|
|
||||||
bytes: isNaN(bytes) ? Infinity : bytes + spaceBytes,
|
|
||||||
spaceBytes: space > 0 && isNaN(bytes) ? Infinity : spaceBytes,
|
|
||||||
circular: [...circular]
|
|
||||||
};
|
|
||||||
function walk(holder, key, value2) {
|
|
||||||
if (stop) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
value2 = replaceValue(holder, key, value2, replacer);
|
|
||||||
if (value2 === null || typeof value2 !== "object") {
|
|
||||||
if (value2 !== void 0 || Array.isArray(holder)) {
|
|
||||||
bytes += primitiveLength(value2);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (stack.includes(value2)) {
|
|
||||||
circular.add(value2);
|
|
||||||
bytes += 4;
|
|
||||||
if (!continueOnCircular) {
|
|
||||||
stop = true;
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (visited.has(value2)) {
|
|
||||||
bytes += visited.get(value2);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
objects++;
|
|
||||||
const prevObjects = objects;
|
|
||||||
const valueBytes = bytes;
|
|
||||||
let valueLength = 0;
|
|
||||||
stack.push(value2);
|
|
||||||
if (Array.isArray(value2)) {
|
|
||||||
valueLength = value2.length;
|
|
||||||
for (let i = 0; i < valueLength; i++) {
|
|
||||||
walk(value2, i, value2[i]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
let prevLength = bytes;
|
|
||||||
for (const key2 of getKeys(value2)) {
|
|
||||||
walk(value2, key2, value2[key2]);
|
|
||||||
if (prevLength !== bytes) {
|
|
||||||
let keyLen = keysLength.get(key2);
|
|
||||||
if (keyLen === void 0) {
|
|
||||||
keysLength.set(key2, keyLen = stringLength(key2) + 1);
|
|
||||||
}
|
|
||||||
bytes += keyLen;
|
|
||||||
valueLength++;
|
|
||||||
prevLength = bytes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bytes += valueLength === 0 ? 2 : 1 + valueLength;
|
|
||||||
if (space > 0 && valueLength > 0) {
|
|
||||||
spaceBytes += // a space between ":" and a value for each object entry
|
|
||||||
(Array.isArray(value2) ? 0 : valueLength) + // the formula results from folding the following components:
|
|
||||||
// - for each key-value or element: ident + newline
|
|
||||||
// (1 + stack.length * space) * valueLength
|
|
||||||
// - ident (one space less) before "}" or "]" + newline
|
|
||||||
// (stack.length - 1) * space + 1
|
|
||||||
(1 + stack.length * space) * (valueLength + 1) - space;
|
|
||||||
}
|
|
||||||
stack.pop();
|
|
||||||
if (prevObjects !== objects) {
|
|
||||||
visited.set(value2, bytes - valueBytes);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// src/web-streams.js
|
|
||||||
function parseFromWebStream(stream) {
|
|
||||||
return parseChunked(isIterable(stream) ? stream : async function* () {
|
|
||||||
const reader = stream.getReader();
|
|
||||||
try {
|
|
||||||
while (true) {
|
|
||||||
const { value, done } = await reader.read();
|
|
||||||
if (done) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
yield value;
|
|
||||||
}
|
|
||||||
} finally {
|
|
||||||
reader.releaseLock();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
function createStringifyWebStream(value, replacer, space) {
|
|
||||||
if (typeof ReadableStream.from === "function") {
|
|
||||||
return ReadableStream.from(stringifyChunked(value, replacer, space));
|
|
||||||
}
|
|
||||||
return new ReadableStream({
|
|
||||||
start() {
|
|
||||||
this.generator = stringifyChunked(value, replacer, space);
|
|
||||||
},
|
|
||||||
pull(controller) {
|
|
||||||
const { value: value2, done } = this.generator.next();
|
|
||||||
if (done) {
|
|
||||||
controller.close();
|
|
||||||
} else {
|
|
||||||
controller.enqueue(value2);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
cancel() {
|
|
||||||
this.generator = null;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return __toCommonJS(src_exports);
|
|
||||||
})();
|
|
||||||
|
|
||||||
return exports;
|
|
||||||
})));
|
|
13
node_modules/@discoveryjs/json-ext/dist/json-ext.min.js
generated
vendored
13
node_modules/@discoveryjs/json-ext/dist/json-ext.min.js
generated
vendored
File diff suppressed because one or more lines are too long
7
node_modules/@discoveryjs/json-ext/dist/json-ext.min.js.map
generated
vendored
7
node_modules/@discoveryjs/json-ext/dist/json-ext.min.js.map
generated
vendored
File diff suppressed because one or more lines are too long
3
node_modules/@discoveryjs/json-ext/dist/package.json
generated
vendored
3
node_modules/@discoveryjs/json-ext/dist/package.json
generated
vendored
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"type": "commonjs"
|
|
||||||
}
|
|
37
node_modules/@discoveryjs/json-ext/index.d.ts
generated
vendored
37
node_modules/@discoveryjs/json-ext/index.d.ts
generated
vendored
@ -1,37 +0,0 @@
|
|||||||
declare module '@discoveryjs/json-ext' {
|
|
||||||
type Chunk = string | Uint8Array | Buffer;
|
|
||||||
type Replacer =
|
|
||||||
| ((this: any, key: string, value: any) => any)
|
|
||||||
| (string | number)[]
|
|
||||||
| null;
|
|
||||||
type Space = string | number | null;
|
|
||||||
type StringifyOptions = {
|
|
||||||
replacer?: Replacer;
|
|
||||||
space?: Space;
|
|
||||||
highWaterMark?: number;
|
|
||||||
};
|
|
||||||
type StringifyInfoOptions = {
|
|
||||||
replacer?: Replacer;
|
|
||||||
space?: Space;
|
|
||||||
continueOnCircular?: boolean;
|
|
||||||
}
|
|
||||||
type StringifyInfoResult = {
|
|
||||||
bytes: number;
|
|
||||||
spaceBytes: number;
|
|
||||||
circular: object[];
|
|
||||||
};
|
|
||||||
|
|
||||||
export function parseChunked(input: Iterable<Chunk> | AsyncIterable<Chunk>): Promise<any>;
|
|
||||||
export function parseChunked(input: () => (Iterable<Chunk> | AsyncIterable<Chunk>)): Promise<any>;
|
|
||||||
|
|
||||||
export function stringifyChunked(value: any, replacer?: Replacer, space?: Space): Generator<string>;
|
|
||||||
export function stringifyChunked(value: any, options: StringifyOptions): Generator<string>;
|
|
||||||
|
|
||||||
export function stringifyInfo(value: any, replacer?: Replacer, space?: Space): StringifyInfoResult;
|
|
||||||
export function stringifyInfo(value: any, options?: StringifyInfoOptions): StringifyInfoResult;
|
|
||||||
|
|
||||||
// Web streams
|
|
||||||
export function parseFromWebStream(stream: ReadableStream<Chunk>): Promise<any>;
|
|
||||||
export function createStringifyWebStream(value: any, replacer?: Replacer, space?: Space): ReadableStream<string>;
|
|
||||||
export function createStringifyWebStream(value: any, options: StringifyOptions): ReadableStream<string>;
|
|
||||||
}
|
|
68
node_modules/@discoveryjs/json-ext/package.json
generated
vendored
68
node_modules/@discoveryjs/json-ext/package.json
generated
vendored
@ -1,68 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "@discoveryjs/json-ext",
|
|
||||||
"version": "0.6.3",
|
|
||||||
"description": "A set of utilities that extend the use of JSON",
|
|
||||||
"keywords": [
|
|
||||||
"json",
|
|
||||||
"utils",
|
|
||||||
"stream",
|
|
||||||
"async",
|
|
||||||
"promise",
|
|
||||||
"stringify",
|
|
||||||
"info"
|
|
||||||
],
|
|
||||||
"author": "Roman Dvornov <rdvornov@gmail.com> (https://github.com/lahmatiy)",
|
|
||||||
"license": "MIT",
|
|
||||||
"repository": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "git+https://github.com/discoveryjs/json-ext.git"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14.17.0"
|
|
||||||
},
|
|
||||||
"type": "module",
|
|
||||||
"main": "./cjs/index.cjs",
|
|
||||||
"module": "./src/index.js",
|
|
||||||
"types": "./index.d.ts",
|
|
||||||
"exports": {
|
|
||||||
".": {
|
|
||||||
"types": "./index.d.ts",
|
|
||||||
"require": "./cjs/index.cjs",
|
|
||||||
"import": "./src/index.js"
|
|
||||||
},
|
|
||||||
"./dist/*": "./dist/*",
|
|
||||||
"./package.json": "./package.json"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"test": "npm run test:src",
|
|
||||||
"lint": "eslint src",
|
|
||||||
"lint-and-test": "npm run lint && npm test",
|
|
||||||
"bundle": "node scripts/bundle.js",
|
|
||||||
"transpile": "node scripts/transpile.cjs",
|
|
||||||
"test:all": "npm run test:src && npm run test:cjs && npm run test:dist && npm run test:e2e",
|
|
||||||
"test:src": "mocha --reporter progress src/*.test.js",
|
|
||||||
"test:cjs": "mocha --reporter progress cjs/*.test.cjs",
|
|
||||||
"test:e2e": "mocha --reporter progress test-e2e",
|
|
||||||
"test:dist": "mocha --reporter progress dist/test",
|
|
||||||
"test:deno": "node scripts/deno-adapt-test.js && mocha --reporter progress deno-tests/*.test.js",
|
|
||||||
"bundle-and-test": "npm run bundle && npm run test:dist",
|
|
||||||
"coverage": "c8 --reporter=lcovonly npm test",
|
|
||||||
"prepublishOnly": "npm run lint && npm run bundle && npm run transpile && npm run test:all"
|
|
||||||
},
|
|
||||||
"devDependencies": {
|
|
||||||
"c8": "^7.10.0",
|
|
||||||
"chalk": "^4.1.0",
|
|
||||||
"esbuild": "^0.24.0",
|
|
||||||
"eslint": "^8.57.0",
|
|
||||||
"mocha": "^9.2.2",
|
|
||||||
"rollup": "^2.79.2"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"cjs",
|
|
||||||
"!cjs/*{.test,-cases}.cjs",
|
|
||||||
"dist",
|
|
||||||
"src",
|
|
||||||
"!src/*{.test,-cases}.js",
|
|
||||||
"index.d.ts"
|
|
||||||
]
|
|
||||||
}
|
|
4
node_modules/@discoveryjs/json-ext/src/index.js
generated
vendored
4
node_modules/@discoveryjs/json-ext/src/index.js
generated
vendored
@ -1,4 +0,0 @@
|
|||||||
export { parseChunked } from './parse-chunked.js';
|
|
||||||
export { stringifyChunked } from './stringify-chunked.js';
|
|
||||||
export { stringifyInfo } from './stringify-info.js';
|
|
||||||
export { createStringifyWebStream, parseFromWebStream } from './web-streams.js';
|
|
352
node_modules/@discoveryjs/json-ext/src/parse-chunked.js
generated
vendored
352
node_modules/@discoveryjs/json-ext/src/parse-chunked.js
generated
vendored
@ -1,352 +0,0 @@
|
|||||||
import { isIterable } from './utils.js';
|
|
||||||
|
|
||||||
const STACK_OBJECT = 1;
|
|
||||||
const STACK_ARRAY = 2;
|
|
||||||
const decoder = new TextDecoder();
|
|
||||||
|
|
||||||
function adjustPosition(error, parser) {
|
|
||||||
if (error.name === 'SyntaxError' && parser.jsonParseOffset) {
|
|
||||||
error.message = error.message.replace(/at position (\d+)/, (_, pos) =>
|
|
||||||
'at position ' + (Number(pos) + parser.jsonParseOffset)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
function append(array, elements) {
|
|
||||||
// Note: Avoid to use array.push(...elements) since it may lead to
|
|
||||||
// "RangeError: Maximum call stack size exceeded" for a long arrays
|
|
||||||
const initialLength = array.length;
|
|
||||||
array.length += elements.length;
|
|
||||||
|
|
||||||
for (let i = 0; i < elements.length; i++) {
|
|
||||||
array[initialLength + i] = elements[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function parseChunked(chunkEmitter) {
|
|
||||||
const iterable = typeof chunkEmitter === 'function'
|
|
||||||
? chunkEmitter()
|
|
||||||
: chunkEmitter;
|
|
||||||
|
|
||||||
if (isIterable(iterable)) {
|
|
||||||
let parser = new ChunkParser();
|
|
||||||
|
|
||||||
try {
|
|
||||||
for await (const chunk of iterable) {
|
|
||||||
if (typeof chunk !== 'string' && !ArrayBuffer.isView(chunk)) {
|
|
||||||
throw new TypeError('Invalid chunk: Expected string, TypedArray or Buffer');
|
|
||||||
}
|
|
||||||
|
|
||||||
parser.push(chunk);
|
|
||||||
}
|
|
||||||
|
|
||||||
return parser.finish();
|
|
||||||
} catch (e) {
|
|
||||||
throw adjustPosition(e, parser);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new TypeError(
|
|
||||||
'Invalid chunk emitter: Expected an Iterable, AsyncIterable, generator, ' +
|
|
||||||
'async generator, or a function returning an Iterable or AsyncIterable'
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
class ChunkParser {
|
|
||||||
constructor() {
|
|
||||||
this.value = undefined;
|
|
||||||
this.valueStack = null;
|
|
||||||
|
|
||||||
this.stack = new Array(100);
|
|
||||||
this.lastFlushDepth = 0;
|
|
||||||
this.flushDepth = 0;
|
|
||||||
this.stateString = false;
|
|
||||||
this.stateStringEscape = false;
|
|
||||||
this.pendingByteSeq = null;
|
|
||||||
this.pendingChunk = null;
|
|
||||||
this.chunkOffset = 0;
|
|
||||||
this.jsonParseOffset = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
parseAndAppend(fragment, wrap) {
|
|
||||||
// Append new entries or elements
|
|
||||||
if (this.stack[this.lastFlushDepth - 1] === STACK_OBJECT) {
|
|
||||||
if (wrap) {
|
|
||||||
this.jsonParseOffset--;
|
|
||||||
fragment = '{' + fragment + '}';
|
|
||||||
}
|
|
||||||
|
|
||||||
Object.assign(this.valueStack.value, JSON.parse(fragment));
|
|
||||||
} else {
|
|
||||||
if (wrap) {
|
|
||||||
this.jsonParseOffset--;
|
|
||||||
fragment = '[' + fragment + ']';
|
|
||||||
}
|
|
||||||
|
|
||||||
append(this.valueStack.value, JSON.parse(fragment));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
prepareAddition(fragment) {
|
|
||||||
const { value } = this.valueStack;
|
|
||||||
const expectComma = Array.isArray(value)
|
|
||||||
? value.length !== 0
|
|
||||||
: Object.keys(value).length !== 0;
|
|
||||||
|
|
||||||
if (expectComma) {
|
|
||||||
// Skip a comma at the beginning of fragment, otherwise it would
|
|
||||||
// fail to parse
|
|
||||||
if (fragment[0] === ',') {
|
|
||||||
this.jsonParseOffset++;
|
|
||||||
return fragment.slice(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// When value (an object or array) is not empty and a fragment
|
|
||||||
// doesn't start with a comma, a single valid fragment starting
|
|
||||||
// is a closing bracket. If it's not, a prefix is adding to fail
|
|
||||||
// parsing. Otherwise, the sequence of chunks can be successfully
|
|
||||||
// parsed, although it should not, e.g. ["[{}", "{}]"]
|
|
||||||
if (fragment[0] !== '}' && fragment[0] !== ']') {
|
|
||||||
this.jsonParseOffset -= 3;
|
|
||||||
return '[[]' + fragment;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return fragment;
|
|
||||||
}
|
|
||||||
|
|
||||||
flush(chunk, start, end) {
|
|
||||||
let fragment = chunk.slice(start, end);
|
|
||||||
|
|
||||||
// Save position correction an error in JSON.parse() if any
|
|
||||||
this.jsonParseOffset = this.chunkOffset + start;
|
|
||||||
|
|
||||||
// Prepend pending chunk if any
|
|
||||||
if (this.pendingChunk !== null) {
|
|
||||||
fragment = this.pendingChunk + fragment;
|
|
||||||
this.jsonParseOffset -= this.pendingChunk.length;
|
|
||||||
this.pendingChunk = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.flushDepth === this.lastFlushDepth) {
|
|
||||||
// Depth didn't changed, so it's a root value or entry/element set
|
|
||||||
if (this.flushDepth > 0) {
|
|
||||||
this.parseAndAppend(this.prepareAddition(fragment), true);
|
|
||||||
} else {
|
|
||||||
// That's an entire value on a top level
|
|
||||||
this.value = JSON.parse(fragment);
|
|
||||||
this.valueStack = {
|
|
||||||
value: this.value,
|
|
||||||
prev: null
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} else if (this.flushDepth > this.lastFlushDepth) {
|
|
||||||
// Add missed closing brackets/parentheses
|
|
||||||
for (let i = this.flushDepth - 1; i >= this.lastFlushDepth; i--) {
|
|
||||||
fragment += this.stack[i] === STACK_OBJECT ? '}' : ']';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.lastFlushDepth === 0) {
|
|
||||||
// That's a root value
|
|
||||||
this.value = JSON.parse(fragment);
|
|
||||||
this.valueStack = {
|
|
||||||
value: this.value,
|
|
||||||
prev: null
|
|
||||||
};
|
|
||||||
} else {
|
|
||||||
this.parseAndAppend(this.prepareAddition(fragment), true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Move down to the depths to the last object/array, which is current now
|
|
||||||
for (let i = this.lastFlushDepth || 1; i < this.flushDepth; i++) {
|
|
||||||
let value = this.valueStack.value;
|
|
||||||
|
|
||||||
if (this.stack[i - 1] === STACK_OBJECT) {
|
|
||||||
// find last entry
|
|
||||||
let key;
|
|
||||||
// eslint-disable-next-line curly
|
|
||||||
for (key in value);
|
|
||||||
value = value[key];
|
|
||||||
} else {
|
|
||||||
// last element
|
|
||||||
value = value[value.length - 1];
|
|
||||||
}
|
|
||||||
|
|
||||||
this.valueStack = {
|
|
||||||
value,
|
|
||||||
prev: this.valueStack
|
|
||||||
};
|
|
||||||
}
|
|
||||||
} else /* this.flushDepth < this.lastFlushDepth */ {
|
|
||||||
fragment = this.prepareAddition(fragment);
|
|
||||||
|
|
||||||
// Add missed opening brackets/parentheses
|
|
||||||
for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
|
|
||||||
this.jsonParseOffset--;
|
|
||||||
fragment = (this.stack[i] === STACK_OBJECT ? '{' : '[') + fragment;
|
|
||||||
}
|
|
||||||
|
|
||||||
this.parseAndAppend(fragment, false);
|
|
||||||
|
|
||||||
for (let i = this.lastFlushDepth - 1; i >= this.flushDepth; i--) {
|
|
||||||
this.valueStack = this.valueStack.prev;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.lastFlushDepth = this.flushDepth;
|
|
||||||
}
|
|
||||||
|
|
||||||
push(chunk) {
|
|
||||||
if (typeof chunk !== 'string') {
|
|
||||||
// Suppose chunk is Buffer or Uint8Array
|
|
||||||
|
|
||||||
// Prepend uncompleted byte sequence if any
|
|
||||||
if (this.pendingByteSeq !== null) {
|
|
||||||
const origRawChunk = chunk;
|
|
||||||
chunk = new Uint8Array(this.pendingByteSeq.length + origRawChunk.length);
|
|
||||||
chunk.set(this.pendingByteSeq);
|
|
||||||
chunk.set(origRawChunk, this.pendingByteSeq.length);
|
|
||||||
this.pendingByteSeq = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// In case Buffer/Uint8Array, an input is encoded in UTF8
|
|
||||||
// Seek for parts of uncompleted UTF8 symbol on the ending
|
|
||||||
// This makes sense only if we expect more chunks and last char is not multi-bytes
|
|
||||||
if (chunk[chunk.length - 1] > 127) {
|
|
||||||
for (let seqLength = 0; seqLength < chunk.length; seqLength++) {
|
|
||||||
const byte = chunk[chunk.length - 1 - seqLength];
|
|
||||||
|
|
||||||
// 10xxxxxx - 2nd, 3rd or 4th byte
|
|
||||||
// 110xxxxx – first byte of 2-byte sequence
|
|
||||||
// 1110xxxx - first byte of 3-byte sequence
|
|
||||||
// 11110xxx - first byte of 4-byte sequence
|
|
||||||
if (byte >> 6 === 3) {
|
|
||||||
seqLength++;
|
|
||||||
|
|
||||||
// If the sequence is really incomplete, then preserve it
|
|
||||||
// for the future chunk and cut off it from the current chunk
|
|
||||||
if ((seqLength !== 4 && byte >> 3 === 0b11110) ||
|
|
||||||
(seqLength !== 3 && byte >> 4 === 0b1110) ||
|
|
||||||
(seqLength !== 2 && byte >> 5 === 0b110)) {
|
|
||||||
this.pendingByteSeq = chunk.slice(chunk.length - seqLength);
|
|
||||||
chunk = chunk.slice(0, -seqLength);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert chunk to a string, since single decode per chunk
|
|
||||||
// is much effective than decode multiple small substrings
|
|
||||||
chunk = decoder.decode(chunk);
|
|
||||||
}
|
|
||||||
|
|
||||||
const chunkLength = chunk.length;
|
|
||||||
let lastFlushPoint = 0;
|
|
||||||
let flushPoint = 0;
|
|
||||||
|
|
||||||
// Main scan loop
|
|
||||||
scan: for (let i = 0; i < chunkLength; i++) {
|
|
||||||
if (this.stateString) {
|
|
||||||
for (; i < chunkLength; i++) {
|
|
||||||
if (this.stateStringEscape) {
|
|
||||||
this.stateStringEscape = false;
|
|
||||||
} else {
|
|
||||||
switch (chunk.charCodeAt(i)) {
|
|
||||||
case 0x22: /* " */
|
|
||||||
this.stateString = false;
|
|
||||||
continue scan;
|
|
||||||
|
|
||||||
case 0x5C: /* \ */
|
|
||||||
this.stateStringEscape = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (chunk.charCodeAt(i)) {
|
|
||||||
case 0x22: /* " */
|
|
||||||
this.stateString = true;
|
|
||||||
this.stateStringEscape = false;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x2C: /* , */
|
|
||||||
flushPoint = i;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x7B: /* { */
|
|
||||||
// Open an object
|
|
||||||
flushPoint = i + 1;
|
|
||||||
this.stack[this.flushDepth++] = STACK_OBJECT;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x5B: /* [ */
|
|
||||||
// Open an array
|
|
||||||
flushPoint = i + 1;
|
|
||||||
this.stack[this.flushDepth++] = STACK_ARRAY;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x5D: /* ] */
|
|
||||||
case 0x7D: /* } */
|
|
||||||
// Close an object or array
|
|
||||||
flushPoint = i + 1;
|
|
||||||
this.flushDepth--;
|
|
||||||
|
|
||||||
if (this.flushDepth < this.lastFlushDepth) {
|
|
||||||
this.flush(chunk, lastFlushPoint, flushPoint);
|
|
||||||
lastFlushPoint = flushPoint;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 0x09: /* \t */
|
|
||||||
case 0x0A: /* \n */
|
|
||||||
case 0x0D: /* \r */
|
|
||||||
case 0x20: /* space */
|
|
||||||
// Move points forward when they points on current position and it's a whitespace
|
|
||||||
if (lastFlushPoint === i) {
|
|
||||||
lastFlushPoint++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flushPoint === i) {
|
|
||||||
flushPoint++;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flushPoint > lastFlushPoint) {
|
|
||||||
this.flush(chunk, lastFlushPoint, flushPoint);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Produce pendingChunk if something left
|
|
||||||
if (flushPoint < chunkLength) {
|
|
||||||
if (this.pendingChunk !== null) {
|
|
||||||
// When there is already a pending chunk then no flush happened,
|
|
||||||
// appending entire chunk to pending one
|
|
||||||
this.pendingChunk += chunk;
|
|
||||||
} else {
|
|
||||||
// Create a pending chunk, it will start with non-whitespace since
|
|
||||||
// flushPoint was moved forward away from whitespaces on scan
|
|
||||||
this.pendingChunk = chunk.slice(flushPoint, chunkLength);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.chunkOffset += chunkLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
finish() {
|
|
||||||
if (this.pendingChunk !== null) {
|
|
||||||
this.flush('', 0, 0);
|
|
||||||
this.pendingChunk = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return this.value;
|
|
||||||
}
|
|
||||||
};
|
|
171
node_modules/@discoveryjs/json-ext/src/stringify-chunked.js
generated
vendored
171
node_modules/@discoveryjs/json-ext/src/stringify-chunked.js
generated
vendored
@ -1,171 +0,0 @@
|
|||||||
import { normalizeStringifyOptions, replaceValue } from './utils.js';
|
|
||||||
|
|
||||||
function encodeString(value) {
|
|
||||||
if (/[^\x20\x21\x23-\x5B\x5D-\uD799]/.test(value)) { // [^\x20-\uD799]|[\x22\x5c]
|
|
||||||
return JSON.stringify(value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return '"' + value + '"';
|
|
||||||
}
|
|
||||||
|
|
||||||
export function* stringifyChunked(value, ...args) {
|
|
||||||
const { replacer, getKeys, space, ...options } = normalizeStringifyOptions(...args);
|
|
||||||
const highWaterMark = Number(options.highWaterMark) || 0x4000; // 16kb by default
|
|
||||||
|
|
||||||
const keyStrings = new Map();
|
|
||||||
const stack = [];
|
|
||||||
const rootValue = { '': value };
|
|
||||||
let prevState = null;
|
|
||||||
let state = () => printEntry('', value);
|
|
||||||
let stateValue = rootValue;
|
|
||||||
let stateEmpty = true;
|
|
||||||
let stateKeys = [''];
|
|
||||||
let stateIndex = 0;
|
|
||||||
let buffer = '';
|
|
||||||
|
|
||||||
while (true) {
|
|
||||||
state();
|
|
||||||
|
|
||||||
if (buffer.length >= highWaterMark || prevState === null) {
|
|
||||||
// flush buffer
|
|
||||||
yield buffer;
|
|
||||||
buffer = '';
|
|
||||||
|
|
||||||
if (prevState === null) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function printObject() {
|
|
||||||
if (stateIndex === 0) {
|
|
||||||
stateKeys = getKeys(stateValue);
|
|
||||||
buffer += '{';
|
|
||||||
}
|
|
||||||
|
|
||||||
// when no keys left
|
|
||||||
if (stateIndex === stateKeys.length) {
|
|
||||||
buffer += space && !stateEmpty
|
|
||||||
? `\n${space.repeat(stack.length - 1)}}`
|
|
||||||
: '}';
|
|
||||||
|
|
||||||
popState();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const key = stateKeys[stateIndex++];
|
|
||||||
printEntry(key, stateValue[key]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function printArray() {
|
|
||||||
if (stateIndex === 0) {
|
|
||||||
buffer += '[';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (stateIndex === stateValue.length) {
|
|
||||||
buffer += space && !stateEmpty
|
|
||||||
? `\n${space.repeat(stack.length - 1)}]`
|
|
||||||
: ']';
|
|
||||||
|
|
||||||
popState();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
printEntry(stateIndex, stateValue[stateIndex++]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function printEntryPrelude(key) {
|
|
||||||
if (stateEmpty) {
|
|
||||||
stateEmpty = false;
|
|
||||||
} else {
|
|
||||||
buffer += ',';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (space && prevState !== null) {
|
|
||||||
buffer += `\n${space.repeat(stack.length)}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (state === printObject) {
|
|
||||||
let keyString = keyStrings.get(key);
|
|
||||||
|
|
||||||
if (keyString === undefined) {
|
|
||||||
keyStrings.set(key, keyString = encodeString(key) + (space ? ': ' : ':'));
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer += keyString;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function printEntry(key, value) {
|
|
||||||
value = replaceValue(stateValue, key, value, replacer);
|
|
||||||
|
|
||||||
if (value === null || typeof value !== 'object') {
|
|
||||||
// primitive
|
|
||||||
if (state !== printObject || value !== undefined) {
|
|
||||||
printEntryPrelude(key);
|
|
||||||
pushPrimitive(value);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// If the visited set does not change after adding a value, then it is already in the set
|
|
||||||
if (stack.includes(value)) {
|
|
||||||
throw new TypeError('Converting circular structure to JSON');
|
|
||||||
}
|
|
||||||
|
|
||||||
printEntryPrelude(key);
|
|
||||||
stack.push(value);
|
|
||||||
|
|
||||||
pushState();
|
|
||||||
state = Array.isArray(value) ? printArray : printObject;
|
|
||||||
stateValue = value;
|
|
||||||
stateEmpty = true;
|
|
||||||
stateIndex = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function pushPrimitive(value) {
|
|
||||||
switch (typeof value) {
|
|
||||||
case 'string':
|
|
||||||
buffer += encodeString(value);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'number':
|
|
||||||
buffer += Number.isFinite(value) ? String(value) : 'null';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'boolean':
|
|
||||||
buffer += value ? 'true' : 'false';
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'undefined':
|
|
||||||
case 'object': // typeof null === 'object'
|
|
||||||
buffer += 'null';
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new TypeError(`Do not know how to serialize a ${value.constructor?.name || typeof value}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function pushState() {
|
|
||||||
prevState = {
|
|
||||||
keys: stateKeys,
|
|
||||||
index: stateIndex,
|
|
||||||
prev: prevState
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
function popState() {
|
|
||||||
stack.pop();
|
|
||||||
const value = stack.length > 0 ? stack[stack.length - 1] : rootValue;
|
|
||||||
|
|
||||||
// restore state
|
|
||||||
state = Array.isArray(value) ? printArray : printObject;
|
|
||||||
stateValue = value;
|
|
||||||
stateEmpty = false;
|
|
||||||
stateKeys = prevState.keys;
|
|
||||||
stateIndex = prevState.index;
|
|
||||||
|
|
||||||
// pop state
|
|
||||||
prevState = prevState.prev;
|
|
||||||
}
|
|
||||||
};
|
|
247
node_modules/@discoveryjs/json-ext/src/stringify-info.js
generated
vendored
247
node_modules/@discoveryjs/json-ext/src/stringify-info.js
generated
vendored
@ -1,247 +0,0 @@
|
|||||||
import { normalizeStringifyOptions, replaceValue } from './utils.js';
|
|
||||||
|
|
||||||
const hasOwn = typeof Object.hasOwn === 'function'
|
|
||||||
? Object.hasOwn
|
|
||||||
: (object, key) => Object.hasOwnProperty.call(object, key);
|
|
||||||
|
|
||||||
// https://tc39.es/ecma262/#table-json-single-character-escapes
|
|
||||||
const escapableCharCodeSubstitution = { // JSON Single Character Escape Sequences
|
|
||||||
0x08: '\\b',
|
|
||||||
0x09: '\\t',
|
|
||||||
0x0a: '\\n',
|