root commited on
Commit
3af1079
·
1 Parent(s): cc9f3a7

update spaces

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .env +9 -0
  2. node_modules/.bin/mime +1 -0
  3. node_modules/.bin/mkdirp +1 -0
  4. node_modules/.bin/nodemon +1 -0
  5. node_modules/.bin/nodetouch +1 -0
  6. node_modules/.bin/semver +1 -0
  7. node_modules/.package-lock.json +1418 -0
  8. node_modules/@scarf/scarf/LICENSE +201 -0
  9. node_modules/@scarf/scarf/README.md +198 -0
  10. node_modules/@scarf/scarf/package.json +36 -0
  11. node_modules/@scarf/scarf/report.js +574 -0
  12. node_modules/accepts/HISTORY.md +243 -0
  13. node_modules/accepts/LICENSE +23 -0
  14. node_modules/accepts/README.md +140 -0
  15. node_modules/accepts/index.js +238 -0
  16. node_modules/accepts/package.json +47 -0
  17. node_modules/anymatch/LICENSE +15 -0
  18. node_modules/anymatch/README.md +87 -0
  19. node_modules/anymatch/index.d.ts +20 -0
  20. node_modules/anymatch/index.js +104 -0
  21. node_modules/anymatch/package.json +48 -0
  22. .gitignore → node_modules/append-field/.npmignore +0 -3
  23. node_modules/append-field/LICENSE +21 -0
  24. node_modules/append-field/README.md +44 -0
  25. node_modules/append-field/index.js +12 -0
  26. node_modules/append-field/lib/parse-path.js +53 -0
  27. node_modules/append-field/lib/set-value.js +64 -0
  28. node_modules/append-field/package.json +19 -0
  29. node_modules/append-field/test/forms.js +19 -0
  30. node_modules/array-flatten/LICENSE +21 -0
  31. node_modules/array-flatten/README.md +43 -0
  32. node_modules/array-flatten/array-flatten.js +64 -0
  33. node_modules/array-flatten/package.json +39 -0
  34. node_modules/balanced-match/.github/FUNDING.yml +2 -0
  35. node_modules/balanced-match/LICENSE.md +21 -0
  36. node_modules/balanced-match/README.md +97 -0
  37. node_modules/balanced-match/index.js +62 -0
  38. node_modules/balanced-match/package.json +48 -0
  39. node_modules/binary-extensions/binary-extensions.json +263 -0
  40. node_modules/binary-extensions/binary-extensions.json.d.ts +3 -0
  41. node_modules/binary-extensions/index.d.ts +14 -0
  42. node_modules/binary-extensions/index.js +1 -0
  43. node_modules/binary-extensions/license +10 -0
  44. node_modules/binary-extensions/package.json +40 -0
  45. node_modules/binary-extensions/readme.md +25 -0
  46. node_modules/body-parser/HISTORY.md +672 -0
  47. node_modules/body-parser/LICENSE +23 -0
  48. node_modules/body-parser/README.md +476 -0
  49. node_modules/body-parser/SECURITY.md +25 -0
  50. 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
+ ![](https://github.com/scarf-sh/scarf-js/workflows/CI/badge.svg)
4
+ [![npm version](https://badge.fury.io/js/%40scarf%2Fscarf.svg)](https://badge.fury.io/js/%40scarf%2Fscarf)
5
+ <a href="https://www.npmjs.com/package/@scarf/scarf">![](https://img.shields.io/npm/dw/@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 [![Build Status](https://travis-ci.org/micromatch/anymatch.svg?branch=master)](https://travis-ci.org/micromatch/anymatch) [![Coverage Status](https://img.shields.io/coveralls/micromatch/anymatch.svg?branch=master)](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 &lt;julian@juliangruber.com&gt;
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
+ [![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match)
6
+ [![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match)
7
+
8
+ [![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](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 &lt;julian@juliangruber.com&gt;
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
+ }