root commited on
Commit ·
3af1079
1
Parent(s): cc9f3a7
update spaces
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .env +9 -0
- node_modules/.bin/mime +1 -0
- node_modules/.bin/mkdirp +1 -0
- node_modules/.bin/nodemon +1 -0
- node_modules/.bin/nodetouch +1 -0
- node_modules/.bin/semver +1 -0
- node_modules/.package-lock.json +1418 -0
- node_modules/@scarf/scarf/LICENSE +201 -0
- node_modules/@scarf/scarf/README.md +198 -0
- node_modules/@scarf/scarf/package.json +36 -0
- node_modules/@scarf/scarf/report.js +574 -0
- node_modules/accepts/HISTORY.md +243 -0
- node_modules/accepts/LICENSE +23 -0
- node_modules/accepts/README.md +140 -0
- node_modules/accepts/index.js +238 -0
- node_modules/accepts/package.json +47 -0
- node_modules/anymatch/LICENSE +15 -0
- node_modules/anymatch/README.md +87 -0
- node_modules/anymatch/index.d.ts +20 -0
- node_modules/anymatch/index.js +104 -0
- node_modules/anymatch/package.json +48 -0
- .gitignore → node_modules/append-field/.npmignore +0 -3
- node_modules/append-field/LICENSE +21 -0
- node_modules/append-field/README.md +44 -0
- node_modules/append-field/index.js +12 -0
- node_modules/append-field/lib/parse-path.js +53 -0
- node_modules/append-field/lib/set-value.js +64 -0
- node_modules/append-field/package.json +19 -0
- node_modules/append-field/test/forms.js +19 -0
- node_modules/array-flatten/LICENSE +21 -0
- node_modules/array-flatten/README.md +43 -0
- node_modules/array-flatten/array-flatten.js +64 -0
- node_modules/array-flatten/package.json +39 -0
- node_modules/balanced-match/.github/FUNDING.yml +2 -0
- node_modules/balanced-match/LICENSE.md +21 -0
- node_modules/balanced-match/README.md +97 -0
- node_modules/balanced-match/index.js +62 -0
- node_modules/balanced-match/package.json +48 -0
- node_modules/binary-extensions/binary-extensions.json +263 -0
- node_modules/binary-extensions/binary-extensions.json.d.ts +3 -0
- node_modules/binary-extensions/index.d.ts +14 -0
- node_modules/binary-extensions/index.js +1 -0
- node_modules/binary-extensions/license +10 -0
- node_modules/binary-extensions/package.json +40 -0
- node_modules/binary-extensions/readme.md +25 -0
- node_modules/body-parser/HISTORY.md +672 -0
- node_modules/body-parser/LICENSE +23 -0
- node_modules/body-parser/README.md +476 -0
- node_modules/body-parser/SECURITY.md +25 -0
- node_modules/body-parser/index.js +156 -0
.env
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# For local development
|
| 2 |
+
PORT=7860
|
| 3 |
+
DOMAIN=localhost
|
| 4 |
+
NODE_ENV=development
|
| 5 |
+
|
| 6 |
+
# For production
|
| 7 |
+
# PORT=7860
|
| 8 |
+
# DOMAIN=fourmovie-uploader.hf.space
|
| 9 |
+
# NODE_ENV=production
|
node_modules/.bin/mime
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
../mime/cli.js
|
node_modules/.bin/mkdirp
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
../mkdirp/bin/cmd.js
|
node_modules/.bin/nodemon
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
../nodemon/bin/nodemon.js
|
node_modules/.bin/nodetouch
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
../touch/bin/nodetouch.js
|
node_modules/.bin/semver
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
../semver/bin/semver.js
|
node_modules/.package-lock.json
ADDED
|
@@ -0,0 +1,1418 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "whatsapp-uploader",
|
| 3 |
+
"version": "1.0.0",
|
| 4 |
+
"lockfileVersion": 3,
|
| 5 |
+
"requires": true,
|
| 6 |
+
"packages": {
|
| 7 |
+
"node_modules/@scarf/scarf": {
|
| 8 |
+
"version": "1.4.0",
|
| 9 |
+
"resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz",
|
| 10 |
+
"integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==",
|
| 11 |
+
"hasInstallScript": true,
|
| 12 |
+
"license": "Apache-2.0"
|
| 13 |
+
},
|
| 14 |
+
"node_modules/accepts": {
|
| 15 |
+
"version": "1.3.8",
|
| 16 |
+
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
|
| 17 |
+
"integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
|
| 18 |
+
"license": "MIT",
|
| 19 |
+
"dependencies": {
|
| 20 |
+
"mime-types": "~2.1.34",
|
| 21 |
+
"negotiator": "0.6.3"
|
| 22 |
+
},
|
| 23 |
+
"engines": {
|
| 24 |
+
"node": ">= 0.6"
|
| 25 |
+
}
|
| 26 |
+
},
|
| 27 |
+
"node_modules/anymatch": {
|
| 28 |
+
"version": "3.1.3",
|
| 29 |
+
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
|
| 30 |
+
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
|
| 31 |
+
"dev": true,
|
| 32 |
+
"license": "ISC",
|
| 33 |
+
"dependencies": {
|
| 34 |
+
"normalize-path": "^3.0.0",
|
| 35 |
+
"picomatch": "^2.0.4"
|
| 36 |
+
},
|
| 37 |
+
"engines": {
|
| 38 |
+
"node": ">= 8"
|
| 39 |
+
}
|
| 40 |
+
},
|
| 41 |
+
"node_modules/append-field": {
|
| 42 |
+
"version": "1.0.0",
|
| 43 |
+
"resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz",
|
| 44 |
+
"integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==",
|
| 45 |
+
"license": "MIT"
|
| 46 |
+
},
|
| 47 |
+
"node_modules/array-flatten": {
|
| 48 |
+
"version": "1.1.1",
|
| 49 |
+
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
|
| 50 |
+
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
|
| 51 |
+
"license": "MIT"
|
| 52 |
+
},
|
| 53 |
+
"node_modules/balanced-match": {
|
| 54 |
+
"version": "1.0.2",
|
| 55 |
+
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
|
| 56 |
+
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
|
| 57 |
+
"dev": true,
|
| 58 |
+
"license": "MIT"
|
| 59 |
+
},
|
| 60 |
+
"node_modules/binary-extensions": {
|
| 61 |
+
"version": "2.3.0",
|
| 62 |
+
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
|
| 63 |
+
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
|
| 64 |
+
"dev": true,
|
| 65 |
+
"license": "MIT",
|
| 66 |
+
"engines": {
|
| 67 |
+
"node": ">=8"
|
| 68 |
+
},
|
| 69 |
+
"funding": {
|
| 70 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
| 71 |
+
}
|
| 72 |
+
},
|
| 73 |
+
"node_modules/body-parser": {
|
| 74 |
+
"version": "1.20.3",
|
| 75 |
+
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
|
| 76 |
+
"integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
|
| 77 |
+
"license": "MIT",
|
| 78 |
+
"dependencies": {
|
| 79 |
+
"bytes": "3.1.2",
|
| 80 |
+
"content-type": "~1.0.5",
|
| 81 |
+
"debug": "2.6.9",
|
| 82 |
+
"depd": "2.0.0",
|
| 83 |
+
"destroy": "1.2.0",
|
| 84 |
+
"http-errors": "2.0.0",
|
| 85 |
+
"iconv-lite": "0.4.24",
|
| 86 |
+
"on-finished": "2.4.1",
|
| 87 |
+
"qs": "6.13.0",
|
| 88 |
+
"raw-body": "2.5.2",
|
| 89 |
+
"type-is": "~1.6.18",
|
| 90 |
+
"unpipe": "1.0.0"
|
| 91 |
+
},
|
| 92 |
+
"engines": {
|
| 93 |
+
"node": ">= 0.8",
|
| 94 |
+
"npm": "1.2.8000 || >= 1.4.16"
|
| 95 |
+
}
|
| 96 |
+
},
|
| 97 |
+
"node_modules/brace-expansion": {
|
| 98 |
+
"version": "1.1.12",
|
| 99 |
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz",
|
| 100 |
+
"integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==",
|
| 101 |
+
"dev": true,
|
| 102 |
+
"license": "MIT",
|
| 103 |
+
"dependencies": {
|
| 104 |
+
"balanced-match": "^1.0.0",
|
| 105 |
+
"concat-map": "0.0.1"
|
| 106 |
+
}
|
| 107 |
+
},
|
| 108 |
+
"node_modules/braces": {
|
| 109 |
+
"version": "3.0.3",
|
| 110 |
+
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
|
| 111 |
+
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
|
| 112 |
+
"dev": true,
|
| 113 |
+
"license": "MIT",
|
| 114 |
+
"dependencies": {
|
| 115 |
+
"fill-range": "^7.1.1"
|
| 116 |
+
},
|
| 117 |
+
"engines": {
|
| 118 |
+
"node": ">=8"
|
| 119 |
+
}
|
| 120 |
+
},
|
| 121 |
+
"node_modules/buffer-from": {
|
| 122 |
+
"version": "1.1.2",
|
| 123 |
+
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
|
| 124 |
+
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
|
| 125 |
+
"license": "MIT"
|
| 126 |
+
},
|
| 127 |
+
"node_modules/busboy": {
|
| 128 |
+
"version": "1.6.0",
|
| 129 |
+
"resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
|
| 130 |
+
"integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
|
| 131 |
+
"dependencies": {
|
| 132 |
+
"streamsearch": "^1.1.0"
|
| 133 |
+
},
|
| 134 |
+
"engines": {
|
| 135 |
+
"node": ">=10.16.0"
|
| 136 |
+
}
|
| 137 |
+
},
|
| 138 |
+
"node_modules/bytes": {
|
| 139 |
+
"version": "3.1.2",
|
| 140 |
+
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
|
| 141 |
+
"integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
|
| 142 |
+
"license": "MIT",
|
| 143 |
+
"engines": {
|
| 144 |
+
"node": ">= 0.8"
|
| 145 |
+
}
|
| 146 |
+
},
|
| 147 |
+
"node_modules/call-bind-apply-helpers": {
|
| 148 |
+
"version": "1.0.2",
|
| 149 |
+
"resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",
|
| 150 |
+
"integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",
|
| 151 |
+
"license": "MIT",
|
| 152 |
+
"dependencies": {
|
| 153 |
+
"es-errors": "^1.3.0",
|
| 154 |
+
"function-bind": "^1.1.2"
|
| 155 |
+
},
|
| 156 |
+
"engines": {
|
| 157 |
+
"node": ">= 0.4"
|
| 158 |
+
}
|
| 159 |
+
},
|
| 160 |
+
"node_modules/call-bound": {
|
| 161 |
+
"version": "1.0.4",
|
| 162 |
+
"resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",
|
| 163 |
+
"integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",
|
| 164 |
+
"license": "MIT",
|
| 165 |
+
"dependencies": {
|
| 166 |
+
"call-bind-apply-helpers": "^1.0.2",
|
| 167 |
+
"get-intrinsic": "^1.3.0"
|
| 168 |
+
},
|
| 169 |
+
"engines": {
|
| 170 |
+
"node": ">= 0.4"
|
| 171 |
+
},
|
| 172 |
+
"funding": {
|
| 173 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 174 |
+
}
|
| 175 |
+
},
|
| 176 |
+
"node_modules/chokidar": {
|
| 177 |
+
"version": "3.6.0",
|
| 178 |
+
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
|
| 179 |
+
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
|
| 180 |
+
"dev": true,
|
| 181 |
+
"license": "MIT",
|
| 182 |
+
"dependencies": {
|
| 183 |
+
"anymatch": "~3.1.2",
|
| 184 |
+
"braces": "~3.0.2",
|
| 185 |
+
"glob-parent": "~5.1.2",
|
| 186 |
+
"is-binary-path": "~2.1.0",
|
| 187 |
+
"is-glob": "~4.0.1",
|
| 188 |
+
"normalize-path": "~3.0.0",
|
| 189 |
+
"readdirp": "~3.6.0"
|
| 190 |
+
},
|
| 191 |
+
"engines": {
|
| 192 |
+
"node": ">= 8.10.0"
|
| 193 |
+
},
|
| 194 |
+
"funding": {
|
| 195 |
+
"url": "https://paulmillr.com/funding/"
|
| 196 |
+
},
|
| 197 |
+
"optionalDependencies": {
|
| 198 |
+
"fsevents": "~2.3.2"
|
| 199 |
+
}
|
| 200 |
+
},
|
| 201 |
+
"node_modules/concat-map": {
|
| 202 |
+
"version": "0.0.1",
|
| 203 |
+
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
| 204 |
+
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
|
| 205 |
+
"dev": true,
|
| 206 |
+
"license": "MIT"
|
| 207 |
+
},
|
| 208 |
+
"node_modules/concat-stream": {
|
| 209 |
+
"version": "1.6.2",
|
| 210 |
+
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
|
| 211 |
+
"integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
|
| 212 |
+
"engines": [
|
| 213 |
+
"node >= 0.8"
|
| 214 |
+
],
|
| 215 |
+
"license": "MIT",
|
| 216 |
+
"dependencies": {
|
| 217 |
+
"buffer-from": "^1.0.0",
|
| 218 |
+
"inherits": "^2.0.3",
|
| 219 |
+
"readable-stream": "^2.2.2",
|
| 220 |
+
"typedarray": "^0.0.6"
|
| 221 |
+
}
|
| 222 |
+
},
|
| 223 |
+
"node_modules/content-disposition": {
|
| 224 |
+
"version": "0.5.4",
|
| 225 |
+
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
|
| 226 |
+
"integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
|
| 227 |
+
"license": "MIT",
|
| 228 |
+
"dependencies": {
|
| 229 |
+
"safe-buffer": "5.2.1"
|
| 230 |
+
},
|
| 231 |
+
"engines": {
|
| 232 |
+
"node": ">= 0.6"
|
| 233 |
+
}
|
| 234 |
+
},
|
| 235 |
+
"node_modules/content-type": {
|
| 236 |
+
"version": "1.0.5",
|
| 237 |
+
"resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
|
| 238 |
+
"integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
|
| 239 |
+
"license": "MIT",
|
| 240 |
+
"engines": {
|
| 241 |
+
"node": ">= 0.6"
|
| 242 |
+
}
|
| 243 |
+
},
|
| 244 |
+
"node_modules/cookie": {
|
| 245 |
+
"version": "0.7.1",
|
| 246 |
+
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz",
|
| 247 |
+
"integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==",
|
| 248 |
+
"license": "MIT",
|
| 249 |
+
"engines": {
|
| 250 |
+
"node": ">= 0.6"
|
| 251 |
+
}
|
| 252 |
+
},
|
| 253 |
+
"node_modules/cookie-signature": {
|
| 254 |
+
"version": "1.0.6",
|
| 255 |
+
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
|
| 256 |
+
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==",
|
| 257 |
+
"license": "MIT"
|
| 258 |
+
},
|
| 259 |
+
"node_modules/core-util-is": {
|
| 260 |
+
"version": "1.0.3",
|
| 261 |
+
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
|
| 262 |
+
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
|
| 263 |
+
"license": "MIT"
|
| 264 |
+
},
|
| 265 |
+
"node_modules/cors": {
|
| 266 |
+
"version": "2.8.5",
|
| 267 |
+
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
|
| 268 |
+
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
|
| 269 |
+
"license": "MIT",
|
| 270 |
+
"dependencies": {
|
| 271 |
+
"object-assign": "^4",
|
| 272 |
+
"vary": "^1"
|
| 273 |
+
},
|
| 274 |
+
"engines": {
|
| 275 |
+
"node": ">= 0.10"
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
"node_modules/debug": {
|
| 279 |
+
"version": "2.6.9",
|
| 280 |
+
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
|
| 281 |
+
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
|
| 282 |
+
"license": "MIT",
|
| 283 |
+
"dependencies": {
|
| 284 |
+
"ms": "2.0.0"
|
| 285 |
+
}
|
| 286 |
+
},
|
| 287 |
+
"node_modules/depd": {
|
| 288 |
+
"version": "2.0.0",
|
| 289 |
+
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
|
| 290 |
+
"integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
|
| 291 |
+
"license": "MIT",
|
| 292 |
+
"engines": {
|
| 293 |
+
"node": ">= 0.8"
|
| 294 |
+
}
|
| 295 |
+
},
|
| 296 |
+
"node_modules/destroy": {
|
| 297 |
+
"version": "1.2.0",
|
| 298 |
+
"resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
|
| 299 |
+
"integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
|
| 300 |
+
"license": "MIT",
|
| 301 |
+
"engines": {
|
| 302 |
+
"node": ">= 0.8",
|
| 303 |
+
"npm": "1.2.8000 || >= 1.4.16"
|
| 304 |
+
}
|
| 305 |
+
},
|
| 306 |
+
"node_modules/dotenv": {
|
| 307 |
+
"version": "16.5.0",
|
| 308 |
+
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz",
|
| 309 |
+
"integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==",
|
| 310 |
+
"license": "BSD-2-Clause",
|
| 311 |
+
"engines": {
|
| 312 |
+
"node": ">=12"
|
| 313 |
+
},
|
| 314 |
+
"funding": {
|
| 315 |
+
"url": "https://dotenvx.com"
|
| 316 |
+
}
|
| 317 |
+
},
|
| 318 |
+
"node_modules/dunder-proto": {
|
| 319 |
+
"version": "1.0.1",
|
| 320 |
+
"resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",
|
| 321 |
+
"integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",
|
| 322 |
+
"license": "MIT",
|
| 323 |
+
"dependencies": {
|
| 324 |
+
"call-bind-apply-helpers": "^1.0.1",
|
| 325 |
+
"es-errors": "^1.3.0",
|
| 326 |
+
"gopd": "^1.2.0"
|
| 327 |
+
},
|
| 328 |
+
"engines": {
|
| 329 |
+
"node": ">= 0.4"
|
| 330 |
+
}
|
| 331 |
+
},
|
| 332 |
+
"node_modules/ee-first": {
|
| 333 |
+
"version": "1.1.1",
|
| 334 |
+
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
| 335 |
+
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
|
| 336 |
+
"license": "MIT"
|
| 337 |
+
},
|
| 338 |
+
"node_modules/encodeurl": {
|
| 339 |
+
"version": "2.0.0",
|
| 340 |
+
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
|
| 341 |
+
"integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
|
| 342 |
+
"license": "MIT",
|
| 343 |
+
"engines": {
|
| 344 |
+
"node": ">= 0.8"
|
| 345 |
+
}
|
| 346 |
+
},
|
| 347 |
+
"node_modules/es-define-property": {
|
| 348 |
+
"version": "1.0.1",
|
| 349 |
+
"resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",
|
| 350 |
+
"integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",
|
| 351 |
+
"license": "MIT",
|
| 352 |
+
"engines": {
|
| 353 |
+
"node": ">= 0.4"
|
| 354 |
+
}
|
| 355 |
+
},
|
| 356 |
+
"node_modules/es-errors": {
|
| 357 |
+
"version": "1.3.0",
|
| 358 |
+
"resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
|
| 359 |
+
"integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
|
| 360 |
+
"license": "MIT",
|
| 361 |
+
"engines": {
|
| 362 |
+
"node": ">= 0.4"
|
| 363 |
+
}
|
| 364 |
+
},
|
| 365 |
+
"node_modules/es-object-atoms": {
|
| 366 |
+
"version": "1.1.1",
|
| 367 |
+
"resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz",
|
| 368 |
+
"integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==",
|
| 369 |
+
"license": "MIT",
|
| 370 |
+
"dependencies": {
|
| 371 |
+
"es-errors": "^1.3.0"
|
| 372 |
+
},
|
| 373 |
+
"engines": {
|
| 374 |
+
"node": ">= 0.4"
|
| 375 |
+
}
|
| 376 |
+
},
|
| 377 |
+
"node_modules/escape-html": {
|
| 378 |
+
"version": "1.0.3",
|
| 379 |
+
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
|
| 380 |
+
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
|
| 381 |
+
"license": "MIT"
|
| 382 |
+
},
|
| 383 |
+
"node_modules/etag": {
|
| 384 |
+
"version": "1.8.1",
|
| 385 |
+
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
|
| 386 |
+
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
|
| 387 |
+
"license": "MIT",
|
| 388 |
+
"engines": {
|
| 389 |
+
"node": ">= 0.6"
|
| 390 |
+
}
|
| 391 |
+
},
|
| 392 |
+
"node_modules/express": {
|
| 393 |
+
"version": "4.21.2",
|
| 394 |
+
"resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz",
|
| 395 |
+
"integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==",
|
| 396 |
+
"license": "MIT",
|
| 397 |
+
"dependencies": {
|
| 398 |
+
"accepts": "~1.3.8",
|
| 399 |
+
"array-flatten": "1.1.1",
|
| 400 |
+
"body-parser": "1.20.3",
|
| 401 |
+
"content-disposition": "0.5.4",
|
| 402 |
+
"content-type": "~1.0.4",
|
| 403 |
+
"cookie": "0.7.1",
|
| 404 |
+
"cookie-signature": "1.0.6",
|
| 405 |
+
"debug": "2.6.9",
|
| 406 |
+
"depd": "2.0.0",
|
| 407 |
+
"encodeurl": "~2.0.0",
|
| 408 |
+
"escape-html": "~1.0.3",
|
| 409 |
+
"etag": "~1.8.1",
|
| 410 |
+
"finalhandler": "1.3.1",
|
| 411 |
+
"fresh": "0.5.2",
|
| 412 |
+
"http-errors": "2.0.0",
|
| 413 |
+
"merge-descriptors": "1.0.3",
|
| 414 |
+
"methods": "~1.1.2",
|
| 415 |
+
"on-finished": "2.4.1",
|
| 416 |
+
"parseurl": "~1.3.3",
|
| 417 |
+
"path-to-regexp": "0.1.12",
|
| 418 |
+
"proxy-addr": "~2.0.7",
|
| 419 |
+
"qs": "6.13.0",
|
| 420 |
+
"range-parser": "~1.2.1",
|
| 421 |
+
"safe-buffer": "5.2.1",
|
| 422 |
+
"send": "0.19.0",
|
| 423 |
+
"serve-static": "1.16.2",
|
| 424 |
+
"setprototypeof": "1.2.0",
|
| 425 |
+
"statuses": "2.0.1",
|
| 426 |
+
"type-is": "~1.6.18",
|
| 427 |
+
"utils-merge": "1.0.1",
|
| 428 |
+
"vary": "~1.1.2"
|
| 429 |
+
},
|
| 430 |
+
"engines": {
|
| 431 |
+
"node": ">= 0.10.0"
|
| 432 |
+
},
|
| 433 |
+
"funding": {
|
| 434 |
+
"type": "opencollective",
|
| 435 |
+
"url": "https://opencollective.com/express"
|
| 436 |
+
}
|
| 437 |
+
},
|
| 438 |
+
"node_modules/fill-range": {
|
| 439 |
+
"version": "7.1.1",
|
| 440 |
+
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
|
| 441 |
+
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
|
| 442 |
+
"dev": true,
|
| 443 |
+
"license": "MIT",
|
| 444 |
+
"dependencies": {
|
| 445 |
+
"to-regex-range": "^5.0.1"
|
| 446 |
+
},
|
| 447 |
+
"engines": {
|
| 448 |
+
"node": ">=8"
|
| 449 |
+
}
|
| 450 |
+
},
|
| 451 |
+
"node_modules/finalhandler": {
|
| 452 |
+
"version": "1.3.1",
|
| 453 |
+
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
|
| 454 |
+
"integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
|
| 455 |
+
"license": "MIT",
|
| 456 |
+
"dependencies": {
|
| 457 |
+
"debug": "2.6.9",
|
| 458 |
+
"encodeurl": "~2.0.0",
|
| 459 |
+
"escape-html": "~1.0.3",
|
| 460 |
+
"on-finished": "2.4.1",
|
| 461 |
+
"parseurl": "~1.3.3",
|
| 462 |
+
"statuses": "2.0.1",
|
| 463 |
+
"unpipe": "~1.0.0"
|
| 464 |
+
},
|
| 465 |
+
"engines": {
|
| 466 |
+
"node": ">= 0.8"
|
| 467 |
+
}
|
| 468 |
+
},
|
| 469 |
+
"node_modules/forwarded": {
|
| 470 |
+
"version": "0.2.0",
|
| 471 |
+
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
|
| 472 |
+
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
|
| 473 |
+
"license": "MIT",
|
| 474 |
+
"engines": {
|
| 475 |
+
"node": ">= 0.6"
|
| 476 |
+
}
|
| 477 |
+
},
|
| 478 |
+
"node_modules/fresh": {
|
| 479 |
+
"version": "0.5.2",
|
| 480 |
+
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
|
| 481 |
+
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
|
| 482 |
+
"license": "MIT",
|
| 483 |
+
"engines": {
|
| 484 |
+
"node": ">= 0.6"
|
| 485 |
+
}
|
| 486 |
+
},
|
| 487 |
+
"node_modules/function-bind": {
|
| 488 |
+
"version": "1.1.2",
|
| 489 |
+
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
|
| 490 |
+
"integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
|
| 491 |
+
"license": "MIT",
|
| 492 |
+
"funding": {
|
| 493 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 494 |
+
}
|
| 495 |
+
},
|
| 496 |
+
"node_modules/get-intrinsic": {
|
| 497 |
+
"version": "1.3.0",
|
| 498 |
+
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
|
| 499 |
+
"integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",
|
| 500 |
+
"license": "MIT",
|
| 501 |
+
"dependencies": {
|
| 502 |
+
"call-bind-apply-helpers": "^1.0.2",
|
| 503 |
+
"es-define-property": "^1.0.1",
|
| 504 |
+
"es-errors": "^1.3.0",
|
| 505 |
+
"es-object-atoms": "^1.1.1",
|
| 506 |
+
"function-bind": "^1.1.2",
|
| 507 |
+
"get-proto": "^1.0.1",
|
| 508 |
+
"gopd": "^1.2.0",
|
| 509 |
+
"has-symbols": "^1.1.0",
|
| 510 |
+
"hasown": "^2.0.2",
|
| 511 |
+
"math-intrinsics": "^1.1.0"
|
| 512 |
+
},
|
| 513 |
+
"engines": {
|
| 514 |
+
"node": ">= 0.4"
|
| 515 |
+
},
|
| 516 |
+
"funding": {
|
| 517 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 518 |
+
}
|
| 519 |
+
},
|
| 520 |
+
"node_modules/get-proto": {
|
| 521 |
+
"version": "1.0.1",
|
| 522 |
+
"resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",
|
| 523 |
+
"integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",
|
| 524 |
+
"license": "MIT",
|
| 525 |
+
"dependencies": {
|
| 526 |
+
"dunder-proto": "^1.0.1",
|
| 527 |
+
"es-object-atoms": "^1.0.0"
|
| 528 |
+
},
|
| 529 |
+
"engines": {
|
| 530 |
+
"node": ">= 0.4"
|
| 531 |
+
}
|
| 532 |
+
},
|
| 533 |
+
"node_modules/glob-parent": {
|
| 534 |
+
"version": "5.1.2",
|
| 535 |
+
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
|
| 536 |
+
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
|
| 537 |
+
"dev": true,
|
| 538 |
+
"license": "ISC",
|
| 539 |
+
"dependencies": {
|
| 540 |
+
"is-glob": "^4.0.1"
|
| 541 |
+
},
|
| 542 |
+
"engines": {
|
| 543 |
+
"node": ">= 6"
|
| 544 |
+
}
|
| 545 |
+
},
|
| 546 |
+
"node_modules/gopd": {
|
| 547 |
+
"version": "1.2.0",
|
| 548 |
+
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
|
| 549 |
+
"integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",
|
| 550 |
+
"license": "MIT",
|
| 551 |
+
"engines": {
|
| 552 |
+
"node": ">= 0.4"
|
| 553 |
+
},
|
| 554 |
+
"funding": {
|
| 555 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 556 |
+
}
|
| 557 |
+
},
|
| 558 |
+
"node_modules/has-flag": {
|
| 559 |
+
"version": "3.0.0",
|
| 560 |
+
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
| 561 |
+
"integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
|
| 562 |
+
"dev": true,
|
| 563 |
+
"license": "MIT",
|
| 564 |
+
"engines": {
|
| 565 |
+
"node": ">=4"
|
| 566 |
+
}
|
| 567 |
+
},
|
| 568 |
+
"node_modules/has-symbols": {
|
| 569 |
+
"version": "1.1.0",
|
| 570 |
+
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
|
| 571 |
+
"integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",
|
| 572 |
+
"license": "MIT",
|
| 573 |
+
"engines": {
|
| 574 |
+
"node": ">= 0.4"
|
| 575 |
+
},
|
| 576 |
+
"funding": {
|
| 577 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 578 |
+
}
|
| 579 |
+
},
|
| 580 |
+
"node_modules/hasown": {
|
| 581 |
+
"version": "2.0.2",
|
| 582 |
+
"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
|
| 583 |
+
"integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
|
| 584 |
+
"license": "MIT",
|
| 585 |
+
"dependencies": {
|
| 586 |
+
"function-bind": "^1.1.2"
|
| 587 |
+
},
|
| 588 |
+
"engines": {
|
| 589 |
+
"node": ">= 0.4"
|
| 590 |
+
}
|
| 591 |
+
},
|
| 592 |
+
"node_modules/helmet": {
|
| 593 |
+
"version": "8.1.0",
|
| 594 |
+
"resolved": "https://registry.npmjs.org/helmet/-/helmet-8.1.0.tgz",
|
| 595 |
+
"integrity": "sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==",
|
| 596 |
+
"license": "MIT",
|
| 597 |
+
"engines": {
|
| 598 |
+
"node": ">=18.0.0"
|
| 599 |
+
}
|
| 600 |
+
},
|
| 601 |
+
"node_modules/http-errors": {
|
| 602 |
+
"version": "2.0.0",
|
| 603 |
+
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
|
| 604 |
+
"integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
|
| 605 |
+
"license": "MIT",
|
| 606 |
+
"dependencies": {
|
| 607 |
+
"depd": "2.0.0",
|
| 608 |
+
"inherits": "2.0.4",
|
| 609 |
+
"setprototypeof": "1.2.0",
|
| 610 |
+
"statuses": "2.0.1",
|
| 611 |
+
"toidentifier": "1.0.1"
|
| 612 |
+
},
|
| 613 |
+
"engines": {
|
| 614 |
+
"node": ">= 0.8"
|
| 615 |
+
}
|
| 616 |
+
},
|
| 617 |
+
"node_modules/iconv-lite": {
|
| 618 |
+
"version": "0.4.24",
|
| 619 |
+
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
| 620 |
+
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
| 621 |
+
"license": "MIT",
|
| 622 |
+
"dependencies": {
|
| 623 |
+
"safer-buffer": ">= 2.1.2 < 3"
|
| 624 |
+
},
|
| 625 |
+
"engines": {
|
| 626 |
+
"node": ">=0.10.0"
|
| 627 |
+
}
|
| 628 |
+
},
|
| 629 |
+
"node_modules/ignore-by-default": {
|
| 630 |
+
"version": "1.0.1",
|
| 631 |
+
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
|
| 632 |
+
"integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==",
|
| 633 |
+
"dev": true,
|
| 634 |
+
"license": "ISC"
|
| 635 |
+
},
|
| 636 |
+
"node_modules/inherits": {
|
| 637 |
+
"version": "2.0.4",
|
| 638 |
+
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
| 639 |
+
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
| 640 |
+
"license": "ISC"
|
| 641 |
+
},
|
| 642 |
+
"node_modules/ipaddr.js": {
|
| 643 |
+
"version": "1.9.1",
|
| 644 |
+
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
|
| 645 |
+
"integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
|
| 646 |
+
"license": "MIT",
|
| 647 |
+
"engines": {
|
| 648 |
+
"node": ">= 0.10"
|
| 649 |
+
}
|
| 650 |
+
},
|
| 651 |
+
"node_modules/is-binary-path": {
|
| 652 |
+
"version": "2.1.0",
|
| 653 |
+
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
|
| 654 |
+
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
|
| 655 |
+
"dev": true,
|
| 656 |
+
"license": "MIT",
|
| 657 |
+
"dependencies": {
|
| 658 |
+
"binary-extensions": "^2.0.0"
|
| 659 |
+
},
|
| 660 |
+
"engines": {
|
| 661 |
+
"node": ">=8"
|
| 662 |
+
}
|
| 663 |
+
},
|
| 664 |
+
"node_modules/is-extglob": {
|
| 665 |
+
"version": "2.1.1",
|
| 666 |
+
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
|
| 667 |
+
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
|
| 668 |
+
"dev": true,
|
| 669 |
+
"license": "MIT",
|
| 670 |
+
"engines": {
|
| 671 |
+
"node": ">=0.10.0"
|
| 672 |
+
}
|
| 673 |
+
},
|
| 674 |
+
"node_modules/is-glob": {
|
| 675 |
+
"version": "4.0.3",
|
| 676 |
+
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
|
| 677 |
+
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
|
| 678 |
+
"dev": true,
|
| 679 |
+
"license": "MIT",
|
| 680 |
+
"dependencies": {
|
| 681 |
+
"is-extglob": "^2.1.1"
|
| 682 |
+
},
|
| 683 |
+
"engines": {
|
| 684 |
+
"node": ">=0.10.0"
|
| 685 |
+
}
|
| 686 |
+
},
|
| 687 |
+
"node_modules/is-number": {
|
| 688 |
+
"version": "7.0.0",
|
| 689 |
+
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
|
| 690 |
+
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
|
| 691 |
+
"dev": true,
|
| 692 |
+
"license": "MIT",
|
| 693 |
+
"engines": {
|
| 694 |
+
"node": ">=0.12.0"
|
| 695 |
+
}
|
| 696 |
+
},
|
| 697 |
+
"node_modules/isarray": {
|
| 698 |
+
"version": "1.0.0",
|
| 699 |
+
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
| 700 |
+
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
|
| 701 |
+
"license": "MIT"
|
| 702 |
+
},
|
| 703 |
+
"node_modules/math-intrinsics": {
|
| 704 |
+
"version": "1.1.0",
|
| 705 |
+
"resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
|
| 706 |
+
"integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",
|
| 707 |
+
"license": "MIT",
|
| 708 |
+
"engines": {
|
| 709 |
+
"node": ">= 0.4"
|
| 710 |
+
}
|
| 711 |
+
},
|
| 712 |
+
"node_modules/media-typer": {
|
| 713 |
+
"version": "0.3.0",
|
| 714 |
+
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
|
| 715 |
+
"integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
|
| 716 |
+
"license": "MIT",
|
| 717 |
+
"engines": {
|
| 718 |
+
"node": ">= 0.6"
|
| 719 |
+
}
|
| 720 |
+
},
|
| 721 |
+
"node_modules/merge-descriptors": {
|
| 722 |
+
"version": "1.0.3",
|
| 723 |
+
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
|
| 724 |
+
"integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
|
| 725 |
+
"license": "MIT",
|
| 726 |
+
"funding": {
|
| 727 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
| 728 |
+
}
|
| 729 |
+
},
|
| 730 |
+
"node_modules/methods": {
|
| 731 |
+
"version": "1.1.2",
|
| 732 |
+
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
|
| 733 |
+
"integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
|
| 734 |
+
"license": "MIT",
|
| 735 |
+
"engines": {
|
| 736 |
+
"node": ">= 0.6"
|
| 737 |
+
}
|
| 738 |
+
},
|
| 739 |
+
"node_modules/mime": {
|
| 740 |
+
"version": "1.6.0",
|
| 741 |
+
"resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
|
| 742 |
+
"integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
|
| 743 |
+
"license": "MIT",
|
| 744 |
+
"bin": {
|
| 745 |
+
"mime": "cli.js"
|
| 746 |
+
},
|
| 747 |
+
"engines": {
|
| 748 |
+
"node": ">=4"
|
| 749 |
+
}
|
| 750 |
+
},
|
| 751 |
+
"node_modules/mime-db": {
|
| 752 |
+
"version": "1.52.0",
|
| 753 |
+
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
|
| 754 |
+
"integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
|
| 755 |
+
"license": "MIT",
|
| 756 |
+
"engines": {
|
| 757 |
+
"node": ">= 0.6"
|
| 758 |
+
}
|
| 759 |
+
},
|
| 760 |
+
"node_modules/mime-types": {
|
| 761 |
+
"version": "2.1.35",
|
| 762 |
+
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
|
| 763 |
+
"integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
|
| 764 |
+
"license": "MIT",
|
| 765 |
+
"dependencies": {
|
| 766 |
+
"mime-db": "1.52.0"
|
| 767 |
+
},
|
| 768 |
+
"engines": {
|
| 769 |
+
"node": ">= 0.6"
|
| 770 |
+
}
|
| 771 |
+
},
|
| 772 |
+
"node_modules/minimatch": {
|
| 773 |
+
"version": "3.1.2",
|
| 774 |
+
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
|
| 775 |
+
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
|
| 776 |
+
"dev": true,
|
| 777 |
+
"license": "ISC",
|
| 778 |
+
"dependencies": {
|
| 779 |
+
"brace-expansion": "^1.1.7"
|
| 780 |
+
},
|
| 781 |
+
"engines": {
|
| 782 |
+
"node": "*"
|
| 783 |
+
}
|
| 784 |
+
},
|
| 785 |
+
"node_modules/minimist": {
|
| 786 |
+
"version": "1.2.8",
|
| 787 |
+
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
| 788 |
+
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
|
| 789 |
+
"license": "MIT",
|
| 790 |
+
"funding": {
|
| 791 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 792 |
+
}
|
| 793 |
+
},
|
| 794 |
+
"node_modules/mkdirp": {
|
| 795 |
+
"version": "0.5.6",
|
| 796 |
+
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz",
|
| 797 |
+
"integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==",
|
| 798 |
+
"license": "MIT",
|
| 799 |
+
"dependencies": {
|
| 800 |
+
"minimist": "^1.2.6"
|
| 801 |
+
},
|
| 802 |
+
"bin": {
|
| 803 |
+
"mkdirp": "bin/cmd.js"
|
| 804 |
+
}
|
| 805 |
+
},
|
| 806 |
+
"node_modules/ms": {
|
| 807 |
+
"version": "2.0.0",
|
| 808 |
+
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
|
| 809 |
+
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
|
| 810 |
+
"license": "MIT"
|
| 811 |
+
},
|
| 812 |
+
"node_modules/multer": {
|
| 813 |
+
"version": "1.4.5-lts.2",
|
| 814 |
+
"resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.2.tgz",
|
| 815 |
+
"integrity": "sha512-VzGiVigcG9zUAoCNU+xShztrlr1auZOlurXynNvO9GiWD1/mTBbUljOKY+qMeazBqXgRnjzeEgJI/wyjJUHg9A==",
|
| 816 |
+
"deprecated": "Multer 1.x is impacted by a number of vulnerabilities, which have been patched in 2.x. You should upgrade to the latest 2.x version.",
|
| 817 |
+
"license": "MIT",
|
| 818 |
+
"dependencies": {
|
| 819 |
+
"append-field": "^1.0.0",
|
| 820 |
+
"busboy": "^1.0.0",
|
| 821 |
+
"concat-stream": "^1.5.2",
|
| 822 |
+
"mkdirp": "^0.5.4",
|
| 823 |
+
"object-assign": "^4.1.1",
|
| 824 |
+
"type-is": "^1.6.4",
|
| 825 |
+
"xtend": "^4.0.0"
|
| 826 |
+
},
|
| 827 |
+
"engines": {
|
| 828 |
+
"node": ">= 6.0.0"
|
| 829 |
+
}
|
| 830 |
+
},
|
| 831 |
+
"node_modules/negotiator": {
|
| 832 |
+
"version": "0.6.3",
|
| 833 |
+
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
|
| 834 |
+
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
|
| 835 |
+
"license": "MIT",
|
| 836 |
+
"engines": {
|
| 837 |
+
"node": ">= 0.6"
|
| 838 |
+
}
|
| 839 |
+
},
|
| 840 |
+
"node_modules/nodemon": {
|
| 841 |
+
"version": "3.1.10",
|
| 842 |
+
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.10.tgz",
|
| 843 |
+
"integrity": "sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==",
|
| 844 |
+
"dev": true,
|
| 845 |
+
"license": "MIT",
|
| 846 |
+
"dependencies": {
|
| 847 |
+
"chokidar": "^3.5.2",
|
| 848 |
+
"debug": "^4",
|
| 849 |
+
"ignore-by-default": "^1.0.1",
|
| 850 |
+
"minimatch": "^3.1.2",
|
| 851 |
+
"pstree.remy": "^1.1.8",
|
| 852 |
+
"semver": "^7.5.3",
|
| 853 |
+
"simple-update-notifier": "^2.0.0",
|
| 854 |
+
"supports-color": "^5.5.0",
|
| 855 |
+
"touch": "^3.1.0",
|
| 856 |
+
"undefsafe": "^2.0.5"
|
| 857 |
+
},
|
| 858 |
+
"bin": {
|
| 859 |
+
"nodemon": "bin/nodemon.js"
|
| 860 |
+
},
|
| 861 |
+
"engines": {
|
| 862 |
+
"node": ">=10"
|
| 863 |
+
},
|
| 864 |
+
"funding": {
|
| 865 |
+
"type": "opencollective",
|
| 866 |
+
"url": "https://opencollective.com/nodemon"
|
| 867 |
+
}
|
| 868 |
+
},
|
| 869 |
+
"node_modules/nodemon/node_modules/debug": {
|
| 870 |
+
"version": "4.4.1",
|
| 871 |
+
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
|
| 872 |
+
"integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
|
| 873 |
+
"dev": true,
|
| 874 |
+
"license": "MIT",
|
| 875 |
+
"dependencies": {
|
| 876 |
+
"ms": "^2.1.3"
|
| 877 |
+
},
|
| 878 |
+
"engines": {
|
| 879 |
+
"node": ">=6.0"
|
| 880 |
+
},
|
| 881 |
+
"peerDependenciesMeta": {
|
| 882 |
+
"supports-color": {
|
| 883 |
+
"optional": true
|
| 884 |
+
}
|
| 885 |
+
}
|
| 886 |
+
},
|
| 887 |
+
"node_modules/nodemon/node_modules/ms": {
|
| 888 |
+
"version": "2.1.3",
|
| 889 |
+
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
| 890 |
+
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
| 891 |
+
"dev": true,
|
| 892 |
+
"license": "MIT"
|
| 893 |
+
},
|
| 894 |
+
"node_modules/normalize-path": {
|
| 895 |
+
"version": "3.0.0",
|
| 896 |
+
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
|
| 897 |
+
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
|
| 898 |
+
"dev": true,
|
| 899 |
+
"license": "MIT",
|
| 900 |
+
"engines": {
|
| 901 |
+
"node": ">=0.10.0"
|
| 902 |
+
}
|
| 903 |
+
},
|
| 904 |
+
"node_modules/object-assign": {
|
| 905 |
+
"version": "4.1.1",
|
| 906 |
+
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
| 907 |
+
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
| 908 |
+
"license": "MIT",
|
| 909 |
+
"engines": {
|
| 910 |
+
"node": ">=0.10.0"
|
| 911 |
+
}
|
| 912 |
+
},
|
| 913 |
+
"node_modules/object-inspect": {
|
| 914 |
+
"version": "1.13.4",
|
| 915 |
+
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
|
| 916 |
+
"integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",
|
| 917 |
+
"license": "MIT",
|
| 918 |
+
"engines": {
|
| 919 |
+
"node": ">= 0.4"
|
| 920 |
+
},
|
| 921 |
+
"funding": {
|
| 922 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 923 |
+
}
|
| 924 |
+
},
|
| 925 |
+
"node_modules/on-finished": {
|
| 926 |
+
"version": "2.4.1",
|
| 927 |
+
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
|
| 928 |
+
"integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
|
| 929 |
+
"license": "MIT",
|
| 930 |
+
"dependencies": {
|
| 931 |
+
"ee-first": "1.1.1"
|
| 932 |
+
},
|
| 933 |
+
"engines": {
|
| 934 |
+
"node": ">= 0.8"
|
| 935 |
+
}
|
| 936 |
+
},
|
| 937 |
+
"node_modules/parseurl": {
|
| 938 |
+
"version": "1.3.3",
|
| 939 |
+
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
|
| 940 |
+
"integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
|
| 941 |
+
"license": "MIT",
|
| 942 |
+
"engines": {
|
| 943 |
+
"node": ">= 0.8"
|
| 944 |
+
}
|
| 945 |
+
},
|
| 946 |
+
"node_modules/path-to-regexp": {
|
| 947 |
+
"version": "0.1.12",
|
| 948 |
+
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz",
|
| 949 |
+
"integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==",
|
| 950 |
+
"license": "MIT"
|
| 951 |
+
},
|
| 952 |
+
"node_modules/picomatch": {
|
| 953 |
+
"version": "2.3.1",
|
| 954 |
+
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
|
| 955 |
+
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
|
| 956 |
+
"dev": true,
|
| 957 |
+
"license": "MIT",
|
| 958 |
+
"engines": {
|
| 959 |
+
"node": ">=8.6"
|
| 960 |
+
},
|
| 961 |
+
"funding": {
|
| 962 |
+
"url": "https://github.com/sponsors/jonschlinkert"
|
| 963 |
+
}
|
| 964 |
+
},
|
| 965 |
+
"node_modules/process-nextick-args": {
|
| 966 |
+
"version": "2.0.1",
|
| 967 |
+
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
| 968 |
+
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
|
| 969 |
+
"license": "MIT"
|
| 970 |
+
},
|
| 971 |
+
"node_modules/proxy-addr": {
|
| 972 |
+
"version": "2.0.7",
|
| 973 |
+
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
|
| 974 |
+
"integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
|
| 975 |
+
"license": "MIT",
|
| 976 |
+
"dependencies": {
|
| 977 |
+
"forwarded": "0.2.0",
|
| 978 |
+
"ipaddr.js": "1.9.1"
|
| 979 |
+
},
|
| 980 |
+
"engines": {
|
| 981 |
+
"node": ">= 0.10"
|
| 982 |
+
}
|
| 983 |
+
},
|
| 984 |
+
"node_modules/pstree.remy": {
|
| 985 |
+
"version": "1.1.8",
|
| 986 |
+
"resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
|
| 987 |
+
"integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==",
|
| 988 |
+
"dev": true,
|
| 989 |
+
"license": "MIT"
|
| 990 |
+
},
|
| 991 |
+
"node_modules/qs": {
|
| 992 |
+
"version": "6.13.0",
|
| 993 |
+
"resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
|
| 994 |
+
"integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
|
| 995 |
+
"license": "BSD-3-Clause",
|
| 996 |
+
"dependencies": {
|
| 997 |
+
"side-channel": "^1.0.6"
|
| 998 |
+
},
|
| 999 |
+
"engines": {
|
| 1000 |
+
"node": ">=0.6"
|
| 1001 |
+
},
|
| 1002 |
+
"funding": {
|
| 1003 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 1004 |
+
}
|
| 1005 |
+
},
|
| 1006 |
+
"node_modules/range-parser": {
|
| 1007 |
+
"version": "1.2.1",
|
| 1008 |
+
"resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
|
| 1009 |
+
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
|
| 1010 |
+
"license": "MIT",
|
| 1011 |
+
"engines": {
|
| 1012 |
+
"node": ">= 0.6"
|
| 1013 |
+
}
|
| 1014 |
+
},
|
| 1015 |
+
"node_modules/raw-body": {
|
| 1016 |
+
"version": "2.5.2",
|
| 1017 |
+
"resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
|
| 1018 |
+
"integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
|
| 1019 |
+
"license": "MIT",
|
| 1020 |
+
"dependencies": {
|
| 1021 |
+
"bytes": "3.1.2",
|
| 1022 |
+
"http-errors": "2.0.0",
|
| 1023 |
+
"iconv-lite": "0.4.24",
|
| 1024 |
+
"unpipe": "1.0.0"
|
| 1025 |
+
},
|
| 1026 |
+
"engines": {
|
| 1027 |
+
"node": ">= 0.8"
|
| 1028 |
+
}
|
| 1029 |
+
},
|
| 1030 |
+
"node_modules/readable-stream": {
|
| 1031 |
+
"version": "2.3.8",
|
| 1032 |
+
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
| 1033 |
+
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
|
| 1034 |
+
"license": "MIT",
|
| 1035 |
+
"dependencies": {
|
| 1036 |
+
"core-util-is": "~1.0.0",
|
| 1037 |
+
"inherits": "~2.0.3",
|
| 1038 |
+
"isarray": "~1.0.0",
|
| 1039 |
+
"process-nextick-args": "~2.0.0",
|
| 1040 |
+
"safe-buffer": "~5.1.1",
|
| 1041 |
+
"string_decoder": "~1.1.1",
|
| 1042 |
+
"util-deprecate": "~1.0.1"
|
| 1043 |
+
}
|
| 1044 |
+
},
|
| 1045 |
+
"node_modules/readable-stream/node_modules/safe-buffer": {
|
| 1046 |
+
"version": "5.1.2",
|
| 1047 |
+
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
| 1048 |
+
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
|
| 1049 |
+
"license": "MIT"
|
| 1050 |
+
},
|
| 1051 |
+
"node_modules/readdirp": {
|
| 1052 |
+
"version": "3.6.0",
|
| 1053 |
+
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
|
| 1054 |
+
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
|
| 1055 |
+
"dev": true,
|
| 1056 |
+
"license": "MIT",
|
| 1057 |
+
"dependencies": {
|
| 1058 |
+
"picomatch": "^2.2.1"
|
| 1059 |
+
},
|
| 1060 |
+
"engines": {
|
| 1061 |
+
"node": ">=8.10.0"
|
| 1062 |
+
}
|
| 1063 |
+
},
|
| 1064 |
+
"node_modules/safe-buffer": {
|
| 1065 |
+
"version": "5.2.1",
|
| 1066 |
+
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
|
| 1067 |
+
"integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
|
| 1068 |
+
"funding": [
|
| 1069 |
+
{
|
| 1070 |
+
"type": "github",
|
| 1071 |
+
"url": "https://github.com/sponsors/feross"
|
| 1072 |
+
},
|
| 1073 |
+
{
|
| 1074 |
+
"type": "patreon",
|
| 1075 |
+
"url": "https://www.patreon.com/feross"
|
| 1076 |
+
},
|
| 1077 |
+
{
|
| 1078 |
+
"type": "consulting",
|
| 1079 |
+
"url": "https://feross.org/support"
|
| 1080 |
+
}
|
| 1081 |
+
],
|
| 1082 |
+
"license": "MIT"
|
| 1083 |
+
},
|
| 1084 |
+
"node_modules/safer-buffer": {
|
| 1085 |
+
"version": "2.1.2",
|
| 1086 |
+
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
| 1087 |
+
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
| 1088 |
+
"license": "MIT"
|
| 1089 |
+
},
|
| 1090 |
+
"node_modules/semver": {
|
| 1091 |
+
"version": "7.7.2",
|
| 1092 |
+
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
| 1093 |
+
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
|
| 1094 |
+
"dev": true,
|
| 1095 |
+
"license": "ISC",
|
| 1096 |
+
"bin": {
|
| 1097 |
+
"semver": "bin/semver.js"
|
| 1098 |
+
},
|
| 1099 |
+
"engines": {
|
| 1100 |
+
"node": ">=10"
|
| 1101 |
+
}
|
| 1102 |
+
},
|
| 1103 |
+
"node_modules/send": {
|
| 1104 |
+
"version": "0.19.0",
|
| 1105 |
+
"resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
|
| 1106 |
+
"integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
|
| 1107 |
+
"license": "MIT",
|
| 1108 |
+
"dependencies": {
|
| 1109 |
+
"debug": "2.6.9",
|
| 1110 |
+
"depd": "2.0.0",
|
| 1111 |
+
"destroy": "1.2.0",
|
| 1112 |
+
"encodeurl": "~1.0.2",
|
| 1113 |
+
"escape-html": "~1.0.3",
|
| 1114 |
+
"etag": "~1.8.1",
|
| 1115 |
+
"fresh": "0.5.2",
|
| 1116 |
+
"http-errors": "2.0.0",
|
| 1117 |
+
"mime": "1.6.0",
|
| 1118 |
+
"ms": "2.1.3",
|
| 1119 |
+
"on-finished": "2.4.1",
|
| 1120 |
+
"range-parser": "~1.2.1",
|
| 1121 |
+
"statuses": "2.0.1"
|
| 1122 |
+
},
|
| 1123 |
+
"engines": {
|
| 1124 |
+
"node": ">= 0.8.0"
|
| 1125 |
+
}
|
| 1126 |
+
},
|
| 1127 |
+
"node_modules/send/node_modules/encodeurl": {
|
| 1128 |
+
"version": "1.0.2",
|
| 1129 |
+
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
|
| 1130 |
+
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
|
| 1131 |
+
"license": "MIT",
|
| 1132 |
+
"engines": {
|
| 1133 |
+
"node": ">= 0.8"
|
| 1134 |
+
}
|
| 1135 |
+
},
|
| 1136 |
+
"node_modules/send/node_modules/ms": {
|
| 1137 |
+
"version": "2.1.3",
|
| 1138 |
+
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
| 1139 |
+
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
| 1140 |
+
"license": "MIT"
|
| 1141 |
+
},
|
| 1142 |
+
"node_modules/serve-static": {
|
| 1143 |
+
"version": "1.16.2",
|
| 1144 |
+
"resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
|
| 1145 |
+
"integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
|
| 1146 |
+
"license": "MIT",
|
| 1147 |
+
"dependencies": {
|
| 1148 |
+
"encodeurl": "~2.0.0",
|
| 1149 |
+
"escape-html": "~1.0.3",
|
| 1150 |
+
"parseurl": "~1.3.3",
|
| 1151 |
+
"send": "0.19.0"
|
| 1152 |
+
},
|
| 1153 |
+
"engines": {
|
| 1154 |
+
"node": ">= 0.8.0"
|
| 1155 |
+
}
|
| 1156 |
+
},
|
| 1157 |
+
"node_modules/setprototypeof": {
|
| 1158 |
+
"version": "1.2.0",
|
| 1159 |
+
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
| 1160 |
+
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
|
| 1161 |
+
"license": "ISC"
|
| 1162 |
+
},
|
| 1163 |
+
"node_modules/side-channel": {
|
| 1164 |
+
"version": "1.1.0",
|
| 1165 |
+
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz",
|
| 1166 |
+
"integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==",
|
| 1167 |
+
"license": "MIT",
|
| 1168 |
+
"dependencies": {
|
| 1169 |
+
"es-errors": "^1.3.0",
|
| 1170 |
+
"object-inspect": "^1.13.3",
|
| 1171 |
+
"side-channel-list": "^1.0.0",
|
| 1172 |
+
"side-channel-map": "^1.0.1",
|
| 1173 |
+
"side-channel-weakmap": "^1.0.2"
|
| 1174 |
+
},
|
| 1175 |
+
"engines": {
|
| 1176 |
+
"node": ">= 0.4"
|
| 1177 |
+
},
|
| 1178 |
+
"funding": {
|
| 1179 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 1180 |
+
}
|
| 1181 |
+
},
|
| 1182 |
+
"node_modules/side-channel-list": {
|
| 1183 |
+
"version": "1.0.0",
|
| 1184 |
+
"resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz",
|
| 1185 |
+
"integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==",
|
| 1186 |
+
"license": "MIT",
|
| 1187 |
+
"dependencies": {
|
| 1188 |
+
"es-errors": "^1.3.0",
|
| 1189 |
+
"object-inspect": "^1.13.3"
|
| 1190 |
+
},
|
| 1191 |
+
"engines": {
|
| 1192 |
+
"node": ">= 0.4"
|
| 1193 |
+
},
|
| 1194 |
+
"funding": {
|
| 1195 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 1196 |
+
}
|
| 1197 |
+
},
|
| 1198 |
+
"node_modules/side-channel-map": {
|
| 1199 |
+
"version": "1.0.1",
|
| 1200 |
+
"resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",
|
| 1201 |
+
"integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",
|
| 1202 |
+
"license": "MIT",
|
| 1203 |
+
"dependencies": {
|
| 1204 |
+
"call-bound": "^1.0.2",
|
| 1205 |
+
"es-errors": "^1.3.0",
|
| 1206 |
+
"get-intrinsic": "^1.2.5",
|
| 1207 |
+
"object-inspect": "^1.13.3"
|
| 1208 |
+
},
|
| 1209 |
+
"engines": {
|
| 1210 |
+
"node": ">= 0.4"
|
| 1211 |
+
},
|
| 1212 |
+
"funding": {
|
| 1213 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 1214 |
+
}
|
| 1215 |
+
},
|
| 1216 |
+
"node_modules/side-channel-weakmap": {
|
| 1217 |
+
"version": "1.0.2",
|
| 1218 |
+
"resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",
|
| 1219 |
+
"integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",
|
| 1220 |
+
"license": "MIT",
|
| 1221 |
+
"dependencies": {
|
| 1222 |
+
"call-bound": "^1.0.2",
|
| 1223 |
+
"es-errors": "^1.3.0",
|
| 1224 |
+
"get-intrinsic": "^1.2.5",
|
| 1225 |
+
"object-inspect": "^1.13.3",
|
| 1226 |
+
"side-channel-map": "^1.0.1"
|
| 1227 |
+
},
|
| 1228 |
+
"engines": {
|
| 1229 |
+
"node": ">= 0.4"
|
| 1230 |
+
},
|
| 1231 |
+
"funding": {
|
| 1232 |
+
"url": "https://github.com/sponsors/ljharb"
|
| 1233 |
+
}
|
| 1234 |
+
},
|
| 1235 |
+
"node_modules/simple-update-notifier": {
|
| 1236 |
+
"version": "2.0.0",
|
| 1237 |
+
"resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz",
|
| 1238 |
+
"integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==",
|
| 1239 |
+
"dev": true,
|
| 1240 |
+
"license": "MIT",
|
| 1241 |
+
"dependencies": {
|
| 1242 |
+
"semver": "^7.5.3"
|
| 1243 |
+
},
|
| 1244 |
+
"engines": {
|
| 1245 |
+
"node": ">=10"
|
| 1246 |
+
}
|
| 1247 |
+
},
|
| 1248 |
+
"node_modules/statuses": {
|
| 1249 |
+
"version": "2.0.1",
|
| 1250 |
+
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
|
| 1251 |
+
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
|
| 1252 |
+
"license": "MIT",
|
| 1253 |
+
"engines": {
|
| 1254 |
+
"node": ">= 0.8"
|
| 1255 |
+
}
|
| 1256 |
+
},
|
| 1257 |
+
"node_modules/streamsearch": {
|
| 1258 |
+
"version": "1.1.0",
|
| 1259 |
+
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
|
| 1260 |
+
"integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
|
| 1261 |
+
"engines": {
|
| 1262 |
+
"node": ">=10.0.0"
|
| 1263 |
+
}
|
| 1264 |
+
},
|
| 1265 |
+
"node_modules/string_decoder": {
|
| 1266 |
+
"version": "1.1.1",
|
| 1267 |
+
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
| 1268 |
+
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
| 1269 |
+
"license": "MIT",
|
| 1270 |
+
"dependencies": {
|
| 1271 |
+
"safe-buffer": "~5.1.0"
|
| 1272 |
+
}
|
| 1273 |
+
},
|
| 1274 |
+
"node_modules/string_decoder/node_modules/safe-buffer": {
|
| 1275 |
+
"version": "5.1.2",
|
| 1276 |
+
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
| 1277 |
+
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
|
| 1278 |
+
"license": "MIT"
|
| 1279 |
+
},
|
| 1280 |
+
"node_modules/supports-color": {
|
| 1281 |
+
"version": "5.5.0",
|
| 1282 |
+
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
| 1283 |
+
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
| 1284 |
+
"dev": true,
|
| 1285 |
+
"license": "MIT",
|
| 1286 |
+
"dependencies": {
|
| 1287 |
+
"has-flag": "^3.0.0"
|
| 1288 |
+
},
|
| 1289 |
+
"engines": {
|
| 1290 |
+
"node": ">=4"
|
| 1291 |
+
}
|
| 1292 |
+
},
|
| 1293 |
+
"node_modules/swagger-ui-dist": {
|
| 1294 |
+
"version": "5.25.2",
|
| 1295 |
+
"resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.25.2.tgz",
|
| 1296 |
+
"integrity": "sha512-V4JyoygUe5nCbn7bAD0fVKSC0yNcL3ROIQtGC7M0NATKuyosCSmMU6T0yDZIIuGpSxjsjZh/D2Ejb8lnF2jjxw==",
|
| 1297 |
+
"license": "Apache-2.0",
|
| 1298 |
+
"dependencies": {
|
| 1299 |
+
"@scarf/scarf": "=1.4.0"
|
| 1300 |
+
}
|
| 1301 |
+
},
|
| 1302 |
+
"node_modules/swagger-ui-express": {
|
| 1303 |
+
"version": "5.0.1",
|
| 1304 |
+
"resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.1.tgz",
|
| 1305 |
+
"integrity": "sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==",
|
| 1306 |
+
"license": "MIT",
|
| 1307 |
+
"dependencies": {
|
| 1308 |
+
"swagger-ui-dist": ">=5.0.0"
|
| 1309 |
+
},
|
| 1310 |
+
"engines": {
|
| 1311 |
+
"node": ">= v0.10.32"
|
| 1312 |
+
},
|
| 1313 |
+
"peerDependencies": {
|
| 1314 |
+
"express": ">=4.0.0 || >=5.0.0-beta"
|
| 1315 |
+
}
|
| 1316 |
+
},
|
| 1317 |
+
"node_modules/to-regex-range": {
|
| 1318 |
+
"version": "5.0.1",
|
| 1319 |
+
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
| 1320 |
+
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
|
| 1321 |
+
"dev": true,
|
| 1322 |
+
"license": "MIT",
|
| 1323 |
+
"dependencies": {
|
| 1324 |
+
"is-number": "^7.0.0"
|
| 1325 |
+
},
|
| 1326 |
+
"engines": {
|
| 1327 |
+
"node": ">=8.0"
|
| 1328 |
+
}
|
| 1329 |
+
},
|
| 1330 |
+
"node_modules/toidentifier": {
|
| 1331 |
+
"version": "1.0.1",
|
| 1332 |
+
"resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
|
| 1333 |
+
"integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
|
| 1334 |
+
"license": "MIT",
|
| 1335 |
+
"engines": {
|
| 1336 |
+
"node": ">=0.6"
|
| 1337 |
+
}
|
| 1338 |
+
},
|
| 1339 |
+
"node_modules/touch": {
|
| 1340 |
+
"version": "3.1.1",
|
| 1341 |
+
"resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz",
|
| 1342 |
+
"integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==",
|
| 1343 |
+
"dev": true,
|
| 1344 |
+
"license": "ISC",
|
| 1345 |
+
"bin": {
|
| 1346 |
+
"nodetouch": "bin/nodetouch.js"
|
| 1347 |
+
}
|
| 1348 |
+
},
|
| 1349 |
+
"node_modules/type-is": {
|
| 1350 |
+
"version": "1.6.18",
|
| 1351 |
+
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
|
| 1352 |
+
"integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
|
| 1353 |
+
"license": "MIT",
|
| 1354 |
+
"dependencies": {
|
| 1355 |
+
"media-typer": "0.3.0",
|
| 1356 |
+
"mime-types": "~2.1.24"
|
| 1357 |
+
},
|
| 1358 |
+
"engines": {
|
| 1359 |
+
"node": ">= 0.6"
|
| 1360 |
+
}
|
| 1361 |
+
},
|
| 1362 |
+
"node_modules/typedarray": {
|
| 1363 |
+
"version": "0.0.6",
|
| 1364 |
+
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
|
| 1365 |
+
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
|
| 1366 |
+
"license": "MIT"
|
| 1367 |
+
},
|
| 1368 |
+
"node_modules/undefsafe": {
|
| 1369 |
+
"version": "2.0.5",
|
| 1370 |
+
"resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
|
| 1371 |
+
"integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
|
| 1372 |
+
"dev": true,
|
| 1373 |
+
"license": "MIT"
|
| 1374 |
+
},
|
| 1375 |
+
"node_modules/unpipe": {
|
| 1376 |
+
"version": "1.0.0",
|
| 1377 |
+
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
|
| 1378 |
+
"integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
|
| 1379 |
+
"license": "MIT",
|
| 1380 |
+
"engines": {
|
| 1381 |
+
"node": ">= 0.8"
|
| 1382 |
+
}
|
| 1383 |
+
},
|
| 1384 |
+
"node_modules/util-deprecate": {
|
| 1385 |
+
"version": "1.0.2",
|
| 1386 |
+
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
| 1387 |
+
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
|
| 1388 |
+
"license": "MIT"
|
| 1389 |
+
},
|
| 1390 |
+
"node_modules/utils-merge": {
|
| 1391 |
+
"version": "1.0.1",
|
| 1392 |
+
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
|
| 1393 |
+
"integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
|
| 1394 |
+
"license": "MIT",
|
| 1395 |
+
"engines": {
|
| 1396 |
+
"node": ">= 0.4.0"
|
| 1397 |
+
}
|
| 1398 |
+
},
|
| 1399 |
+
"node_modules/vary": {
|
| 1400 |
+
"version": "1.1.2",
|
| 1401 |
+
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
| 1402 |
+
"integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
|
| 1403 |
+
"license": "MIT",
|
| 1404 |
+
"engines": {
|
| 1405 |
+
"node": ">= 0.8"
|
| 1406 |
+
}
|
| 1407 |
+
},
|
| 1408 |
+
"node_modules/xtend": {
|
| 1409 |
+
"version": "4.0.2",
|
| 1410 |
+
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
| 1411 |
+
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
|
| 1412 |
+
"license": "MIT",
|
| 1413 |
+
"engines": {
|
| 1414 |
+
"node": ">=0.4"
|
| 1415 |
+
}
|
| 1416 |
+
}
|
| 1417 |
+
}
|
| 1418 |
+
}
|
node_modules/@scarf/scarf/LICENSE
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Apache License
|
| 2 |
+
Version 2.0, January 2004
|
| 3 |
+
http://www.apache.org/licenses/
|
| 4 |
+
|
| 5 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
| 6 |
+
|
| 7 |
+
1. Definitions.
|
| 8 |
+
|
| 9 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
| 10 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
| 11 |
+
|
| 12 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
| 13 |
+
the copyright owner that is granting the License.
|
| 14 |
+
|
| 15 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
| 16 |
+
other entities that control, are controlled by, or are under common
|
| 17 |
+
control with that entity. For the purposes of this definition,
|
| 18 |
+
"control" means (i) the power, direct or indirect, to cause the
|
| 19 |
+
direction or management of such entity, whether by contract or
|
| 20 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
| 21 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
| 22 |
+
|
| 23 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
| 24 |
+
exercising permissions granted by this License.
|
| 25 |
+
|
| 26 |
+
"Source" form shall mean the preferred form for making modifications,
|
| 27 |
+
including but not limited to software source code, documentation
|
| 28 |
+
source, and configuration files.
|
| 29 |
+
|
| 30 |
+
"Object" form shall mean any form resulting from mechanical
|
| 31 |
+
transformation or translation of a Source form, including but
|
| 32 |
+
not limited to compiled object code, generated documentation,
|
| 33 |
+
and conversions to other media types.
|
| 34 |
+
|
| 35 |
+
"Work" shall mean the work of authorship, whether in Source or
|
| 36 |
+
Object form, made available under the License, as indicated by a
|
| 37 |
+
copyright notice that is included in or attached to the work
|
| 38 |
+
(an example is provided in the Appendix below).
|
| 39 |
+
|
| 40 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
| 41 |
+
form, that is based on (or derived from) the Work and for which the
|
| 42 |
+
editorial revisions, annotations, elaborations, or other modifications
|
| 43 |
+
represent, as a whole, an original work of authorship. For the purposes
|
| 44 |
+
of this License, Derivative Works shall not include works that remain
|
| 45 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
| 46 |
+
the Work and Derivative Works thereof.
|
| 47 |
+
|
| 48 |
+
"Contribution" shall mean any work of authorship, including
|
| 49 |
+
the original version of the Work and any modifications or additions
|
| 50 |
+
to that Work or Derivative Works thereof, that is intentionally
|
| 51 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
| 52 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
| 53 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
| 54 |
+
means any form of electronic, verbal, or written communication sent
|
| 55 |
+
to the Licensor or its representatives, including but not limited to
|
| 56 |
+
communication on electronic mailing lists, source code control systems,
|
| 57 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
| 58 |
+
Licensor for the purpose of discussing and improving the Work, but
|
| 59 |
+
excluding communication that is conspicuously marked or otherwise
|
| 60 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
| 61 |
+
|
| 62 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
| 63 |
+
on behalf of whom a Contribution has been received by Licensor and
|
| 64 |
+
subsequently incorporated within the Work.
|
| 65 |
+
|
| 66 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
| 67 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 68 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 69 |
+
copyright license to reproduce, prepare Derivative Works of,
|
| 70 |
+
publicly display, publicly perform, sublicense, and distribute the
|
| 71 |
+
Work and such Derivative Works in Source or Object form.
|
| 72 |
+
|
| 73 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
| 74 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 75 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 76 |
+
(except as stated in this section) patent license to make, have made,
|
| 77 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
| 78 |
+
where such license applies only to those patent claims licensable
|
| 79 |
+
by such Contributor that are necessarily infringed by their
|
| 80 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
| 81 |
+
with the Work to which such Contribution(s) was submitted. If You
|
| 82 |
+
institute patent litigation against any entity (including a
|
| 83 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
| 84 |
+
or a Contribution incorporated within the Work constitutes direct
|
| 85 |
+
or contributory patent infringement, then any patent licenses
|
| 86 |
+
granted to You under this License for that Work shall terminate
|
| 87 |
+
as of the date such litigation is filed.
|
| 88 |
+
|
| 89 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
| 90 |
+
Work or Derivative Works thereof in any medium, with or without
|
| 91 |
+
modifications, and in Source or Object form, provided that You
|
| 92 |
+
meet the following conditions:
|
| 93 |
+
|
| 94 |
+
(a) You must give any other recipients of the Work or
|
| 95 |
+
Derivative Works a copy of this License; and
|
| 96 |
+
|
| 97 |
+
(b) You must cause any modified files to carry prominent notices
|
| 98 |
+
stating that You changed the files; and
|
| 99 |
+
|
| 100 |
+
(c) You must retain, in the Source form of any Derivative Works
|
| 101 |
+
that You distribute, all copyright, patent, trademark, and
|
| 102 |
+
attribution notices from the Source form of the Work,
|
| 103 |
+
excluding those notices that do not pertain to any part of
|
| 104 |
+
the Derivative Works; and
|
| 105 |
+
|
| 106 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
| 107 |
+
distribution, then any Derivative Works that You distribute must
|
| 108 |
+
include a readable copy of the attribution notices contained
|
| 109 |
+
within such NOTICE file, excluding those notices that do not
|
| 110 |
+
pertain to any part of the Derivative Works, in at least one
|
| 111 |
+
of the following places: within a NOTICE text file distributed
|
| 112 |
+
as part of the Derivative Works; within the Source form or
|
| 113 |
+
documentation, if provided along with the Derivative Works; or,
|
| 114 |
+
within a display generated by the Derivative Works, if and
|
| 115 |
+
wherever such third-party notices normally appear. The contents
|
| 116 |
+
of the NOTICE file are for informational purposes only and
|
| 117 |
+
do not modify the License. You may add Your own attribution
|
| 118 |
+
notices within Derivative Works that You distribute, alongside
|
| 119 |
+
or as an addendum to the NOTICE text from the Work, provided
|
| 120 |
+
that such additional attribution notices cannot be construed
|
| 121 |
+
as modifying the License.
|
| 122 |
+
|
| 123 |
+
You may add Your own copyright statement to Your modifications and
|
| 124 |
+
may provide additional or different license terms and conditions
|
| 125 |
+
for use, reproduction, or distribution of Your modifications, or
|
| 126 |
+
for any such Derivative Works as a whole, provided Your use,
|
| 127 |
+
reproduction, and distribution of the Work otherwise complies with
|
| 128 |
+
the conditions stated in this License.
|
| 129 |
+
|
| 130 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
| 131 |
+
any Contribution intentionally submitted for inclusion in the Work
|
| 132 |
+
by You to the Licensor shall be under the terms and conditions of
|
| 133 |
+
this License, without any additional terms or conditions.
|
| 134 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
| 135 |
+
the terms of any separate license agreement you may have executed
|
| 136 |
+
with Licensor regarding such Contributions.
|
| 137 |
+
|
| 138 |
+
6. Trademarks. This License does not grant permission to use the trade
|
| 139 |
+
names, trademarks, service marks, or product names of the Licensor,
|
| 140 |
+
except as required for reasonable and customary use in describing the
|
| 141 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
| 142 |
+
|
| 143 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
| 144 |
+
agreed to in writing, Licensor provides the Work (and each
|
| 145 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
| 146 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
| 147 |
+
implied, including, without limitation, any warranties or conditions
|
| 148 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
| 149 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
| 150 |
+
appropriateness of using or redistributing the Work and assume any
|
| 151 |
+
risks associated with Your exercise of permissions under this License.
|
| 152 |
+
|
| 153 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
| 154 |
+
whether in tort (including negligence), contract, or otherwise,
|
| 155 |
+
unless required by applicable law (such as deliberate and grossly
|
| 156 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
| 157 |
+
liable to You for damages, including any direct, indirect, special,
|
| 158 |
+
incidental, or consequential damages of any character arising as a
|
| 159 |
+
result of this License or out of the use or inability to use the
|
| 160 |
+
Work (including but not limited to damages for loss of goodwill,
|
| 161 |
+
work stoppage, computer failure or malfunction, or any and all
|
| 162 |
+
other commercial damages or losses), even if such Contributor
|
| 163 |
+
has been advised of the possibility of such damages.
|
| 164 |
+
|
| 165 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
| 166 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
| 167 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
| 168 |
+
or other liability obligations and/or rights consistent with this
|
| 169 |
+
License. However, in accepting such obligations, You may act only
|
| 170 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
| 171 |
+
of any other Contributor, and only if You agree to indemnify,
|
| 172 |
+
defend, and hold each Contributor harmless for any liability
|
| 173 |
+
incurred by, or claims asserted against, such Contributor by reason
|
| 174 |
+
of your accepting any such warranty or additional liability.
|
| 175 |
+
|
| 176 |
+
END OF TERMS AND CONDITIONS
|
| 177 |
+
|
| 178 |
+
APPENDIX: How to apply the Apache License to your work.
|
| 179 |
+
|
| 180 |
+
To apply the Apache License to your work, attach the following
|
| 181 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
| 182 |
+
replaced with your own identifying information. (Don't include
|
| 183 |
+
the brackets!) The text should be enclosed in the appropriate
|
| 184 |
+
comment syntax for the file format. We also recommend that a
|
| 185 |
+
file or class name and description of purpose be included on the
|
| 186 |
+
same "printed page" as the copyright notice for easier
|
| 187 |
+
identification within third-party archives.
|
| 188 |
+
|
| 189 |
+
Copyright 2020 Scarf Systems, Inc.
|
| 190 |
+
|
| 191 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
| 192 |
+
you may not use this file except in compliance with the License.
|
| 193 |
+
You may obtain a copy of the License at
|
| 194 |
+
|
| 195 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
| 196 |
+
|
| 197 |
+
Unless required by applicable law or agreed to in writing, software
|
| 198 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
| 199 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 200 |
+
See the License for the specific language governing permissions and
|
| 201 |
+
limitations under the License.
|
node_modules/@scarf/scarf/README.md
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# scarf-js
|
| 2 |
+
|
| 3 |
+

|
| 4 |
+
[](https://badge.fury.io/js/%40scarf%2Fscarf)
|
| 5 |
+
<a href="https://www.npmjs.com/package/@scarf/scarf"></a>
|
| 6 |
+
<img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=fc72d03c-c3a2-4736-b243-10eeff839778" />
|
| 7 |
+
<a href="https://tinyurl.com/scarf-community-slack"><img src="https://img.shields.io/badge/Scarf%20Community%20-Slack-blue" alt="Join the Scarf Community Slack" />
|
| 8 |
+
</a>
|
| 9 |
+
|
| 10 |
+
Scarf is like Google Analytics for your npm packages. By sending some basic
|
| 11 |
+
details after installation, this package can help you can gain insight into how
|
| 12 |
+
your packages are used and by which companies. Scarf aims to help open-source developers
|
| 13 |
+
fund their work when it is used commercially.
|
| 14 |
+
|
| 15 |
+
To read more about why we wrote this library, check out [this post](https://github.com/scarf-sh/scarf-js/blob/master/WHY.org) on the topic.
|
| 16 |
+
|
| 17 |
+
### Features
|
| 18 |
+
|
| 19 |
+
- No dependencies.
|
| 20 |
+
- Fully transparent to the user. Scarf will log its behavior to the console
|
| 21 |
+
during installation. It will never silently report analytics for someone that
|
| 22 |
+
hasn't explictly given permission to do so.
|
| 23 |
+
- Never interrupts your package installation. Reporting is done on a best effort basis.
|
| 24 |
+
|
| 25 |
+
### Installing
|
| 26 |
+
|
| 27 |
+
You'll first need to create a library entry on [Scarf](https://scarf.sh). Once
|
| 28 |
+
created, add a dependency on this library to your own:
|
| 29 |
+
|
| 30 |
+
```bash
|
| 31 |
+
npm i --save @scarf/scarf
|
| 32 |
+
```
|
| 33 |
+
|
| 34 |
+
Once your library is published to npm with this change, Scarf will automatically
|
| 35 |
+
collect stats on install, no additional code is required!
|
| 36 |
+
|
| 37 |
+
Head to your package's dashboard on Scarf to see your reports when available.
|
| 38 |
+
|
| 39 |
+
### Configuring
|
| 40 |
+
|
| 41 |
+
Users of your package will be opted in by default and can opt out by setting the
|
| 42 |
+
`SCARF_ANALYTICS=false` environment variable. If you'd like Scarf analytics to
|
| 43 |
+
instead be opt-in, you can set this by adding an entry to your `package.json`
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
```json5
|
| 47 |
+
// your-package/package.json
|
| 48 |
+
|
| 49 |
+
{
|
| 50 |
+
// ...
|
| 51 |
+
"scarfSettings": {
|
| 52 |
+
"defaultOptIn": false
|
| 53 |
+
}
|
| 54 |
+
// ...
|
| 55 |
+
}
|
| 56 |
+
```
|
| 57 |
+
|
| 58 |
+
Scarf will now be opt-out by default, and users can set `SCARF_ANALYTICS=true`
|
| 59 |
+
to opt in.
|
| 60 |
+
|
| 61 |
+
Regardless of the default state, Scarf will log what it is doing to users who
|
| 62 |
+
haven't explictly opted in or out.
|
| 63 |
+
|
| 64 |
+
By default, scarf-js will only trigger analytics when your package is installed as a dependency of another package, or is being installed globally. This ensures that scarf-js analytics will not be triggered on `npm install` being run _within your project_. To change this, you can add:
|
| 65 |
+
|
| 66 |
+
```json5
|
| 67 |
+
// your-package/package.json
|
| 68 |
+
|
| 69 |
+
{
|
| 70 |
+
// ...
|
| 71 |
+
"scarfSettings": {
|
| 72 |
+
"allowTopLevel": true
|
| 73 |
+
}
|
| 74 |
+
// ...
|
| 75 |
+
}
|
| 76 |
+
```
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
#### Full Configuration Example
|
| 80 |
+
|
| 81 |
+
```json5
|
| 82 |
+
// your-package/package.json
|
| 83 |
+
|
| 84 |
+
{
|
| 85 |
+
// ...
|
| 86 |
+
"scarfSettings": {
|
| 87 |
+
// Toggles whether Scarf is enabled for this package
|
| 88 |
+
"enabled": true,
|
| 89 |
+
// Enables Scarf when users run npm install directly in your repository
|
| 90 |
+
// Scarf will try to report the Git commit SHA of your repository if it can
|
| 91 |
+
// be obtained.
|
| 92 |
+
"allowTopLevel": true,
|
| 93 |
+
// Users will be opted into analytics by default
|
| 94 |
+
"defaultOptIn": true,
|
| 95 |
+
// By default, Scarf searches for its own location in your build's dependency
|
| 96 |
+
// graph to ensure reporting can be done for all packages using Scarf.
|
| 97 |
+
// For large projects with lots of dependencies, generating that dependency
|
| 98 |
+
// graph takes more time than Scarf allots for its entire process, so Scarf
|
| 99 |
+
// will always time out. `skipTraversal` is an optional flag for large
|
| 100 |
+
// applications to skip that traversal entirely. Use this flag with caution and
|
| 101 |
+
// care, as it will break Scarf analytics for all other packages you depend
|
| 102 |
+
// on in your build.
|
| 103 |
+
"skipTraversal": false
|
| 104 |
+
}
|
| 105 |
+
// ...
|
| 106 |
+
}
|
| 107 |
+
```
|
| 108 |
+
|
| 109 |
+
### FAQ
|
| 110 |
+
|
| 111 |
+
#### What information does scarf-js provide me as a package author?
|
| 112 |
+
|
| 113 |
+
- Understanding your user-base
|
| 114 |
+
- Which companies are using your package?
|
| 115 |
+
- Is your project growing or shrinking? Where? On which platforms?
|
| 116 |
+
- Which versions of your package are being used?
|
| 117 |
+
|
| 118 |
+
#### As a user of a package using scarf-js, what information does scarf-js send about me?
|
| 119 |
+
|
| 120 |
+
*Scarf does not store personally identifying information.* Scarf aims to collect information that is helpful for:
|
| 121 |
+
- Open Source package maintainence
|
| 122 |
+
- Open Source commercialization
|
| 123 |
+
|
| 124 |
+
Specifically, scarf-js sends:
|
| 125 |
+
|
| 126 |
+
- The operating system you are using
|
| 127 |
+
- Your IP address will be used to look up any available company information. _Scarf does not store the actual IP address_
|
| 128 |
+
- Limited dependency tree information. Scarf sends the name and version of the package(s) that directly depend on scarf-js. Additionally, scarf-js will send SHA256-hashed name and version for the following packages in the dependency tree:
|
| 129 |
+
- Packages that depend on a package that depends on scarf-js.
|
| 130 |
+
- The root package of the dependency tree.
|
| 131 |
+
This allows Scarf to provide information for maintainers about which public packages are using their own, without exposing identifying details of non-public packages.
|
| 132 |
+
|
| 133 |
+
You can have scarf-js print the exact JSON payload it sends by setting `SCARF_VERBOSE=true` in your environment.
|
| 134 |
+
|
| 135 |
+
#### As a user of a package using scarf-js, how can I opt out of analytics?
|
| 136 |
+
|
| 137 |
+
Scarf's analytics help support developers of the open source packages you are
|
| 138 |
+
using, so enabling analytics is appreciated. However, if you'd like to opt out,
|
| 139 |
+
you can add your preference to your project's `package.json`:
|
| 140 |
+
|
| 141 |
+
|
| 142 |
+
```json5
|
| 143 |
+
// your-package/package.json
|
| 144 |
+
|
| 145 |
+
{
|
| 146 |
+
// ...
|
| 147 |
+
"scarfSettings": {
|
| 148 |
+
"enabled": false
|
| 149 |
+
}
|
| 150 |
+
// ...
|
| 151 |
+
}
|
| 152 |
+
```
|
| 153 |
+
|
| 154 |
+
Alternatively, you can set this variable in your environment:
|
| 155 |
+
|
| 156 |
+
```shell
|
| 157 |
+
export SCARF_ANALYTICS=false
|
| 158 |
+
```
|
| 159 |
+
|
| 160 |
+
You can also set this variable in accordance to the [Console Do Not Track](https://consoledonottrack.com/) standard:
|
| 161 |
+
```shell
|
| 162 |
+
export DO_NOT_TRACK=1
|
| 163 |
+
```
|
| 164 |
+
|
| 165 |
+
Either route will disable Scarf for all packages.
|
| 166 |
+
|
| 167 |
+
#### I distribute a package on npm, and scarf-js is in our dependency tree. Can I disable the analytics for my downstream dependents?
|
| 168 |
+
|
| 169 |
+
Yes. By opting out of analytics via `package.json`, any package upstream will have analytics disbabled.
|
| 170 |
+
|
| 171 |
+
```json5
|
| 172 |
+
// your-package/package.json
|
| 173 |
+
|
| 174 |
+
{
|
| 175 |
+
// ...
|
| 176 |
+
"scarfSettings": {
|
| 177 |
+
"enabled": false
|
| 178 |
+
}
|
| 179 |
+
// ...
|
| 180 |
+
}
|
| 181 |
+
```
|
| 182 |
+
|
| 183 |
+
Installers of your packages will have scarf-js disabled for all dependencies upstream from yours.
|
| 184 |
+
|
| 185 |
+
|
| 186 |
+
### Developing
|
| 187 |
+
|
| 188 |
+
Setting the environment variable `SCARF_LOCAL_PORT=8080` will configure Scarf to
|
| 189 |
+
use http://localhost:8080 as the analytics endpoint host.
|
| 190 |
+
|
| 191 |
+
### Future work
|
| 192 |
+
|
| 193 |
+
Future releases of scarf-js will provide a module of utility functions to
|
| 194 |
+
collect usage analytics in addition to the current installation analytics.
|
| 195 |
+
|
| 196 |
+
### Community
|
| 197 |
+
|
| 198 |
+
Join the [Scarf-Community workspace](https://tinyurl.com/scarf-community-slack) on Slack and find us in the #scarf-js channel. We'll keep an eye out for your questions and concerns.
|
node_modules/@scarf/scarf/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "@scarf/scarf",
|
| 3 |
+
"version": "1.4.0",
|
| 4 |
+
"description": "Scarf is like Google Analytics for your npm packages. Gain insights into how your packages are installed and used, and by which companies.",
|
| 5 |
+
"main": "report.js",
|
| 6 |
+
"homepage": "https://github.com/scarf-sh/scarf-js",
|
| 7 |
+
"repository": {
|
| 8 |
+
"type": "git",
|
| 9 |
+
"url": "git+https://github.com/scarf-sh/scarf-js.git"
|
| 10 |
+
},
|
| 11 |
+
"files": [
|
| 12 |
+
"report.js"
|
| 13 |
+
],
|
| 14 |
+
"scripts": {
|
| 15 |
+
"postinstall": "node ./report.js",
|
| 16 |
+
"test": "jest --verbose"
|
| 17 |
+
},
|
| 18 |
+
"author": "Scarf Systems",
|
| 19 |
+
"license": "Apache-2.0",
|
| 20 |
+
"devDependencies": {
|
| 21 |
+
"jest": "^25.3.0",
|
| 22 |
+
"minimist": "^1.2.2",
|
| 23 |
+
"standard": "^14.3.1"
|
| 24 |
+
},
|
| 25 |
+
"standard": {
|
| 26 |
+
"globals": [
|
| 27 |
+
"expect",
|
| 28 |
+
"test",
|
| 29 |
+
"jest",
|
| 30 |
+
"beforeAll",
|
| 31 |
+
"afterAll",
|
| 32 |
+
"fail",
|
| 33 |
+
"describe"
|
| 34 |
+
]
|
| 35 |
+
}
|
| 36 |
+
}
|
node_modules/@scarf/scarf/report.js
ADDED
|
@@ -0,0 +1,574 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
const path = require('path')
|
| 2 |
+
const os = require('os')
|
| 3 |
+
const exec = require('child_process').exec
|
| 4 |
+
const localDevPort = process.env.SCARF_LOCAL_PORT
|
| 5 |
+
const https = localDevPort ? require('http') : require('https')
|
| 6 |
+
const fs = require('fs')
|
| 7 |
+
const fsAsync = fs.promises
|
| 8 |
+
const util = require('util')
|
| 9 |
+
|
| 10 |
+
const scarfHost = localDevPort ? 'localhost' : 'scarf.sh'
|
| 11 |
+
const scarfLibName = '@scarf/scarf'
|
| 12 |
+
const privatePackageRewrite = '@private/private'
|
| 13 |
+
const privateVersionRewrite = '0'
|
| 14 |
+
|
| 15 |
+
const rootPath = process.env.INIT_CWD
|
| 16 |
+
|
| 17 |
+
// Pulled into a function for test mocking
|
| 18 |
+
function tmpFileName () {
|
| 19 |
+
// throttle per user
|
| 20 |
+
const username = os.userInfo().username
|
| 21 |
+
return path.join(os.tmpdir(), `scarf-js-history-${username}.log`)
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
// Pulled into a function for test mocking
|
| 25 |
+
function dirName () {
|
| 26 |
+
return __dirname
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
function npmExecPath () {
|
| 30 |
+
return process.env.npm_execpath
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
const userMessageThrottleTime = 1000 * 60 // 1 minute
|
| 34 |
+
|
| 35 |
+
const execTimeout = 3000
|
| 36 |
+
|
| 37 |
+
// In general, these keys should never change to remain backwards compatible
|
| 38 |
+
// with previous versions of Scarf. If we need to update them, we'll need to
|
| 39 |
+
// make sure we can read the previous values as well
|
| 40 |
+
const optedInLogRateLimitKey = 'optedInLastLog'
|
| 41 |
+
const optedOutLogRateLimitKey = 'optedOutLastLog'
|
| 42 |
+
|
| 43 |
+
const makeDefaultSettings = () => {
|
| 44 |
+
return {
|
| 45 |
+
defaultOptIn: true
|
| 46 |
+
}
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
function logIfVerbose (toLog, stream) {
|
| 50 |
+
if (process.env.SCARF_VERBOSE === 'true') {
|
| 51 |
+
(stream || console.log)(toLog)
|
| 52 |
+
}
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
// SCARF_NO_ANALYTICS was the original variable, we'll get rid of it eventually
|
| 56 |
+
const userHasOptedOut = (rootPackage) => {
|
| 57 |
+
return (rootPackage && rootPackage.scarfSettings && rootPackage.scarfSettings.enabled === false) ||
|
| 58 |
+
(process.env.SCARF_ANALYTICS === 'false' || process.env.SCARF_NO_ANALYTICS === 'true' || process.env.DO_NOT_TRACK === '1')
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
const userHasOptedIn = (rootPackage) => {
|
| 62 |
+
return (rootPackage && rootPackage.scarfSettings && rootPackage.scarfSettings.enabled) || process.env.SCARF_ANALYTICS === 'true'
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
// Packages that depend on Scarf can configure whether to should fire when
|
| 66 |
+
// `npm install` is being run directly from within the package, rather than from a
|
| 67 |
+
// dependent package
|
| 68 |
+
function allowTopLevel (rootPackage) {
|
| 69 |
+
return rootPackage && rootPackage.scarfSettings && rootPackage.scarfSettings.allowTopLevel
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
function skipTraversal (rootPackage) {
|
| 73 |
+
return rootPackage && rootPackage.scarfSettings && rootPackage.scarfSettings.skipTraversal
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
function parentIsRoot (dependencyToReport) {
|
| 77 |
+
const parent = dependencyToReport.parent
|
| 78 |
+
const rootPackage = dependencyToReport.rootPackage
|
| 79 |
+
|
| 80 |
+
return parent && rootPackage && parent.name === rootPackage.name && parent.version === rootPackage.version
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
function isTopLevel (dependencyToReport) {
|
| 84 |
+
return parentIsRoot(dependencyToReport) && !process.env.npm_config_global
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
function isGlobal (dependencyToReport) {
|
| 88 |
+
return parentIsRoot(dependencyToReport) && !!process.env.npm_config_global
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
function hashWithDefault (toHash, defaultReturn) {
|
| 92 |
+
let crypto
|
| 93 |
+
try {
|
| 94 |
+
crypto = require('crypto')
|
| 95 |
+
} catch (err) {
|
| 96 |
+
logIfVerbose('node crypto module unavailable')
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
if (crypto && toHash) {
|
| 100 |
+
return crypto.createHash('sha256').update(toHash, 'utf-8').digest('hex')
|
| 101 |
+
} else {
|
| 102 |
+
return defaultReturn
|
| 103 |
+
}
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
// We don't send any paths, hash package names and versions
|
| 107 |
+
function redactSensitivePackageInfo (dependencyInfo) {
|
| 108 |
+
if (dependencyInfo.grandparent && dependencyInfo.grandparent.name) {
|
| 109 |
+
dependencyInfo.grandparent.nameHash = hashWithDefault(dependencyInfo.grandparent.name, privatePackageRewrite)
|
| 110 |
+
dependencyInfo.grandparent.versionHash = hashWithDefault(dependencyInfo.grandparent.version, privateVersionRewrite)
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
if (dependencyInfo.rootPackage && dependencyInfo.rootPackage.name) {
|
| 114 |
+
dependencyInfo.rootPackage.nameHash = hashWithDefault(dependencyInfo.rootPackage.name, privatePackageRewrite)
|
| 115 |
+
dependencyInfo.rootPackage.versionHash = hashWithDefault(dependencyInfo.rootPackage.version, privateVersionRewrite)
|
| 116 |
+
}
|
| 117 |
+
|
| 118 |
+
delete (dependencyInfo.rootPackage.packageJsonPath)
|
| 119 |
+
delete (dependencyInfo.rootPackage.path)
|
| 120 |
+
delete (dependencyInfo.rootPackage.name)
|
| 121 |
+
delete (dependencyInfo.rootPackage.version)
|
| 122 |
+
delete (dependencyInfo.parent.path)
|
| 123 |
+
delete (dependencyInfo.scarf.path)
|
| 124 |
+
if (dependencyInfo.grandparent) {
|
| 125 |
+
delete (dependencyInfo.grandparent.path)
|
| 126 |
+
delete (dependencyInfo.grandparent.name)
|
| 127 |
+
delete (dependencyInfo.grandparent.version)
|
| 128 |
+
}
|
| 129 |
+
return dependencyInfo
|
| 130 |
+
}
|
| 131 |
+
|
| 132 |
+
/*
|
| 133 |
+
Scarf-js is automatically disabled when being run inside of a yarn install.
|
| 134 |
+
The `npm_execpath` environment variable tells us which package manager is
|
| 135 |
+
running our install
|
| 136 |
+
*/
|
| 137 |
+
function isYarn () {
|
| 138 |
+
const execPath = module.exports.npmExecPath() || ''
|
| 139 |
+
return ['yarn', 'yarn.js', 'yarnpkg', 'yarn.cmd', 'yarnpkg.cmd']
|
| 140 |
+
.some(packageManBinName => execPath.endsWith(packageManBinName))
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
function processDependencyTreeOutput (resolve, reject) {
|
| 144 |
+
return function (error, stdout, stderr) {
|
| 145 |
+
if (error && !stdout) {
|
| 146 |
+
return reject(new Error(`Scarf received an error from npm -ls: ${error} | ${stderr}`))
|
| 147 |
+
}
|
| 148 |
+
|
| 149 |
+
try {
|
| 150 |
+
const output = JSON.parse(stdout)
|
| 151 |
+
|
| 152 |
+
const depsToScarf = findScarfInFullDependencyTree(output).filter(depChain => depChain.length >= 2)
|
| 153 |
+
if (!depsToScarf.length) {
|
| 154 |
+
return reject(new Error('No Scarf parent package found'))
|
| 155 |
+
}
|
| 156 |
+
const rootPackageDetails = rootPackageDepInfo(output)
|
| 157 |
+
|
| 158 |
+
const dependencyInfo = depsToScarf.map(depChain => {
|
| 159 |
+
return {
|
| 160 |
+
scarf: depChain[depChain.length - 1],
|
| 161 |
+
parent: depChain[depChain.length - 2],
|
| 162 |
+
grandparent: depChain[depChain.length - 3],
|
| 163 |
+
rootPackage: rootPackageDetails,
|
| 164 |
+
anyInChainDisabled: depChain.some(dep => {
|
| 165 |
+
return (dep.scarfSettings || {}).enabled === false
|
| 166 |
+
})
|
| 167 |
+
}
|
| 168 |
+
})
|
| 169 |
+
|
| 170 |
+
dependencyInfo.forEach(d => {
|
| 171 |
+
d.parent.scarfSettings = Object.assign(makeDefaultSettings(), d.parent.scarfSettings || {})
|
| 172 |
+
})
|
| 173 |
+
|
| 174 |
+
// Here, we find the dependency chain that corresponds to the scarf package we're currently in
|
| 175 |
+
const dependencyToReport = dependencyInfo.find(dep => (dep.scarf.path === module.exports.dirName())) || dependencyInfo[0]
|
| 176 |
+
if (!dependencyToReport) {
|
| 177 |
+
return reject(new Error(`Couldn't find dependency info for path ${module.exports.dirName()}`))
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
// If any intermediate dependency in the chain of deps that leads to scarf
|
| 181 |
+
// has disabled Scarf, we must respect that setting unless the user overrides it.
|
| 182 |
+
if (dependencyToReport.anyInChainDisabled && !userHasOptedIn(dependencyToReport.rootPackage)) {
|
| 183 |
+
return reject(new Error('Scarf has been disabled via a package.json in the dependency chain.'))
|
| 184 |
+
}
|
| 185 |
+
|
| 186 |
+
if (isTopLevel(dependencyToReport) && !isGlobal(dependencyToReport) && !allowTopLevel(rootPackageDetails)) {
|
| 187 |
+
return reject(new Error('The package depending on Scarf is the root package being installed, but Scarf is not configured to run in this case. To enable it, set `scarfSettings.allowTopLevel = true` in your package.json'))
|
| 188 |
+
}
|
| 189 |
+
|
| 190 |
+
return resolve(dependencyToReport)
|
| 191 |
+
} catch (err) {
|
| 192 |
+
logIfVerbose(err, console.error)
|
| 193 |
+
return reject(err)
|
| 194 |
+
}
|
| 195 |
+
}
|
| 196 |
+
}
|
| 197 |
+
|
| 198 |
+
function processGitRevParseOutput (resolve, reject) {
|
| 199 |
+
return function (error, stdout, stderr) {
|
| 200 |
+
if (error && !stdout) {
|
| 201 |
+
return reject(new Error(`Scarf received an error from git rev-parse: ${error} | ${stderr}`))
|
| 202 |
+
}
|
| 203 |
+
|
| 204 |
+
const output = String(stdout).trim()
|
| 205 |
+
|
| 206 |
+
if (output.length > 0) {
|
| 207 |
+
return resolve(output)
|
| 208 |
+
} else {
|
| 209 |
+
return reject(new Error('Scarf did not receive usable output from git rev-parse'))
|
| 210 |
+
}
|
| 211 |
+
}
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
// packageJSONOverride: a test convenience to set a packageJSON explicitly.
|
| 215 |
+
// Leave empty to use the actual root package.json.
|
| 216 |
+
async function getDependencyInfo (packageJSONOverride) {
|
| 217 |
+
try {
|
| 218 |
+
const rootPackageJSON = require(packageJSONOverride || path.join(rootPath, 'package.json'))
|
| 219 |
+
const scarfPackageJSON = require(path.join(dirName(), 'package.json'))
|
| 220 |
+
|
| 221 |
+
if (skipTraversal(rootPackageJSON)) {
|
| 222 |
+
logIfVerbose('skipping dependency tree traversal')
|
| 223 |
+
const rootInfoToReport = {
|
| 224 |
+
name: rootPackageJSON.name,
|
| 225 |
+
version: rootPackageJSON.version,
|
| 226 |
+
scarfSettings: { ...makeDefaultSettings(), ...rootPackageJSON.scarfSettings }
|
| 227 |
+
}
|
| 228 |
+
const shallowDepInfo = {
|
| 229 |
+
scarf: { name: '@scarf/scarf', version: scarfPackageJSON.version },
|
| 230 |
+
parent: { ...rootInfoToReport },
|
| 231 |
+
rootPackage: { ...rootInfoToReport },
|
| 232 |
+
anyInChainDisabled: false,
|
| 233 |
+
skippedTraversal: true
|
| 234 |
+
}
|
| 235 |
+
logIfVerbose(util.inspect(shallowDepInfo))
|
| 236 |
+
return shallowDepInfo
|
| 237 |
+
}
|
| 238 |
+
} catch (err) {
|
| 239 |
+
logIfVerbose(err, console.error)
|
| 240 |
+
}
|
| 241 |
+
|
| 242 |
+
return new Promise((resolve, reject) => {
|
| 243 |
+
exec(`cd ${rootPath} && npm ls @scarf/scarf --json --long`, { timeout: execTimeout, maxBuffer: 1024 * 1024 * 1024 }, processDependencyTreeOutput(resolve, reject))
|
| 244 |
+
})
|
| 245 |
+
}
|
| 246 |
+
|
| 247 |
+
async function getGitShaFromRootPath () {
|
| 248 |
+
const promise = new Promise((resolve, reject) => {
|
| 249 |
+
exec(`cd ${rootPath} && git rev-parse HEAD`, { timeout: execTimeout, maxBuffer: 1024 * 1024 * 1024 }, processGitRevParseOutput(resolve, reject))
|
| 250 |
+
})
|
| 251 |
+
try {
|
| 252 |
+
return await promise
|
| 253 |
+
} catch (e) {
|
| 254 |
+
logIfVerbose(e)
|
| 255 |
+
return undefined
|
| 256 |
+
}
|
| 257 |
+
}
|
| 258 |
+
|
| 259 |
+
async function reportPostInstall () {
|
| 260 |
+
const scarfApiToken = process.env.SCARF_API_TOKEN
|
| 261 |
+
|
| 262 |
+
const dependencyInfo = await module.exports.getDependencyInfo()
|
| 263 |
+
logIfVerbose(dependencyInfo)
|
| 264 |
+
if (!dependencyInfo.parent || !dependencyInfo.parent.name) {
|
| 265 |
+
return Promise.reject(new Error('No parent found, nothing to report'))
|
| 266 |
+
}
|
| 267 |
+
|
| 268 |
+
if (parentIsRoot(dependencyInfo) && allowTopLevel(dependencyInfo.rootPackage)) {
|
| 269 |
+
const gitSha = await getGitShaFromRootPath()
|
| 270 |
+
logIfVerbose(`Injecting sha to parent: ${gitSha}`)
|
| 271 |
+
dependencyInfo.parent.gitSha = gitSha
|
| 272 |
+
}
|
| 273 |
+
|
| 274 |
+
const rootPackage = dependencyInfo.rootPackage
|
| 275 |
+
|
| 276 |
+
if (!userHasOptedIn(rootPackage) && isYarn()) {
|
| 277 |
+
return Promise.reject(new Error('Package manager is yarn. scarf-js is unable to inform user of analytics. Aborting.'))
|
| 278 |
+
}
|
| 279 |
+
|
| 280 |
+
await new Promise((resolve, reject) => {
|
| 281 |
+
if (dependencyInfo.parent.scarfSettings.defaultOptIn) {
|
| 282 |
+
if (userHasOptedOut(rootPackage)) {
|
| 283 |
+
return reject(new Error('User has opted out'))
|
| 284 |
+
}
|
| 285 |
+
|
| 286 |
+
if (!userHasOptedIn(rootPackage)) {
|
| 287 |
+
rateLimitedUserLog(optedInLogRateLimitKey, `
|
| 288 |
+
The dependency '${dependencyInfo.parent.name}' is tracking installation
|
| 289 |
+
statistics using scarf-js (https://scarf.sh), which helps open-source developers
|
| 290 |
+
fund and maintain their projects. Scarf securely logs basic installation
|
| 291 |
+
details when this package is installed. The Scarf npm library is open source
|
| 292 |
+
and permissively licensed at https://github.com/scarf-sh/scarf-js. For more
|
| 293 |
+
details about your project's dependencies, try running 'npm ls'. To opt out of
|
| 294 |
+
analytics, set the environment variable 'SCARF_ANALYTICS=false'.
|
| 295 |
+
`)
|
| 296 |
+
}
|
| 297 |
+
resolve(dependencyInfo)
|
| 298 |
+
} else {
|
| 299 |
+
if (!userHasOptedIn(rootPackage)) {
|
| 300 |
+
if (!userHasOptedOut(rootPackage)) {
|
| 301 |
+
// We'll only print the 'please opt in' text if the user hasn't
|
| 302 |
+
// already opted out, and our logging rate limit hasn't been reached
|
| 303 |
+
if (hasHitRateLimit(optedOutLogRateLimitKey, getRateLimitedLogHistory())) {
|
| 304 |
+
return reject(new Error('Analytics are opt-out by default, but rate limit already hit for prompting opt-in.'))
|
| 305 |
+
}
|
| 306 |
+
rateLimitedUserLog(optedOutLogRateLimitKey, `
|
| 307 |
+
The dependency '${dependencyInfo.parent.name}' would like to track
|
| 308 |
+
installation statistics using scarf-js (https://scarf.sh), which helps
|
| 309 |
+
open-source developers fund and maintain their projects. Reporting is disabled
|
| 310 |
+
by default for this package. When enabled, Scarf securely logs basic
|
| 311 |
+
installation details when this package is installed. The Scarf npm library is
|
| 312 |
+
open source and permissively licensed at https://github.com/scarf-sh/scarf-js.
|
| 313 |
+
For more details about your project's dependencies, try running 'npm ls'.
|
| 314 |
+
`
|
| 315 |
+
)
|
| 316 |
+
const stdin = process.stdin
|
| 317 |
+
stdin.setEncoding('utf-8')
|
| 318 |
+
|
| 319 |
+
process.stdout.write(`Would you like to support ${dependencyInfo.parent.name} by sending analytics for this install? (y/N): `)
|
| 320 |
+
|
| 321 |
+
const timeout1 = setTimeout(() => {
|
| 322 |
+
console.log('')
|
| 323 |
+
console.log('No opt in received, skipping analytics')
|
| 324 |
+
reject(new Error('Timeout waiting for user opt in'))
|
| 325 |
+
}, 7000)
|
| 326 |
+
|
| 327 |
+
stdin.on('data', async function (data) {
|
| 328 |
+
clearTimeout(timeout1)
|
| 329 |
+
const enabled = data.trim().toLowerCase() === 'y'
|
| 330 |
+
|
| 331 |
+
const afterUserInput = (enabled, saved) => {
|
| 332 |
+
if (enabled) {
|
| 333 |
+
console.log('Thanks for enabling analytics!')
|
| 334 |
+
}
|
| 335 |
+
|
| 336 |
+
if (!saved) {
|
| 337 |
+
console.log('To prevent this message in the future, you can also set the `SCARF_ANALYTICS=true|false` environment variable')
|
| 338 |
+
}
|
| 339 |
+
|
| 340 |
+
if (enabled) {
|
| 341 |
+
return resolve(dependencyInfo)
|
| 342 |
+
} else {
|
| 343 |
+
return reject(new Error('Not enabled via cli'))
|
| 344 |
+
}
|
| 345 |
+
}
|
| 346 |
+
|
| 347 |
+
process.stdout.write('Save this preference to your project\'s package.json file? (y/N): ')
|
| 348 |
+
|
| 349 |
+
setTimeout(() => {
|
| 350 |
+
console.log('')
|
| 351 |
+
return afterUserInput(enabled, false)
|
| 352 |
+
}, 15000)
|
| 353 |
+
|
| 354 |
+
stdin.removeAllListeners('data')
|
| 355 |
+
stdin.on('data', async function (data) {
|
| 356 |
+
try {
|
| 357 |
+
const savePreference = data.trim().toLowerCase() === 'y'
|
| 358 |
+
if (savePreference) {
|
| 359 |
+
await savePreferencesToRootPackage(dependencyInfo.rootPackage.packageJsonPath, enabled)
|
| 360 |
+
}
|
| 361 |
+
return afterUserInput(enabled, savePreference)
|
| 362 |
+
} catch (err) {
|
| 363 |
+
logIfVerbose(err, console.error)
|
| 364 |
+
return reject(err)
|
| 365 |
+
}
|
| 366 |
+
})
|
| 367 |
+
})
|
| 368 |
+
}
|
| 369 |
+
} else {
|
| 370 |
+
resolve(dependencyInfo)
|
| 371 |
+
}
|
| 372 |
+
}
|
| 373 |
+
})
|
| 374 |
+
|
| 375 |
+
redactSensitivePackageInfo(dependencyInfo)
|
| 376 |
+
|
| 377 |
+
const infoPayload = {
|
| 378 |
+
libraryType: 'npm',
|
| 379 |
+
rawPlatform: os.platform(),
|
| 380 |
+
rawArch: os.arch(),
|
| 381 |
+
nodeVersion: process.versions.node,
|
| 382 |
+
dependencyInfo: dependencyInfo
|
| 383 |
+
}
|
| 384 |
+
|
| 385 |
+
const data = JSON.stringify(infoPayload)
|
| 386 |
+
logIfVerbose(`Scarf payload: ${data}`)
|
| 387 |
+
|
| 388 |
+
const reqOptions = {
|
| 389 |
+
host: scarfHost,
|
| 390 |
+
port: localDevPort,
|
| 391 |
+
method: 'POST',
|
| 392 |
+
path: '/package-event/install',
|
| 393 |
+
headers: {
|
| 394 |
+
'Content-Type': 'application/json',
|
| 395 |
+
'Content-Length': data.length
|
| 396 |
+
},
|
| 397 |
+
timeout: execTimeout
|
| 398 |
+
}
|
| 399 |
+
|
| 400 |
+
if (scarfApiToken) {
|
| 401 |
+
const authToken = Buffer.from(`n/a:${scarfApiToken}`).toString('base64')
|
| 402 |
+
reqOptions.headers.Authorization = `Basic ${authToken}`
|
| 403 |
+
}
|
| 404 |
+
|
| 405 |
+
await new Promise((resolve, reject) => {
|
| 406 |
+
const req = https.request(reqOptions, (res) => {
|
| 407 |
+
logIfVerbose(`Response status: ${res.statusCode}`)
|
| 408 |
+
resolve()
|
| 409 |
+
})
|
| 410 |
+
|
| 411 |
+
req.on('error', error => {
|
| 412 |
+
logIfVerbose(error, console.error)
|
| 413 |
+
reject(error)
|
| 414 |
+
})
|
| 415 |
+
|
| 416 |
+
req.on('timeout', error => {
|
| 417 |
+
logIfVerbose(error, console.error)
|
| 418 |
+
reject(error)
|
| 419 |
+
})
|
| 420 |
+
|
| 421 |
+
req.write(data)
|
| 422 |
+
req.end()
|
| 423 |
+
})
|
| 424 |
+
}
|
| 425 |
+
|
| 426 |
+
// Find all paths to Scarf from the json output of npm ls @scarf/scarf --json in
|
| 427 |
+
// the root package being installed by the user
|
| 428 |
+
//
|
| 429 |
+
// [{
|
| 430 |
+
// scarf: {name: `@scarf/scarf`, version: '0.0.1'},
|
| 431 |
+
// parent: { name: 'scarfed-library', version: '1.0.0', scarfSettings: { defaultOptIn: true } },
|
| 432 |
+
// grandparent: { name: 'scarfed-lib-consumer', version: '1.0.0' }
|
| 433 |
+
// }]
|
| 434 |
+
function findScarfInSubDepTree (pathToDep, deps) {
|
| 435 |
+
const depNames = Object.keys(deps || {})
|
| 436 |
+
|
| 437 |
+
if (!depNames) {
|
| 438 |
+
return []
|
| 439 |
+
}
|
| 440 |
+
|
| 441 |
+
const scarfFound = depNames.find(depName => depName === scarfLibName)
|
| 442 |
+
const output = []
|
| 443 |
+
if (scarfFound) {
|
| 444 |
+
output.push(pathToDep.concat([{ name: scarfLibName, version: deps[scarfLibName].version, path: deps[scarfLibName].path }]))
|
| 445 |
+
}
|
| 446 |
+
for (let i = 0; i < depNames.length; i++) {
|
| 447 |
+
const depName = depNames[i]
|
| 448 |
+
const newPathToDep = pathToDep.concat([
|
| 449 |
+
{
|
| 450 |
+
name: depName,
|
| 451 |
+
version: deps[depName].version,
|
| 452 |
+
scarfSettings: deps[depName].scarfSettings,
|
| 453 |
+
path: deps[depName].path
|
| 454 |
+
}
|
| 455 |
+
])
|
| 456 |
+
const results = findScarfInSubDepTree(newPathToDep, deps[depName].dependencies)
|
| 457 |
+
if (results) {
|
| 458 |
+
for (let j = 0; j < results.length; j++) {
|
| 459 |
+
output.push(results[j])
|
| 460 |
+
}
|
| 461 |
+
}
|
| 462 |
+
}
|
| 463 |
+
|
| 464 |
+
return output
|
| 465 |
+
}
|
| 466 |
+
|
| 467 |
+
function findScarfInFullDependencyTree (tree) {
|
| 468 |
+
if (tree.name === scarfLibName) {
|
| 469 |
+
return [[{ name: scarfLibName, version: tree.version }]]
|
| 470 |
+
} else {
|
| 471 |
+
return findScarfInSubDepTree([packageDetailsFromDepInfo(tree)], tree.dependencies)
|
| 472 |
+
}
|
| 473 |
+
}
|
| 474 |
+
|
| 475 |
+
function packageDetailsFromDepInfo (tree) {
|
| 476 |
+
return {
|
| 477 |
+
name: tree.name,
|
| 478 |
+
version: tree.version,
|
| 479 |
+
scarfSettings: tree.scarfSettings,
|
| 480 |
+
path: tree.path
|
| 481 |
+
}
|
| 482 |
+
}
|
| 483 |
+
|
| 484 |
+
function rootPackageDepInfo (packageInfo) {
|
| 485 |
+
if (process.env.npm_config_global) {
|
| 486 |
+
packageInfo = Object.values(packageInfo.dependencies)[0]
|
| 487 |
+
}
|
| 488 |
+
const info = packageDetailsFromDepInfo(packageInfo)
|
| 489 |
+
info.packageJsonPath = `${packageInfo.path}/package.json`
|
| 490 |
+
return info
|
| 491 |
+
}
|
| 492 |
+
|
| 493 |
+
async function savePreferencesToRootPackage (path, optIn) {
|
| 494 |
+
const packageJsonString = await fsAsync.readFile(path)
|
| 495 |
+
const parsed = JSON.parse(packageJsonString)
|
| 496 |
+
parsed.scarfSettings = {
|
| 497 |
+
enabled: optIn
|
| 498 |
+
}
|
| 499 |
+
await fsAsync.writeFile(path, JSON.stringify(parsed, null, 2))
|
| 500 |
+
}
|
| 501 |
+
|
| 502 |
+
/*
|
| 503 |
+
If Scarf-js appears in many different spots in a package's dependency tree, we
|
| 504 |
+
want to avoid spamming the user with the same message informing them of
|
| 505 |
+
Scarf's analytics. Rate limited logs will record timestamps of logging in a
|
| 506 |
+
temp file. Before logging something to the user, we will verify we're not over
|
| 507 |
+
the rate limit.
|
| 508 |
+
*/
|
| 509 |
+
function rateLimitedUserLog (rateLimitKey, toLog) {
|
| 510 |
+
const history = getRateLimitedLogHistory()
|
| 511 |
+
if (!hasHitRateLimit(rateLimitKey, history)) {
|
| 512 |
+
writeCurrentTimeToLogHistory(rateLimitKey, history)
|
| 513 |
+
console.log(toLog)
|
| 514 |
+
} else {
|
| 515 |
+
logIfVerbose(`[SUPPRESSED USER MESSAGE, RATE LIMIT HIT] ${toLog}`)
|
| 516 |
+
}
|
| 517 |
+
}
|
| 518 |
+
|
| 519 |
+
function getRateLimitedLogHistory () {
|
| 520 |
+
let history
|
| 521 |
+
try {
|
| 522 |
+
history = JSON.parse(fs.readFileSync(module.exports.tmpFileName()))
|
| 523 |
+
} catch (e) {
|
| 524 |
+
logIfVerbose(e)
|
| 525 |
+
}
|
| 526 |
+
return history || {}
|
| 527 |
+
}
|
| 528 |
+
|
| 529 |
+
// Current rate limit: 1/minute
|
| 530 |
+
function hasHitRateLimit (rateLimitKey, history) {
|
| 531 |
+
if (!history || !history[rateLimitKey]) {
|
| 532 |
+
return false
|
| 533 |
+
}
|
| 534 |
+
|
| 535 |
+
const lastLog = history[rateLimitKey]
|
| 536 |
+
return (new Date().getTime() - lastLog) < userMessageThrottleTime
|
| 537 |
+
}
|
| 538 |
+
|
| 539 |
+
function writeCurrentTimeToLogHistory (rateLimitKey, history) {
|
| 540 |
+
history[rateLimitKey] = new Date().getTime()
|
| 541 |
+
fs.writeFileSync(module.exports.tmpFileName(), JSON.stringify(history))
|
| 542 |
+
}
|
| 543 |
+
|
| 544 |
+
module.exports = {
|
| 545 |
+
redactSensitivePackageInfo,
|
| 546 |
+
hasHitRateLimit,
|
| 547 |
+
getRateLimitedLogHistory,
|
| 548 |
+
rateLimitedUserLog,
|
| 549 |
+
tmpFileName,
|
| 550 |
+
dirName,
|
| 551 |
+
processDependencyTreeOutput,
|
| 552 |
+
processGitRevParseOutput,
|
| 553 |
+
npmExecPath,
|
| 554 |
+
getDependencyInfo,
|
| 555 |
+
getGitShaFromRootPath,
|
| 556 |
+
reportPostInstall,
|
| 557 |
+
hashWithDefault,
|
| 558 |
+
findScarfInFullDependencyTree
|
| 559 |
+
}
|
| 560 |
+
|
| 561 |
+
if (require.main === module) {
|
| 562 |
+
try {
|
| 563 |
+
reportPostInstall().catch(e => {
|
| 564 |
+
// This is an optional, best effort attempt. If there are any errors in
|
| 565 |
+
// Scarf, we must not interfere with whatever the user is doing
|
| 566 |
+
logIfVerbose(`\n\n${e}`, console.error)
|
| 567 |
+
}).finally(() => {
|
| 568 |
+
process.exit(0)
|
| 569 |
+
})
|
| 570 |
+
} catch (e) {
|
| 571 |
+
logIfVerbose(`\n\nTop level error: ${e}`, console.error)
|
| 572 |
+
process.exit(0)
|
| 573 |
+
}
|
| 574 |
+
}
|
node_modules/accepts/HISTORY.md
ADDED
|
@@ -0,0 +1,243 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
1.3.8 / 2022-02-02
|
| 2 |
+
==================
|
| 3 |
+
|
| 4 |
+
* deps: mime-types@~2.1.34
|
| 5 |
+
- deps: mime-db@~1.51.0
|
| 6 |
+
* deps: negotiator@0.6.3
|
| 7 |
+
|
| 8 |
+
1.3.7 / 2019-04-29
|
| 9 |
+
==================
|
| 10 |
+
|
| 11 |
+
* deps: negotiator@0.6.2
|
| 12 |
+
- Fix sorting charset, encoding, and language with extra parameters
|
| 13 |
+
|
| 14 |
+
1.3.6 / 2019-04-28
|
| 15 |
+
==================
|
| 16 |
+
|
| 17 |
+
* deps: mime-types@~2.1.24
|
| 18 |
+
- deps: mime-db@~1.40.0
|
| 19 |
+
|
| 20 |
+
1.3.5 / 2018-02-28
|
| 21 |
+
==================
|
| 22 |
+
|
| 23 |
+
* deps: mime-types@~2.1.18
|
| 24 |
+
- deps: mime-db@~1.33.0
|
| 25 |
+
|
| 26 |
+
1.3.4 / 2017-08-22
|
| 27 |
+
==================
|
| 28 |
+
|
| 29 |
+
* deps: mime-types@~2.1.16
|
| 30 |
+
- deps: mime-db@~1.29.0
|
| 31 |
+
|
| 32 |
+
1.3.3 / 2016-05-02
|
| 33 |
+
==================
|
| 34 |
+
|
| 35 |
+
* deps: mime-types@~2.1.11
|
| 36 |
+
- deps: mime-db@~1.23.0
|
| 37 |
+
* deps: negotiator@0.6.1
|
| 38 |
+
- perf: improve `Accept` parsing speed
|
| 39 |
+
- perf: improve `Accept-Charset` parsing speed
|
| 40 |
+
- perf: improve `Accept-Encoding` parsing speed
|
| 41 |
+
- perf: improve `Accept-Language` parsing speed
|
| 42 |
+
|
| 43 |
+
1.3.2 / 2016-03-08
|
| 44 |
+
==================
|
| 45 |
+
|
| 46 |
+
* deps: mime-types@~2.1.10
|
| 47 |
+
- Fix extension of `application/dash+xml`
|
| 48 |
+
- Update primary extension for `audio/mp4`
|
| 49 |
+
- deps: mime-db@~1.22.0
|
| 50 |
+
|
| 51 |
+
1.3.1 / 2016-01-19
|
| 52 |
+
==================
|
| 53 |
+
|
| 54 |
+
* deps: mime-types@~2.1.9
|
| 55 |
+
- deps: mime-db@~1.21.0
|
| 56 |
+
|
| 57 |
+
1.3.0 / 2015-09-29
|
| 58 |
+
==================
|
| 59 |
+
|
| 60 |
+
* deps: mime-types@~2.1.7
|
| 61 |
+
- deps: mime-db@~1.19.0
|
| 62 |
+
* deps: negotiator@0.6.0
|
| 63 |
+
- Fix including type extensions in parameters in `Accept` parsing
|
| 64 |
+
- Fix parsing `Accept` parameters with quoted equals
|
| 65 |
+
- Fix parsing `Accept` parameters with quoted semicolons
|
| 66 |
+
- Lazy-load modules from main entry point
|
| 67 |
+
- perf: delay type concatenation until needed
|
| 68 |
+
- perf: enable strict mode
|
| 69 |
+
- perf: hoist regular expressions
|
| 70 |
+
- perf: remove closures getting spec properties
|
| 71 |
+
- perf: remove a closure from media type parsing
|
| 72 |
+
- perf: remove property delete from media type parsing
|
| 73 |
+
|
| 74 |
+
1.2.13 / 2015-09-06
|
| 75 |
+
===================
|
| 76 |
+
|
| 77 |
+
* deps: mime-types@~2.1.6
|
| 78 |
+
- deps: mime-db@~1.18.0
|
| 79 |
+
|
| 80 |
+
1.2.12 / 2015-07-30
|
| 81 |
+
===================
|
| 82 |
+
|
| 83 |
+
* deps: mime-types@~2.1.4
|
| 84 |
+
- deps: mime-db@~1.16.0
|
| 85 |
+
|
| 86 |
+
1.2.11 / 2015-07-16
|
| 87 |
+
===================
|
| 88 |
+
|
| 89 |
+
* deps: mime-types@~2.1.3
|
| 90 |
+
- deps: mime-db@~1.15.0
|
| 91 |
+
|
| 92 |
+
1.2.10 / 2015-07-01
|
| 93 |
+
===================
|
| 94 |
+
|
| 95 |
+
* deps: mime-types@~2.1.2
|
| 96 |
+
- deps: mime-db@~1.14.0
|
| 97 |
+
|
| 98 |
+
1.2.9 / 2015-06-08
|
| 99 |
+
==================
|
| 100 |
+
|
| 101 |
+
* deps: mime-types@~2.1.1
|
| 102 |
+
- perf: fix deopt during mapping
|
| 103 |
+
|
| 104 |
+
1.2.8 / 2015-06-07
|
| 105 |
+
==================
|
| 106 |
+
|
| 107 |
+
* deps: mime-types@~2.1.0
|
| 108 |
+
- deps: mime-db@~1.13.0
|
| 109 |
+
* perf: avoid argument reassignment & argument slice
|
| 110 |
+
* perf: avoid negotiator recursive construction
|
| 111 |
+
* perf: enable strict mode
|
| 112 |
+
* perf: remove unnecessary bitwise operator
|
| 113 |
+
|
| 114 |
+
1.2.7 / 2015-05-10
|
| 115 |
+
==================
|
| 116 |
+
|
| 117 |
+
* deps: negotiator@0.5.3
|
| 118 |
+
- Fix media type parameter matching to be case-insensitive
|
| 119 |
+
|
| 120 |
+
1.2.6 / 2015-05-07
|
| 121 |
+
==================
|
| 122 |
+
|
| 123 |
+
* deps: mime-types@~2.0.11
|
| 124 |
+
- deps: mime-db@~1.9.1
|
| 125 |
+
* deps: negotiator@0.5.2
|
| 126 |
+
- Fix comparing media types with quoted values
|
| 127 |
+
- Fix splitting media types with quoted commas
|
| 128 |
+
|
| 129 |
+
1.2.5 / 2015-03-13
|
| 130 |
+
==================
|
| 131 |
+
|
| 132 |
+
* deps: mime-types@~2.0.10
|
| 133 |
+
- deps: mime-db@~1.8.0
|
| 134 |
+
|
| 135 |
+
1.2.4 / 2015-02-14
|
| 136 |
+
==================
|
| 137 |
+
|
| 138 |
+
* Support Node.js 0.6
|
| 139 |
+
* deps: mime-types@~2.0.9
|
| 140 |
+
- deps: mime-db@~1.7.0
|
| 141 |
+
* deps: negotiator@0.5.1
|
| 142 |
+
- Fix preference sorting to be stable for long acceptable lists
|
| 143 |
+
|
| 144 |
+
1.2.3 / 2015-01-31
|
| 145 |
+
==================
|
| 146 |
+
|
| 147 |
+
* deps: mime-types@~2.0.8
|
| 148 |
+
- deps: mime-db@~1.6.0
|
| 149 |
+
|
| 150 |
+
1.2.2 / 2014-12-30
|
| 151 |
+
==================
|
| 152 |
+
|
| 153 |
+
* deps: mime-types@~2.0.7
|
| 154 |
+
- deps: mime-db@~1.5.0
|
| 155 |
+
|
| 156 |
+
1.2.1 / 2014-12-30
|
| 157 |
+
==================
|
| 158 |
+
|
| 159 |
+
* deps: mime-types@~2.0.5
|
| 160 |
+
- deps: mime-db@~1.3.1
|
| 161 |
+
|
| 162 |
+
1.2.0 / 2014-12-19
|
| 163 |
+
==================
|
| 164 |
+
|
| 165 |
+
* deps: negotiator@0.5.0
|
| 166 |
+
- Fix list return order when large accepted list
|
| 167 |
+
- Fix missing identity encoding when q=0 exists
|
| 168 |
+
- Remove dynamic building of Negotiator class
|
| 169 |
+
|
| 170 |
+
1.1.4 / 2014-12-10
|
| 171 |
+
==================
|
| 172 |
+
|
| 173 |
+
* deps: mime-types@~2.0.4
|
| 174 |
+
- deps: mime-db@~1.3.0
|
| 175 |
+
|
| 176 |
+
1.1.3 / 2014-11-09
|
| 177 |
+
==================
|
| 178 |
+
|
| 179 |
+
* deps: mime-types@~2.0.3
|
| 180 |
+
- deps: mime-db@~1.2.0
|
| 181 |
+
|
| 182 |
+
1.1.2 / 2014-10-14
|
| 183 |
+
==================
|
| 184 |
+
|
| 185 |
+
* deps: negotiator@0.4.9
|
| 186 |
+
- Fix error when media type has invalid parameter
|
| 187 |
+
|
| 188 |
+
1.1.1 / 2014-09-28
|
| 189 |
+
==================
|
| 190 |
+
|
| 191 |
+
* deps: mime-types@~2.0.2
|
| 192 |
+
- deps: mime-db@~1.1.0
|
| 193 |
+
* deps: negotiator@0.4.8
|
| 194 |
+
- Fix all negotiations to be case-insensitive
|
| 195 |
+
- Stable sort preferences of same quality according to client order
|
| 196 |
+
|
| 197 |
+
1.1.0 / 2014-09-02
|
| 198 |
+
==================
|
| 199 |
+
|
| 200 |
+
* update `mime-types`
|
| 201 |
+
|
| 202 |
+
1.0.7 / 2014-07-04
|
| 203 |
+
==================
|
| 204 |
+
|
| 205 |
+
* Fix wrong type returned from `type` when match after unknown extension
|
| 206 |
+
|
| 207 |
+
1.0.6 / 2014-06-24
|
| 208 |
+
==================
|
| 209 |
+
|
| 210 |
+
* deps: negotiator@0.4.7
|
| 211 |
+
|
| 212 |
+
1.0.5 / 2014-06-20
|
| 213 |
+
==================
|
| 214 |
+
|
| 215 |
+
* fix crash when unknown extension given
|
| 216 |
+
|
| 217 |
+
1.0.4 / 2014-06-19
|
| 218 |
+
==================
|
| 219 |
+
|
| 220 |
+
* use `mime-types`
|
| 221 |
+
|
| 222 |
+
1.0.3 / 2014-06-11
|
| 223 |
+
==================
|
| 224 |
+
|
| 225 |
+
* deps: negotiator@0.4.6
|
| 226 |
+
- Order by specificity when quality is the same
|
| 227 |
+
|
| 228 |
+
1.0.2 / 2014-05-29
|
| 229 |
+
==================
|
| 230 |
+
|
| 231 |
+
* Fix interpretation when header not in request
|
| 232 |
+
* deps: pin negotiator@0.4.5
|
| 233 |
+
|
| 234 |
+
1.0.1 / 2014-01-18
|
| 235 |
+
==================
|
| 236 |
+
|
| 237 |
+
* Identity encoding isn't always acceptable
|
| 238 |
+
* deps: negotiator@~0.4.0
|
| 239 |
+
|
| 240 |
+
1.0.0 / 2013-12-27
|
| 241 |
+
==================
|
| 242 |
+
|
| 243 |
+
* Genesis
|
node_modules/accepts/LICENSE
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
(The MIT License)
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
|
| 4 |
+
Copyright (c) 2015 Douglas Christopher Wilson <doug@somethingdoug.com>
|
| 5 |
+
|
| 6 |
+
Permission is hereby granted, free of charge, to any person obtaining
|
| 7 |
+
a copy of this software and associated documentation files (the
|
| 8 |
+
'Software'), to deal in the Software without restriction, including
|
| 9 |
+
without limitation the rights to use, copy, modify, merge, publish,
|
| 10 |
+
distribute, sublicense, and/or sell copies of the Software, and to
|
| 11 |
+
permit persons to whom the Software is furnished to do so, subject to
|
| 12 |
+
the following conditions:
|
| 13 |
+
|
| 14 |
+
The above copyright notice and this permission notice shall be
|
| 15 |
+
included in all copies or substantial portions of the Software.
|
| 16 |
+
|
| 17 |
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
| 18 |
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 19 |
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
| 20 |
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
| 21 |
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
| 22 |
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
| 23 |
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
node_modules/accepts/README.md
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# accepts
|
| 2 |
+
|
| 3 |
+
[![NPM Version][npm-version-image]][npm-url]
|
| 4 |
+
[![NPM Downloads][npm-downloads-image]][npm-url]
|
| 5 |
+
[![Node.js Version][node-version-image]][node-version-url]
|
| 6 |
+
[![Build Status][github-actions-ci-image]][github-actions-ci-url]
|
| 7 |
+
[![Test Coverage][coveralls-image]][coveralls-url]
|
| 8 |
+
|
| 9 |
+
Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator).
|
| 10 |
+
Extracted from [koa](https://www.npmjs.com/package/koa) for general use.
|
| 11 |
+
|
| 12 |
+
In addition to negotiator, it allows:
|
| 13 |
+
|
| 14 |
+
- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])`
|
| 15 |
+
as well as `('text/html', 'application/json')`.
|
| 16 |
+
- Allows type shorthands such as `json`.
|
| 17 |
+
- Returns `false` when no types match
|
| 18 |
+
- Treats non-existent headers as `*`
|
| 19 |
+
|
| 20 |
+
## Installation
|
| 21 |
+
|
| 22 |
+
This is a [Node.js](https://nodejs.org/en/) module available through the
|
| 23 |
+
[npm registry](https://www.npmjs.com/). Installation is done using the
|
| 24 |
+
[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
|
| 25 |
+
|
| 26 |
+
```sh
|
| 27 |
+
$ npm install accepts
|
| 28 |
+
```
|
| 29 |
+
|
| 30 |
+
## API
|
| 31 |
+
|
| 32 |
+
```js
|
| 33 |
+
var accepts = require('accepts')
|
| 34 |
+
```
|
| 35 |
+
|
| 36 |
+
### accepts(req)
|
| 37 |
+
|
| 38 |
+
Create a new `Accepts` object for the given `req`.
|
| 39 |
+
|
| 40 |
+
#### .charset(charsets)
|
| 41 |
+
|
| 42 |
+
Return the first accepted charset. If nothing in `charsets` is accepted,
|
| 43 |
+
then `false` is returned.
|
| 44 |
+
|
| 45 |
+
#### .charsets()
|
| 46 |
+
|
| 47 |
+
Return the charsets that the request accepts, in the order of the client's
|
| 48 |
+
preference (most preferred first).
|
| 49 |
+
|
| 50 |
+
#### .encoding(encodings)
|
| 51 |
+
|
| 52 |
+
Return the first accepted encoding. If nothing in `encodings` is accepted,
|
| 53 |
+
then `false` is returned.
|
| 54 |
+
|
| 55 |
+
#### .encodings()
|
| 56 |
+
|
| 57 |
+
Return the encodings that the request accepts, in the order of the client's
|
| 58 |
+
preference (most preferred first).
|
| 59 |
+
|
| 60 |
+
#### .language(languages)
|
| 61 |
+
|
| 62 |
+
Return the first accepted language. If nothing in `languages` is accepted,
|
| 63 |
+
then `false` is returned.
|
| 64 |
+
|
| 65 |
+
#### .languages()
|
| 66 |
+
|
| 67 |
+
Return the languages that the request accepts, in the order of the client's
|
| 68 |
+
preference (most preferred first).
|
| 69 |
+
|
| 70 |
+
#### .type(types)
|
| 71 |
+
|
| 72 |
+
Return the first accepted type (and it is returned as the same text as what
|
| 73 |
+
appears in the `types` array). If nothing in `types` is accepted, then `false`
|
| 74 |
+
is returned.
|
| 75 |
+
|
| 76 |
+
The `types` array can contain full MIME types or file extensions. Any value
|
| 77 |
+
that is not a full MIME types is passed to `require('mime-types').lookup`.
|
| 78 |
+
|
| 79 |
+
#### .types()
|
| 80 |
+
|
| 81 |
+
Return the types that the request accepts, in the order of the client's
|
| 82 |
+
preference (most preferred first).
|
| 83 |
+
|
| 84 |
+
## Examples
|
| 85 |
+
|
| 86 |
+
### Simple type negotiation
|
| 87 |
+
|
| 88 |
+
This simple example shows how to use `accepts` to return a different typed
|
| 89 |
+
respond body based on what the client wants to accept. The server lists it's
|
| 90 |
+
preferences in order and will get back the best match between the client and
|
| 91 |
+
server.
|
| 92 |
+
|
| 93 |
+
```js
|
| 94 |
+
var accepts = require('accepts')
|
| 95 |
+
var http = require('http')
|
| 96 |
+
|
| 97 |
+
function app (req, res) {
|
| 98 |
+
var accept = accepts(req)
|
| 99 |
+
|
| 100 |
+
// the order of this list is significant; should be server preferred order
|
| 101 |
+
switch (accept.type(['json', 'html'])) {
|
| 102 |
+
case 'json':
|
| 103 |
+
res.setHeader('Content-Type', 'application/json')
|
| 104 |
+
res.write('{"hello":"world!"}')
|
| 105 |
+
break
|
| 106 |
+
case 'html':
|
| 107 |
+
res.setHeader('Content-Type', 'text/html')
|
| 108 |
+
res.write('<b>hello, world!</b>')
|
| 109 |
+
break
|
| 110 |
+
default:
|
| 111 |
+
// the fallback is text/plain, so no need to specify it above
|
| 112 |
+
res.setHeader('Content-Type', 'text/plain')
|
| 113 |
+
res.write('hello, world!')
|
| 114 |
+
break
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
res.end()
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
http.createServer(app).listen(3000)
|
| 121 |
+
```
|
| 122 |
+
|
| 123 |
+
You can test this out with the cURL program:
|
| 124 |
+
```sh
|
| 125 |
+
curl -I -H'Accept: text/html' http://localhost:3000/
|
| 126 |
+
```
|
| 127 |
+
|
| 128 |
+
## License
|
| 129 |
+
|
| 130 |
+
[MIT](LICENSE)
|
| 131 |
+
|
| 132 |
+
[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master
|
| 133 |
+
[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master
|
| 134 |
+
[github-actions-ci-image]: https://badgen.net/github/checks/jshttp/accepts/master?label=ci
|
| 135 |
+
[github-actions-ci-url]: https://github.com/jshttp/accepts/actions/workflows/ci.yml
|
| 136 |
+
[node-version-image]: https://badgen.net/npm/node/accepts
|
| 137 |
+
[node-version-url]: https://nodejs.org/en/download
|
| 138 |
+
[npm-downloads-image]: https://badgen.net/npm/dm/accepts
|
| 139 |
+
[npm-url]: https://npmjs.org/package/accepts
|
| 140 |
+
[npm-version-image]: https://badgen.net/npm/v/accepts
|
node_modules/accepts/index.js
ADDED
|
@@ -0,0 +1,238 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*!
|
| 2 |
+
* accepts
|
| 3 |
+
* Copyright(c) 2014 Jonathan Ong
|
| 4 |
+
* Copyright(c) 2015 Douglas Christopher Wilson
|
| 5 |
+
* MIT Licensed
|
| 6 |
+
*/
|
| 7 |
+
|
| 8 |
+
'use strict'
|
| 9 |
+
|
| 10 |
+
/**
|
| 11 |
+
* Module dependencies.
|
| 12 |
+
* @private
|
| 13 |
+
*/
|
| 14 |
+
|
| 15 |
+
var Negotiator = require('negotiator')
|
| 16 |
+
var mime = require('mime-types')
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* Module exports.
|
| 20 |
+
* @public
|
| 21 |
+
*/
|
| 22 |
+
|
| 23 |
+
module.exports = Accepts
|
| 24 |
+
|
| 25 |
+
/**
|
| 26 |
+
* Create a new Accepts object for the given req.
|
| 27 |
+
*
|
| 28 |
+
* @param {object} req
|
| 29 |
+
* @public
|
| 30 |
+
*/
|
| 31 |
+
|
| 32 |
+
function Accepts (req) {
|
| 33 |
+
if (!(this instanceof Accepts)) {
|
| 34 |
+
return new Accepts(req)
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
this.headers = req.headers
|
| 38 |
+
this.negotiator = new Negotiator(req)
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* Check if the given `type(s)` is acceptable, returning
|
| 43 |
+
* the best match when true, otherwise `undefined`, in which
|
| 44 |
+
* case you should respond with 406 "Not Acceptable".
|
| 45 |
+
*
|
| 46 |
+
* The `type` value may be a single mime type string
|
| 47 |
+
* such as "application/json", the extension name
|
| 48 |
+
* such as "json" or an array `["json", "html", "text/plain"]`. When a list
|
| 49 |
+
* or array is given the _best_ match, if any is returned.
|
| 50 |
+
*
|
| 51 |
+
* Examples:
|
| 52 |
+
*
|
| 53 |
+
* // Accept: text/html
|
| 54 |
+
* this.types('html');
|
| 55 |
+
* // => "html"
|
| 56 |
+
*
|
| 57 |
+
* // Accept: text/*, application/json
|
| 58 |
+
* this.types('html');
|
| 59 |
+
* // => "html"
|
| 60 |
+
* this.types('text/html');
|
| 61 |
+
* // => "text/html"
|
| 62 |
+
* this.types('json', 'text');
|
| 63 |
+
* // => "json"
|
| 64 |
+
* this.types('application/json');
|
| 65 |
+
* // => "application/json"
|
| 66 |
+
*
|
| 67 |
+
* // Accept: text/*, application/json
|
| 68 |
+
* this.types('image/png');
|
| 69 |
+
* this.types('png');
|
| 70 |
+
* // => undefined
|
| 71 |
+
*
|
| 72 |
+
* // Accept: text/*;q=.5, application/json
|
| 73 |
+
* this.types(['html', 'json']);
|
| 74 |
+
* this.types('html', 'json');
|
| 75 |
+
* // => "json"
|
| 76 |
+
*
|
| 77 |
+
* @param {String|Array} types...
|
| 78 |
+
* @return {String|Array|Boolean}
|
| 79 |
+
* @public
|
| 80 |
+
*/
|
| 81 |
+
|
| 82 |
+
Accepts.prototype.type =
|
| 83 |
+
Accepts.prototype.types = function (types_) {
|
| 84 |
+
var types = types_
|
| 85 |
+
|
| 86 |
+
// support flattened arguments
|
| 87 |
+
if (types && !Array.isArray(types)) {
|
| 88 |
+
types = new Array(arguments.length)
|
| 89 |
+
for (var i = 0; i < types.length; i++) {
|
| 90 |
+
types[i] = arguments[i]
|
| 91 |
+
}
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
// no types, return all requested types
|
| 95 |
+
if (!types || types.length === 0) {
|
| 96 |
+
return this.negotiator.mediaTypes()
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
// no accept header, return first given type
|
| 100 |
+
if (!this.headers.accept) {
|
| 101 |
+
return types[0]
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
var mimes = types.map(extToMime)
|
| 105 |
+
var accepts = this.negotiator.mediaTypes(mimes.filter(validMime))
|
| 106 |
+
var first = accepts[0]
|
| 107 |
+
|
| 108 |
+
return first
|
| 109 |
+
? types[mimes.indexOf(first)]
|
| 110 |
+
: false
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
/**
|
| 114 |
+
* Return accepted encodings or best fit based on `encodings`.
|
| 115 |
+
*
|
| 116 |
+
* Given `Accept-Encoding: gzip, deflate`
|
| 117 |
+
* an array sorted by quality is returned:
|
| 118 |
+
*
|
| 119 |
+
* ['gzip', 'deflate']
|
| 120 |
+
*
|
| 121 |
+
* @param {String|Array} encodings...
|
| 122 |
+
* @return {String|Array}
|
| 123 |
+
* @public
|
| 124 |
+
*/
|
| 125 |
+
|
| 126 |
+
Accepts.prototype.encoding =
|
| 127 |
+
Accepts.prototype.encodings = function (encodings_) {
|
| 128 |
+
var encodings = encodings_
|
| 129 |
+
|
| 130 |
+
// support flattened arguments
|
| 131 |
+
if (encodings && !Array.isArray(encodings)) {
|
| 132 |
+
encodings = new Array(arguments.length)
|
| 133 |
+
for (var i = 0; i < encodings.length; i++) {
|
| 134 |
+
encodings[i] = arguments[i]
|
| 135 |
+
}
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
// no encodings, return all requested encodings
|
| 139 |
+
if (!encodings || encodings.length === 0) {
|
| 140 |
+
return this.negotiator.encodings()
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
return this.negotiator.encodings(encodings)[0] || false
|
| 144 |
+
}
|
| 145 |
+
|
| 146 |
+
/**
|
| 147 |
+
* Return accepted charsets or best fit based on `charsets`.
|
| 148 |
+
*
|
| 149 |
+
* Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5`
|
| 150 |
+
* an array sorted by quality is returned:
|
| 151 |
+
*
|
| 152 |
+
* ['utf-8', 'utf-7', 'iso-8859-1']
|
| 153 |
+
*
|
| 154 |
+
* @param {String|Array} charsets...
|
| 155 |
+
* @return {String|Array}
|
| 156 |
+
* @public
|
| 157 |
+
*/
|
| 158 |
+
|
| 159 |
+
Accepts.prototype.charset =
|
| 160 |
+
Accepts.prototype.charsets = function (charsets_) {
|
| 161 |
+
var charsets = charsets_
|
| 162 |
+
|
| 163 |
+
// support flattened arguments
|
| 164 |
+
if (charsets && !Array.isArray(charsets)) {
|
| 165 |
+
charsets = new Array(arguments.length)
|
| 166 |
+
for (var i = 0; i < charsets.length; i++) {
|
| 167 |
+
charsets[i] = arguments[i]
|
| 168 |
+
}
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
// no charsets, return all requested charsets
|
| 172 |
+
if (!charsets || charsets.length === 0) {
|
| 173 |
+
return this.negotiator.charsets()
|
| 174 |
+
}
|
| 175 |
+
|
| 176 |
+
return this.negotiator.charsets(charsets)[0] || false
|
| 177 |
+
}
|
| 178 |
+
|
| 179 |
+
/**
|
| 180 |
+
* Return accepted languages or best fit based on `langs`.
|
| 181 |
+
*
|
| 182 |
+
* Given `Accept-Language: en;q=0.8, es, pt`
|
| 183 |
+
* an array sorted by quality is returned:
|
| 184 |
+
*
|
| 185 |
+
* ['es', 'pt', 'en']
|
| 186 |
+
*
|
| 187 |
+
* @param {String|Array} langs...
|
| 188 |
+
* @return {Array|String}
|
| 189 |
+
* @public
|
| 190 |
+
*/
|
| 191 |
+
|
| 192 |
+
Accepts.prototype.lang =
|
| 193 |
+
Accepts.prototype.langs =
|
| 194 |
+
Accepts.prototype.language =
|
| 195 |
+
Accepts.prototype.languages = function (languages_) {
|
| 196 |
+
var languages = languages_
|
| 197 |
+
|
| 198 |
+
// support flattened arguments
|
| 199 |
+
if (languages && !Array.isArray(languages)) {
|
| 200 |
+
languages = new Array(arguments.length)
|
| 201 |
+
for (var i = 0; i < languages.length; i++) {
|
| 202 |
+
languages[i] = arguments[i]
|
| 203 |
+
}
|
| 204 |
+
}
|
| 205 |
+
|
| 206 |
+
// no languages, return all requested languages
|
| 207 |
+
if (!languages || languages.length === 0) {
|
| 208 |
+
return this.negotiator.languages()
|
| 209 |
+
}
|
| 210 |
+
|
| 211 |
+
return this.negotiator.languages(languages)[0] || false
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
/**
|
| 215 |
+
* Convert extnames to mime.
|
| 216 |
+
*
|
| 217 |
+
* @param {String} type
|
| 218 |
+
* @return {String}
|
| 219 |
+
* @private
|
| 220 |
+
*/
|
| 221 |
+
|
| 222 |
+
function extToMime (type) {
|
| 223 |
+
return type.indexOf('/') === -1
|
| 224 |
+
? mime.lookup(type)
|
| 225 |
+
: type
|
| 226 |
+
}
|
| 227 |
+
|
| 228 |
+
/**
|
| 229 |
+
* Check if mime is valid.
|
| 230 |
+
*
|
| 231 |
+
* @param {String} type
|
| 232 |
+
* @return {String}
|
| 233 |
+
* @private
|
| 234 |
+
*/
|
| 235 |
+
|
| 236 |
+
function validMime (type) {
|
| 237 |
+
return typeof type === 'string'
|
| 238 |
+
}
|
node_modules/accepts/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "accepts",
|
| 3 |
+
"description": "Higher-level content negotiation",
|
| 4 |
+
"version": "1.3.8",
|
| 5 |
+
"contributors": [
|
| 6 |
+
"Douglas Christopher Wilson <doug@somethingdoug.com>",
|
| 7 |
+
"Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)"
|
| 8 |
+
],
|
| 9 |
+
"license": "MIT",
|
| 10 |
+
"repository": "jshttp/accepts",
|
| 11 |
+
"dependencies": {
|
| 12 |
+
"mime-types": "~2.1.34",
|
| 13 |
+
"negotiator": "0.6.3"
|
| 14 |
+
},
|
| 15 |
+
"devDependencies": {
|
| 16 |
+
"deep-equal": "1.0.1",
|
| 17 |
+
"eslint": "7.32.0",
|
| 18 |
+
"eslint-config-standard": "14.1.1",
|
| 19 |
+
"eslint-plugin-import": "2.25.4",
|
| 20 |
+
"eslint-plugin-markdown": "2.2.1",
|
| 21 |
+
"eslint-plugin-node": "11.1.0",
|
| 22 |
+
"eslint-plugin-promise": "4.3.1",
|
| 23 |
+
"eslint-plugin-standard": "4.1.0",
|
| 24 |
+
"mocha": "9.2.0",
|
| 25 |
+
"nyc": "15.1.0"
|
| 26 |
+
},
|
| 27 |
+
"files": [
|
| 28 |
+
"LICENSE",
|
| 29 |
+
"HISTORY.md",
|
| 30 |
+
"index.js"
|
| 31 |
+
],
|
| 32 |
+
"engines": {
|
| 33 |
+
"node": ">= 0.6"
|
| 34 |
+
},
|
| 35 |
+
"scripts": {
|
| 36 |
+
"lint": "eslint .",
|
| 37 |
+
"test": "mocha --reporter spec --check-leaks --bail test/",
|
| 38 |
+
"test-ci": "nyc --reporter=lcov --reporter=text npm test",
|
| 39 |
+
"test-cov": "nyc --reporter=html --reporter=text npm test"
|
| 40 |
+
},
|
| 41 |
+
"keywords": [
|
| 42 |
+
"content",
|
| 43 |
+
"negotiation",
|
| 44 |
+
"accept",
|
| 45 |
+
"accepts"
|
| 46 |
+
]
|
| 47 |
+
}
|
node_modules/anymatch/LICENSE
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
The ISC License
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2019 Elan Shanker, Paul Miller (https://paulmillr.com)
|
| 4 |
+
|
| 5 |
+
Permission to use, copy, modify, and/or distribute this software for any
|
| 6 |
+
purpose with or without fee is hereby granted, provided that the above
|
| 7 |
+
copyright notice and this permission notice appear in all copies.
|
| 8 |
+
|
| 9 |
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
| 10 |
+
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
| 11 |
+
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
| 12 |
+
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
| 13 |
+
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
| 14 |
+
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
|
| 15 |
+
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
node_modules/anymatch/README.md
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
anymatch [](https://travis-ci.org/micromatch/anymatch) [](https://coveralls.io/r/micromatch/anymatch?branch=master)
|
| 2 |
+
======
|
| 3 |
+
Javascript module to match a string against a regular expression, glob, string,
|
| 4 |
+
or function that takes the string as an argument and returns a truthy or falsy
|
| 5 |
+
value. The matcher can also be an array of any or all of these. Useful for
|
| 6 |
+
allowing a very flexible user-defined config to define things like file paths.
|
| 7 |
+
|
| 8 |
+
__Note: This module has Bash-parity, please be aware that Windows-style backslashes are not supported as separators. See https://github.com/micromatch/micromatch#backslashes for more information.__
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
Usage
|
| 12 |
+
-----
|
| 13 |
+
```sh
|
| 14 |
+
npm install anymatch
|
| 15 |
+
```
|
| 16 |
+
|
| 17 |
+
#### anymatch(matchers, testString, [returnIndex], [options])
|
| 18 |
+
* __matchers__: (_Array|String|RegExp|Function_)
|
| 19 |
+
String to be directly matched, string with glob patterns, regular expression
|
| 20 |
+
test, function that takes the testString as an argument and returns a truthy
|
| 21 |
+
value if it should be matched, or an array of any number and mix of these types.
|
| 22 |
+
* __testString__: (_String|Array_) The string to test against the matchers. If
|
| 23 |
+
passed as an array, the first element of the array will be used as the
|
| 24 |
+
`testString` for non-function matchers, while the entire array will be applied
|
| 25 |
+
as the arguments for function matchers.
|
| 26 |
+
* __options__: (_Object_ [optional]_) Any of the [picomatch](https://github.com/micromatch/picomatch#options) options.
|
| 27 |
+
* __returnIndex__: (_Boolean [optional]_) If true, return the array index of
|
| 28 |
+
the first matcher that that testString matched, or -1 if no match, instead of a
|
| 29 |
+
boolean result.
|
| 30 |
+
|
| 31 |
+
```js
|
| 32 |
+
const anymatch = require('anymatch');
|
| 33 |
+
|
| 34 |
+
const matchers = [ 'path/to/file.js', 'path/anyjs/**/*.js', /foo.js$/, string => string.includes('bar') && string.length > 10 ] ;
|
| 35 |
+
|
| 36 |
+
anymatch(matchers, 'path/to/file.js'); // true
|
| 37 |
+
anymatch(matchers, 'path/anyjs/baz.js'); // true
|
| 38 |
+
anymatch(matchers, 'path/to/foo.js'); // true
|
| 39 |
+
anymatch(matchers, 'path/to/bar.js'); // true
|
| 40 |
+
anymatch(matchers, 'bar.js'); // false
|
| 41 |
+
|
| 42 |
+
// returnIndex = true
|
| 43 |
+
anymatch(matchers, 'foo.js', {returnIndex: true}); // 2
|
| 44 |
+
anymatch(matchers, 'path/anyjs/foo.js', {returnIndex: true}); // 1
|
| 45 |
+
|
| 46 |
+
// any picomatc
|
| 47 |
+
|
| 48 |
+
// using globs to match directories and their children
|
| 49 |
+
anymatch('node_modules', 'node_modules'); // true
|
| 50 |
+
anymatch('node_modules', 'node_modules/somelib/index.js'); // false
|
| 51 |
+
anymatch('node_modules/**', 'node_modules/somelib/index.js'); // true
|
| 52 |
+
anymatch('node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // false
|
| 53 |
+
anymatch('**/node_modules/**', '/absolute/path/to/node_modules/somelib/index.js'); // true
|
| 54 |
+
|
| 55 |
+
const matcher = anymatch(matchers);
|
| 56 |
+
['foo.js', 'bar.js'].filter(matcher); // [ 'foo.js' ]
|
| 57 |
+
anymatch master* ❯
|
| 58 |
+
|
| 59 |
+
```
|
| 60 |
+
|
| 61 |
+
#### anymatch(matchers)
|
| 62 |
+
You can also pass in only your matcher(s) to get a curried function that has
|
| 63 |
+
already been bound to the provided matching criteria. This can be used as an
|
| 64 |
+
`Array#filter` callback.
|
| 65 |
+
|
| 66 |
+
```js
|
| 67 |
+
var matcher = anymatch(matchers);
|
| 68 |
+
|
| 69 |
+
matcher('path/to/file.js'); // true
|
| 70 |
+
matcher('path/anyjs/baz.js', true); // 1
|
| 71 |
+
|
| 72 |
+
['foo.js', 'bar.js'].filter(matcher); // ['foo.js']
|
| 73 |
+
```
|
| 74 |
+
|
| 75 |
+
Changelog
|
| 76 |
+
----------
|
| 77 |
+
[See release notes page on GitHub](https://github.com/micromatch/anymatch/releases)
|
| 78 |
+
|
| 79 |
+
- **v3.0:** Removed `startIndex` and `endIndex` arguments. Node 8.x-only.
|
| 80 |
+
- **v2.0:** [micromatch](https://github.com/jonschlinkert/micromatch) moves away from minimatch-parity and inline with Bash. This includes handling backslashes differently (see https://github.com/micromatch/micromatch#backslashes for more information).
|
| 81 |
+
- **v1.2:** anymatch uses [micromatch](https://github.com/jonschlinkert/micromatch)
|
| 82 |
+
for glob pattern matching. Issues with glob pattern matching should be
|
| 83 |
+
reported directly to the [micromatch issue tracker](https://github.com/jonschlinkert/micromatch/issues).
|
| 84 |
+
|
| 85 |
+
License
|
| 86 |
+
-------
|
| 87 |
+
[ISC](https://raw.github.com/micromatch/anymatch/master/LICENSE)
|
node_modules/anymatch/index.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
type AnymatchFn = (testString: string) => boolean;
|
| 2 |
+
type AnymatchPattern = string|RegExp|AnymatchFn;
|
| 3 |
+
type AnymatchMatcher = AnymatchPattern|AnymatchPattern[]
|
| 4 |
+
type AnymatchTester = {
|
| 5 |
+
(testString: string|any[], returnIndex: true): number;
|
| 6 |
+
(testString: string|any[]): boolean;
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
type PicomatchOptions = {dot: boolean};
|
| 10 |
+
|
| 11 |
+
declare const anymatch: {
|
| 12 |
+
(matchers: AnymatchMatcher): AnymatchTester;
|
| 13 |
+
(matchers: AnymatchMatcher, testString: null, returnIndex: true | PicomatchOptions): AnymatchTester;
|
| 14 |
+
(matchers: AnymatchMatcher, testString: string|any[], returnIndex: true | PicomatchOptions): number;
|
| 15 |
+
(matchers: AnymatchMatcher, testString: string|any[]): boolean;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
export {AnymatchMatcher as Matcher}
|
| 19 |
+
export {AnymatchTester as Tester}
|
| 20 |
+
export default anymatch
|
node_modules/anymatch/index.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use strict';
|
| 2 |
+
|
| 3 |
+
Object.defineProperty(exports, "__esModule", { value: true });
|
| 4 |
+
|
| 5 |
+
const picomatch = require('picomatch');
|
| 6 |
+
const normalizePath = require('normalize-path');
|
| 7 |
+
|
| 8 |
+
/**
|
| 9 |
+
* @typedef {(testString: string) => boolean} AnymatchFn
|
| 10 |
+
* @typedef {string|RegExp|AnymatchFn} AnymatchPattern
|
| 11 |
+
* @typedef {AnymatchPattern|AnymatchPattern[]} AnymatchMatcher
|
| 12 |
+
*/
|
| 13 |
+
const BANG = '!';
|
| 14 |
+
const DEFAULT_OPTIONS = {returnIndex: false};
|
| 15 |
+
const arrify = (item) => Array.isArray(item) ? item : [item];
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* @param {AnymatchPattern} matcher
|
| 19 |
+
* @param {object} options
|
| 20 |
+
* @returns {AnymatchFn}
|
| 21 |
+
*/
|
| 22 |
+
const createPattern = (matcher, options) => {
|
| 23 |
+
if (typeof matcher === 'function') {
|
| 24 |
+
return matcher;
|
| 25 |
+
}
|
| 26 |
+
if (typeof matcher === 'string') {
|
| 27 |
+
const glob = picomatch(matcher, options);
|
| 28 |
+
return (string) => matcher === string || glob(string);
|
| 29 |
+
}
|
| 30 |
+
if (matcher instanceof RegExp) {
|
| 31 |
+
return (string) => matcher.test(string);
|
| 32 |
+
}
|
| 33 |
+
return (string) => false;
|
| 34 |
+
};
|
| 35 |
+
|
| 36 |
+
/**
|
| 37 |
+
* @param {Array<Function>} patterns
|
| 38 |
+
* @param {Array<Function>} negPatterns
|
| 39 |
+
* @param {String|Array} args
|
| 40 |
+
* @param {Boolean} returnIndex
|
| 41 |
+
* @returns {boolean|number}
|
| 42 |
+
*/
|
| 43 |
+
const matchPatterns = (patterns, negPatterns, args, returnIndex) => {
|
| 44 |
+
const isList = Array.isArray(args);
|
| 45 |
+
const _path = isList ? args[0] : args;
|
| 46 |
+
if (!isList && typeof _path !== 'string') {
|
| 47 |
+
throw new TypeError('anymatch: second argument must be a string: got ' +
|
| 48 |
+
Object.prototype.toString.call(_path))
|
| 49 |
+
}
|
| 50 |
+
const path = normalizePath(_path, false);
|
| 51 |
+
|
| 52 |
+
for (let index = 0; index < negPatterns.length; index++) {
|
| 53 |
+
const nglob = negPatterns[index];
|
| 54 |
+
if (nglob(path)) {
|
| 55 |
+
return returnIndex ? -1 : false;
|
| 56 |
+
}
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
const applied = isList && [path].concat(args.slice(1));
|
| 60 |
+
for (let index = 0; index < patterns.length; index++) {
|
| 61 |
+
const pattern = patterns[index];
|
| 62 |
+
if (isList ? pattern(...applied) : pattern(path)) {
|
| 63 |
+
return returnIndex ? index : true;
|
| 64 |
+
}
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
return returnIndex ? -1 : false;
|
| 68 |
+
};
|
| 69 |
+
|
| 70 |
+
/**
|
| 71 |
+
* @param {AnymatchMatcher} matchers
|
| 72 |
+
* @param {Array|string} testString
|
| 73 |
+
* @param {object} options
|
| 74 |
+
* @returns {boolean|number|Function}
|
| 75 |
+
*/
|
| 76 |
+
const anymatch = (matchers, testString, options = DEFAULT_OPTIONS) => {
|
| 77 |
+
if (matchers == null) {
|
| 78 |
+
throw new TypeError('anymatch: specify first argument');
|
| 79 |
+
}
|
| 80 |
+
const opts = typeof options === 'boolean' ? {returnIndex: options} : options;
|
| 81 |
+
const returnIndex = opts.returnIndex || false;
|
| 82 |
+
|
| 83 |
+
// Early cache for matchers.
|
| 84 |
+
const mtchers = arrify(matchers);
|
| 85 |
+
const negatedGlobs = mtchers
|
| 86 |
+
.filter(item => typeof item === 'string' && item.charAt(0) === BANG)
|
| 87 |
+
.map(item => item.slice(1))
|
| 88 |
+
.map(item => picomatch(item, opts));
|
| 89 |
+
const patterns = mtchers
|
| 90 |
+
.filter(item => typeof item !== 'string' || (typeof item === 'string' && item.charAt(0) !== BANG))
|
| 91 |
+
.map(matcher => createPattern(matcher, opts));
|
| 92 |
+
|
| 93 |
+
if (testString == null) {
|
| 94 |
+
return (testString, ri = false) => {
|
| 95 |
+
const returnIndex = typeof ri === 'boolean' ? ri : false;
|
| 96 |
+
return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
|
| 97 |
+
}
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
return matchPatterns(patterns, negatedGlobs, testString, returnIndex);
|
| 101 |
+
};
|
| 102 |
+
|
| 103 |
+
anymatch.default = anymatch;
|
| 104 |
+
module.exports = anymatch;
|
node_modules/anymatch/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "anymatch",
|
| 3 |
+
"version": "3.1.3",
|
| 4 |
+
"description": "Matches strings against configurable strings, globs, regular expressions, and/or functions",
|
| 5 |
+
"files": [
|
| 6 |
+
"index.js",
|
| 7 |
+
"index.d.ts"
|
| 8 |
+
],
|
| 9 |
+
"dependencies": {
|
| 10 |
+
"normalize-path": "^3.0.0",
|
| 11 |
+
"picomatch": "^2.0.4"
|
| 12 |
+
},
|
| 13 |
+
"author": {
|
| 14 |
+
"name": "Elan Shanker",
|
| 15 |
+
"url": "https://github.com/es128"
|
| 16 |
+
},
|
| 17 |
+
"license": "ISC",
|
| 18 |
+
"homepage": "https://github.com/micromatch/anymatch",
|
| 19 |
+
"repository": {
|
| 20 |
+
"type": "git",
|
| 21 |
+
"url": "https://github.com/micromatch/anymatch"
|
| 22 |
+
},
|
| 23 |
+
"keywords": [
|
| 24 |
+
"match",
|
| 25 |
+
"any",
|
| 26 |
+
"string",
|
| 27 |
+
"file",
|
| 28 |
+
"fs",
|
| 29 |
+
"list",
|
| 30 |
+
"glob",
|
| 31 |
+
"regex",
|
| 32 |
+
"regexp",
|
| 33 |
+
"regular",
|
| 34 |
+
"expression",
|
| 35 |
+
"function"
|
| 36 |
+
],
|
| 37 |
+
"scripts": {
|
| 38 |
+
"test": "nyc mocha",
|
| 39 |
+
"mocha": "mocha"
|
| 40 |
+
},
|
| 41 |
+
"devDependencies": {
|
| 42 |
+
"mocha": "^6.1.3",
|
| 43 |
+
"nyc": "^14.0.0"
|
| 44 |
+
},
|
| 45 |
+
"engines": {
|
| 46 |
+
"node": ">= 8"
|
| 47 |
+
}
|
| 48 |
+
}
|
.gitignore → node_modules/append-field/.npmignore
RENAMED
|
@@ -1,4 +1 @@
|
|
| 1 |
node_modules/
|
| 2 |
-
uploads/
|
| 3 |
-
.env
|
| 4 |
-
.DS_Store
|
|
|
|
| 1 |
node_modules/
|
|
|
|
|
|
|
|
|
node_modules/append-field/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
The MIT License (MIT)
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2015 Linus Unnebäck
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in all
|
| 13 |
+
copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 21 |
+
SOFTWARE.
|
node_modules/append-field/README.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# `append-field`
|
| 2 |
+
|
| 3 |
+
A [W3C HTML JSON forms spec](http://www.w3.org/TR/html-json-forms/) compliant
|
| 4 |
+
field appender (for lack of a better name). Useful for people implementing
|
| 5 |
+
`application/x-www-form-urlencoded` and `multipart/form-data` parsers.
|
| 6 |
+
|
| 7 |
+
It works best on objects created with `Object.create(null)`. Otherwise it might
|
| 8 |
+
conflict with variables from the prototype (e.g. `hasOwnProperty`).
|
| 9 |
+
|
| 10 |
+
## Installation
|
| 11 |
+
|
| 12 |
+
```sh
|
| 13 |
+
npm install --save append-field
|
| 14 |
+
```
|
| 15 |
+
|
| 16 |
+
## Usage
|
| 17 |
+
|
| 18 |
+
```javascript
|
| 19 |
+
var appendField = require('append-field')
|
| 20 |
+
var obj = Object.create(null)
|
| 21 |
+
|
| 22 |
+
appendField(obj, 'pets[0][species]', 'Dahut')
|
| 23 |
+
appendField(obj, 'pets[0][name]', 'Hypatia')
|
| 24 |
+
appendField(obj, 'pets[1][species]', 'Felis Stultus')
|
| 25 |
+
appendField(obj, 'pets[1][name]', 'Billie')
|
| 26 |
+
|
| 27 |
+
console.log(obj)
|
| 28 |
+
```
|
| 29 |
+
|
| 30 |
+
```text
|
| 31 |
+
{ pets:
|
| 32 |
+
[ { species: 'Dahut', name: 'Hypatia' },
|
| 33 |
+
{ species: 'Felis Stultus', name: 'Billie' } ] }
|
| 34 |
+
```
|
| 35 |
+
|
| 36 |
+
## API
|
| 37 |
+
|
| 38 |
+
### `appendField(store, key, value)`
|
| 39 |
+
|
| 40 |
+
Adds the field named `key` with the value `value` to the object `store`.
|
| 41 |
+
|
| 42 |
+
## License
|
| 43 |
+
|
| 44 |
+
MIT
|
node_modules/append-field/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
var parsePath = require('./lib/parse-path')
|
| 2 |
+
var setValue = require('./lib/set-value')
|
| 3 |
+
|
| 4 |
+
function appendField (store, key, value) {
|
| 5 |
+
var steps = parsePath(key)
|
| 6 |
+
|
| 7 |
+
steps.reduce(function (context, step) {
|
| 8 |
+
return setValue(context, step, context[step.key], value)
|
| 9 |
+
}, store)
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
module.exports = appendField
|
node_modules/append-field/lib/parse-path.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
var reFirstKey = /^[^\[]*/
|
| 2 |
+
var reDigitPath = /^\[(\d+)\]/
|
| 3 |
+
var reNormalPath = /^\[([^\]]+)\]/
|
| 4 |
+
|
| 5 |
+
function parsePath (key) {
|
| 6 |
+
function failure () {
|
| 7 |
+
return [{ type: 'object', key: key, last: true }]
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
var firstKey = reFirstKey.exec(key)[0]
|
| 11 |
+
if (!firstKey) return failure()
|
| 12 |
+
|
| 13 |
+
var len = key.length
|
| 14 |
+
var pos = firstKey.length
|
| 15 |
+
var tail = { type: 'object', key: firstKey }
|
| 16 |
+
var steps = [tail]
|
| 17 |
+
|
| 18 |
+
while (pos < len) {
|
| 19 |
+
var m
|
| 20 |
+
|
| 21 |
+
if (key[pos] === '[' && key[pos + 1] === ']') {
|
| 22 |
+
pos += 2
|
| 23 |
+
tail.append = true
|
| 24 |
+
if (pos !== len) return failure()
|
| 25 |
+
continue
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
m = reDigitPath.exec(key.substring(pos))
|
| 29 |
+
if (m !== null) {
|
| 30 |
+
pos += m[0].length
|
| 31 |
+
tail.nextType = 'array'
|
| 32 |
+
tail = { type: 'array', key: parseInt(m[1], 10) }
|
| 33 |
+
steps.push(tail)
|
| 34 |
+
continue
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
m = reNormalPath.exec(key.substring(pos))
|
| 38 |
+
if (m !== null) {
|
| 39 |
+
pos += m[0].length
|
| 40 |
+
tail.nextType = 'object'
|
| 41 |
+
tail = { type: 'object', key: m[1] }
|
| 42 |
+
steps.push(tail)
|
| 43 |
+
continue
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
return failure()
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
tail.last = true
|
| 50 |
+
return steps
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
module.exports = parsePath
|
node_modules/append-field/lib/set-value.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
function valueType (value) {
|
| 2 |
+
if (value === undefined) return 'undefined'
|
| 3 |
+
if (Array.isArray(value)) return 'array'
|
| 4 |
+
if (typeof value === 'object') return 'object'
|
| 5 |
+
return 'scalar'
|
| 6 |
+
}
|
| 7 |
+
|
| 8 |
+
function setLastValue (context, step, currentValue, entryValue) {
|
| 9 |
+
switch (valueType(currentValue)) {
|
| 10 |
+
case 'undefined':
|
| 11 |
+
if (step.append) {
|
| 12 |
+
context[step.key] = [entryValue]
|
| 13 |
+
} else {
|
| 14 |
+
context[step.key] = entryValue
|
| 15 |
+
}
|
| 16 |
+
break
|
| 17 |
+
case 'array':
|
| 18 |
+
context[step.key].push(entryValue)
|
| 19 |
+
break
|
| 20 |
+
case 'object':
|
| 21 |
+
return setLastValue(currentValue, { type: 'object', key: '', last: true }, currentValue[''], entryValue)
|
| 22 |
+
case 'scalar':
|
| 23 |
+
context[step.key] = [context[step.key], entryValue]
|
| 24 |
+
break
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
return context
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
function setValue (context, step, currentValue, entryValue) {
|
| 31 |
+
if (step.last) return setLastValue(context, step, currentValue, entryValue)
|
| 32 |
+
|
| 33 |
+
var obj
|
| 34 |
+
switch (valueType(currentValue)) {
|
| 35 |
+
case 'undefined':
|
| 36 |
+
if (step.nextType === 'array') {
|
| 37 |
+
context[step.key] = []
|
| 38 |
+
} else {
|
| 39 |
+
context[step.key] = Object.create(null)
|
| 40 |
+
}
|
| 41 |
+
return context[step.key]
|
| 42 |
+
case 'object':
|
| 43 |
+
return context[step.key]
|
| 44 |
+
case 'array':
|
| 45 |
+
if (step.nextType === 'array') {
|
| 46 |
+
return currentValue
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
obj = Object.create(null)
|
| 50 |
+
context[step.key] = obj
|
| 51 |
+
currentValue.forEach(function (item, i) {
|
| 52 |
+
if (item !== undefined) obj['' + i] = item
|
| 53 |
+
})
|
| 54 |
+
|
| 55 |
+
return obj
|
| 56 |
+
case 'scalar':
|
| 57 |
+
obj = Object.create(null)
|
| 58 |
+
obj[''] = currentValue
|
| 59 |
+
context[step.key] = obj
|
| 60 |
+
return obj
|
| 61 |
+
}
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
module.exports = setValue
|
node_modules/append-field/package.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "append-field",
|
| 3 |
+
"version": "1.0.0",
|
| 4 |
+
"license": "MIT",
|
| 5 |
+
"author": "Linus Unnebäck <linus@folkdatorn.se>",
|
| 6 |
+
"main": "index.js",
|
| 7 |
+
"devDependencies": {
|
| 8 |
+
"mocha": "^2.2.4",
|
| 9 |
+
"standard": "^6.0.5",
|
| 10 |
+
"testdata-w3c-json-form": "^0.2.0"
|
| 11 |
+
},
|
| 12 |
+
"scripts": {
|
| 13 |
+
"test": "standard && mocha"
|
| 14 |
+
},
|
| 15 |
+
"repository": {
|
| 16 |
+
"type": "git",
|
| 17 |
+
"url": "http://github.com/LinusU/node-append-field.git"
|
| 18 |
+
}
|
| 19 |
+
}
|
node_modules/append-field/test/forms.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* eslint-env mocha */
|
| 2 |
+
|
| 3 |
+
var assert = require('assert')
|
| 4 |
+
var appendField = require('../')
|
| 5 |
+
var testData = require('testdata-w3c-json-form')
|
| 6 |
+
|
| 7 |
+
describe('Append Field', function () {
|
| 8 |
+
for (var test of testData) {
|
| 9 |
+
it('handles ' + test.name, function () {
|
| 10 |
+
var store = Object.create(null)
|
| 11 |
+
|
| 12 |
+
for (var field of test.fields) {
|
| 13 |
+
appendField(store, field.key, field.value)
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
assert.deepEqual(store, test.expected)
|
| 17 |
+
})
|
| 18 |
+
}
|
| 19 |
+
})
|
node_modules/array-flatten/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
The MIT License (MIT)
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com)
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in
|
| 13 |
+
all copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
| 21 |
+
THE SOFTWARE.
|
node_modules/array-flatten/README.md
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Array Flatten
|
| 2 |
+
|
| 3 |
+
[![NPM version][npm-image]][npm-url]
|
| 4 |
+
[![NPM downloads][downloads-image]][downloads-url]
|
| 5 |
+
[![Build status][travis-image]][travis-url]
|
| 6 |
+
[![Test coverage][coveralls-image]][coveralls-url]
|
| 7 |
+
|
| 8 |
+
> Flatten an array of nested arrays into a single flat array. Accepts an optional depth.
|
| 9 |
+
|
| 10 |
+
## Installation
|
| 11 |
+
|
| 12 |
+
```
|
| 13 |
+
npm install array-flatten --save
|
| 14 |
+
```
|
| 15 |
+
|
| 16 |
+
## Usage
|
| 17 |
+
|
| 18 |
+
```javascript
|
| 19 |
+
var flatten = require('array-flatten')
|
| 20 |
+
|
| 21 |
+
flatten([1, [2, [3, [4, [5], 6], 7], 8], 9])
|
| 22 |
+
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
|
| 23 |
+
|
| 24 |
+
flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2)
|
| 25 |
+
//=> [1, 2, 3, [4, [5], 6], 7, 8, 9]
|
| 26 |
+
|
| 27 |
+
(function () {
|
| 28 |
+
flatten(arguments) //=> [1, 2, 3]
|
| 29 |
+
})(1, [2, 3])
|
| 30 |
+
```
|
| 31 |
+
|
| 32 |
+
## License
|
| 33 |
+
|
| 34 |
+
MIT
|
| 35 |
+
|
| 36 |
+
[npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat
|
| 37 |
+
[npm-url]: https://npmjs.org/package/array-flatten
|
| 38 |
+
[downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat
|
| 39 |
+
[downloads-url]: https://npmjs.org/package/array-flatten
|
| 40 |
+
[travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat
|
| 41 |
+
[travis-url]: https://travis-ci.org/blakeembrey/array-flatten
|
| 42 |
+
[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat
|
| 43 |
+
[coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master
|
node_modules/array-flatten/array-flatten.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use strict'
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Expose `arrayFlatten`.
|
| 5 |
+
*/
|
| 6 |
+
module.exports = arrayFlatten
|
| 7 |
+
|
| 8 |
+
/**
|
| 9 |
+
* Recursive flatten function with depth.
|
| 10 |
+
*
|
| 11 |
+
* @param {Array} array
|
| 12 |
+
* @param {Array} result
|
| 13 |
+
* @param {Number} depth
|
| 14 |
+
* @return {Array}
|
| 15 |
+
*/
|
| 16 |
+
function flattenWithDepth (array, result, depth) {
|
| 17 |
+
for (var i = 0; i < array.length; i++) {
|
| 18 |
+
var value = array[i]
|
| 19 |
+
|
| 20 |
+
if (depth > 0 && Array.isArray(value)) {
|
| 21 |
+
flattenWithDepth(value, result, depth - 1)
|
| 22 |
+
} else {
|
| 23 |
+
result.push(value)
|
| 24 |
+
}
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
return result
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
/**
|
| 31 |
+
* Recursive flatten function. Omitting depth is slightly faster.
|
| 32 |
+
*
|
| 33 |
+
* @param {Array} array
|
| 34 |
+
* @param {Array} result
|
| 35 |
+
* @return {Array}
|
| 36 |
+
*/
|
| 37 |
+
function flattenForever (array, result) {
|
| 38 |
+
for (var i = 0; i < array.length; i++) {
|
| 39 |
+
var value = array[i]
|
| 40 |
+
|
| 41 |
+
if (Array.isArray(value)) {
|
| 42 |
+
flattenForever(value, result)
|
| 43 |
+
} else {
|
| 44 |
+
result.push(value)
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
return result
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
/**
|
| 52 |
+
* Flatten an array, with the ability to define a depth.
|
| 53 |
+
*
|
| 54 |
+
* @param {Array} array
|
| 55 |
+
* @param {Number} depth
|
| 56 |
+
* @return {Array}
|
| 57 |
+
*/
|
| 58 |
+
function arrayFlatten (array, depth) {
|
| 59 |
+
if (depth == null) {
|
| 60 |
+
return flattenForever(array, [])
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
return flattenWithDepth(array, [], depth)
|
| 64 |
+
}
|
node_modules/array-flatten/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "array-flatten",
|
| 3 |
+
"version": "1.1.1",
|
| 4 |
+
"description": "Flatten an array of nested arrays into a single flat array",
|
| 5 |
+
"main": "array-flatten.js",
|
| 6 |
+
"files": [
|
| 7 |
+
"array-flatten.js",
|
| 8 |
+
"LICENSE"
|
| 9 |
+
],
|
| 10 |
+
"scripts": {
|
| 11 |
+
"test": "istanbul cover _mocha -- -R spec"
|
| 12 |
+
},
|
| 13 |
+
"repository": {
|
| 14 |
+
"type": "git",
|
| 15 |
+
"url": "git://github.com/blakeembrey/array-flatten.git"
|
| 16 |
+
},
|
| 17 |
+
"keywords": [
|
| 18 |
+
"array",
|
| 19 |
+
"flatten",
|
| 20 |
+
"arguments",
|
| 21 |
+
"depth"
|
| 22 |
+
],
|
| 23 |
+
"author": {
|
| 24 |
+
"name": "Blake Embrey",
|
| 25 |
+
"email": "hello@blakeembrey.com",
|
| 26 |
+
"url": "http://blakeembrey.me"
|
| 27 |
+
},
|
| 28 |
+
"license": "MIT",
|
| 29 |
+
"bugs": {
|
| 30 |
+
"url": "https://github.com/blakeembrey/array-flatten/issues"
|
| 31 |
+
},
|
| 32 |
+
"homepage": "https://github.com/blakeembrey/array-flatten",
|
| 33 |
+
"devDependencies": {
|
| 34 |
+
"istanbul": "^0.3.13",
|
| 35 |
+
"mocha": "^2.2.4",
|
| 36 |
+
"pre-commit": "^1.0.7",
|
| 37 |
+
"standard": "^3.7.3"
|
| 38 |
+
}
|
| 39 |
+
}
|
node_modules/balanced-match/.github/FUNDING.yml
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
tidelift: "npm/balanced-match"
|
| 2 |
+
patreon: juliangruber
|
node_modules/balanced-match/LICENSE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
(MIT)
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
| 6 |
+
this software and associated documentation files (the "Software"), to deal in
|
| 7 |
+
the Software without restriction, including without limitation the rights to
|
| 8 |
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
| 9 |
+
of the Software, and to permit persons to whom the Software is furnished to do
|
| 10 |
+
so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in all
|
| 13 |
+
copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 21 |
+
SOFTWARE.
|
node_modules/balanced-match/README.md
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# balanced-match
|
| 2 |
+
|
| 3 |
+
Match balanced string pairs, like `{` and `}` or `<b>` and `</b>`. Supports regular expressions as well!
|
| 4 |
+
|
| 5 |
+
[](http://travis-ci.org/juliangruber/balanced-match)
|
| 6 |
+
[](https://www.npmjs.org/package/balanced-match)
|
| 7 |
+
|
| 8 |
+
[](https://ci.testling.com/juliangruber/balanced-match)
|
| 9 |
+
|
| 10 |
+
## Example
|
| 11 |
+
|
| 12 |
+
Get the first matching pair of braces:
|
| 13 |
+
|
| 14 |
+
```js
|
| 15 |
+
var balanced = require('balanced-match');
|
| 16 |
+
|
| 17 |
+
console.log(balanced('{', '}', 'pre{in{nested}}post'));
|
| 18 |
+
console.log(balanced('{', '}', 'pre{first}between{second}post'));
|
| 19 |
+
console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post'));
|
| 20 |
+
```
|
| 21 |
+
|
| 22 |
+
The matches are:
|
| 23 |
+
|
| 24 |
+
```bash
|
| 25 |
+
$ node example.js
|
| 26 |
+
{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }
|
| 27 |
+
{ start: 3,
|
| 28 |
+
end: 9,
|
| 29 |
+
pre: 'pre',
|
| 30 |
+
body: 'first',
|
| 31 |
+
post: 'between{second}post' }
|
| 32 |
+
{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' }
|
| 33 |
+
```
|
| 34 |
+
|
| 35 |
+
## API
|
| 36 |
+
|
| 37 |
+
### var m = balanced(a, b, str)
|
| 38 |
+
|
| 39 |
+
For the first non-nested matching pair of `a` and `b` in `str`, return an
|
| 40 |
+
object with those keys:
|
| 41 |
+
|
| 42 |
+
* **start** the index of the first match of `a`
|
| 43 |
+
* **end** the index of the matching `b`
|
| 44 |
+
* **pre** the preamble, `a` and `b` not included
|
| 45 |
+
* **body** the match, `a` and `b` not included
|
| 46 |
+
* **post** the postscript, `a` and `b` not included
|
| 47 |
+
|
| 48 |
+
If there's no match, `undefined` will be returned.
|
| 49 |
+
|
| 50 |
+
If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`.
|
| 51 |
+
|
| 52 |
+
### var r = balanced.range(a, b, str)
|
| 53 |
+
|
| 54 |
+
For the first non-nested matching pair of `a` and `b` in `str`, return an
|
| 55 |
+
array with indexes: `[ <a index>, <b index> ]`.
|
| 56 |
+
|
| 57 |
+
If there's no match, `undefined` will be returned.
|
| 58 |
+
|
| 59 |
+
If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`.
|
| 60 |
+
|
| 61 |
+
## Installation
|
| 62 |
+
|
| 63 |
+
With [npm](https://npmjs.org) do:
|
| 64 |
+
|
| 65 |
+
```bash
|
| 66 |
+
npm install balanced-match
|
| 67 |
+
```
|
| 68 |
+
|
| 69 |
+
## Security contact information
|
| 70 |
+
|
| 71 |
+
To report a security vulnerability, please use the
|
| 72 |
+
[Tidelift security contact](https://tidelift.com/security).
|
| 73 |
+
Tidelift will coordinate the fix and disclosure.
|
| 74 |
+
|
| 75 |
+
## License
|
| 76 |
+
|
| 77 |
+
(MIT)
|
| 78 |
+
|
| 79 |
+
Copyright (c) 2013 Julian Gruber <julian@juliangruber.com>
|
| 80 |
+
|
| 81 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
| 82 |
+
this software and associated documentation files (the "Software"), to deal in
|
| 83 |
+
the Software without restriction, including without limitation the rights to
|
| 84 |
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
| 85 |
+
of the Software, and to permit persons to whom the Software is furnished to do
|
| 86 |
+
so, subject to the following conditions:
|
| 87 |
+
|
| 88 |
+
The above copyright notice and this permission notice shall be included in all
|
| 89 |
+
copies or substantial portions of the Software.
|
| 90 |
+
|
| 91 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 92 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 93 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 94 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 95 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 96 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 97 |
+
SOFTWARE.
|
node_modules/balanced-match/index.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
'use strict';
|
| 2 |
+
module.exports = balanced;
|
| 3 |
+
function balanced(a, b, str) {
|
| 4 |
+
if (a instanceof RegExp) a = maybeMatch(a, str);
|
| 5 |
+
if (b instanceof RegExp) b = maybeMatch(b, str);
|
| 6 |
+
|
| 7 |
+
var r = range(a, b, str);
|
| 8 |
+
|
| 9 |
+
return r && {
|
| 10 |
+
start: r[0],
|
| 11 |
+
end: r[1],
|
| 12 |
+
pre: str.slice(0, r[0]),
|
| 13 |
+
body: str.slice(r[0] + a.length, r[1]),
|
| 14 |
+
post: str.slice(r[1] + b.length)
|
| 15 |
+
};
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
function maybeMatch(reg, str) {
|
| 19 |
+
var m = str.match(reg);
|
| 20 |
+
return m ? m[0] : null;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
balanced.range = range;
|
| 24 |
+
function range(a, b, str) {
|
| 25 |
+
var begs, beg, left, right, result;
|
| 26 |
+
var ai = str.indexOf(a);
|
| 27 |
+
var bi = str.indexOf(b, ai + 1);
|
| 28 |
+
var i = ai;
|
| 29 |
+
|
| 30 |
+
if (ai >= 0 && bi > 0) {
|
| 31 |
+
if(a===b) {
|
| 32 |
+
return [ai, bi];
|
| 33 |
+
}
|
| 34 |
+
begs = [];
|
| 35 |
+
left = str.length;
|
| 36 |
+
|
| 37 |
+
while (i >= 0 && !result) {
|
| 38 |
+
if (i == ai) {
|
| 39 |
+
begs.push(i);
|
| 40 |
+
ai = str.indexOf(a, i + 1);
|
| 41 |
+
} else if (begs.length == 1) {
|
| 42 |
+
result = [ begs.pop(), bi ];
|
| 43 |
+
} else {
|
| 44 |
+
beg = begs.pop();
|
| 45 |
+
if (beg < left) {
|
| 46 |
+
left = beg;
|
| 47 |
+
right = bi;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
bi = str.indexOf(b, i + 1);
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
i = ai < bi && ai >= 0 ? ai : bi;
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
if (begs.length) {
|
| 57 |
+
result = [ left, right ];
|
| 58 |
+
}
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
return result;
|
| 62 |
+
}
|
node_modules/balanced-match/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "balanced-match",
|
| 3 |
+
"description": "Match balanced character pairs, like \"{\" and \"}\"",
|
| 4 |
+
"version": "1.0.2",
|
| 5 |
+
"repository": {
|
| 6 |
+
"type": "git",
|
| 7 |
+
"url": "git://github.com/juliangruber/balanced-match.git"
|
| 8 |
+
},
|
| 9 |
+
"homepage": "https://github.com/juliangruber/balanced-match",
|
| 10 |
+
"main": "index.js",
|
| 11 |
+
"scripts": {
|
| 12 |
+
"test": "tape test/test.js",
|
| 13 |
+
"bench": "matcha test/bench.js"
|
| 14 |
+
},
|
| 15 |
+
"devDependencies": {
|
| 16 |
+
"matcha": "^0.7.0",
|
| 17 |
+
"tape": "^4.6.0"
|
| 18 |
+
},
|
| 19 |
+
"keywords": [
|
| 20 |
+
"match",
|
| 21 |
+
"regexp",
|
| 22 |
+
"test",
|
| 23 |
+
"balanced",
|
| 24 |
+
"parse"
|
| 25 |
+
],
|
| 26 |
+
"author": {
|
| 27 |
+
"name": "Julian Gruber",
|
| 28 |
+
"email": "mail@juliangruber.com",
|
| 29 |
+
"url": "http://juliangruber.com"
|
| 30 |
+
},
|
| 31 |
+
"license": "MIT",
|
| 32 |
+
"testling": {
|
| 33 |
+
"files": "test/*.js",
|
| 34 |
+
"browsers": [
|
| 35 |
+
"ie/8..latest",
|
| 36 |
+
"firefox/20..latest",
|
| 37 |
+
"firefox/nightly",
|
| 38 |
+
"chrome/25..latest",
|
| 39 |
+
"chrome/canary",
|
| 40 |
+
"opera/12..latest",
|
| 41 |
+
"opera/next",
|
| 42 |
+
"safari/5.1..latest",
|
| 43 |
+
"ipad/6.0..latest",
|
| 44 |
+
"iphone/6.0..latest",
|
| 45 |
+
"android-browser/4.2..latest"
|
| 46 |
+
]
|
| 47 |
+
}
|
| 48 |
+
}
|
node_modules/binary-extensions/binary-extensions.json
ADDED
|
@@ -0,0 +1,263 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
"3dm",
|
| 3 |
+
"3ds",
|
| 4 |
+
"3g2",
|
| 5 |
+
"3gp",
|
| 6 |
+
"7z",
|
| 7 |
+
"a",
|
| 8 |
+
"aac",
|
| 9 |
+
"adp",
|
| 10 |
+
"afdesign",
|
| 11 |
+
"afphoto",
|
| 12 |
+
"afpub",
|
| 13 |
+
"ai",
|
| 14 |
+
"aif",
|
| 15 |
+
"aiff",
|
| 16 |
+
"alz",
|
| 17 |
+
"ape",
|
| 18 |
+
"apk",
|
| 19 |
+
"appimage",
|
| 20 |
+
"ar",
|
| 21 |
+
"arj",
|
| 22 |
+
"asf",
|
| 23 |
+
"au",
|
| 24 |
+
"avi",
|
| 25 |
+
"bak",
|
| 26 |
+
"baml",
|
| 27 |
+
"bh",
|
| 28 |
+
"bin",
|
| 29 |
+
"bk",
|
| 30 |
+
"bmp",
|
| 31 |
+
"btif",
|
| 32 |
+
"bz2",
|
| 33 |
+
"bzip2",
|
| 34 |
+
"cab",
|
| 35 |
+
"caf",
|
| 36 |
+
"cgm",
|
| 37 |
+
"class",
|
| 38 |
+
"cmx",
|
| 39 |
+
"cpio",
|
| 40 |
+
"cr2",
|
| 41 |
+
"cur",
|
| 42 |
+
"dat",
|
| 43 |
+
"dcm",
|
| 44 |
+
"deb",
|
| 45 |
+
"dex",
|
| 46 |
+
"djvu",
|
| 47 |
+
"dll",
|
| 48 |
+
"dmg",
|
| 49 |
+
"dng",
|
| 50 |
+
"doc",
|
| 51 |
+
"docm",
|
| 52 |
+
"docx",
|
| 53 |
+
"dot",
|
| 54 |
+
"dotm",
|
| 55 |
+
"dra",
|
| 56 |
+
"DS_Store",
|
| 57 |
+
"dsk",
|
| 58 |
+
"dts",
|
| 59 |
+
"dtshd",
|
| 60 |
+
"dvb",
|
| 61 |
+
"dwg",
|
| 62 |
+
"dxf",
|
| 63 |
+
"ecelp4800",
|
| 64 |
+
"ecelp7470",
|
| 65 |
+
"ecelp9600",
|
| 66 |
+
"egg",
|
| 67 |
+
"eol",
|
| 68 |
+
"eot",
|
| 69 |
+
"epub",
|
| 70 |
+
"exe",
|
| 71 |
+
"f4v",
|
| 72 |
+
"fbs",
|
| 73 |
+
"fh",
|
| 74 |
+
"fla",
|
| 75 |
+
"flac",
|
| 76 |
+
"flatpak",
|
| 77 |
+
"fli",
|
| 78 |
+
"flv",
|
| 79 |
+
"fpx",
|
| 80 |
+
"fst",
|
| 81 |
+
"fvt",
|
| 82 |
+
"g3",
|
| 83 |
+
"gh",
|
| 84 |
+
"gif",
|
| 85 |
+
"graffle",
|
| 86 |
+
"gz",
|
| 87 |
+
"gzip",
|
| 88 |
+
"h261",
|
| 89 |
+
"h263",
|
| 90 |
+
"h264",
|
| 91 |
+
"icns",
|
| 92 |
+
"ico",
|
| 93 |
+
"ief",
|
| 94 |
+
"img",
|
| 95 |
+
"ipa",
|
| 96 |
+
"iso",
|
| 97 |
+
"jar",
|
| 98 |
+
"jpeg",
|
| 99 |
+
"jpg",
|
| 100 |
+
"jpgv",
|
| 101 |
+
"jpm",
|
| 102 |
+
"jxr",
|
| 103 |
+
"key",
|
| 104 |
+
"ktx",
|
| 105 |
+
"lha",
|
| 106 |
+
"lib",
|
| 107 |
+
"lvp",
|
| 108 |
+
"lz",
|
| 109 |
+
"lzh",
|
| 110 |
+
"lzma",
|
| 111 |
+
"lzo",
|
| 112 |
+
"m3u",
|
| 113 |
+
"m4a",
|
| 114 |
+
"m4v",
|
| 115 |
+
"mar",
|
| 116 |
+
"mdi",
|
| 117 |
+
"mht",
|
| 118 |
+
"mid",
|
| 119 |
+
"midi",
|
| 120 |
+
"mj2",
|
| 121 |
+
"mka",
|
| 122 |
+
"mkv",
|
| 123 |
+
"mmr",
|
| 124 |
+
"mng",
|
| 125 |
+
"mobi",
|
| 126 |
+
"mov",
|
| 127 |
+
"movie",
|
| 128 |
+
"mp3",
|
| 129 |
+
"mp4",
|
| 130 |
+
"mp4a",
|
| 131 |
+
"mpeg",
|
| 132 |
+
"mpg",
|
| 133 |
+
"mpga",
|
| 134 |
+
"mxu",
|
| 135 |
+
"nef",
|
| 136 |
+
"npx",
|
| 137 |
+
"numbers",
|
| 138 |
+
"nupkg",
|
| 139 |
+
"o",
|
| 140 |
+
"odp",
|
| 141 |
+
"ods",
|
| 142 |
+
"odt",
|
| 143 |
+
"oga",
|
| 144 |
+
"ogg",
|
| 145 |
+
"ogv",
|
| 146 |
+
"otf",
|
| 147 |
+
"ott",
|
| 148 |
+
"pages",
|
| 149 |
+
"pbm",
|
| 150 |
+
"pcx",
|
| 151 |
+
"pdb",
|
| 152 |
+
"pdf",
|
| 153 |
+
"pea",
|
| 154 |
+
"pgm",
|
| 155 |
+
"pic",
|
| 156 |
+
"png",
|
| 157 |
+
"pnm",
|
| 158 |
+
"pot",
|
| 159 |
+
"potm",
|
| 160 |
+
"potx",
|
| 161 |
+
"ppa",
|
| 162 |
+
"ppam",
|
| 163 |
+
"ppm",
|
| 164 |
+
"pps",
|
| 165 |
+
"ppsm",
|
| 166 |
+
"ppsx",
|
| 167 |
+
"ppt",
|
| 168 |
+
"pptm",
|
| 169 |
+
"pptx",
|
| 170 |
+
"psd",
|
| 171 |
+
"pya",
|
| 172 |
+
"pyc",
|
| 173 |
+
"pyo",
|
| 174 |
+
"pyv",
|
| 175 |
+
"qt",
|
| 176 |
+
"rar",
|
| 177 |
+
"ras",
|
| 178 |
+
"raw",
|
| 179 |
+
"resources",
|
| 180 |
+
"rgb",
|
| 181 |
+
"rip",
|
| 182 |
+
"rlc",
|
| 183 |
+
"rmf",
|
| 184 |
+
"rmvb",
|
| 185 |
+
"rpm",
|
| 186 |
+
"rtf",
|
| 187 |
+
"rz",
|
| 188 |
+
"s3m",
|
| 189 |
+
"s7z",
|
| 190 |
+
"scpt",
|
| 191 |
+
"sgi",
|
| 192 |
+
"shar",
|
| 193 |
+
"snap",
|
| 194 |
+
"sil",
|
| 195 |
+
"sketch",
|
| 196 |
+
"slk",
|
| 197 |
+
"smv",
|
| 198 |
+
"snk",
|
| 199 |
+
"so",
|
| 200 |
+
"stl",
|
| 201 |
+
"suo",
|
| 202 |
+
"sub",
|
| 203 |
+
"swf",
|
| 204 |
+
"tar",
|
| 205 |
+
"tbz",
|
| 206 |
+
"tbz2",
|
| 207 |
+
"tga",
|
| 208 |
+
"tgz",
|
| 209 |
+
"thmx",
|
| 210 |
+
"tif",
|
| 211 |
+
"tiff",
|
| 212 |
+
"tlz",
|
| 213 |
+
"ttc",
|
| 214 |
+
"ttf",
|
| 215 |
+
"txz",
|
| 216 |
+
"udf",
|
| 217 |
+
"uvh",
|
| 218 |
+
"uvi",
|
| 219 |
+
"uvm",
|
| 220 |
+
"uvp",
|
| 221 |
+
"uvs",
|
| 222 |
+
"uvu",
|
| 223 |
+
"viv",
|
| 224 |
+
"vob",
|
| 225 |
+
"war",
|
| 226 |
+
"wav",
|
| 227 |
+
"wax",
|
| 228 |
+
"wbmp",
|
| 229 |
+
"wdp",
|
| 230 |
+
"weba",
|
| 231 |
+
"webm",
|
| 232 |
+
"webp",
|
| 233 |
+
"whl",
|
| 234 |
+
"wim",
|
| 235 |
+
"wm",
|
| 236 |
+
"wma",
|
| 237 |
+
"wmv",
|
| 238 |
+
"wmx",
|
| 239 |
+
"woff",
|
| 240 |
+
"woff2",
|
| 241 |
+
"wrm",
|
| 242 |
+
"wvx",
|
| 243 |
+
"xbm",
|
| 244 |
+
"xif",
|
| 245 |
+
"xla",
|
| 246 |
+
"xlam",
|
| 247 |
+
"xls",
|
| 248 |
+
"xlsb",
|
| 249 |
+
"xlsm",
|
| 250 |
+
"xlsx",
|
| 251 |
+
"xlt",
|
| 252 |
+
"xltm",
|
| 253 |
+
"xltx",
|
| 254 |
+
"xm",
|
| 255 |
+
"xmind",
|
| 256 |
+
"xpi",
|
| 257 |
+
"xpm",
|
| 258 |
+
"xwd",
|
| 259 |
+
"xz",
|
| 260 |
+
"z",
|
| 261 |
+
"zip",
|
| 262 |
+
"zipx"
|
| 263 |
+
]
|
node_modules/binary-extensions/binary-extensions.json.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
declare const binaryExtensionsJson: readonly string[];
|
| 2 |
+
|
| 3 |
+
export = binaryExtensionsJson;
|
node_modules/binary-extensions/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/**
|
| 2 |
+
List of binary file extensions.
|
| 3 |
+
|
| 4 |
+
@example
|
| 5 |
+
```
|
| 6 |
+
import binaryExtensions = require('binary-extensions');
|
| 7 |
+
|
| 8 |
+
console.log(binaryExtensions);
|
| 9 |
+
//=> ['3ds', '3g2', …]
|
| 10 |
+
```
|
| 11 |
+
*/
|
| 12 |
+
declare const binaryExtensions: readonly string[];
|
| 13 |
+
|
| 14 |
+
export = binaryExtensions;
|
node_modules/binary-extensions/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
module.exports = require('./binary-extensions.json');
|
node_modules/binary-extensions/license
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
MIT License
|
| 2 |
+
|
| 3 |
+
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
|
| 4 |
+
Copyright (c) Paul Miller (https://paulmillr.com)
|
| 5 |
+
|
| 6 |
+
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:
|
| 7 |
+
|
| 8 |
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
| 9 |
+
|
| 10 |
+
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.
|
node_modules/binary-extensions/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "binary-extensions",
|
| 3 |
+
"version": "2.3.0",
|
| 4 |
+
"description": "List of binary file extensions",
|
| 5 |
+
"license": "MIT",
|
| 6 |
+
"repository": "sindresorhus/binary-extensions",
|
| 7 |
+
"funding": "https://github.com/sponsors/sindresorhus",
|
| 8 |
+
"author": {
|
| 9 |
+
"name": "Sindre Sorhus",
|
| 10 |
+
"email": "sindresorhus@gmail.com",
|
| 11 |
+
"url": "https://sindresorhus.com"
|
| 12 |
+
},
|
| 13 |
+
"sideEffects": false,
|
| 14 |
+
"engines": {
|
| 15 |
+
"node": ">=8"
|
| 16 |
+
},
|
| 17 |
+
"scripts": {
|
| 18 |
+
"test": "xo && ava && tsd"
|
| 19 |
+
},
|
| 20 |
+
"files": [
|
| 21 |
+
"index.js",
|
| 22 |
+
"index.d.ts",
|
| 23 |
+
"binary-extensions.json",
|
| 24 |
+
"binary-extensions.json.d.ts"
|
| 25 |
+
],
|
| 26 |
+
"keywords": [
|
| 27 |
+
"binary",
|
| 28 |
+
"extensions",
|
| 29 |
+
"extension",
|
| 30 |
+
"file",
|
| 31 |
+
"json",
|
| 32 |
+
"list",
|
| 33 |
+
"array"
|
| 34 |
+
],
|
| 35 |
+
"devDependencies": {
|
| 36 |
+
"ava": "^1.4.1",
|
| 37 |
+
"tsd": "^0.7.2",
|
| 38 |
+
"xo": "^0.24.0"
|
| 39 |
+
}
|
| 40 |
+
}
|
node_modules/binary-extensions/readme.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# binary-extensions
|
| 2 |
+
|
| 3 |
+
> List of binary file extensions
|
| 4 |
+
|
| 5 |
+
The list is just a [JSON file](binary-extensions.json) and can be used anywhere.
|
| 6 |
+
|
| 7 |
+
## Install
|
| 8 |
+
|
| 9 |
+
```sh
|
| 10 |
+
npm install binary-extensions
|
| 11 |
+
```
|
| 12 |
+
|
| 13 |
+
## Usage
|
| 14 |
+
|
| 15 |
+
```js
|
| 16 |
+
const binaryExtensions = require('binary-extensions');
|
| 17 |
+
|
| 18 |
+
console.log(binaryExtensions);
|
| 19 |
+
//=> ['3ds', '3g2', …]
|
| 20 |
+
```
|
| 21 |
+
|
| 22 |
+
## Related
|
| 23 |
+
|
| 24 |
+
- [is-binary-path](https://github.com/sindresorhus/is-binary-path) - Check if a filepath is a binary file
|
| 25 |
+
- [text-extensions](https://github.com/sindresorhus/text-extensions) - List of text file extensions
|
node_modules/body-parser/HISTORY.md
ADDED
|
@@ -0,0 +1,672 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
1.20.3 / 2024-09-10
|
| 2 |
+
===================
|
| 3 |
+
|
| 4 |
+
* deps: qs@6.13.0
|
| 5 |
+
* add `depth` option to customize the depth level in the parser
|
| 6 |
+
* IMPORTANT: The default `depth` level for parsing URL-encoded data is now `32` (previously was `Infinity`)
|
| 7 |
+
|
| 8 |
+
1.20.2 / 2023-02-21
|
| 9 |
+
===================
|
| 10 |
+
|
| 11 |
+
* Fix strict json error message on Node.js 19+
|
| 12 |
+
* deps: content-type@~1.0.5
|
| 13 |
+
- perf: skip value escaping when unnecessary
|
| 14 |
+
* deps: raw-body@2.5.2
|
| 15 |
+
|
| 16 |
+
1.20.1 / 2022-10-06
|
| 17 |
+
===================
|
| 18 |
+
|
| 19 |
+
* deps: qs@6.11.0
|
| 20 |
+
* perf: remove unnecessary object clone
|
| 21 |
+
|
| 22 |
+
1.20.0 / 2022-04-02
|
| 23 |
+
===================
|
| 24 |
+
|
| 25 |
+
* Fix error message for json parse whitespace in `strict`
|
| 26 |
+
* Fix internal error when inflated body exceeds limit
|
| 27 |
+
* Prevent loss of async hooks context
|
| 28 |
+
* Prevent hanging when request already read
|
| 29 |
+
* deps: depd@2.0.0
|
| 30 |
+
- Replace internal `eval` usage with `Function` constructor
|
| 31 |
+
- Use instance methods on `process` to check for listeners
|
| 32 |
+
* deps: http-errors@2.0.0
|
| 33 |
+
- deps: depd@2.0.0
|
| 34 |
+
- deps: statuses@2.0.1
|
| 35 |
+
* deps: on-finished@2.4.1
|
| 36 |
+
* deps: qs@6.10.3
|
| 37 |
+
* deps: raw-body@2.5.1
|
| 38 |
+
- deps: http-errors@2.0.0
|
| 39 |
+
|
| 40 |
+
1.19.2 / 2022-02-15
|
| 41 |
+
===================
|
| 42 |
+
|
| 43 |
+
* deps: bytes@3.1.2
|
| 44 |
+
* deps: qs@6.9.7
|
| 45 |
+
* Fix handling of `__proto__` keys
|
| 46 |
+
* deps: raw-body@2.4.3
|
| 47 |
+
- deps: bytes@3.1.2
|
| 48 |
+
|
| 49 |
+
1.19.1 / 2021-12-10
|
| 50 |
+
===================
|
| 51 |
+
|
| 52 |
+
* deps: bytes@3.1.1
|
| 53 |
+
* deps: http-errors@1.8.1
|
| 54 |
+
- deps: inherits@2.0.4
|
| 55 |
+
- deps: toidentifier@1.0.1
|
| 56 |
+
- deps: setprototypeof@1.2.0
|
| 57 |
+
* deps: qs@6.9.6
|
| 58 |
+
* deps: raw-body@2.4.2
|
| 59 |
+
- deps: bytes@3.1.1
|
| 60 |
+
- deps: http-errors@1.8.1
|
| 61 |
+
* deps: safe-buffer@5.2.1
|
| 62 |
+
* deps: type-is@~1.6.18
|
| 63 |
+
|
| 64 |
+
1.19.0 / 2019-04-25
|
| 65 |
+
===================
|
| 66 |
+
|
| 67 |
+
* deps: bytes@3.1.0
|
| 68 |
+
- Add petabyte (`pb`) support
|
| 69 |
+
* deps: http-errors@1.7.2
|
| 70 |
+
- Set constructor name when possible
|
| 71 |
+
- deps: setprototypeof@1.1.1
|
| 72 |
+
- deps: statuses@'>= 1.5.0 < 2'
|
| 73 |
+
* deps: iconv-lite@0.4.24
|
| 74 |
+
- Added encoding MIK
|
| 75 |
+
* deps: qs@6.7.0
|
| 76 |
+
- Fix parsing array brackets after index
|
| 77 |
+
* deps: raw-body@2.4.0
|
| 78 |
+
- deps: bytes@3.1.0
|
| 79 |
+
- deps: http-errors@1.7.2
|
| 80 |
+
- deps: iconv-lite@0.4.24
|
| 81 |
+
* deps: type-is@~1.6.17
|
| 82 |
+
- deps: mime-types@~2.1.24
|
| 83 |
+
- perf: prevent internal `throw` on invalid type
|
| 84 |
+
|
| 85 |
+
1.18.3 / 2018-05-14
|
| 86 |
+
===================
|
| 87 |
+
|
| 88 |
+
* Fix stack trace for strict json parse error
|
| 89 |
+
* deps: depd@~1.1.2
|
| 90 |
+
- perf: remove argument reassignment
|
| 91 |
+
* deps: http-errors@~1.6.3
|
| 92 |
+
- deps: depd@~1.1.2
|
| 93 |
+
- deps: setprototypeof@1.1.0
|
| 94 |
+
- deps: statuses@'>= 1.3.1 < 2'
|
| 95 |
+
* deps: iconv-lite@0.4.23
|
| 96 |
+
- Fix loading encoding with year appended
|
| 97 |
+
- Fix deprecation warnings on Node.js 10+
|
| 98 |
+
* deps: qs@6.5.2
|
| 99 |
+
* deps: raw-body@2.3.3
|
| 100 |
+
- deps: http-errors@1.6.3
|
| 101 |
+
- deps: iconv-lite@0.4.23
|
| 102 |
+
* deps: type-is@~1.6.16
|
| 103 |
+
- deps: mime-types@~2.1.18
|
| 104 |
+
|
| 105 |
+
1.18.2 / 2017-09-22
|
| 106 |
+
===================
|
| 107 |
+
|
| 108 |
+
* deps: debug@2.6.9
|
| 109 |
+
* perf: remove argument reassignment
|
| 110 |
+
|
| 111 |
+
1.18.1 / 2017-09-12
|
| 112 |
+
===================
|
| 113 |
+
|
| 114 |
+
* deps: content-type@~1.0.4
|
| 115 |
+
- perf: remove argument reassignment
|
| 116 |
+
- perf: skip parameter parsing when no parameters
|
| 117 |
+
* deps: iconv-lite@0.4.19
|
| 118 |
+
- Fix ISO-8859-1 regression
|
| 119 |
+
- Update Windows-1255
|
| 120 |
+
* deps: qs@6.5.1
|
| 121 |
+
- Fix parsing & compacting very deep objects
|
| 122 |
+
* deps: raw-body@2.3.2
|
| 123 |
+
- deps: iconv-lite@0.4.19
|
| 124 |
+
|
| 125 |
+
1.18.0 / 2017-09-08
|
| 126 |
+
===================
|
| 127 |
+
|
| 128 |
+
* Fix JSON strict violation error to match native parse error
|
| 129 |
+
* Include the `body` property on verify errors
|
| 130 |
+
* Include the `type` property on all generated errors
|
| 131 |
+
* Use `http-errors` to set status code on errors
|
| 132 |
+
* deps: bytes@3.0.0
|
| 133 |
+
* deps: debug@2.6.8
|
| 134 |
+
* deps: depd@~1.1.1
|
| 135 |
+
- Remove unnecessary `Buffer` loading
|
| 136 |
+
* deps: http-errors@~1.6.2
|
| 137 |
+
- deps: depd@1.1.1
|
| 138 |
+
* deps: iconv-lite@0.4.18
|
| 139 |
+
- Add support for React Native
|
| 140 |
+
- Add a warning if not loaded as utf-8
|
| 141 |
+
- Fix CESU-8 decoding in Node.js 8
|
| 142 |
+
- Improve speed of ISO-8859-1 encoding
|
| 143 |
+
* deps: qs@6.5.0
|
| 144 |
+
* deps: raw-body@2.3.1
|
| 145 |
+
- Use `http-errors` for standard emitted errors
|
| 146 |
+
- deps: bytes@3.0.0
|
| 147 |
+
- deps: iconv-lite@0.4.18
|
| 148 |
+
- perf: skip buffer decoding on overage chunk
|
| 149 |
+
* perf: prevent internal `throw` when missing charset
|
| 150 |
+
|
| 151 |
+
1.17.2 / 2017-05-17
|
| 152 |
+
===================
|
| 153 |
+
|
| 154 |
+
* deps: debug@2.6.7
|
| 155 |
+
- Fix `DEBUG_MAX_ARRAY_LENGTH`
|
| 156 |
+
- deps: ms@2.0.0
|
| 157 |
+
* deps: type-is@~1.6.15
|
| 158 |
+
- deps: mime-types@~2.1.15
|
| 159 |
+
|
| 160 |
+
1.17.1 / 2017-03-06
|
| 161 |
+
===================
|
| 162 |
+
|
| 163 |
+
* deps: qs@6.4.0
|
| 164 |
+
- Fix regression parsing keys starting with `[`
|
| 165 |
+
|
| 166 |
+
1.17.0 / 2017-03-01
|
| 167 |
+
===================
|
| 168 |
+
|
| 169 |
+
* deps: http-errors@~1.6.1
|
| 170 |
+
- Make `message` property enumerable for `HttpError`s
|
| 171 |
+
- deps: setprototypeof@1.0.3
|
| 172 |
+
* deps: qs@6.3.1
|
| 173 |
+
- Fix compacting nested arrays
|
| 174 |
+
|
| 175 |
+
1.16.1 / 2017-02-10
|
| 176 |
+
===================
|
| 177 |
+
|
| 178 |
+
* deps: debug@2.6.1
|
| 179 |
+
- Fix deprecation messages in WebStorm and other editors
|
| 180 |
+
- Undeprecate `DEBUG_FD` set to `1` or `2`
|
| 181 |
+
|
| 182 |
+
1.16.0 / 2017-01-17
|
| 183 |
+
===================
|
| 184 |
+
|
| 185 |
+
* deps: debug@2.6.0
|
| 186 |
+
- Allow colors in workers
|
| 187 |
+
- Deprecated `DEBUG_FD` environment variable
|
| 188 |
+
- Fix error when running under React Native
|
| 189 |
+
- Use same color for same namespace
|
| 190 |
+
- deps: ms@0.7.2
|
| 191 |
+
* deps: http-errors@~1.5.1
|
| 192 |
+
- deps: inherits@2.0.3
|
| 193 |
+
- deps: setprototypeof@1.0.2
|
| 194 |
+
- deps: statuses@'>= 1.3.1 < 2'
|
| 195 |
+
* deps: iconv-lite@0.4.15
|
| 196 |
+
- Added encoding MS-31J
|
| 197 |
+
- Added encoding MS-932
|
| 198 |
+
- Added encoding MS-936
|
| 199 |
+
- Added encoding MS-949
|
| 200 |
+
- Added encoding MS-950
|
| 201 |
+
- Fix GBK/GB18030 handling of Euro character
|
| 202 |
+
* deps: qs@6.2.1
|
| 203 |
+
- Fix array parsing from skipping empty values
|
| 204 |
+
* deps: raw-body@~2.2.0
|
| 205 |
+
- deps: iconv-lite@0.4.15
|
| 206 |
+
* deps: type-is@~1.6.14
|
| 207 |
+
- deps: mime-types@~2.1.13
|
| 208 |
+
|
| 209 |
+
1.15.2 / 2016-06-19
|
| 210 |
+
===================
|
| 211 |
+
|
| 212 |
+
* deps: bytes@2.4.0
|
| 213 |
+
* deps: content-type@~1.0.2
|
| 214 |
+
- perf: enable strict mode
|
| 215 |
+
* deps: http-errors@~1.5.0
|
| 216 |
+
- Use `setprototypeof` module to replace `__proto__` setting
|
| 217 |
+
- deps: statuses@'>= 1.3.0 < 2'
|
| 218 |
+
- perf: enable strict mode
|
| 219 |
+
* deps: qs@6.2.0
|
| 220 |
+
* deps: raw-body@~2.1.7
|
| 221 |
+
- deps: bytes@2.4.0
|
| 222 |
+
- perf: remove double-cleanup on happy path
|
| 223 |
+
* deps: type-is@~1.6.13
|
| 224 |
+
- deps: mime-types@~2.1.11
|
| 225 |
+
|
| 226 |
+
1.15.1 / 2016-05-05
|
| 227 |
+
===================
|
| 228 |
+
|
| 229 |
+
* deps: bytes@2.3.0
|
| 230 |
+
- Drop partial bytes on all parsed units
|
| 231 |
+
- Fix parsing byte string that looks like hex
|
| 232 |
+
* deps: raw-body@~2.1.6
|
| 233 |
+
- deps: bytes@2.3.0
|
| 234 |
+
* deps: type-is@~1.6.12
|
| 235 |
+
- deps: mime-types@~2.1.10
|
| 236 |
+
|
| 237 |
+
1.15.0 / 2016-02-10
|
| 238 |
+
===================
|
| 239 |
+
|
| 240 |
+
* deps: http-errors@~1.4.0
|
| 241 |
+
- Add `HttpError` export, for `err instanceof createError.HttpError`
|
| 242 |
+
- deps: inherits@2.0.1
|
| 243 |
+
- deps: statuses@'>= 1.2.1 < 2'
|
| 244 |
+
* deps: qs@6.1.0
|
| 245 |
+
* deps: type-is@~1.6.11
|
| 246 |
+
- deps: mime-types@~2.1.9
|
| 247 |
+
|
| 248 |
+
1.14.2 / 2015-12-16
|
| 249 |
+
===================
|
| 250 |
+
|
| 251 |
+
* deps: bytes@2.2.0
|
| 252 |
+
* deps: iconv-lite@0.4.13
|
| 253 |
+
* deps: qs@5.2.0
|
| 254 |
+
* deps: raw-body@~2.1.5
|
| 255 |
+
- deps: bytes@2.2.0
|
| 256 |
+
- deps: iconv-lite@0.4.13
|
| 257 |
+
* deps: type-is@~1.6.10
|
| 258 |
+
- deps: mime-types@~2.1.8
|
| 259 |
+
|
| 260 |
+
1.14.1 / 2015-09-27
|
| 261 |
+
===================
|
| 262 |
+
|
| 263 |
+
* Fix issue where invalid charset results in 400 when `verify` used
|
| 264 |
+
* deps: iconv-lite@0.4.12
|
| 265 |
+
- Fix CESU-8 decoding in Node.js 4.x
|
| 266 |
+
* deps: raw-body@~2.1.4
|
| 267 |
+
- Fix masking critical errors from `iconv-lite`
|
| 268 |
+
- deps: iconv-lite@0.4.12
|
| 269 |
+
* deps: type-is@~1.6.9
|
| 270 |
+
- deps: mime-types@~2.1.7
|
| 271 |
+
|
| 272 |
+
1.14.0 / 2015-09-16
|
| 273 |
+
===================
|
| 274 |
+
|
| 275 |
+
* Fix JSON strict parse error to match syntax errors
|
| 276 |
+
* Provide static `require` analysis in `urlencoded` parser
|
| 277 |
+
* deps: depd@~1.1.0
|
| 278 |
+
- Support web browser loading
|
| 279 |
+
* deps: qs@5.1.0
|
| 280 |
+
* deps: raw-body@~2.1.3
|
| 281 |
+
- Fix sync callback when attaching data listener causes sync read
|
| 282 |
+
* deps: type-is@~1.6.8
|
| 283 |
+
- Fix type error when given invalid type to match against
|
| 284 |
+
- deps: mime-types@~2.1.6
|
| 285 |
+
|
| 286 |
+
1.13.3 / 2015-07-31
|
| 287 |
+
===================
|
| 288 |
+
|
| 289 |
+
* deps: type-is@~1.6.6
|
| 290 |
+
- deps: mime-types@~2.1.4
|
| 291 |
+
|
| 292 |
+
1.13.2 / 2015-07-05
|
| 293 |
+
===================
|
| 294 |
+
|
| 295 |
+
* deps: iconv-lite@0.4.11
|
| 296 |
+
* deps: qs@4.0.0
|
| 297 |
+
- Fix dropping parameters like `hasOwnProperty`
|
| 298 |
+
- Fix user-visible incompatibilities from 3.1.0
|
| 299 |
+
- Fix various parsing edge cases
|
| 300 |
+
* deps: raw-body@~2.1.2
|
| 301 |
+
- Fix error stack traces to skip `makeError`
|
| 302 |
+
- deps: iconv-lite@0.4.11
|
| 303 |
+
* deps: type-is@~1.6.4
|
| 304 |
+
- deps: mime-types@~2.1.2
|
| 305 |
+
- perf: enable strict mode
|
| 306 |
+
- perf: remove argument reassignment
|
| 307 |
+
|
| 308 |
+
1.13.1 / 2015-06-16
|
| 309 |
+
===================
|
| 310 |
+
|
| 311 |
+
* deps: qs@2.4.2
|
| 312 |
+
- Downgraded from 3.1.0 because of user-visible incompatibilities
|
| 313 |
+
|
| 314 |
+
1.13.0 / 2015-06-14
|
| 315 |
+
===================
|
| 316 |
+
|
| 317 |
+
* Add `statusCode` property on `Error`s, in addition to `status`
|
| 318 |
+
* Change `type` default to `application/json` for JSON parser
|
| 319 |
+
* Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser
|
| 320 |
+
* Provide static `require` analysis
|
| 321 |
+
* Use the `http-errors` module to generate errors
|
| 322 |
+
* deps: bytes@2.1.0
|
| 323 |
+
- Slight optimizations
|
| 324 |
+
* deps: iconv-lite@0.4.10
|
| 325 |
+
- The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails
|
| 326 |
+
- Leading BOM is now removed when decoding
|
| 327 |
+
* deps: on-finished@~2.3.0
|
| 328 |
+
- Add defined behavior for HTTP `CONNECT` requests
|
| 329 |
+
- Add defined behavior for HTTP `Upgrade` requests
|
| 330 |
+
- deps: ee-first@1.1.1
|
| 331 |
+
* deps: qs@3.1.0
|
| 332 |
+
- Fix dropping parameters like `hasOwnProperty`
|
| 333 |
+
- Fix various parsing edge cases
|
| 334 |
+
- Parsed object now has `null` prototype
|
| 335 |
+
* deps: raw-body@~2.1.1
|
| 336 |
+
- Use `unpipe` module for unpiping requests
|
| 337 |
+
- deps: iconv-lite@0.4.10
|
| 338 |
+
* deps: type-is@~1.6.3
|
| 339 |
+
- deps: mime-types@~2.1.1
|
| 340 |
+
- perf: reduce try block size
|
| 341 |
+
- perf: remove bitwise operations
|
| 342 |
+
* perf: enable strict mode
|
| 343 |
+
* perf: remove argument reassignment
|
| 344 |
+
* perf: remove delete call
|
| 345 |
+
|
| 346 |
+
1.12.4 / 2015-05-10
|
| 347 |
+
===================
|
| 348 |
+
|
| 349 |
+
* deps: debug@~2.2.0
|
| 350 |
+
* deps: qs@2.4.2
|
| 351 |
+
- Fix allowing parameters like `constructor`
|
| 352 |
+
* deps: on-finished@~2.2.1
|
| 353 |
+
* deps: raw-body@~2.0.1
|
| 354 |
+
- Fix a false-positive when unpiping in Node.js 0.8
|
| 355 |
+
- deps: bytes@2.0.1
|
| 356 |
+
* deps: type-is@~1.6.2
|
| 357 |
+
- deps: mime-types@~2.0.11
|
| 358 |
+
|
| 359 |
+
1.12.3 / 2015-04-15
|
| 360 |
+
===================
|
| 361 |
+
|
| 362 |
+
* Slight efficiency improvement when not debugging
|
| 363 |
+
* deps: depd@~1.0.1
|
| 364 |
+
* deps: iconv-lite@0.4.8
|
| 365 |
+
- Add encoding alias UNICODE-1-1-UTF-7
|
| 366 |
+
* deps: raw-body@1.3.4
|
| 367 |
+
- Fix hanging callback if request aborts during read
|
| 368 |
+
- deps: iconv-lite@0.4.8
|
| 369 |
+
|
| 370 |
+
1.12.2 / 2015-03-16
|
| 371 |
+
===================
|
| 372 |
+
|
| 373 |
+
* deps: qs@2.4.1
|
| 374 |
+
- Fix error when parameter `hasOwnProperty` is present
|
| 375 |
+
|
| 376 |
+
1.12.1 / 2015-03-15
|
| 377 |
+
===================
|
| 378 |
+
|
| 379 |
+
* deps: debug@~2.1.3
|
| 380 |
+
- Fix high intensity foreground color for bold
|
| 381 |
+
- deps: ms@0.7.0
|
| 382 |
+
* deps: type-is@~1.6.1
|
| 383 |
+
- deps: mime-types@~2.0.10
|
| 384 |
+
|
| 385 |
+
1.12.0 / 2015-02-13
|
| 386 |
+
===================
|
| 387 |
+
|
| 388 |
+
* add `debug` messages
|
| 389 |
+
* accept a function for the `type` option
|
| 390 |
+
* use `content-type` to parse `Content-Type` headers
|
| 391 |
+
* deps: iconv-lite@0.4.7
|
| 392 |
+
- Gracefully support enumerables on `Object.prototype`
|
| 393 |
+
* deps: raw-body@1.3.3
|
| 394 |
+
- deps: iconv-lite@0.4.7
|
| 395 |
+
* deps: type-is@~1.6.0
|
| 396 |
+
- fix argument reassignment
|
| 397 |
+
- fix false-positives in `hasBody` `Transfer-Encoding` check
|
| 398 |
+
- support wildcard for both type and subtype (`*/*`)
|
| 399 |
+
- deps: mime-types@~2.0.9
|
| 400 |
+
|
| 401 |
+
1.11.0 / 2015-01-30
|
| 402 |
+
===================
|
| 403 |
+
|
| 404 |
+
* make internal `extended: true` depth limit infinity
|
| 405 |
+
* deps: type-is@~1.5.6
|
| 406 |
+
- deps: mime-types@~2.0.8
|
| 407 |
+
|
| 408 |
+
1.10.2 / 2015-01-20
|
| 409 |
+
===================
|
| 410 |
+
|
| 411 |
+
* deps: iconv-lite@0.4.6
|
| 412 |
+
- Fix rare aliases of single-byte encodings
|
| 413 |
+
* deps: raw-body@1.3.2
|
| 414 |
+
- deps: iconv-lite@0.4.6
|
| 415 |
+
|
| 416 |
+
1.10.1 / 2015-01-01
|
| 417 |
+
===================
|
| 418 |
+
|
| 419 |
+
* deps: on-finished@~2.2.0
|
| 420 |
+
* deps: type-is@~1.5.5
|
| 421 |
+
- deps: mime-types@~2.0.7
|
| 422 |
+
|
| 423 |
+
1.10.0 / 2014-12-02
|
| 424 |
+
===================
|
| 425 |
+
|
| 426 |
+
* make internal `extended: true` array limit dynamic
|
| 427 |
+
|
| 428 |
+
1.9.3 / 2014-11-21
|
| 429 |
+
==================
|
| 430 |
+
|
| 431 |
+
* deps: iconv-lite@0.4.5
|
| 432 |
+
- Fix Windows-31J and X-SJIS encoding support
|
| 433 |
+
* deps: qs@2.3.3
|
| 434 |
+
- Fix `arrayLimit` behavior
|
| 435 |
+
* deps: raw-body@1.3.1
|
| 436 |
+
- deps: iconv-lite@0.4.5
|
| 437 |
+
* deps: type-is@~1.5.3
|
| 438 |
+
- deps: mime-types@~2.0.3
|
| 439 |
+
|
| 440 |
+
1.9.2 / 2014-10-27
|
| 441 |
+
==================
|
| 442 |
+
|
| 443 |
+
* deps: qs@2.3.2
|
| 444 |
+
- Fix parsing of mixed objects and values
|
| 445 |
+
|
| 446 |
+
1.9.1 / 2014-10-22
|
| 447 |
+
==================
|
| 448 |
+
|
| 449 |
+
* deps: on-finished@~2.1.1
|
| 450 |
+
- Fix handling of pipelined requests
|
| 451 |
+
* deps: qs@2.3.0
|
| 452 |
+
- Fix parsing of mixed implicit and explicit arrays
|
| 453 |
+
* deps: type-is@~1.5.2
|
| 454 |
+
- deps: mime-types@~2.0.2
|
| 455 |
+
|
| 456 |
+
1.9.0 / 2014-09-24
|
| 457 |
+
==================
|
| 458 |
+
|
| 459 |
+
* include the charset in "unsupported charset" error message
|
| 460 |
+
* include the encoding in "unsupported content encoding" error message
|
| 461 |
+
* deps: depd@~1.0.0
|
| 462 |
+
|
| 463 |
+
1.8.4 / 2014-09-23
|
| 464 |
+
==================
|
| 465 |
+
|
| 466 |
+
* fix content encoding to be case-insensitive
|
| 467 |
+
|
| 468 |
+
1.8.3 / 2014-09-19
|
| 469 |
+
==================
|
| 470 |
+
|
| 471 |
+
* deps: qs@2.2.4
|
| 472 |
+
- Fix issue with object keys starting with numbers truncated
|
| 473 |
+
|
| 474 |
+
1.8.2 / 2014-09-15
|
| 475 |
+
==================
|
| 476 |
+
|
| 477 |
+
* deps: depd@0.4.5
|
| 478 |
+
|
| 479 |
+
1.8.1 / 2014-09-07
|
| 480 |
+
==================
|
| 481 |
+
|
| 482 |
+
* deps: media-typer@0.3.0
|
| 483 |
+
* deps: type-is@~1.5.1
|
| 484 |
+
|
| 485 |
+
1.8.0 / 2014-09-05
|
| 486 |
+
==================
|
| 487 |
+
|
| 488 |
+
* make empty-body-handling consistent between chunked requests
|
| 489 |
+
- empty `json` produces `{}`
|
| 490 |
+
- empty `raw` produces `new Buffer(0)`
|
| 491 |
+
- empty `text` produces `''`
|
| 492 |
+
- empty `urlencoded` produces `{}`
|
| 493 |
+
* deps: qs@2.2.3
|
| 494 |
+
- Fix issue where first empty value in array is discarded
|
| 495 |
+
* deps: type-is@~1.5.0
|
| 496 |
+
- fix `hasbody` to be true for `content-length: 0`
|
| 497 |
+
|
| 498 |
+
1.7.0 / 2014-09-01
|
| 499 |
+
==================
|
| 500 |
+
|
| 501 |
+
* add `parameterLimit` option to `urlencoded` parser
|
| 502 |
+
* change `urlencoded` extended array limit to 100
|
| 503 |
+
* respond with 413 when over `parameterLimit` in `urlencoded`
|
| 504 |
+
|
| 505 |
+
1.6.7 / 2014-08-29
|
| 506 |
+
==================
|
| 507 |
+
|
| 508 |
+
* deps: qs@2.2.2
|
| 509 |
+
- Remove unnecessary cloning
|
| 510 |
+
|
| 511 |
+
1.6.6 / 2014-08-27
|
| 512 |
+
==================
|
| 513 |
+
|
| 514 |
+
* deps: qs@2.2.0
|
| 515 |
+
- Array parsing fix
|
| 516 |
+
- Performance improvements
|
| 517 |
+
|
| 518 |
+
1.6.5 / 2014-08-16
|
| 519 |
+
==================
|
| 520 |
+
|
| 521 |
+
* deps: on-finished@2.1.0
|
| 522 |
+
|
| 523 |
+
1.6.4 / 2014-08-14
|
| 524 |
+
==================
|
| 525 |
+
|
| 526 |
+
* deps: qs@1.2.2
|
| 527 |
+
|
| 528 |
+
1.6.3 / 2014-08-10
|
| 529 |
+
==================
|
| 530 |
+
|
| 531 |
+
* deps: qs@1.2.1
|
| 532 |
+
|
| 533 |
+
1.6.2 / 2014-08-07
|
| 534 |
+
==================
|
| 535 |
+
|
| 536 |
+
* deps: qs@1.2.0
|
| 537 |
+
- Fix parsing array of objects
|
| 538 |
+
|
| 539 |
+
1.6.1 / 2014-08-06
|
| 540 |
+
==================
|
| 541 |
+
|
| 542 |
+
* deps: qs@1.1.0
|
| 543 |
+
- Accept urlencoded square brackets
|
| 544 |
+
- Accept empty values in implicit array notation
|
| 545 |
+
|
| 546 |
+
1.6.0 / 2014-08-05
|
| 547 |
+
==================
|
| 548 |
+
|
| 549 |
+
* deps: qs@1.0.2
|
| 550 |
+
- Complete rewrite
|
| 551 |
+
- Limits array length to 20
|
| 552 |
+
- Limits object depth to 5
|
| 553 |
+
- Limits parameters to 1,000
|
| 554 |
+
|
| 555 |
+
1.5.2 / 2014-07-27
|
| 556 |
+
==================
|
| 557 |
+
|
| 558 |
+
* deps: depd@0.4.4
|
| 559 |
+
- Work-around v8 generating empty stack traces
|
| 560 |
+
|
| 561 |
+
1.5.1 / 2014-07-26
|
| 562 |
+
==================
|
| 563 |
+
|
| 564 |
+
* deps: depd@0.4.3
|
| 565 |
+
- Fix exception when global `Error.stackTraceLimit` is too low
|
| 566 |
+
|
| 567 |
+
1.5.0 / 2014-07-20
|
| 568 |
+
==================
|
| 569 |
+
|
| 570 |
+
* deps: depd@0.4.2
|
| 571 |
+
- Add `TRACE_DEPRECATION` environment variable
|
| 572 |
+
- Remove non-standard grey color from color output
|
| 573 |
+
- Support `--no-deprecation` argument
|
| 574 |
+
- Support `--trace-deprecation` argument
|
| 575 |
+
* deps: iconv-lite@0.4.4
|
| 576 |
+
- Added encoding UTF-7
|
| 577 |
+
* deps: raw-body@1.3.0
|
| 578 |
+
- deps: iconv-lite@0.4.4
|
| 579 |
+
- Added encoding UTF-7
|
| 580 |
+
- Fix `Cannot switch to old mode now` error on Node.js 0.10+
|
| 581 |
+
* deps: type-is@~1.3.2
|
| 582 |
+
|
| 583 |
+
1.4.3 / 2014-06-19
|
| 584 |
+
==================
|
| 585 |
+
|
| 586 |
+
* deps: type-is@1.3.1
|
| 587 |
+
- fix global variable leak
|
| 588 |
+
|
| 589 |
+
1.4.2 / 2014-06-19
|
| 590 |
+
==================
|
| 591 |
+
|
| 592 |
+
* deps: type-is@1.3.0
|
| 593 |
+
- improve type parsing
|
| 594 |
+
|
| 595 |
+
1.4.1 / 2014-06-19
|
| 596 |
+
==================
|
| 597 |
+
|
| 598 |
+
* fix urlencoded extended deprecation message
|
| 599 |
+
|
| 600 |
+
1.4.0 / 2014-06-19
|
| 601 |
+
==================
|
| 602 |
+
|
| 603 |
+
* add `text` parser
|
| 604 |
+
* add `raw` parser
|
| 605 |
+
* check accepted charset in content-type (accepts utf-8)
|
| 606 |
+
* check accepted encoding in content-encoding (accepts identity)
|
| 607 |
+
* deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed
|
| 608 |
+
* deprecate `urlencoded()` without provided `extended` option
|
| 609 |
+
* lazy-load urlencoded parsers
|
| 610 |
+
* parsers split into files for reduced mem usage
|
| 611 |
+
* support gzip and deflate bodies
|
| 612 |
+
- set `inflate: false` to turn off
|
| 613 |
+
* deps: raw-body@1.2.2
|
| 614 |
+
- Support all encodings from `iconv-lite`
|
| 615 |
+
|
| 616 |
+
1.3.1 / 2014-06-11
|
| 617 |
+
==================
|
| 618 |
+
|
| 619 |
+
* deps: type-is@1.2.1
|
| 620 |
+
- Switch dependency from mime to mime-types@1.0.0
|
| 621 |
+
|
| 622 |
+
1.3.0 / 2014-05-31
|
| 623 |
+
==================
|
| 624 |
+
|
| 625 |
+
* add `extended` option to urlencoded parser
|
| 626 |
+
|
| 627 |
+
1.2.2 / 2014-05-27
|
| 628 |
+
==================
|
| 629 |
+
|
| 630 |
+
* deps: raw-body@1.1.6
|
| 631 |
+
- assert stream encoding on node.js 0.8
|
| 632 |
+
- assert stream encoding on node.js < 0.10.6
|
| 633 |
+
- deps: bytes@1
|
| 634 |
+
|
| 635 |
+
1.2.1 / 2014-05-26
|
| 636 |
+
==================
|
| 637 |
+
|
| 638 |
+
* invoke `next(err)` after request fully read
|
| 639 |
+
- prevents hung responses and socket hang ups
|
| 640 |
+
|
| 641 |
+
1.2.0 / 2014-05-11
|
| 642 |
+
==================
|
| 643 |
+
|
| 644 |
+
* add `verify` option
|
| 645 |
+
* deps: type-is@1.2.0
|
| 646 |
+
- support suffix matching
|
| 647 |
+
|
| 648 |
+
1.1.2 / 2014-05-11
|
| 649 |
+
==================
|
| 650 |
+
|
| 651 |
+
* improve json parser speed
|
| 652 |
+
|
| 653 |
+
1.1.1 / 2014-05-11
|
| 654 |
+
==================
|
| 655 |
+
|
| 656 |
+
* fix repeated limit parsing with every request
|
| 657 |
+
|
| 658 |
+
1.1.0 / 2014-05-10
|
| 659 |
+
==================
|
| 660 |
+
|
| 661 |
+
* add `type` option
|
| 662 |
+
* deps: pin for safety and consistency
|
| 663 |
+
|
| 664 |
+
1.0.2 / 2014-04-14
|
| 665 |
+
==================
|
| 666 |
+
|
| 667 |
+
* use `type-is` module
|
| 668 |
+
|
| 669 |
+
1.0.1 / 2014-03-20
|
| 670 |
+
==================
|
| 671 |
+
|
| 672 |
+
* lower default limits to 100kb
|
node_modules/body-parser/LICENSE
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
(The MIT License)
|
| 2 |
+
|
| 3 |
+
Copyright (c) 2014 Jonathan Ong <me@jongleberry.com>
|
| 4 |
+
Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>
|
| 5 |
+
|
| 6 |
+
Permission is hereby granted, free of charge, to any person obtaining
|
| 7 |
+
a copy of this software and associated documentation files (the
|
| 8 |
+
'Software'), to deal in the Software without restriction, including
|
| 9 |
+
without limitation the rights to use, copy, modify, merge, publish,
|
| 10 |
+
distribute, sublicense, and/or sell copies of the Software, and to
|
| 11 |
+
permit persons to whom the Software is furnished to do so, subject to
|
| 12 |
+
the following conditions:
|
| 13 |
+
|
| 14 |
+
The above copyright notice and this permission notice shall be
|
| 15 |
+
included in all copies or substantial portions of the Software.
|
| 16 |
+
|
| 17 |
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
| 18 |
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
| 19 |
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
| 20 |
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
| 21 |
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
| 22 |
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
| 23 |
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
node_modules/body-parser/README.md
ADDED
|
@@ -0,0 +1,476 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# body-parser
|
| 2 |
+
|
| 3 |
+
[![NPM Version][npm-version-image]][npm-url]
|
| 4 |
+
[![NPM Downloads][npm-downloads-image]][npm-url]
|
| 5 |
+
[![Build Status][ci-image]][ci-url]
|
| 6 |
+
[![Test Coverage][coveralls-image]][coveralls-url]
|
| 7 |
+
[![OpenSSF Scorecard Badge][ossf-scorecard-badge]][ossf-scorecard-visualizer]
|
| 8 |
+
|
| 9 |
+
Node.js body parsing middleware.
|
| 10 |
+
|
| 11 |
+
Parse incoming request bodies in a middleware before your handlers, available
|
| 12 |
+
under the `req.body` property.
|
| 13 |
+
|
| 14 |
+
**Note** As `req.body`'s shape is based on user-controlled input, all
|
| 15 |
+
properties and values in this object are untrusted and should be validated
|
| 16 |
+
before trusting. For example, `req.body.foo.toString()` may fail in multiple
|
| 17 |
+
ways, for example the `foo` property may not be there or may not be a string,
|
| 18 |
+
and `toString` may not be a function and instead a string or other user input.
|
| 19 |
+
|
| 20 |
+
[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/).
|
| 21 |
+
|
| 22 |
+
_This does not handle multipart bodies_, due to their complex and typically
|
| 23 |
+
large nature. For multipart bodies, you may be interested in the following
|
| 24 |
+
modules:
|
| 25 |
+
|
| 26 |
+
* [busboy](https://www.npmjs.org/package/busboy#readme) and
|
| 27 |
+
[connect-busboy](https://www.npmjs.org/package/connect-busboy#readme)
|
| 28 |
+
* [multiparty](https://www.npmjs.org/package/multiparty#readme) and
|
| 29 |
+
[connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme)
|
| 30 |
+
* [formidable](https://www.npmjs.org/package/formidable#readme)
|
| 31 |
+
* [multer](https://www.npmjs.org/package/multer#readme)
|
| 32 |
+
|
| 33 |
+
This module provides the following parsers:
|
| 34 |
+
|
| 35 |
+
* [JSON body parser](#bodyparserjsonoptions)
|
| 36 |
+
* [Raw body parser](#bodyparserrawoptions)
|
| 37 |
+
* [Text body parser](#bodyparsertextoptions)
|
| 38 |
+
* [URL-encoded form body parser](#bodyparserurlencodedoptions)
|
| 39 |
+
|
| 40 |
+
Other body parsers you might be interested in:
|
| 41 |
+
|
| 42 |
+
- [body](https://www.npmjs.org/package/body#readme)
|
| 43 |
+
- [co-body](https://www.npmjs.org/package/co-body#readme)
|
| 44 |
+
|
| 45 |
+
## Installation
|
| 46 |
+
|
| 47 |
+
```sh
|
| 48 |
+
$ npm install body-parser
|
| 49 |
+
```
|
| 50 |
+
|
| 51 |
+
## API
|
| 52 |
+
|
| 53 |
+
```js
|
| 54 |
+
var bodyParser = require('body-parser')
|
| 55 |
+
```
|
| 56 |
+
|
| 57 |
+
The `bodyParser` object exposes various factories to create middlewares. All
|
| 58 |
+
middlewares will populate the `req.body` property with the parsed body when
|
| 59 |
+
the `Content-Type` request header matches the `type` option, or an empty
|
| 60 |
+
object (`{}`) if there was no body to parse, the `Content-Type` was not matched,
|
| 61 |
+
or an error occurred.
|
| 62 |
+
|
| 63 |
+
The various errors returned by this module are described in the
|
| 64 |
+
[errors section](#errors).
|
| 65 |
+
|
| 66 |
+
### bodyParser.json([options])
|
| 67 |
+
|
| 68 |
+
Returns middleware that only parses `json` and only looks at requests where
|
| 69 |
+
the `Content-Type` header matches the `type` option. This parser accepts any
|
| 70 |
+
Unicode encoding of the body and supports automatic inflation of `gzip` and
|
| 71 |
+
`deflate` encodings.
|
| 72 |
+
|
| 73 |
+
A new `body` object containing the parsed data is populated on the `request`
|
| 74 |
+
object after the middleware (i.e. `req.body`).
|
| 75 |
+
|
| 76 |
+
#### Options
|
| 77 |
+
|
| 78 |
+
The `json` function takes an optional `options` object that may contain any of
|
| 79 |
+
the following keys:
|
| 80 |
+
|
| 81 |
+
##### inflate
|
| 82 |
+
|
| 83 |
+
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
| 84 |
+
`false`, deflated bodies are rejected. Defaults to `true`.
|
| 85 |
+
|
| 86 |
+
##### limit
|
| 87 |
+
|
| 88 |
+
Controls the maximum request body size. If this is a number, then the value
|
| 89 |
+
specifies the number of bytes; if it is a string, the value is passed to the
|
| 90 |
+
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
| 91 |
+
to `'100kb'`.
|
| 92 |
+
|
| 93 |
+
##### reviver
|
| 94 |
+
|
| 95 |
+
The `reviver` option is passed directly to `JSON.parse` as the second
|
| 96 |
+
argument. You can find more information on this argument
|
| 97 |
+
[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter).
|
| 98 |
+
|
| 99 |
+
##### strict
|
| 100 |
+
|
| 101 |
+
When set to `true`, will only accept arrays and objects; when `false` will
|
| 102 |
+
accept anything `JSON.parse` accepts. Defaults to `true`.
|
| 103 |
+
|
| 104 |
+
##### type
|
| 105 |
+
|
| 106 |
+
The `type` option is used to determine what media type the middleware will
|
| 107 |
+
parse. This option can be a string, array of strings, or a function. If not a
|
| 108 |
+
function, `type` option is passed directly to the
|
| 109 |
+
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
|
| 110 |
+
be an extension name (like `json`), a mime type (like `application/json`), or
|
| 111 |
+
a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type`
|
| 112 |
+
option is called as `fn(req)` and the request is parsed if it returns a truthy
|
| 113 |
+
value. Defaults to `application/json`.
|
| 114 |
+
|
| 115 |
+
##### verify
|
| 116 |
+
|
| 117 |
+
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
| 118 |
+
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
| 119 |
+
encoding of the request. The parsing can be aborted by throwing an error.
|
| 120 |
+
|
| 121 |
+
### bodyParser.raw([options])
|
| 122 |
+
|
| 123 |
+
Returns middleware that parses all bodies as a `Buffer` and only looks at
|
| 124 |
+
requests where the `Content-Type` header matches the `type` option. This
|
| 125 |
+
parser supports automatic inflation of `gzip` and `deflate` encodings.
|
| 126 |
+
|
| 127 |
+
A new `body` object containing the parsed data is populated on the `request`
|
| 128 |
+
object after the middleware (i.e. `req.body`). This will be a `Buffer` object
|
| 129 |
+
of the body.
|
| 130 |
+
|
| 131 |
+
#### Options
|
| 132 |
+
|
| 133 |
+
The `raw` function takes an optional `options` object that may contain any of
|
| 134 |
+
the following keys:
|
| 135 |
+
|
| 136 |
+
##### inflate
|
| 137 |
+
|
| 138 |
+
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
| 139 |
+
`false`, deflated bodies are rejected. Defaults to `true`.
|
| 140 |
+
|
| 141 |
+
##### limit
|
| 142 |
+
|
| 143 |
+
Controls the maximum request body size. If this is a number, then the value
|
| 144 |
+
specifies the number of bytes; if it is a string, the value is passed to the
|
| 145 |
+
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
| 146 |
+
to `'100kb'`.
|
| 147 |
+
|
| 148 |
+
##### type
|
| 149 |
+
|
| 150 |
+
The `type` option is used to determine what media type the middleware will
|
| 151 |
+
parse. This option can be a string, array of strings, or a function.
|
| 152 |
+
If not a function, `type` option is passed directly to the
|
| 153 |
+
[type-is](https://www.npmjs.org/package/type-is#readme) library and this
|
| 154 |
+
can be an extension name (like `bin`), a mime type (like
|
| 155 |
+
`application/octet-stream`), or a mime type with a wildcard (like `*/*` or
|
| 156 |
+
`application/*`). If a function, the `type` option is called as `fn(req)`
|
| 157 |
+
and the request is parsed if it returns a truthy value. Defaults to
|
| 158 |
+
`application/octet-stream`.
|
| 159 |
+
|
| 160 |
+
##### verify
|
| 161 |
+
|
| 162 |
+
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
| 163 |
+
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
| 164 |
+
encoding of the request. The parsing can be aborted by throwing an error.
|
| 165 |
+
|
| 166 |
+
### bodyParser.text([options])
|
| 167 |
+
|
| 168 |
+
Returns middleware that parses all bodies as a string and only looks at
|
| 169 |
+
requests where the `Content-Type` header matches the `type` option. This
|
| 170 |
+
parser supports automatic inflation of `gzip` and `deflate` encodings.
|
| 171 |
+
|
| 172 |
+
A new `body` string containing the parsed data is populated on the `request`
|
| 173 |
+
object after the middleware (i.e. `req.body`). This will be a string of the
|
| 174 |
+
body.
|
| 175 |
+
|
| 176 |
+
#### Options
|
| 177 |
+
|
| 178 |
+
The `text` function takes an optional `options` object that may contain any of
|
| 179 |
+
the following keys:
|
| 180 |
+
|
| 181 |
+
##### defaultCharset
|
| 182 |
+
|
| 183 |
+
Specify the default character set for the text content if the charset is not
|
| 184 |
+
specified in the `Content-Type` header of the request. Defaults to `utf-8`.
|
| 185 |
+
|
| 186 |
+
##### inflate
|
| 187 |
+
|
| 188 |
+
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
| 189 |
+
`false`, deflated bodies are rejected. Defaults to `true`.
|
| 190 |
+
|
| 191 |
+
##### limit
|
| 192 |
+
|
| 193 |
+
Controls the maximum request body size. If this is a number, then the value
|
| 194 |
+
specifies the number of bytes; if it is a string, the value is passed to the
|
| 195 |
+
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
| 196 |
+
to `'100kb'`.
|
| 197 |
+
|
| 198 |
+
##### type
|
| 199 |
+
|
| 200 |
+
The `type` option is used to determine what media type the middleware will
|
| 201 |
+
parse. This option can be a string, array of strings, or a function. If not
|
| 202 |
+
a function, `type` option is passed directly to the
|
| 203 |
+
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
|
| 204 |
+
be an extension name (like `txt`), a mime type (like `text/plain`), or a mime
|
| 205 |
+
type with a wildcard (like `*/*` or `text/*`). If a function, the `type`
|
| 206 |
+
option is called as `fn(req)` and the request is parsed if it returns a
|
| 207 |
+
truthy value. Defaults to `text/plain`.
|
| 208 |
+
|
| 209 |
+
##### verify
|
| 210 |
+
|
| 211 |
+
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
| 212 |
+
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
| 213 |
+
encoding of the request. The parsing can be aborted by throwing an error.
|
| 214 |
+
|
| 215 |
+
### bodyParser.urlencoded([options])
|
| 216 |
+
|
| 217 |
+
Returns middleware that only parses `urlencoded` bodies and only looks at
|
| 218 |
+
requests where the `Content-Type` header matches the `type` option. This
|
| 219 |
+
parser accepts only UTF-8 encoding of the body and supports automatic
|
| 220 |
+
inflation of `gzip` and `deflate` encodings.
|
| 221 |
+
|
| 222 |
+
A new `body` object containing the parsed data is populated on the `request`
|
| 223 |
+
object after the middleware (i.e. `req.body`). This object will contain
|
| 224 |
+
key-value pairs, where the value can be a string or array (when `extended` is
|
| 225 |
+
`false`), or any type (when `extended` is `true`).
|
| 226 |
+
|
| 227 |
+
#### Options
|
| 228 |
+
|
| 229 |
+
The `urlencoded` function takes an optional `options` object that may contain
|
| 230 |
+
any of the following keys:
|
| 231 |
+
|
| 232 |
+
##### extended
|
| 233 |
+
|
| 234 |
+
The `extended` option allows to choose between parsing the URL-encoded data
|
| 235 |
+
with the `querystring` library (when `false`) or the `qs` library (when
|
| 236 |
+
`true`). The "extended" syntax allows for rich objects and arrays to be
|
| 237 |
+
encoded into the URL-encoded format, allowing for a JSON-like experience
|
| 238 |
+
with URL-encoded. For more information, please
|
| 239 |
+
[see the qs library](https://www.npmjs.org/package/qs#readme).
|
| 240 |
+
|
| 241 |
+
Defaults to `true`, but using the default has been deprecated. Please
|
| 242 |
+
research into the difference between `qs` and `querystring` and choose the
|
| 243 |
+
appropriate setting.
|
| 244 |
+
|
| 245 |
+
##### inflate
|
| 246 |
+
|
| 247 |
+
When set to `true`, then deflated (compressed) bodies will be inflated; when
|
| 248 |
+
`false`, deflated bodies are rejected. Defaults to `true`.
|
| 249 |
+
|
| 250 |
+
##### limit
|
| 251 |
+
|
| 252 |
+
Controls the maximum request body size. If this is a number, then the value
|
| 253 |
+
specifies the number of bytes; if it is a string, the value is passed to the
|
| 254 |
+
[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults
|
| 255 |
+
to `'100kb'`.
|
| 256 |
+
|
| 257 |
+
##### parameterLimit
|
| 258 |
+
|
| 259 |
+
The `parameterLimit` option controls the maximum number of parameters that
|
| 260 |
+
are allowed in the URL-encoded data. If a request contains more parameters
|
| 261 |
+
than this value, a 413 will be returned to the client. Defaults to `1000`.
|
| 262 |
+
|
| 263 |
+
##### type
|
| 264 |
+
|
| 265 |
+
The `type` option is used to determine what media type the middleware will
|
| 266 |
+
parse. This option can be a string, array of strings, or a function. If not
|
| 267 |
+
a function, `type` option is passed directly to the
|
| 268 |
+
[type-is](https://www.npmjs.org/package/type-is#readme) library and this can
|
| 269 |
+
be an extension name (like `urlencoded`), a mime type (like
|
| 270 |
+
`application/x-www-form-urlencoded`), or a mime type with a wildcard (like
|
| 271 |
+
`*/x-www-form-urlencoded`). If a function, the `type` option is called as
|
| 272 |
+
`fn(req)` and the request is parsed if it returns a truthy value. Defaults
|
| 273 |
+
to `application/x-www-form-urlencoded`.
|
| 274 |
+
|
| 275 |
+
##### verify
|
| 276 |
+
|
| 277 |
+
The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`,
|
| 278 |
+
where `buf` is a `Buffer` of the raw request body and `encoding` is the
|
| 279 |
+
encoding of the request. The parsing can be aborted by throwing an error.
|
| 280 |
+
|
| 281 |
+
#### depth
|
| 282 |
+
|
| 283 |
+
The `depth` option is used to configure the maximum depth of the `qs` library when `extended` is `true`. This allows you to limit the amount of keys that are parsed and can be useful to prevent certain types of abuse. Defaults to `32`. It is recommended to keep this value as low as possible.
|
| 284 |
+
|
| 285 |
+
## Errors
|
| 286 |
+
|
| 287 |
+
The middlewares provided by this module create errors using the
|
| 288 |
+
[`http-errors` module](https://www.npmjs.com/package/http-errors). The errors
|
| 289 |
+
will typically have a `status`/`statusCode` property that contains the suggested
|
| 290 |
+
HTTP response code, an `expose` property to determine if the `message` property
|
| 291 |
+
should be displayed to the client, a `type` property to determine the type of
|
| 292 |
+
error without matching against the `message`, and a `body` property containing
|
| 293 |
+
the read body, if available.
|
| 294 |
+
|
| 295 |
+
The following are the common errors created, though any error can come through
|
| 296 |
+
for various reasons.
|
| 297 |
+
|
| 298 |
+
### content encoding unsupported
|
| 299 |
+
|
| 300 |
+
This error will occur when the request had a `Content-Encoding` header that
|
| 301 |
+
contained an encoding but the "inflation" option was set to `false`. The
|
| 302 |
+
`status` property is set to `415`, the `type` property is set to
|
| 303 |
+
`'encoding.unsupported'`, and the `charset` property will be set to the
|
| 304 |
+
encoding that is unsupported.
|
| 305 |
+
|
| 306 |
+
### entity parse failed
|
| 307 |
+
|
| 308 |
+
This error will occur when the request contained an entity that could not be
|
| 309 |
+
parsed by the middleware. The `status` property is set to `400`, the `type`
|
| 310 |
+
property is set to `'entity.parse.failed'`, and the `body` property is set to
|
| 311 |
+
the entity value that failed parsing.
|
| 312 |
+
|
| 313 |
+
### entity verify failed
|
| 314 |
+
|
| 315 |
+
This error will occur when the request contained an entity that could not be
|
| 316 |
+
failed verification by the defined `verify` option. The `status` property is
|
| 317 |
+
set to `403`, the `type` property is set to `'entity.verify.failed'`, and the
|
| 318 |
+
`body` property is set to the entity value that failed verification.
|
| 319 |
+
|
| 320 |
+
### request aborted
|
| 321 |
+
|
| 322 |
+
This error will occur when the request is aborted by the client before reading
|
| 323 |
+
the body has finished. The `received` property will be set to the number of
|
| 324 |
+
bytes received before the request was aborted and the `expected` property is
|
| 325 |
+
set to the number of expected bytes. The `status` property is set to `400`
|
| 326 |
+
and `type` property is set to `'request.aborted'`.
|
| 327 |
+
|
| 328 |
+
### request entity too large
|
| 329 |
+
|
| 330 |
+
This error will occur when the request body's size is larger than the "limit"
|
| 331 |
+
option. The `limit` property will be set to the byte limit and the `length`
|
| 332 |
+
property will be set to the request body's length. The `status` property is
|
| 333 |
+
set to `413` and the `type` property is set to `'entity.too.large'`.
|
| 334 |
+
|
| 335 |
+
### request size did not match content length
|
| 336 |
+
|
| 337 |
+
This error will occur when the request's length did not match the length from
|
| 338 |
+
the `Content-Length` header. This typically occurs when the request is malformed,
|
| 339 |
+
typically when the `Content-Length` header was calculated based on characters
|
| 340 |
+
instead of bytes. The `status` property is set to `400` and the `type` property
|
| 341 |
+
is set to `'request.size.invalid'`.
|
| 342 |
+
|
| 343 |
+
### stream encoding should not be set
|
| 344 |
+
|
| 345 |
+
This error will occur when something called the `req.setEncoding` method prior
|
| 346 |
+
to this middleware. This module operates directly on bytes only and you cannot
|
| 347 |
+
call `req.setEncoding` when using this module. The `status` property is set to
|
| 348 |
+
`500` and the `type` property is set to `'stream.encoding.set'`.
|
| 349 |
+
|
| 350 |
+
### stream is not readable
|
| 351 |
+
|
| 352 |
+
This error will occur when the request is no longer readable when this middleware
|
| 353 |
+
attempts to read it. This typically means something other than a middleware from
|
| 354 |
+
this module read the request body already and the middleware was also configured to
|
| 355 |
+
read the same request. The `status` property is set to `500` and the `type`
|
| 356 |
+
property is set to `'stream.not.readable'`.
|
| 357 |
+
|
| 358 |
+
### too many parameters
|
| 359 |
+
|
| 360 |
+
This error will occur when the content of the request exceeds the configured
|
| 361 |
+
`parameterLimit` for the `urlencoded` parser. The `status` property is set to
|
| 362 |
+
`413` and the `type` property is set to `'parameters.too.many'`.
|
| 363 |
+
|
| 364 |
+
### unsupported charset "BOGUS"
|
| 365 |
+
|
| 366 |
+
This error will occur when the request had a charset parameter in the
|
| 367 |
+
`Content-Type` header, but the `iconv-lite` module does not support it OR the
|
| 368 |
+
parser does not support it. The charset is contained in the message as well
|
| 369 |
+
as in the `charset` property. The `status` property is set to `415`, the
|
| 370 |
+
`type` property is set to `'charset.unsupported'`, and the `charset` property
|
| 371 |
+
is set to the charset that is unsupported.
|
| 372 |
+
|
| 373 |
+
### unsupported content encoding "bogus"
|
| 374 |
+
|
| 375 |
+
This error will occur when the request had a `Content-Encoding` header that
|
| 376 |
+
contained an unsupported encoding. The encoding is contained in the message
|
| 377 |
+
as well as in the `encoding` property. The `status` property is set to `415`,
|
| 378 |
+
the `type` property is set to `'encoding.unsupported'`, and the `encoding`
|
| 379 |
+
property is set to the encoding that is unsupported.
|
| 380 |
+
|
| 381 |
+
### The input exceeded the depth
|
| 382 |
+
|
| 383 |
+
This error occurs when using `bodyParser.urlencoded` with the `extended` property set to `true` and the input exceeds the configured `depth` option. The `status` property is set to `400`. It is recommended to review the `depth` option and evaluate if it requires a higher value. When the `depth` option is set to `32` (default value), the error will not be thrown.
|
| 384 |
+
|
| 385 |
+
## Examples
|
| 386 |
+
|
| 387 |
+
### Express/Connect top-level generic
|
| 388 |
+
|
| 389 |
+
This example demonstrates adding a generic JSON and URL-encoded parser as a
|
| 390 |
+
top-level middleware, which will parse the bodies of all incoming requests.
|
| 391 |
+
This is the simplest setup.
|
| 392 |
+
|
| 393 |
+
```js
|
| 394 |
+
var express = require('express')
|
| 395 |
+
var bodyParser = require('body-parser')
|
| 396 |
+
|
| 397 |
+
var app = express()
|
| 398 |
+
|
| 399 |
+
// parse application/x-www-form-urlencoded
|
| 400 |
+
app.use(bodyParser.urlencoded({ extended: false }))
|
| 401 |
+
|
| 402 |
+
// parse application/json
|
| 403 |
+
app.use(bodyParser.json())
|
| 404 |
+
|
| 405 |
+
app.use(function (req, res) {
|
| 406 |
+
res.setHeader('Content-Type', 'text/plain')
|
| 407 |
+
res.write('you posted:\n')
|
| 408 |
+
res.end(JSON.stringify(req.body, null, 2))
|
| 409 |
+
})
|
| 410 |
+
```
|
| 411 |
+
|
| 412 |
+
### Express route-specific
|
| 413 |
+
|
| 414 |
+
This example demonstrates adding body parsers specifically to the routes that
|
| 415 |
+
need them. In general, this is the most recommended way to use body-parser with
|
| 416 |
+
Express.
|
| 417 |
+
|
| 418 |
+
```js
|
| 419 |
+
var express = require('express')
|
| 420 |
+
var bodyParser = require('body-parser')
|
| 421 |
+
|
| 422 |
+
var app = express()
|
| 423 |
+
|
| 424 |
+
// create application/json parser
|
| 425 |
+
var jsonParser = bodyParser.json()
|
| 426 |
+
|
| 427 |
+
// create application/x-www-form-urlencoded parser
|
| 428 |
+
var urlencodedParser = bodyParser.urlencoded({ extended: false })
|
| 429 |
+
|
| 430 |
+
// POST /login gets urlencoded bodies
|
| 431 |
+
app.post('/login', urlencodedParser, function (req, res) {
|
| 432 |
+
res.send('welcome, ' + req.body.username)
|
| 433 |
+
})
|
| 434 |
+
|
| 435 |
+
// POST /api/users gets JSON bodies
|
| 436 |
+
app.post('/api/users', jsonParser, function (req, res) {
|
| 437 |
+
// create user in req.body
|
| 438 |
+
})
|
| 439 |
+
```
|
| 440 |
+
|
| 441 |
+
### Change accepted type for parsers
|
| 442 |
+
|
| 443 |
+
All the parsers accept a `type` option which allows you to change the
|
| 444 |
+
`Content-Type` that the middleware will parse.
|
| 445 |
+
|
| 446 |
+
```js
|
| 447 |
+
var express = require('express')
|
| 448 |
+
var bodyParser = require('body-parser')
|
| 449 |
+
|
| 450 |
+
var app = express()
|
| 451 |
+
|
| 452 |
+
// parse various different custom JSON types as JSON
|
| 453 |
+
app.use(bodyParser.json({ type: 'application/*+json' }))
|
| 454 |
+
|
| 455 |
+
// parse some custom thing into a Buffer
|
| 456 |
+
app.use(bodyParser.raw({ type: 'application/vnd.custom-type' }))
|
| 457 |
+
|
| 458 |
+
// parse an HTML body into a string
|
| 459 |
+
app.use(bodyParser.text({ type: 'text/html' }))
|
| 460 |
+
```
|
| 461 |
+
|
| 462 |
+
## License
|
| 463 |
+
|
| 464 |
+
[MIT](LICENSE)
|
| 465 |
+
|
| 466 |
+
[ci-image]: https://badgen.net/github/checks/expressjs/body-parser/master?label=ci
|
| 467 |
+
[ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml
|
| 468 |
+
[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/body-parser/master
|
| 469 |
+
[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master
|
| 470 |
+
[node-version-image]: https://badgen.net/npm/node/body-parser
|
| 471 |
+
[node-version-url]: https://nodejs.org/en/download
|
| 472 |
+
[npm-downloads-image]: https://badgen.net/npm/dm/body-parser
|
| 473 |
+
[npm-url]: https://npmjs.org/package/body-parser
|
| 474 |
+
[npm-version-image]: https://badgen.net/npm/v/body-parser
|
| 475 |
+
[ossf-scorecard-badge]: https://api.scorecard.dev/projects/github.com/expressjs/body-parser/badge
|
| 476 |
+
[ossf-scorecard-visualizer]: https://ossf.github.io/scorecard-visualizer/#/projects/github.com/expressjs/body-parser
|
node_modules/body-parser/SECURITY.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Security Policies and Procedures
|
| 2 |
+
|
| 3 |
+
## Reporting a Bug
|
| 4 |
+
|
| 5 |
+
The Express team and community take all security bugs seriously. Thank you
|
| 6 |
+
for improving the security of Express. We appreciate your efforts and
|
| 7 |
+
responsible disclosure and will make every effort to acknowledge your
|
| 8 |
+
contributions.
|
| 9 |
+
|
| 10 |
+
Report security bugs by emailing the current owner(s) of `body-parser`. This
|
| 11 |
+
information can be found in the npm registry using the command
|
| 12 |
+
`npm owner ls body-parser`.
|
| 13 |
+
If unsure or unable to get the information from the above, open an issue
|
| 14 |
+
in the [project issue tracker](https://github.com/expressjs/body-parser/issues)
|
| 15 |
+
asking for the current contact information.
|
| 16 |
+
|
| 17 |
+
To ensure the timely response to your report, please ensure that the entirety
|
| 18 |
+
of the report is contained within the email body and not solely behind a web
|
| 19 |
+
link or an attachment.
|
| 20 |
+
|
| 21 |
+
At least one owner will acknowledge your email within 48 hours, and will send a
|
| 22 |
+
more detailed response within 48 hours indicating the next steps in handling
|
| 23 |
+
your report. After the initial reply to your report, the owners will
|
| 24 |
+
endeavor to keep you informed of the progress towards a fix and full
|
| 25 |
+
announcement, and may ask for additional information or guidance.
|
node_modules/body-parser/index.js
ADDED
|
@@ -0,0 +1,156 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/*!
|
| 2 |
+
* body-parser
|
| 3 |
+
* Copyright(c) 2014-2015 Douglas Christopher Wilson
|
| 4 |
+
* MIT Licensed
|
| 5 |
+
*/
|
| 6 |
+
|
| 7 |
+
'use strict'
|
| 8 |
+
|
| 9 |
+
/**
|
| 10 |
+
* Module dependencies.
|
| 11 |
+
* @private
|
| 12 |
+
*/
|
| 13 |
+
|
| 14 |
+
var deprecate = require('depd')('body-parser')
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Cache of loaded parsers.
|
| 18 |
+
* @private
|
| 19 |
+
*/
|
| 20 |
+
|
| 21 |
+
var parsers = Object.create(null)
|
| 22 |
+
|
| 23 |
+
/**
|
| 24 |
+
* @typedef Parsers
|
| 25 |
+
* @type {function}
|
| 26 |
+
* @property {function} json
|
| 27 |
+
* @property {function} raw
|
| 28 |
+
* @property {function} text
|
| 29 |
+
* @property {function} urlencoded
|
| 30 |
+
*/
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* Module exports.
|
| 34 |
+
* @type {Parsers}
|
| 35 |
+
*/
|
| 36 |
+
|
| 37 |
+
exports = module.exports = deprecate.function(bodyParser,
|
| 38 |
+
'bodyParser: use individual json/urlencoded middlewares')
|
| 39 |
+
|
| 40 |
+
/**
|
| 41 |
+
* JSON parser.
|
| 42 |
+
* @public
|
| 43 |
+
*/
|
| 44 |
+
|
| 45 |
+
Object.defineProperty(exports, 'json', {
|
| 46 |
+
configurable: true,
|
| 47 |
+
enumerable: true,
|
| 48 |
+
get: createParserGetter('json')
|
| 49 |
+
})
|
| 50 |
+
|
| 51 |
+
/**
|
| 52 |
+
* Raw parser.
|
| 53 |
+
* @public
|
| 54 |
+
*/
|
| 55 |
+
|
| 56 |
+
Object.defineProperty(exports, 'raw', {
|
| 57 |
+
configurable: true,
|
| 58 |
+
enumerable: true,
|
| 59 |
+
get: createParserGetter('raw')
|
| 60 |
+
})
|
| 61 |
+
|
| 62 |
+
/**
|
| 63 |
+
* Text parser.
|
| 64 |
+
* @public
|
| 65 |
+
*/
|
| 66 |
+
|
| 67 |
+
Object.defineProperty(exports, 'text', {
|
| 68 |
+
configurable: true,
|
| 69 |
+
enumerable: true,
|
| 70 |
+
get: createParserGetter('text')
|
| 71 |
+
})
|
| 72 |
+
|
| 73 |
+
/**
|
| 74 |
+
* URL-encoded parser.
|
| 75 |
+
* @public
|
| 76 |
+
*/
|
| 77 |
+
|
| 78 |
+
Object.defineProperty(exports, 'urlencoded', {
|
| 79 |
+
configurable: true,
|
| 80 |
+
enumerable: true,
|
| 81 |
+
get: createParserGetter('urlencoded')
|
| 82 |
+
})
|
| 83 |
+
|
| 84 |
+
/**
|
| 85 |
+
* Create a middleware to parse json and urlencoded bodies.
|
| 86 |
+
*
|
| 87 |
+
* @param {object} [options]
|
| 88 |
+
* @return {function}
|
| 89 |
+
* @deprecated
|
| 90 |
+
* @public
|
| 91 |
+
*/
|
| 92 |
+
|
| 93 |
+
function bodyParser (options) {
|
| 94 |
+
// use default type for parsers
|
| 95 |
+
var opts = Object.create(options || null, {
|
| 96 |
+
type: {
|
| 97 |
+
configurable: true,
|
| 98 |
+
enumerable: true,
|
| 99 |
+
value: undefined,
|
| 100 |
+
writable: true
|
| 101 |
+
}
|
| 102 |
+
})
|
| 103 |
+
|
| 104 |
+
var _urlencoded = exports.urlencoded(opts)
|
| 105 |
+
var _json = exports.json(opts)
|
| 106 |
+
|
| 107 |
+
return function bodyParser (req, res, next) {
|
| 108 |
+
_json(req, res, function (err) {
|
| 109 |
+
if (err) return next(err)
|
| 110 |
+
_urlencoded(req, res, next)
|
| 111 |
+
})
|
| 112 |
+
}
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
/**
|
| 116 |
+
* Create a getter for loading a parser.
|
| 117 |
+
* @private
|
| 118 |
+
*/
|
| 119 |
+
|
| 120 |
+
function createParserGetter (name) {
|
| 121 |
+
return function get () {
|
| 122 |
+
return loadParser(name)
|
| 123 |
+
}
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
/**
|
| 127 |
+
* Load a parser module.
|
| 128 |
+
* @private
|
| 129 |
+
*/
|
| 130 |
+
|
| 131 |
+
function loadParser (parserName) {
|
| 132 |
+
var parser = parsers[parserName]
|
| 133 |
+
|
| 134 |
+
if (parser !== undefined) {
|
| 135 |
+
return parser
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
// this uses a switch for static require analysis
|
| 139 |
+
switch (parserName) {
|
| 140 |
+
case 'json':
|
| 141 |
+
parser = require('./lib/types/json')
|
| 142 |
+
break
|
| 143 |
+
case 'raw':
|
| 144 |
+
parser = require('./lib/types/raw')
|
| 145 |
+
break
|
| 146 |
+
case 'text':
|
| 147 |
+
parser = require('./lib/types/text')
|
| 148 |
+
break
|
| 149 |
+
case 'urlencoded':
|
| 150 |
+
parser = require('./lib/types/urlencoded')
|
| 151 |
+
break
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
// store to prevent invoking require()
|
| 155 |
+
return (parsers[parserName] = parser)
|
| 156 |
+
}
|