git.iko.soy/rowtype-yoga/purescript-docs-search
on master help sign in
.github/workflows/build.yml+2−2
since splitsnapshots
unifiedsplit
@@ -12,7 +12,7 @@ jobs:
12
12
13 - uses: actions/setup-node@v2
13 - uses: actions/setup-node@v2
14 with:
14 with:
15− node-version: "14"
15+ node-version: "18"
16
16
17 - uses: purescript-contrib/setup-purescript@main
17 - uses: purescript-contrib/setup-purescript@main
18
18
@@ -41,4 +41,4 @@ jobs:
41 npm run build
41 npm run build
42 npm test
42 npm test
43 spago docs --no-search
43 spago docs --no-search
44− ./dist/purescript-docs-search build-index
44+ ./dist/purescript-docs-search.cjs build-index
.github/workflows/release.yml+3−3
@@ -11,7 +11,7 @@ jobs:
11
11
12 - uses: actions/setup-node@v2
12 - uses: actions/setup-node@v2
13 with:
13 with:
14− node-version: "14"
14+ node-version: "18"
15
15
16 - uses: purescript-contrib/setup-purescript@main
16 - uses: purescript-contrib/setup-purescript@main
17
17
@@ -41,7 +41,7 @@ jobs:
41 with:
41 with:
42 files: |
42 files: |
43 dist/docs-search-app.js
43 dist/docs-search-app.js
44− dist/purescript-docs-search
44+ dist/purescript-docs-search.cjs
45 env:
45 env:
46 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
46 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
47
47
@@ -52,4 +52,4 @@ jobs:
52 run: |
52 run: |
53 mv ci-npmrc.txt .npmrc
53 mv ci-npmrc.txt .npmrc
54 npm ci
54 npm ci
55− npm publish --non-interactive --access public
55+ npm publish --non-interactive --access public
CHANGELOG.md+14
@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
5The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8+## [0.0.12 - 2022-08-31]
9+
10+Changes:
11+- Package structure change: `dist/purescript-docs-search.cjs` has been moved to `dist/purescript-docs-search.cjs` due to NodeJS restrictions for `type: module` packages.
12+- Improve output for data and newtype constuctors ([#58](https://github.com/purescript/purescript-docs-search/pull/58))
13+
14+New features:
15+- Docs for each CLI option
16+- New `--source-files` option that allows to specify `.purs` sources (see below)
17+
18+Bugfixes:
19+- Include modules with only re-exports in the module list ([#62](https://github.com/purescript/purescript-docs-search/issues/62))
20+- Fix `docs.json` parser for some types
21+
8## [0.0.11 - 2021-04-15]
22## [0.0.11 - 2021-04-15]
9
23
10Changes:
24Changes:
README.md+4−4
@@ -1,8 +1,8 @@
1# purescript-docs-search
1# purescript-docs-search
2
2
3−[![Build status](https://travis-ci.org/spacchetti/purescript-docs-search.svg?branch=master)](https://travis-ci.org/spacchetti/purescript-docs-search)
3+[![Build status](https://github.com/purescript/purescript-docs-search/actions/workflows/build.yml/badge.svg)](https://github.com/purescript/purescript-docs-search/actions/workflows/build.yml)
4
4
5−An app that adds search capabilities to generated documentation for purescript code.
5+An app that adds search capabilities to generated documentation for PureScript code.
6
6
7It supports nearly-all functionality of [Pursuit](https://github.com/purescript/pursuit), including querying by type.
7It supports nearly-all functionality of [Pursuit](https://github.com/purescript/pursuit), including querying by type.
8
8
@@ -10,7 +10,7 @@ It supports nearly-all functionality of [Pursuit](https://github.com/purescript/
10
10
11When using [spago](https://github.com/spacchetti/spago), you don't need to install this app manually: run `spago docs` or `spago search`.
11When using [spago](https://github.com/spacchetti/spago), you don't need to install this app manually: run `spago docs` or `spago search`.
12
12
13−Otherwise, use [npx](https://github.com/npm/npx): `npx purescript-docs-search`.
13+Otherwise, use NPM (`npm install purescript-docs-search`) or [npx](https://github.com/npm/npx): `npx purescript-docs-search`.
14
14
15## Usage
15## Usage
16
16
@@ -45,4 +45,4 @@ npm install
45npm run build # or build-dev to skip JS compression stage
45npm run build # or build-dev to skip JS compression stage
46```
46```
47
47
48−Use `spago docs --no-search && ./dist/purescript-docs-search build-index` to generate the docs and patch them using the local version of the app.
48+Use `spago docs --no-search && ./dist/purescript-docs-search.cjs build-index` to generate the docs and patch them using the local version of the app.
package-lock.json+1684−389
@@ -1,9 +1,1337 @@
1{
1{
2 "name": "purescript-docs-search",
2 "name": "purescript-docs-search",
3 "version": "0.0.11",
3 "version": "0.0.11",
4− "lockfileVersion": 1,
4+ "lockfileVersion": 2,
5 "requires": true,
5 "requires": true,
6+ "packages": {
7+ "": {
8+ "name": "purescript-docs-search",
9+ "version": "0.0.11",
10+ "license": "BSD-3-Clause",
11+ "dependencies": {
12+ "punycode": "^2.1.1"
13+ },
14+ "bin": {
15+ "purescript-docs-search": "dist/purescript-docs-search.js"
16+ },
17+ "devDependencies": {
18+ "esbuild": "^0.11.10",
19+ "glob": "^7.1.6",
20+ "markdown-it": "^12.0.4",
21+ "puppeteer": "^8.0.0",
22+ "spago": "^0.20.9"
23+ }
24+ },
25+ "node_modules/@gar/promisify": {
26+ "version": "1.1.3",
27+ "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
28+ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
29+ "dev": true
30+ },
31+ "node_modules/@npmcli/fs": {
32+ "version": "1.1.1",
33+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
34+ "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
35+ "dev": true,
36+ "dependencies": {
37+ "@gar/promisify": "^1.0.1",
38+ "semver": "^7.3.5"
39+ }
40+ },
41+ "node_modules/@npmcli/move-file": {
42+ "version": "1.1.2",
43+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
44+ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
45+ "dev": true,
46+ "dependencies": {
47+ "mkdirp": "^1.0.4",
48+ "rimraf": "^3.0.2"
49+ },
50+ "engines": {
51+ "node": ">=10"
52+ }
53+ },
54+ "node_modules/@tootallnate/once": {
55+ "version": "1.1.2",
56+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
57+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
58+ "dev": true,
59+ "engines": {
60+ "node": ">= 6"
61+ }
62+ },
63+ "node_modules/@types/node": {
64+ "version": "14.14.39",
65+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.39.tgz",
66+ "integrity": "sha512-Qipn7rfTxGEDqZiezH+wxqWYR8vcXq5LRpZrETD19Gs4o8LbklbmqotSUsMU+s5G3PJwMRDfNEYoxrcBwIxOuw==",
67+ "dev": true,
68+ "optional": true
69+ },
70+ "node_modules/@types/yauzl": {
71+ "version": "2.9.1",
72+ "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.9.1.tgz",
73+ "integrity": "sha512-A1b8SU4D10uoPjwb0lnHmmu8wZhR9d+9o2PKBQT2jU5YPTKsxac6M2qGAdY7VcL+dHHhARVUDmeg0rOrcd9EjA==",
74+ "dev": true,
75+ "optional": true,
76+ "dependencies": {
77+ "@types/node": "*"
78+ }
79+ },
80+ "node_modules/agent-base": {
81+ "version": "6.0.2",
82+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
83+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
84+ "dev": true,
85+ "dependencies": {
86+ "debug": "4"
87+ },
88+ "engines": {
89+ "node": ">= 6.0.0"
90+ }
91+ },
92+ "node_modules/agentkeepalive": {
93+ "version": "4.2.1",
94+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
95+ "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
96+ "dev": true,
97+ "dependencies": {
98+ "debug": "^4.1.0",
99+ "depd": "^1.1.2",
100+ "humanize-ms": "^1.2.1"
101+ },
102+ "engines": {
103+ "node": ">= 8.0.0"
104+ }
105+ },
106+ "node_modules/aggregate-error": {
107+ "version": "3.1.0",
108+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
109+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
110+ "dev": true,
111+ "dependencies": {
112+ "clean-stack": "^2.0.0",
113+ "indent-string": "^4.0.0"
114+ },
115+ "engines": {
116+ "node": ">=8"
117+ }
118+ },
119+ "node_modules/argparse": {
120+ "version": "2.0.1",
121+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
122+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
123+ "dev": true
124+ },
125+ "node_modules/balanced-match": {
126+ "version": "1.0.0",
127+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
128+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
129+ "dev": true
130+ },
131+ "node_modules/base64-js": {
132+ "version": "1.5.1",
133+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
134+ "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
135+ "dev": true,
136+ "funding": [
137+ {
138+ "type": "github",
139+ "url": "https://github.com/sponsors/feross"
140+ },
141+ {
142+ "type": "patreon",
143+ "url": "https://www.patreon.com/feross"
144+ },
145+ {
146+ "type": "consulting",
147+ "url": "https://feross.org/support"
148+ }
149+ ]
150+ },
151+ "node_modules/bl": {
152+ "version": "4.1.0",
153+ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
154+ "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
155+ "dev": true,
156+ "dependencies": {
157+ "buffer": "^5.5.0",
158+ "inherits": "^2.0.4",
159+ "readable-stream": "^3.4.0"
160+ }
161+ },
162+ "node_modules/bl/node_modules/buffer": {
163+ "version": "5.7.1",
164+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
165+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
166+ "dev": true,
167+ "funding": [
168+ {
169+ "type": "github",
170+ "url": "https://github.com/sponsors/feross"
171+ },
172+ {
173+ "type": "patreon",
174+ "url": "https://www.patreon.com/feross"
175+ },
176+ {
177+ "type": "consulting",
178+ "url": "https://feross.org/support"
179+ }
180+ ],
181+ "dependencies": {
182+ "base64-js": "^1.3.1",
183+ "ieee754": "^1.1.13"
184+ }
185+ },
186+ "node_modules/bl/node_modules/readable-stream": {
187+ "version": "3.6.0",
188+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
189+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
190+ "dev": true,
191+ "dependencies": {
192+ "inherits": "^2.0.3",
193+ "string_decoder": "^1.1.1",
194+ "util-deprecate": "^1.0.1"
195+ },
196+ "engines": {
197+ "node": ">= 6"
198+ }
199+ },
200+ "node_modules/brace-expansion": {
201+ "version": "1.1.11",
202+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
203+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
204+ "dev": true,
205+ "dependencies": {
206+ "balanced-match": "^1.0.0",
207+ "concat-map": "0.0.1"
208+ }
209+ },
210+ "node_modules/buffer-crc32": {
211+ "version": "0.2.13",
212+ "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
213+ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
214+ "dev": true,
215+ "engines": {
216+ "node": "*"
217+ }
218+ },
219+ "node_modules/cacache": {
220+ "version": "15.3.0",
221+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
222+ "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
223+ "dev": true,
224+ "dependencies": {
225+ "@npmcli/fs": "^1.0.0",
226+ "@npmcli/move-file": "^1.0.1",
227+ "chownr": "^2.0.0",
228+ "fs-minipass": "^2.0.0",
229+ "glob": "^7.1.4",
230+ "infer-owner": "^1.0.4",
231+ "lru-cache": "^6.0.0",
232+ "minipass": "^3.1.1",
233+ "minipass-collect": "^1.0.2",
234+ "minipass-flush": "^1.0.5",
235+ "minipass-pipeline": "^1.2.2",
236+ "mkdirp": "^1.0.3",
237+ "p-map": "^4.0.0",
238+ "promise-inflight": "^1.0.1",
239+ "rimraf": "^3.0.2",
240+ "ssri": "^8.0.1",
241+ "tar": "^6.0.2",
242+ "unique-filename": "^1.1.1"
243+ },
244+ "engines": {
245+ "node": ">= 10"
246+ }
247+ },
248+ "node_modules/cacache/node_modules/chownr": {
249+ "version": "2.0.0",
250+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
251+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
252+ "dev": true,
253+ "engines": {
254+ "node": ">=10"
255+ }
256+ },
257+ "node_modules/chownr": {
258+ "version": "1.1.4",
259+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
260+ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
261+ "dev": true
262+ },
263+ "node_modules/clean-stack": {
264+ "version": "2.2.0",
265+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
266+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
267+ "dev": true,
268+ "engines": {
269+ "node": ">=6"
270+ }
271+ },
272+ "node_modules/concat-map": {
273+ "version": "0.0.1",
274+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
275+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
276+ "dev": true
277+ },
278+ "node_modules/debug": {
279+ "version": "4.3.4",
280+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
281+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
282+ "dev": true,
283+ "dependencies": {
284+ "ms": "2.1.2"
285+ },
286+ "engines": {
287+ "node": ">=6.0"
288+ },
289+ "peerDependenciesMeta": {
290+ "supports-color": {
291+ "optional": true
292+ }
293+ }
294+ },
295+ "node_modules/depd": {
296+ "version": "1.1.2",
297+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
298+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
299+ "dev": true,
300+ "engines": {
301+ "node": ">= 0.6"
302+ }
303+ },
304+ "node_modules/devtools-protocol": {
305+ "version": "0.0.854822",
306+ "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.854822.tgz",
307+ "integrity": "sha512-xd4D8kHQtB0KtWW0c9xBZD5LVtm9chkMOfs/3Yn01RhT/sFIsVtzTtypfKoFfWBaL+7xCYLxjOLkhwPXaX/Kcg==",
308+ "dev": true
309+ },
310+ "node_modules/encoding": {
311+ "version": "0.1.13",
312+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
313+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
314+ "dev": true,
315+ "optional": true,
316+ "dependencies": {
317+ "iconv-lite": "^0.6.2"
318+ }
319+ },
320+ "node_modules/end-of-stream": {
321+ "version": "1.4.4",
322+ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
323+ "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
324+ "dev": true,
325+ "dependencies": {
326+ "once": "^1.4.0"
327+ }
328+ },
329+ "node_modules/entities": {
330+ "version": "2.1.0",
331+ "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz",
332+ "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
333+ "dev": true,
334+ "funding": {
335+ "url": "https://github.com/fb55/entities?sponsor=1"
336+ }
337+ },
338+ "node_modules/err-code": {
339+ "version": "2.0.3",
340+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
341+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
342+ "dev": true
343+ },
344+ "node_modules/esbuild": {
345+ "version": "0.11.11",
346+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.11.tgz",
347+ "integrity": "sha512-iq5YdV63vY/nUAFIvY92BXVkYjMbOchnofLKoLKMPZIa4uuIJAJG9WRA+ZRjQBZbrsORUwvZcANeG2d3p46PJQ==",
348+ "dev": true,
349+ "hasInstallScript": true,
350+ "bin": {
351+ "esbuild": "bin/esbuild"
352+ }
353+ },
354+ "node_modules/extract-zip": {
355+ "version": "2.0.1",
356+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
357+ "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==",
358+ "dev": true,
359+ "dependencies": {
360+ "debug": "^4.1.1",
361+ "get-stream": "^5.1.0",
362+ "yauzl": "^2.10.0"
363+ },
364+ "bin": {
365+ "extract-zip": "cli.js"
366+ },
367+ "engines": {
368+ "node": ">= 10.17.0"
369+ },
370+ "optionalDependencies": {
371+ "@types/yauzl": "^2.9.1"
372+ }
373+ },
374+ "node_modules/fd-slicer": {
375+ "version": "1.1.0",
376+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
377+ "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
378+ "dev": true,
379+ "dependencies": {
380+ "pend": "~1.2.0"
381+ }
382+ },
383+ "node_modules/fs-constants": {
384+ "version": "1.0.0",
385+ "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
386+ "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
387+ "dev": true
388+ },
389+ "node_modules/fs-minipass": {
390+ "version": "2.1.0",
391+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
392+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
393+ "dev": true,
394+ "dependencies": {
395+ "minipass": "^3.0.0"
396+ },
397+ "engines": {
398+ "node": ">= 8"
399+ }
400+ },
401+ "node_modules/fs.realpath": {
402+ "version": "1.0.0",
403+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
404+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
405+ "dev": true
406+ },
407+ "node_modules/get-stream": {
408+ "version": "5.2.0",
409+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
410+ "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
411+ "dev": true,
412+ "dependencies": {
413+ "pump": "^3.0.0"
414+ },
415+ "engines": {
416+ "node": ">=8"
417+ },
418+ "funding": {
419+ "url": "https://github.com/sponsors/sindresorhus"
420+ }
421+ },
422+ "node_modules/glob": {
423+ "version": "7.1.6",
424+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
425+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
426+ "dev": true,
427+ "dependencies": {
428+ "fs.realpath": "^1.0.0",
429+ "inflight": "^1.0.4",
430+ "inherits": "2",
431+ "minimatch": "^3.0.4",
432+ "once": "^1.3.0",
433+ "path-is-absolute": "^1.0.0"
434+ },
435+ "engines": {
436+ "node": "*"
437+ },
438+ "funding": {
439+ "url": "https://github.com/sponsors/isaacs"
440+ }
441+ },
442+ "node_modules/http-cache-semantics": {
443+ "version": "4.1.0",
444+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
445+ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
446+ "dev": true
447+ },
448+ "node_modules/http-proxy-agent": {
449+ "version": "4.0.1",
450+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
451+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
452+ "dev": true,
453+ "dependencies": {
454+ "@tootallnate/once": "1",
455+ "agent-base": "6",
456+ "debug": "4"
457+ },
458+ "engines": {
459+ "node": ">= 6"
460+ }
461+ },
462+ "node_modules/https-proxy-agent": {
463+ "version": "5.0.0",
464+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
465+ "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
466+ "dev": true,
467+ "dependencies": {
468+ "agent-base": "6",
469+ "debug": "4"
470+ },
471+ "engines": {
472+ "node": ">= 6"
473+ }
474+ },
475+ "node_modules/humanize-ms": {
476+ "version": "1.2.1",
477+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
478+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
479+ "dev": true,
480+ "dependencies": {
481+ "ms": "^2.0.0"
482+ }
483+ },
484+ "node_modules/iconv-lite": {
485+ "version": "0.6.3",
486+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
487+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
488+ "dev": true,
489+ "optional": true,
490+ "dependencies": {
491+ "safer-buffer": ">= 2.1.2 < 3.0.0"
492+ },
493+ "engines": {
494+ "node": ">=0.10.0"
495+ }
496+ },
497+ "node_modules/ieee754": {
498+ "version": "1.2.1",
499+ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
500+ "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
501+ "dev": true,
502+ "funding": [
503+ {
504+ "type": "github",
505+ "url": "https://github.com/sponsors/feross"
506+ },
507+ {
508+ "type": "patreon",
509+ "url": "https://www.patreon.com/feross"
510+ },
511+ {
512+ "type": "consulting",
513+ "url": "https://feross.org/support"
514+ }
515+ ]
516+ },
517+ "node_modules/imurmurhash": {
518+ "version": "0.1.4",
519+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
520+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
521+ "dev": true,
522+ "engines": {
523+ "node": ">=0.8.19"
524+ }
525+ },
526+ "node_modules/indent-string": {
527+ "version": "4.0.0",
528+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
529+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
530+ "dev": true,
531+ "engines": {
532+ "node": ">=8"
533+ }
534+ },
535+ "node_modules/infer-owner": {
536+ "version": "1.0.4",
537+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
538+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
539+ "dev": true
540+ },
541+ "node_modules/inflight": {
542+ "version": "1.0.6",
543+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
544+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
545+ "dev": true,
546+ "dependencies": {
547+ "once": "^1.3.0",
548+ "wrappy": "1"
549+ }
550+ },
551+ "node_modules/inherits": {
552+ "version": "2.0.4",
553+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
554+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
555+ "dev": true
556+ },
557+ "node_modules/ip": {
558+ "version": "2.0.0",
559+ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
560+ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
561+ "dev": true
562+ },
563+ "node_modules/is-lambda": {
564+ "version": "1.0.1",
565+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
566+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
567+ "dev": true
568+ },
569+ "node_modules/linkify-it": {
570+ "version": "3.0.3",
571+ "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
572+ "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==",
573+ "dev": true,
574+ "dependencies": {
575+ "uc.micro": "^1.0.1"
576+ }
577+ },
578+ "node_modules/lru-cache": {
579+ "version": "6.0.0",
580+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
581+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
582+ "dev": true,
583+ "dependencies": {
584+ "yallist": "^4.0.0"
585+ },
586+ "engines": {
587+ "node": ">=10"
588+ }
589+ },
590+ "node_modules/make-fetch-happen": {
591+ "version": "9.1.0",
592+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
593+ "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
594+ "dev": true,
595+ "dependencies": {
596+ "agentkeepalive": "^4.1.3",
597+ "cacache": "^15.2.0",
598+ "http-cache-semantics": "^4.1.0",
599+ "http-proxy-agent": "^4.0.1",
600+ "https-proxy-agent": "^5.0.0",
601+ "is-lambda": "^1.0.1",
602+ "lru-cache": "^6.0.0",
603+ "minipass": "^3.1.3",
604+ "minipass-collect": "^1.0.2",
605+ "minipass-fetch": "^1.3.2",
606+ "minipass-flush": "^1.0.5",
607+ "minipass-pipeline": "^1.2.4",
608+ "negotiator": "^0.6.2",
609+ "promise-retry": "^2.0.1",
610+ "socks-proxy-agent": "^6.0.0",
611+ "ssri": "^8.0.0"
612+ },
613+ "engines": {
614+ "node": ">= 10"
615+ }
616+ },
617+ "node_modules/markdown-it": {
618+ "version": "12.3.2",
619+ "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
620+ "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==",
621+ "dev": true,
622+ "dependencies": {
623+ "argparse": "^2.0.1",
624+ "entities": "~2.1.0",
625+ "linkify-it": "^3.0.1",
626+ "mdurl": "^1.0.1",
627+ "uc.micro": "^1.0.5"
628+ },
629+ "bin": {
630+ "markdown-it": "bin/markdown-it.js"
631+ }
632+ },
633+ "node_modules/mdurl": {
634+ "version": "1.0.1",
635+ "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
636+ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
637+ "dev": true
638+ },
639+ "node_modules/minimatch": {
640+ "version": "3.0.4",
641+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
642+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
643+ "dev": true,
644+ "dependencies": {
645+ "brace-expansion": "^1.1.7"
646+ },
647+ "engines": {
648+ "node": "*"
649+ }
650+ },
651+ "node_modules/minipass": {
652+ "version": "3.3.4",
653+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz",
654+ "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==",
655+ "dev": true,
656+ "dependencies": {
657+ "yallist": "^4.0.0"
658+ },
659+ "engines": {
660+ "node": ">=8"
661+ }
662+ },
663+ "node_modules/minipass-collect": {
664+ "version": "1.0.2",
665+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
666+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
667+ "dev": true,
668+ "dependencies": {
669+ "minipass": "^3.0.0"
670+ },
671+ "engines": {
672+ "node": ">= 8"
673+ }
674+ },
675+ "node_modules/minipass-fetch": {
676+ "version": "1.4.1",
677+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
678+ "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
679+ "dev": true,
680+ "dependencies": {
681+ "minipass": "^3.1.0",
682+ "minipass-sized": "^1.0.3",
683+ "minizlib": "^2.0.0"
684+ },
685+ "engines": {
686+ "node": ">=8"
687+ },
688+ "optionalDependencies": {
689+ "encoding": "^0.1.12"
690+ }
691+ },
692+ "node_modules/minipass-flush": {
693+ "version": "1.0.5",
694+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
695+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
696+ "dev": true,
697+ "dependencies": {
698+ "minipass": "^3.0.0"
699+ },
700+ "engines": {
701+ "node": ">= 8"
702+ }
703+ },
704+ "node_modules/minipass-pipeline": {
705+ "version": "1.2.4",
706+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
707+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
708+ "dev": true,
709+ "dependencies": {
710+ "minipass": "^3.0.0"
711+ },
712+ "engines": {
713+ "node": ">=8"
714+ }
715+ },
716+ "node_modules/minipass-sized": {
717+ "version": "1.0.3",
718+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
719+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
720+ "dev": true,
721+ "dependencies": {
722+ "minipass": "^3.0.0"
723+ },
724+ "engines": {
725+ "node": ">=8"
726+ }
727+ },
728+ "node_modules/minizlib": {
729+ "version": "2.1.2",
730+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
731+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
732+ "dev": true,
733+ "dependencies": {
734+ "minipass": "^3.0.0",
735+ "yallist": "^4.0.0"
736+ },
737+ "engines": {
738+ "node": ">= 8"
739+ }
740+ },
741+ "node_modules/mkdirp": {
742+ "version": "1.0.4",
743+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
744+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
745+ "dev": true,
746+ "bin": {
747+ "mkdirp": "bin/cmd.js"
748+ },
749+ "engines": {
750+ "node": ">=10"
751+ }
752+ },
753+ "node_modules/mkdirp-classic": {
754+ "version": "0.5.3",
755+ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
756+ "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
757+ "dev": true
758+ },
759+ "node_modules/ms": {
760+ "version": "2.1.2",
761+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
762+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
763+ "dev": true
764+ },
765+ "node_modules/negotiator": {
766+ "version": "0.6.3",
767+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
768+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
769+ "dev": true,
770+ "engines": {
771+ "node": ">= 0.6"
772+ }
773+ },
774+ "node_modules/node-fetch": {
775+ "version": "2.6.1",
776+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
777+ "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
778+ "dev": true,
779+ "engines": {
780+ "node": "4.x || >=6.0.0"
781+ }
782+ },
783+ "node_modules/once": {
784+ "version": "1.4.0",
785+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
786+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
787+ "dev": true,
788+ "dependencies": {
789+ "wrappy": "1"
790+ }
791+ },
792+ "node_modules/p-limit": {
793+ "version": "2.3.0",
794+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
795+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
796+ "dev": true,
797+ "dependencies": {
798+ "p-try": "^2.0.0"
799+ },
800+ "engines": {
801+ "node": ">=6"
802+ },
803+ "funding": {
804+ "url": "https://github.com/sponsors/sindresorhus"
805+ }
806+ },
807+ "node_modules/p-map": {
808+ "version": "4.0.0",
809+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
810+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
811+ "dev": true,
812+ "dependencies": {
813+ "aggregate-error": "^3.0.0"
814+ },
815+ "engines": {
816+ "node": ">=10"
817+ },
818+ "funding": {
819+ "url": "https://github.com/sponsors/sindresorhus"
820+ }
821+ },
822+ "node_modules/p-try": {
823+ "version": "2.2.0",
824+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
825+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
826+ "dev": true,
827+ "engines": {
828+ "node": ">=6"
829+ }
830+ },
831+ "node_modules/path-is-absolute": {
832+ "version": "1.0.1",
833+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
834+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
835+ "dev": true,
836+ "engines": {
837+ "node": ">=0.10.0"
838+ }
839+ },
840+ "node_modules/pend": {
841+ "version": "1.2.0",
842+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
843+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
844+ "dev": true
845+ },
846+ "node_modules/pkg-dir": {
847+ "version": "4.2.0",
848+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
849+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
850+ "dev": true,
851+ "dependencies": {
852+ "find-up": "^4.0.0"
853+ },
854+ "engines": {
855+ "node": ">=8"
856+ }
857+ },
858+ "node_modules/pkg-dir/node_modules/find-up": {
859+ "version": "4.1.0",
860+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
861+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
862+ "dev": true,
863+ "dependencies": {
864+ "locate-path": "^5.0.0",
865+ "path-exists": "^4.0.0"
866+ },
867+ "engines": {
868+ "node": ">=8"
869+ }
870+ },
871+ "node_modules/pkg-dir/node_modules/locate-path": {
872+ "version": "5.0.0",
873+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
874+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
875+ "dev": true,
876+ "dependencies": {
877+ "p-locate": "^4.1.0"
878+ },
879+ "engines": {
880+ "node": ">=8"
881+ }
882+ },
883+ "node_modules/pkg-dir/node_modules/p-locate": {
884+ "version": "4.1.0",
885+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
886+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
887+ "dev": true,
888+ "dependencies": {
889+ "p-limit": "^2.2.0"
890+ },
891+ "engines": {
892+ "node": ">=8"
893+ }
894+ },
895+ "node_modules/pkg-dir/node_modules/path-exists": {
896+ "version": "4.0.0",
897+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
898+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
899+ "dev": true,
900+ "engines": {
901+ "node": ">=8"
902+ }
903+ },
904+ "node_modules/progress": {
905+ "version": "2.0.3",
906+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
907+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
908+ "dev": true,
909+ "engines": {
910+ "node": ">=0.4.0"
911+ }
912+ },
913+ "node_modules/promise-inflight": {
914+ "version": "1.0.1",
915+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
916+ "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
917+ "dev": true
918+ },
919+ "node_modules/promise-retry": {
920+ "version": "2.0.1",
921+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
922+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
923+ "dev": true,
924+ "dependencies": {
925+ "err-code": "^2.0.2",
926+ "retry": "^0.12.0"
927+ },
928+ "engines": {
929+ "node": ">=10"
930+ }
931+ },
932+ "node_modules/proxy-from-env": {
933+ "version": "1.1.0",
934+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
935+ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
936+ "dev": true
937+ },
938+ "node_modules/pump": {
939+ "version": "3.0.0",
940+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
941+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
942+ "dev": true,
943+ "dependencies": {
944+ "end-of-stream": "^1.1.0",
945+ "once": "^1.3.1"
946+ }
947+ },
948+ "node_modules/punycode": {
949+ "version": "2.1.1",
950+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
951+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
952+ "engines": {
953+ "node": ">=6"
954+ }
955+ },
956+ "node_modules/puppeteer": {
957+ "version": "8.0.0",
958+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-8.0.0.tgz",
959+ "integrity": "sha512-D0RzSWlepeWkxPPdK3xhTcefj8rjah1791GE82Pdjsri49sy11ci/JQsAO8K2NRukqvwEtcI+ImP5F4ZiMvtIQ==",
960+ "deprecated": "Version no longer supported. Upgrade to @latest",
961+ "dev": true,
962+ "hasInstallScript": true,
963+ "dependencies": {
964+ "debug": "^4.1.0",
965+ "devtools-protocol": "0.0.854822",
966+ "extract-zip": "^2.0.0",
967+ "https-proxy-agent": "^5.0.0",
968+ "node-fetch": "^2.6.1",
969+ "pkg-dir": "^4.2.0",
970+ "progress": "^2.0.1",
971+ "proxy-from-env": "^1.1.0",
972+ "rimraf": "^3.0.2",
973+ "tar-fs": "^2.0.0",
974+ "unbzip2-stream": "^1.3.3",
975+ "ws": "^7.2.3"
976+ },
977+ "engines": {
978+ "node": ">=10.18.1"
979+ }
980+ },
981+ "node_modules/puppeteer/node_modules/ws": {
982+ "version": "7.4.4",
983+ "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
984+ "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
985+ "dev": true,
986+ "engines": {
987+ "node": ">=8.3.0"
988+ },
989+ "peerDependencies": {
990+ "bufferutil": "^4.0.1",
991+ "utf-8-validate": "^5.0.2"
992+ },
993+ "peerDependenciesMeta": {
994+ "bufferutil": {
995+ "optional": true
996+ },
997+ "utf-8-validate": {
998+ "optional": true
999+ }
1000+ }
1001+ },
1002+ "node_modules/retry": {
1003+ "version": "0.12.0",
1004+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
1005+ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
1006+ "dev": true,
1007+ "engines": {
1008+ "node": ">= 4"
1009+ }
1010+ },
1011+ "node_modules/rimraf": {
1012+ "version": "3.0.2",
1013+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
1014+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
1015+ "dev": true,
1016+ "dependencies": {
1017+ "glob": "^7.1.3"
1018+ },
1019+ "bin": {
1020+ "rimraf": "bin.js"
1021+ },
1022+ "funding": {
1023+ "url": "https://github.com/sponsors/isaacs"
1024+ }
1025+ },
1026+ "node_modules/safe-buffer": {
1027+ "version": "5.2.1",
1028+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1029+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1030+ "dev": true,
1031+ "funding": [
1032+ {
1033+ "type": "github",
1034+ "url": "https://github.com/sponsors/feross"
1035+ },
1036+ {
1037+ "type": "patreon",
1038+ "url": "https://www.patreon.com/feross"
1039+ },
1040+ {
1041+ "type": "consulting",
1042+ "url": "https://feross.org/support"
1043+ }
1044+ ]
1045+ },
1046+ "node_modules/safer-buffer": {
1047+ "version": "2.1.2",
1048+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1049+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1050+ "dev": true,
1051+ "optional": true
1052+ },
1053+ "node_modules/semver": {
1054+ "version": "7.3.7",
1055+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
1056+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
1057+ "dev": true,
1058+ "dependencies": {
1059+ "lru-cache": "^6.0.0"
1060+ },
1061+ "bin": {
1062+ "semver": "bin/semver.js"
1063+ },
1064+ "engines": {
1065+ "node": ">=10"
1066+ }
1067+ },
1068+ "node_modules/smart-buffer": {
1069+ "version": "4.2.0",
1070+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
1071+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
1072+ "dev": true,
1073+ "engines": {
1074+ "node": ">= 6.0.0",
1075+ "npm": ">= 3.0.0"
1076+ }
1077+ },
1078+ "node_modules/socks": {
1079+ "version": "2.7.0",
1080+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
1081+ "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==",
1082+ "dev": true,
1083+ "dependencies": {
1084+ "ip": "^2.0.0",
1085+ "smart-buffer": "^4.2.0"
1086+ },
1087+ "engines": {
1088+ "node": ">= 10.13.0",
1089+ "npm": ">= 3.0.0"
1090+ }
1091+ },
1092+ "node_modules/socks-proxy-agent": {
1093+ "version": "6.2.1",
1094+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz",
1095+ "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==",
1096+ "dev": true,
1097+ "dependencies": {
1098+ "agent-base": "^6.0.2",
1099+ "debug": "^4.3.3",
1100+ "socks": "^2.6.2"
1101+ },
1102+ "engines": {
1103+ "node": ">= 10"
1104+ }
1105+ },
1106+ "node_modules/spago": {
1107+ "version": "0.20.9",
1108+ "resolved": "https://registry.npmjs.org/spago/-/spago-0.20.9.tgz",
1109+ "integrity": "sha512-r5TUxnYn9HawlQyMswlhIk24BGFSN2KGbqgZFZrn47GjTpMscU14xkt9CqTWgoSQYsoZieG+3dUtOxUQ7GYD7w==",
1110+ "dev": true,
1111+ "hasInstallScript": true,
1112+ "dependencies": {
1113+ "make-fetch-happen": "^9.1.0",
1114+ "tar": "^6.1.11"
1115+ },
1116+ "bin": {
1117+ "spago": "spago"
1118+ }
1119+ },
1120+ "node_modules/ssri": {
1121+ "version": "8.0.1",
1122+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
1123+ "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
1124+ "dev": true,
1125+ "dependencies": {
1126+ "minipass": "^3.1.1"
1127+ },
1128+ "engines": {
1129+ "node": ">= 8"
1130+ }
1131+ },
1132+ "node_modules/string_decoder": {
1133+ "version": "1.3.0",
1134+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
1135+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
1136+ "dev": true,
1137+ "dependencies": {
1138+ "safe-buffer": "~5.2.0"
1139+ }
1140+ },
1141+ "node_modules/tar": {
1142+ "version": "6.1.11",
1143+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
1144+ "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
1145+ "dev": true,
1146+ "dependencies": {
1147+ "chownr": "^2.0.0",
1148+ "fs-minipass": "^2.0.0",
1149+ "minipass": "^3.0.0",
1150+ "minizlib": "^2.1.1",
1151+ "mkdirp": "^1.0.3",
1152+ "yallist": "^4.0.0"
1153+ },
1154+ "engines": {
1155+ "node": ">= 10"
1156+ }
1157+ },
1158+ "node_modules/tar-fs": {
1159+ "version": "2.1.1",
1160+ "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
1161+ "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
1162+ "dev": true,
1163+ "dependencies": {
1164+ "chownr": "^1.1.1",
1165+ "mkdirp-classic": "^0.5.2",
1166+ "pump": "^3.0.0",
1167+ "tar-stream": "^2.1.4"
1168+ }
1169+ },
1170+ "node_modules/tar-stream": {
1171+ "version": "2.2.0",
1172+ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
1173+ "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
1174+ "dev": true,
1175+ "dependencies": {
1176+ "bl": "^4.0.3",
1177+ "end-of-stream": "^1.4.1",
1178+ "fs-constants": "^1.0.0",
1179+ "inherits": "^2.0.3",
1180+ "readable-stream": "^3.1.1"
1181+ },
1182+ "engines": {
1183+ "node": ">=6"
1184+ }
1185+ },
1186+ "node_modules/tar-stream/node_modules/readable-stream": {
1187+ "version": "3.6.0",
1188+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
1189+ "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
1190+ "dev": true,
1191+ "dependencies": {
1192+ "inherits": "^2.0.3",
1193+ "string_decoder": "^1.1.1",
1194+ "util-deprecate": "^1.0.1"
1195+ },
1196+ "engines": {
1197+ "node": ">= 6"
1198+ }
1199+ },
1200+ "node_modules/tar/node_modules/chownr": {
1201+ "version": "2.0.0",
1202+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
1203+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
1204+ "dev": true,
1205+ "engines": {
1206+ "node": ">=10"
1207+ }
1208+ },
1209+ "node_modules/through": {
1210+ "version": "2.3.8",
1211+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
1212+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
1213+ "dev": true
1214+ },
1215+ "node_modules/uc.micro": {
1216+ "version": "1.0.6",
1217+ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
1218+ "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==",
1219+ "dev": true
1220+ },
1221+ "node_modules/unbzip2-stream": {
1222+ "version": "1.4.3",
1223+ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz",
1224+ "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==",
1225+ "dev": true,
1226+ "dependencies": {
1227+ "buffer": "^5.2.1",
1228+ "through": "^2.3.8"
1229+ }
1230+ },
1231+ "node_modules/unbzip2-stream/node_modules/buffer": {
1232+ "version": "5.7.1",
1233+ "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
1234+ "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
1235+ "dev": true,
1236+ "funding": [
1237+ {
1238+ "type": "github",
1239+ "url": "https://github.com/sponsors/feross"
1240+ },
1241+ {
1242+ "type": "patreon",
1243+ "url": "https://www.patreon.com/feross"
1244+ },
1245+ {
1246+ "type": "consulting",
1247+ "url": "https://feross.org/support"
1248+ }
1249+ ],
1250+ "dependencies": {
1251+ "base64-js": "^1.3.1",
1252+ "ieee754": "^1.1.13"
1253+ }
1254+ },
1255+ "node_modules/unique-filename": {
1256+ "version": "1.1.1",
1257+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
1258+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
1259+ "dev": true,
1260+ "dependencies": {
1261+ "unique-slug": "^2.0.0"
1262+ }
1263+ },
1264+ "node_modules/unique-slug": {
1265+ "version": "2.0.2",
1266+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
1267+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
1268+ "dev": true,
1269+ "dependencies": {
1270+ "imurmurhash": "^0.1.4"
1271+ }
1272+ },
1273+ "node_modules/util-deprecate": {
1274+ "version": "1.0.2",
1275+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1276+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
1277+ "dev": true
1278+ },
1279+ "node_modules/wrappy": {
1280+ "version": "1.0.2",
1281+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1282+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
1283+ "dev": true
1284+ },
1285+ "node_modules/yallist": {
1286+ "version": "4.0.0",
1287+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1288+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
1289+ "dev": true
1290+ },
1291+ "node_modules/yauzl": {
1292+ "version": "2.10.0",
1293+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
1294+ "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
1295+ "dev": true,
1296+ "dependencies": {
1297+ "buffer-crc32": "~0.2.3",
1298+ "fd-slicer": "~1.1.0"
1299+ }
1300+ }
1301+ },
6 "dependencies": {
1302 "dependencies": {
1303+ "@gar/promisify": {
1304+ "version": "1.1.3",
1305+ "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
1306+ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
1307+ "dev": true
1308+ },
1309+ "@npmcli/fs": {
1310+ "version": "1.1.1",
1311+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
1312+ "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
1313+ "dev": true,
1314+ "requires": {
1315+ "@gar/promisify": "^1.0.1",
1316+ "semver": "^7.3.5"
1317+ }
1318+ },
1319+ "@npmcli/move-file": {
1320+ "version": "1.1.2",
1321+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
1322+ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
1323+ "dev": true,
1324+ "requires": {
1325+ "mkdirp": "^1.0.4",
1326+ "rimraf": "^3.0.2"
1327+ }
1328+ },
1329+ "@tootallnate/once": {
1330+ "version": "1.1.2",
1331+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
1332+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
1333+ "dev": true
1334+ },
7 "@types/node": {
1335 "@types/node": {
8 "version": "14.14.39",
1336 "version": "14.14.39",
9 "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.39.tgz",
1337 "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.39.tgz",
@@ -30,55 +1358,31 @@
30 "debug": "4"
1358 "debug": "4"
31 }
1359 }
32 },
1360 },
33− "ajv": {
1361+ "agentkeepalive": {
34− "version": "6.12.6",
1362+ "version": "4.2.1",
35− "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
1363+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
36− "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
1364+ "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
37 "dev": true,
1365 "dev": true,
38 "requires": {
1366 "requires": {
39− "fast-deep-equal": "^3.1.1",
1367+ "debug": "^4.1.0",
40− "fast-json-stable-stringify": "^2.0.0",
1368+ "depd": "^1.1.2",
41− "json-schema-traverse": "^0.4.1",
1369+ "humanize-ms": "^1.2.1"
42− "uri-js": "^4.2.2"
43 }
1370 }
44 },
1371 },
45− "argparse": {
1372+ "aggregate-error": {
46− "version": "2.0.1",
1373+ "version": "3.1.0",
47− "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
1374+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
48− "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
1375+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
49− "dev": true
50− },
51− "asn1": {
52− "version": "0.2.4",
53− "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
54− "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
55 "dev": true,
1376 "dev": true,
56 "requires": {
1377 "requires": {
57− "safer-buffer": "~2.1.0"
1378+ "clean-stack": "^2.0.0",
1379+ "indent-string": "^4.0.0"
58 }
1380 }
59 },
1381 },
60− "assert-plus": {
1382+ "argparse": {
61− "version": "1.0.0",
1383+ "version": "2.0.1",
62− "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
63− "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
64− "dev": true
65− },
66− "asynckit": {
67− "version": "0.4.0",
68− "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
1384+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
69− "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
1385+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
70− "dev": true
71− },
72− "aws-sign2": {
73− "version": "0.7.0",
74− "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
75− "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
76− "dev": true
77− },
78− "aws4": {
79− "version": "1.11.0",
80− "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
81− "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==",
82 "dev": true
1386 "dev": true
83 },
1387 },
84 "balanced-match": {
1388 "balanced-match": {
@@ -93,15 +1397,6 @@
93 "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
1397 "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
94 "dev": true
1398 "dev": true
95 },
1399 },
96− "bcrypt-pbkdf": {
97− "version": "1.0.2",
98− "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
99− "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
100− "dev": true,
101− "requires": {
102− "tweetnacl": "^0.14.3"
103− }
104− },
105 "bl": {
1400 "bl": {
106 "version": "4.1.0",
1401 "version": "4.1.0",
107 "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
1402 "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
@@ -152,11 +1447,39 @@
152 "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
1447 "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
153 "dev": true
1448 "dev": true
154 },
1449 },
155− "caseless": {
1450+ "cacache": {
156− "version": "0.12.0",
1451+ "version": "15.3.0",
157− "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
1452+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
158− "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
1453+ "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
1454+ "dev": true,
1455+ "requires": {
1456+ "@npmcli/fs": "^1.0.0",
1457+ "@npmcli/move-file": "^1.0.1",
1458+ "chownr": "^2.0.0",
1459+ "fs-minipass": "^2.0.0",
1460+ "glob": "^7.1.4",
1461+ "infer-owner": "^1.0.4",
1462+ "lru-cache": "^6.0.0",
1463+ "minipass": "^3.1.1",
1464+ "minipass-collect": "^1.0.2",
1465+ "minipass-flush": "^1.0.5",
1466+ "minipass-pipeline": "^1.2.2",
1467+ "mkdirp": "^1.0.3",
1468+ "p-map": "^4.0.0",
1469+ "promise-inflight": "^1.0.1",
1470+ "rimraf": "^3.0.2",
1471+ "ssri": "^8.0.1",
1472+ "tar": "^6.0.2",
1473+ "unique-filename": "^1.1.1"
1474+ },
1475+ "dependencies": {
1476+ "chownr": {
1477+ "version": "2.0.0",
1478+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
1479+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
159− "dev": true
1480+ "dev": true
1481+ }
1482+ }
160 },
1483 },
161 "chownr": {
1484 "chownr": {
162 "version": "1.1.4",
1485 "version": "1.1.4",
@@ -164,14 +1487,11 @@
164 "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
1487 "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
165 "dev": true
1488 "dev": true
166 },
1489 },
167− "combined-stream": {
1490+ "clean-stack": {
168− "version": "1.0.8",
1491+ "version": "2.2.0",
169− "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
1492+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
170− "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
1493+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
171− "dev": true,
1494+ "dev": true
172− "requires": {
173− "delayed-stream": "~1.0.0"
174− }
175 },
1495 },
176 "concat-map": {
1496 "concat-map": {
177 "version": "0.0.1",
1497 "version": "0.0.1",
@@ -179,34 +1499,19 @@
179 "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
1499 "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
180 "dev": true
1500 "dev": true
181 },
1501 },
182− "core-util-is": {
183− "version": "1.0.2",
184− "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
185− "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
186− "dev": true
187− },
188− "dashdash": {
189− "version": "1.14.1",
190− "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
191− "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
192− "dev": true,
193− "requires": {
194− "assert-plus": "^1.0.0"
195− }
196− },
197 "debug": {
1502 "debug": {
198− "version": "4.3.1",
1503+ "version": "4.3.4",
199− "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz",
1504+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
200− "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==",
1505+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
201 "dev": true,
1506 "dev": true,
202 "requires": {
1507 "requires": {
203 "ms": "2.1.2"
1508 "ms": "2.1.2"
204 }
1509 }
205 },
1510 },
206− "delayed-stream": {
1511+ "depd": {
207− "version": "1.0.0",
1512+ "version": "1.1.2",
208− "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
1513+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
209− "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
1514+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
210 "dev": true
1515 "dev": true
211 },
1516 },
212 "devtools-protocol": {
1517 "devtools-protocol": {
@@ -215,14 +1520,14 @@
215 "integrity": "sha512-xd4D8kHQtB0KtWW0c9xBZD5LVtm9chkMOfs/3Yn01RhT/sFIsVtzTtypfKoFfWBaL+7xCYLxjOLkhwPXaX/Kcg==",
1520 "integrity": "sha512-xd4D8kHQtB0KtWW0c9xBZD5LVtm9chkMOfs/3Yn01RhT/sFIsVtzTtypfKoFfWBaL+7xCYLxjOLkhwPXaX/Kcg==",
216 "dev": true
1521 "dev": true
217 },
1522 },
218− "ecc-jsbn": {
1523+ "encoding": {
219− "version": "0.1.2",
1524+ "version": "0.1.13",
220− "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
1525+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
221− "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
1526+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
222 "dev": true,
1527 "dev": true,
1528+ "optional": true,
223 "requires": {
1529 "requires": {
224− "jsbn": "~0.1.0",
1530+ "iconv-lite": "^0.6.2"
225− "safer-buffer": "^2.1.0"
226 }
1531 }
227 },
1532 },
228 "end-of-stream": {
1533 "end-of-stream": {
@@ -240,18 +1545,18 @@
240 "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
1545 "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==",
241 "dev": true
1546 "dev": true
242 },
1547 },
1548+ "err-code": {
1549+ "version": "2.0.3",
1550+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
1551+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
1552+ "dev": true
1553+ },
243 "esbuild": {
1554 "esbuild": {
244 "version": "0.11.11",
1555 "version": "0.11.11",
245 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.11.tgz",
1556 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.11.11.tgz",
246 "integrity": "sha512-iq5YdV63vY/nUAFIvY92BXVkYjMbOchnofLKoLKMPZIa4uuIJAJG9WRA+ZRjQBZbrsORUwvZcANeG2d3p46PJQ==",
1557 "integrity": "sha512-iq5YdV63vY/nUAFIvY92BXVkYjMbOchnofLKoLKMPZIa4uuIJAJG9WRA+ZRjQBZbrsORUwvZcANeG2d3p46PJQ==",
247 "dev": true
1558 "dev": true
248 },
1559 },
249− "extend": {
250− "version": "3.0.2",
251− "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
252− "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
253− "dev": true
254− },
255 "extract-zip": {
1560 "extract-zip": {
256 "version": "2.0.1",
1561 "version": "2.0.1",
257 "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
1562 "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz",
@@ -264,24 +1569,6 @@
264 "yauzl": "^2.10.0"
1569 "yauzl": "^2.10.0"
265 }
1570 }
266 },
1571 },
267− "extsprintf": {
268− "version": "1.3.0",
269− "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
270− "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
271− "dev": true
272− },
273− "fast-deep-equal": {
274− "version": "3.1.3",
275− "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
276− "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
277− "dev": true
278− },
279− "fast-json-stable-stringify": {
280− "version": "2.1.0",
281− "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
282− "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
283− "dev": true
284− },
285 "fd-slicer": {
1572 "fd-slicer": {
286 "version": "1.1.0",
1573 "version": "1.1.0",
287 "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
1574 "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
@@ -291,23 +1578,6 @@
291 "pend": "~1.2.0"
1578 "pend": "~1.2.0"
292 }
1579 }
293 },
1580 },
294− "forever-agent": {
295− "version": "0.6.1",
296− "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
297− "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
298− "dev": true
299− },
300− "form-data": {
301− "version": "2.3.3",
302− "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
303− "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
304− "dev": true,
305− "requires": {
306− "asynckit": "^0.4.0",
307− "combined-stream": "^1.0.6",
308− "mime-types": "^2.1.12"
309− }
310− },
311 "fs-constants": {
1581 "fs-constants": {
312 "version": "1.0.0",
1582 "version": "1.0.0",
313 "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
1583 "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
@@ -315,12 +1585,12 @@
315 "dev": true
1585 "dev": true
316 },
1586 },
317 "fs-minipass": {
1587 "fs-minipass": {
318− "version": "1.2.7",
1588+ "version": "2.1.0",
319− "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
1589+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
320− "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
1590+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
321 "dev": true,
1591 "dev": true,
322 "requires": {
1592 "requires": {
323− "minipass": "^2.6.0"
1593+ "minipass": "^3.0.0"
324 }
1594 }
325 },
1595 },
326 "fs.realpath": {
1596 "fs.realpath": {
@@ -338,15 +1608,6 @@
338 "pump": "^3.0.0"
1608 "pump": "^3.0.0"
339 }
1609 }
340 },
1610 },
341− "getpass": {
342− "version": "0.1.7",
343− "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
344− "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
345− "dev": true,
346− "requires": {
347− "assert-plus": "^1.0.0"
348− }
349− },
350 "glob": {
1611 "glob": {
351 "version": "7.1.6",
1612 "version": "7.1.6",
352 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
1613 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
@@ -361,31 +1622,21 @@
361 "path-is-absolute": "^1.0.0"
1622 "path-is-absolute": "^1.0.0"
362 }
1623 }
363 },
1624 },
364− "har-schema": {
1625+ "http-cache-semantics": {
365− "version": "2.0.0",
1626+ "version": "4.1.0",
366− "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
1627+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
367− "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
1628+ "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==",
368 "dev": true
1629 "dev": true
369 },
1630 },
370− "har-validator": {
1631+ "http-proxy-agent": {
371− "version": "5.1.5",
1632+ "version": "4.0.1",
372− "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
1633+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
373− "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
1634+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
374− "dev": true,
375− "requires": {
376− "ajv": "^6.12.3",
377− "har-schema": "^2.0.0"
378− }
379− },
380− "http-signature": {
381− "version": "1.2.0",
382− "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
383− "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
384 "dev": true,
1635 "dev": true,
385 "requires": {
1636 "requires": {
386− "assert-plus": "^1.0.0",
1637+ "@tootallnate/once": "1",
387− "jsprim": "^1.2.2",
1638+ "agent-base": "6",
388− "sshpk": "^1.7.0"
1639+ "debug": "4"
389 }
1640 }
390 },
1641 },
391 "https-proxy-agent": {
1642 "https-proxy-agent": {
@@ -398,12 +1649,49 @@
398 "debug": "4"
1649 "debug": "4"
399 }
1650 }
400 },
1651 },
1652+ "humanize-ms": {
1653+ "version": "1.2.1",
1654+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
1655+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
1656+ "dev": true,
1657+ "requires": {
1658+ "ms": "^2.0.0"
1659+ }
1660+ },
1661+ "iconv-lite": {
1662+ "version": "0.6.3",
1663+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
1664+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
1665+ "dev": true,
1666+ "optional": true,
1667+ "requires": {
1668+ "safer-buffer": ">= 2.1.2 < 3.0.0"
1669+ }
1670+ },
401 "ieee754": {
1671 "ieee754": {
402 "version": "1.2.1",
1672 "version": "1.2.1",
403 "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
1673 "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
404 "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
1674 "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
405 "dev": true
1675 "dev": true
406 },
1676 },
1677+ "imurmurhash": {
1678+ "version": "0.1.4",
1679+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1680+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
1681+ "dev": true
1682+ },
1683+ "indent-string": {
1684+ "version": "4.0.0",
1685+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
1686+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
1687+ "dev": true
1688+ },
1689+ "infer-owner": {
1690+ "version": "1.0.4",
1691+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
1692+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
1693+ "dev": true
1694+ },
407 "inflight": {
1695 "inflight": {
408 "version": "1.0.6",
1696 "version": "1.0.6",
409 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1697 "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -420,54 +1708,18 @@
420 "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1708 "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
421 "dev": true
1709 "dev": true
422 },
1710 },
423− "is-typedarray": {
1711+ "ip": {
424− "version": "1.0.0",
425− "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
426− "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
427− "dev": true
428− },
429− "isstream": {
430− "version": "0.1.2",
1712+ "version": "2.0.0",
431− "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
432− "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
433− "dev": true
434− },
435− "jsbn": {
436− "version": "0.1.1",
437− "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
1713+ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
438− "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
1714+ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
439− "dev": true
440− },
441− "json-schema": {
442− "version": "0.2.3",
443− "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
444− "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
445− "dev": true
446− },
447− "json-schema-traverse": {
448− "version": "0.4.1",
449− "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
450− "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
451 "dev": true
1715 "dev": true
452 },
1716 },
453− "json-stringify-safe": {
1717+ "is-lambda": {
454− "version": "5.0.1",
1718+ "version": "1.0.1",
455− "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1719+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
456− "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
1720+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
457 "dev": true
1721 "dev": true
458 },
1722 },
459− "jsprim": {
460− "version": "1.4.1",
461− "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
462− "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
463− "dev": true,
464− "requires": {
465− "assert-plus": "1.0.0",
466− "extsprintf": "1.3.0",
467− "json-schema": "0.2.3",
468− "verror": "1.10.0"
469− }
470− },
471 "linkify-it": {
1723 "linkify-it": {
472 "version": "3.0.3",
1724 "version": "3.0.3",
473 "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
1725 "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz",
@@ -477,6 +1729,39 @@
477 "uc.micro": "^1.0.1"
1729 "uc.micro": "^1.0.1"
478 }
1730 }
479 },
1731 },
1732+ "lru-cache": {
1733+ "version": "6.0.0",
1734+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
1735+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
1736+ "dev": true,
1737+ "requires": {
1738+ "yallist": "^4.0.0"
1739+ }
1740+ },
1741+ "make-fetch-happen": {
1742+ "version": "9.1.0",
1743+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
1744+ "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
1745+ "dev": true,
1746+ "requires": {
1747+ "agentkeepalive": "^4.1.3",
1748+ "cacache": "^15.2.0",
1749+ "http-cache-semantics": "^4.1.0",
1750+ "http-proxy-agent": "^4.0.1",
1751+ "https-proxy-agent": "^5.0.0",
1752+ "is-lambda": "^1.0.1",
1753+ "lru-cache": "^6.0.0",
1754+ "minipass": "^3.1.3",
1755+ "minipass-collect": "^1.0.2",
1756+ "minipass-fetch": "^1.3.2",
1757+ "minipass-flush": "^1.0.5",
1758+ "minipass-pipeline": "^1.2.4",
1759+ "negotiator": "^0.6.2",
1760+ "promise-retry": "^2.0.1",
1761+ "socks-proxy-agent": "^6.0.0",
1762+ "ssri": "^8.0.0"
1763+ }
1764+ },
480 "markdown-it": {
1765 "markdown-it": {
481 "version": "12.3.2",
1766 "version": "12.3.2",
482 "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
1767 "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz",
@@ -496,21 +1781,6 @@
496 "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
1781 "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
497 "dev": true
1782 "dev": true
498 },
1783 },
499− "mime-db": {
500− "version": "1.47.0",
501− "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
502− "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==",
503− "dev": true
504− },
505− "mime-types": {
506− "version": "2.1.30",
507− "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz",
508− "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==",
509− "dev": true,
510− "requires": {
511− "mime-db": "1.47.0"
512− }
513− },
514 "minimatch": {
1784 "minimatch": {
515 "version": "3.0.4",
1785 "version": "3.0.4",
516 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1786 "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@@ -521,41 +1791,78 @@
521 }
1791 }
522 },
1792 },
523 "minipass": {
1793 "minipass": {
524− "version": "2.9.0",
1794+ "version": "3.3.4",
525− "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
1795+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.4.tgz",
526− "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
1796+ "integrity": "sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw==",
527 "dev": true,
1797 "dev": true,
528 "requires": {
1798 "requires": {
529− "safe-buffer": "^5.1.2",
530− "yallist": "^3.0.0"
1799+ "yallist": "^4.0.0"
531 }
1800 }
532 },
1801 },
533− "minizlib": {
1802+ "minipass-collect": {
534− "version": "1.3.3",
1803+ "version": "1.0.2",
535− "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
1804+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
536− "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
1805+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
537 "dev": true,
1806 "dev": true,
538 "requires": {
1807 "requires": {
539− "minipass": "^2.9.0"
1808+ "minipass": "^3.0.0"
540 }
1809 }
541 },
1810 },
542− "mkdirp": {
1811+ "minipass-fetch": {
543− "version": "0.5.5",
1812+ "version": "1.4.1",
544− "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
1813+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
545− "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
1814+ "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
546 "dev": true,
1815 "dev": true,
547 "requires": {
1816 "requires": {
548− "minimist": "^1.2.5"
1817+ "encoding": "^0.1.12",
1818+ "minipass": "^3.1.0",
1819+ "minipass-sized": "^1.0.3",
1820+ "minizlib": "^2.0.0"
549− },
1821+ }
550− "dependencies": {
1822+ },
551− "minimist": {
1823+ "minipass-flush": {
1824+ "version": "1.0.5",
1825+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
1826+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
1827+ "dev": true,
1828+ "requires": {
1829+ "minipass": "^3.0.0"
1830+ }
1831+ },
1832+ "minipass-pipeline": {
552− "version": "1.2.5",
1833+ "version": "1.2.4",
553− "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
1834+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
554− "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
1835+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
555− "dev": true
1836+ "dev": true,
1837+ "requires": {
1838+ "minipass": "^3.0.0"
556− }
1839+ }
1840+ },
1841+ "minipass-sized": {
1842+ "version": "1.0.3",
1843+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
1844+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
1845+ "dev": true,
1846+ "requires": {
1847+ "minipass": "^3.0.0"
1848+ }
1849+ },
1850+ "minizlib": {
1851+ "version": "2.1.2",
1852+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
1853+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
1854+ "dev": true,
1855+ "requires": {
1856+ "minipass": "^3.0.0",
1857+ "yallist": "^4.0.0"
557 }
1858 }
558 },
1859 },
1860+ "mkdirp": {
1861+ "version": "1.0.4",
1862+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
1863+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
1864+ "dev": true
1865+ },
559 "mkdirp-classic": {
1866 "mkdirp-classic": {
560 "version": "0.5.3",
1867 "version": "0.5.3",
561 "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
1868 "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
@@ -568,18 +1875,18 @@
568 "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1875 "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
569 "dev": true
1876 "dev": true
570 },
1877 },
1878+ "negotiator": {
1879+ "version": "0.6.3",
1880+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1881+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
1882+ "dev": true
1883+ },
571 "node-fetch": {
1884 "node-fetch": {
572 "version": "2.6.1",
1885 "version": "2.6.1",
573 "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
1886 "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
574 "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
1887 "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==",
575 "dev": true
1888 "dev": true
576 },
1889 },
577− "oauth-sign": {
578− "version": "0.9.0",
579− "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
580− "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==",
581− "dev": true
582− },
583 "once": {
1890 "once": {
584 "version": "1.4.0",
1891 "version": "1.4.0",
585 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1892 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -598,6 +1905,15 @@
598 "p-try": "^2.0.0"
1905 "p-try": "^2.0.0"
599 }
1906 }
600 },
1907 },
1908+ "p-map": {
1909+ "version": "4.0.0",
1910+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
1911+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
1912+ "dev": true,
1913+ "requires": {
1914+ "aggregate-error": "^3.0.0"
1915+ }
1916+ },
601 "p-try": {
1917 "p-try": {
602 "version": "2.2.0",
1918 "version": "2.2.0",
603 "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
1919 "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
@@ -616,12 +1932,6 @@
616 "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
1932 "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
617 "dev": true
1933 "dev": true
618 },
1934 },
619− "performance-now": {
620− "version": "2.1.0",
621− "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
622− "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
623− "dev": true
624− },
625 "pkg-dir": {
1935 "pkg-dir": {
626 "version": "4.2.0",
1936 "version": "4.2.0",
627 "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
1937 "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
@@ -673,18 +1983,28 @@
673 "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
1983 "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
674 "dev": true
1984 "dev": true
675 },
1985 },
1986+ "promise-inflight": {
1987+ "version": "1.0.1",
1988+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
1989+ "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
1990+ "dev": true
1991+ },
1992+ "promise-retry": {
1993+ "version": "2.0.1",
1994+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
1995+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
1996+ "dev": true,
1997+ "requires": {
1998+ "err-code": "^2.0.2",
1999+ "retry": "^0.12.0"
2000+ }
2001+ },
676 "proxy-from-env": {
2002 "proxy-from-env": {
677 "version": "1.1.0",
2003 "version": "1.1.0",
678 "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
2004 "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
679 "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
2005 "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
680 "dev": true
2006 "dev": true
681 },
2007 },
682− "psl": {
683− "version": "1.8.0",
684− "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz",
685− "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==",
686− "dev": true
687− },
688 "pump": {
2008 "pump": {
689 "version": "3.0.0",
2009 "version": "3.0.0",
690 "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
2010 "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
@@ -698,8 +2018,7 @@
698 "punycode": {
2018 "punycode": {
699 "version": "2.1.1",
2019 "version": "2.1.1",
700 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
2020 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
701− "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
2021+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="
702− "dev": true
703 },
2022 },
704 "puppeteer": {
2023 "puppeteer": {
705 "version": "8.0.0",
2024 "version": "8.0.0",
@@ -721,55 +2040,28 @@
721 "ws": "^7.2.3"
2040 "ws": "^7.2.3"
722 },
2041 },
723 "dependencies": {
2042 "dependencies": {
724− "rimraf": {
725− "version": "3.0.2",
726− "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
727− "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
728− "dev": true,
729− "requires": {
730− "glob": "^7.1.3"
731− }
732− },
733 "ws": {
2043 "ws": {
734 "version": "7.4.4",
2044 "version": "7.4.4",
735 "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
2045 "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.4.tgz",
736 "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
2046 "integrity": "sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw==",
737− "dev": true
2047+ "dev": true,
2048+ "requires": {}
738 }
2049 }
739 }
2050 }
740 },
2051 },
741− "qs": {
2052+ "retry": {
742− "version": "6.5.2",
2053+ "version": "0.12.0",
743− "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
2054+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
744− "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
2055+ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
745− "dev": true
2056+ "dev": true
746− },
2057+ },
747− "request": {
2058+ "rimraf": {
748− "version": "2.88.2",
2059+ "version": "3.0.2",
749− "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
2060+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
750− "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
2061+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
751− "dev": true,
2062+ "dev": true,
752− "requires": {
2063+ "requires": {
753− "aws-sign2": "~0.7.0",
2064+ "glob": "^7.1.3"
754− "aws4": "^1.8.0",
755− "caseless": "~0.12.0",
756− "combined-stream": "~1.0.6",
757− "extend": "~3.0.2",
758− "forever-agent": "~0.6.1",
759− "form-data": "~2.3.2",
760− "har-validator": "~5.1.3",
761− "http-signature": "~1.2.0",
762− "is-typedarray": "~1.0.0",
763− "isstream": "~0.1.2",
764− "json-stringify-safe": "~5.0.1",
765− "mime-types": "~2.1.19",
766− "oauth-sign": "~0.9.0",
767− "performance-now": "^2.1.0",
768− "qs": "~6.5.2",
769− "safe-buffer": "^5.1.2",
770− "tough-cookie": "~2.5.0",
771− "tunnel-agent": "^0.6.0",
772− "uuid": "^3.3.2"
773 }
2065 }
774 },
2066 },
775 "safe-buffer": {
2067 "safe-buffer": {
@@ -782,33 +2074,62 @@
782 "version": "2.1.2",
2074 "version": "2.1.2",
783 "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
2075 "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
784 "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
2076 "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
2077+ "dev": true,
2078+ "optional": true
2079+ },
2080+ "semver": {
2081+ "version": "7.3.7",
2082+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
2083+ "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
2084+ "dev": true,
2085+ "requires": {
2086+ "lru-cache": "^6.0.0"
2087+ }
2088+ },
2089+ "smart-buffer": {
2090+ "version": "4.2.0",
2091+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
2092+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
785 "dev": true
2093 "dev": true
786 },
2094 },
2095+ "socks": {
2096+ "version": "2.7.0",
2097+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
2098+ "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==",
2099+ "dev": true,
2100+ "requires": {
2101+ "ip": "^2.0.0",
2102+ "smart-buffer": "^4.2.0"
2103+ }
2104+ },
2105+ "socks-proxy-agent": {
2106+ "version": "6.2.1",
2107+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz",
2108+ "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==",
2109+ "dev": true,
2110+ "requires": {
2111+ "agent-base": "^6.0.2",
2112+ "debug": "^4.3.3",
2113+ "socks": "^2.6.2"
2114+ }
2115+ },
787 "spago": {
2116 "spago": {
788− "version": "0.20.0",
2117+ "version": "0.20.9",
789− "resolved": "https://registry.npmjs.org/spago/-/spago-0.20.0.tgz",
2118+ "resolved": "https://registry.npmjs.org/spago/-/spago-0.20.9.tgz",
790− "integrity": "sha512-B0cvb1g5rjV80ovMT5MuNvUhfcXz0caEa3OPdydvYlvh6/WQZYa0S74or4PUPbRsiwhm9C1FCtfzzEk+yTKaHA==",
2119+ "integrity": "sha512-r5TUxnYn9HawlQyMswlhIk24BGFSN2KGbqgZFZrn47GjTpMscU14xkt9CqTWgoSQYsoZieG+3dUtOxUQ7GYD7w==",
791 "dev": true,
2120 "dev": true,
792 "requires": {
2121 "requires": {
793− "request": "^2.88.0",
2122+ "make-fetch-happen": "^9.1.0",
794− "tar": "^4.4.8"
2123+ "tar": "^6.1.11"
795 }
2124 }
796 },
2125 },
797− "sshpk": {
2126+ "ssri": {
798− "version": "1.16.1",
2127+ "version": "8.0.1",
799− "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
2128+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
800− "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
2129+ "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
801 "dev": true,
2130 "dev": true,
802 "requires": {
2131 "requires": {
803− "asn1": "~0.2.3",
2132+ "minipass": "^3.1.1"
804− "assert-plus": "^1.0.0",
805− "bcrypt-pbkdf": "^1.0.0",
806− "dashdash": "^1.12.0",
807− "ecc-jsbn": "~0.1.1",
808− "getpass": "^0.1.1",
809− "jsbn": "~0.1.0",
810− "safer-buffer": "^2.0.2",
811− "tweetnacl": "~0.14.0"
812 }
2133 }
813 },
2134 },
814 "string_decoder": {
2135 "string_decoder": {
@@ -821,18 +2142,25 @@
821 }
2142 }
822 },
2143 },
823 "tar": {
2144 "tar": {
824− "version": "4.4.19",
2145+ "version": "6.1.11",
825− "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.19.tgz",
2146+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz",
826− "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==",
2147+ "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==",
827 "dev": true,
2148 "dev": true,
828 "requires": {
2149 "requires": {
829− "chownr": "^1.1.4",
2150+ "chownr": "^2.0.0",
830− "fs-minipass": "^1.2.7",
2151+ "fs-minipass": "^2.0.0",
831− "minipass": "^2.9.0",
2152+ "minipass": "^3.0.0",
832− "minizlib": "^1.3.3",
2153+ "minizlib": "^2.1.1",
833− "mkdirp": "^0.5.5",
2154+ "mkdirp": "^1.0.3",
834− "safe-buffer": "^5.2.1",
835− "yallist": "^3.1.1"
2155+ "yallist": "^4.0.0"
2156+ },
2157+ "dependencies": {
2158+ "chownr": {
2159+ "version": "2.0.0",
2160+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
2161+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
2162+ "dev": true
2163+ }
836 }
2164 }
837 },
2165 },
838 "tar-fs": {
2166 "tar-fs": {
@@ -879,31 +2207,6 @@
879 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
2207 "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
880 "dev": true
2208 "dev": true
881 },
2209 },
882− "tough-cookie": {
883− "version": "2.5.0",
884− "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
885− "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
886− "dev": true,
887− "requires": {
888− "psl": "^1.1.28",
889− "punycode": "^2.1.1"
890− }
891− },
892− "tunnel-agent": {
893− "version": "0.6.0",
894− "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
895− "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
896− "dev": true,
897− "requires": {
898− "safe-buffer": "^5.0.1"
899− }
900− },
901− "tweetnacl": {
902− "version": "0.14.5",
903− "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
904− "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
905− "dev": true
906− },
907 "uc.micro": {
2210 "uc.micro": {
908 "version": "1.0.6",
2211 "version": "1.0.6",
909 "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
2212 "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
@@ -932,13 +2235,22 @@
932 }
2235 }
933 }
2236 }
934 },
2237 },
935− "uri-js": {
2238+ "unique-filename": {
936− "version": "4.4.1",
2239+ "version": "1.1.1",
937− "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
2240+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
938− "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
2241+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
2242+ "dev": true,
2243+ "requires": {
2244+ "unique-slug": "^2.0.0"
2245+ }
2246+ },
2247+ "unique-slug": {
2248+ "version": "2.0.2",
2249+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
2250+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
939 "dev": true,
2251 "dev": true,
940 "requires": {
2252 "requires": {
941− "punycode": "^2.1.0"
2253+ "imurmurhash": "^0.1.4"
942 }
2254 }
943 },
2255 },
944 "util-deprecate": {
2256 "util-deprecate": {
@@ -947,23 +2259,6 @@
947 "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
2259 "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
948 "dev": true
2260 "dev": true
949 },
2261 },
950− "uuid": {
951− "version": "3.4.0",
952− "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
953− "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
954− "dev": true
955− },
956− "verror": {
957− "version": "1.10.0",
958− "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
959− "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
960− "dev": true,
961− "requires": {
962− "assert-plus": "^1.0.0",
963− "core-util-is": "1.0.2",
964− "extsprintf": "^1.2.0"
965− }
966− },
967 "wrappy": {
2262 "wrappy": {
968 "version": "1.0.2",
2263 "version": "1.0.2",
969 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2264 "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
@@ -971,9 +2266,9 @@
971 "dev": true
2266 "dev": true
972 },
2267 },
973 "yallist": {
2268 "yallist": {
974− "version": "3.1.1",
2269+ "version": "4.0.0",
975− "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
2270+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
976− "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
2271+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
977 "dev": true
2272 "dev": true
978 },
2273 },
979 "yauzl": {
2274 "yauzl": {
package.json+14−12
@@ -1,37 +1,37 @@
1{
1{
2 "name": "purescript-docs-search",
2 "name": "purescript-docs-search",
3 "type": "module",
3 "type": "module",
4− "version": "0.0.11",
4+ "version": "0.0.12",
5 "description": "Search frontend for the documentation generated by the PureScript compiler.",
5 "description": "Search frontend for the documentation generated by the PureScript compiler.",
6 "directories": {
6 "directories": {
7 "test": "test"
7 "test": "test"
8 },
8 },
9 "bin": {
9 "bin": {
10− "purescript-docs-search": "dist/purescript-docs-search"
10+ "purescript-docs-search": "dist/purescript-docs-search.cjs"
11 },
11 },
12 "files": [
12 "files": [
13− "dist/purescript-docs-search",
13+ "dist/purescript-docs-search.cjs",
14 "dist/docs-search-app.js",
14 "dist/docs-search-app.js",
15 "README.md",
15 "README.md",
16 "CHANGELOG.md"
16 "CHANGELOG.md"
17 ],
17 ],
18 "scripts": {
18 "scripts": {
19− "test": "spago docs --no-search && ./dist/purescript-docs-search build-index && spago test && npm run check-version",
19+ "test": "spago docs --no-search && ./dist/purescript-docs-search.cjs build-index && spago test && npm run check-version",
20 "bundle-app": "spago bundle-app --no-build --no-install -m Docs.Search.App --to dist/docs-search-app.js",
20 "bundle-app": "spago bundle-app --no-build --no-install -m Docs.Search.App --to dist/docs-search-app.js",
21 "esbuild-app": "esbuild dist/docs-search-app.js --target=es2016 --bundle --minify --outfile=dist/docs-search-app.min.js && mv dist/docs-search-app.min.js dist/docs-search-app.js",
21 "esbuild-app": "esbuild dist/docs-search-app.js --target=es2016 --bundle --minify --outfile=dist/docs-search-app.min.js && mv dist/docs-search-app.min.js dist/docs-search-app.js",
22 "build-app": "npm run bundle-app && npm run esbuild-app",
22 "build-app": "npm run bundle-app && npm run esbuild-app",
23 "bundle-main": "spago bundle-app --no-build --no-install --platform node -m Docs.Search.Main --to dist/main.js",
23 "bundle-main": "spago bundle-app --no-build --no-install --platform node -m Docs.Search.Main --to dist/main.js",
24 "esbuild-main": "esbuild dist/main.js --platform=node --bundle --minify --outfile=dist/main.min.js && mv dist/main.min.js dist/main.js",
24 "esbuild-main": "esbuild dist/main.js --platform=node --bundle --minify --outfile=dist/main.min.js && mv dist/main.min.js dist/main.js",
25− "add-shebang": "echo \"#!/usr/bin/env node\" > dist/purescript-docs-search && cat dist/main.js >> dist/purescript-docs-search",
25+ "add-shebang": "echo \"#!/usr/bin/env node\" > dist/purescript-docs-search.cjs && cat dist/main.js >> dist/purescript-docs-search.cjs",
26− "chmod-main": "chmod +x dist/purescript-docs-search",
26+ "chmod-main": "chmod +x dist/purescript-docs-search.cjs",
27 "build-main": "npm run bundle-main && npm run esbuild-main && npm run add-shebang && rm dist/main.js && npm run chmod-main",
27 "build-main": "npm run bundle-main && npm run esbuild-main && npm run add-shebang && rm dist/main.js && npm run chmod-main",
28 "build": "spago build && npm run build-app && npm run build-main",
28 "build": "spago build && npm run build-app && npm run build-main",
29 "clean": "rm -rf dist",
29 "clean": "rm -rf dist",
30− "check-version": "[ \"$(./dist/purescript-docs-search version)\" = \"$npm_package_version\" ]"
30+ "check-version": "[ \"$(./dist/purescript-docs-search.cjs version)\" = \"$npm_package_version\" ]"
31 },
31 },
32 "repository": {
32 "repository": {
33 "type": "git",
33 "type": "git",
34− "url": "git+https://github.com/spacchetti/purescript-docs-search.git"
34+ "url": "git+https://github.com/purescript/purescript-docs-search.git"
35 },
35 },
36 "keywords": [
36 "keywords": [
37 "purescript"
37 "purescript"
@@ -39,15 +39,17 @@
39 "author": "Kalnitsky Vladimir <klntsky@gmail.com>",
39 "author": "Kalnitsky Vladimir <klntsky@gmail.com>",
40 "license": "BSD-3-Clause",
40 "license": "BSD-3-Clause",
41 "bugs": {
41 "bugs": {
42− "url": "https://github.com/spacchetti/purescript-docs-search/issues"
42+ "url": "https://github.com/purescript/purescript-docs-search/issues"
43+ },
44+ "homepage": "https://github.com/purescript/purescript-docs-search#readme",
45+ "dependencies": {
46+ "punycode": "^2.1.1"
43 },
47 },
44− "homepage": "https://github.com/spacchetti/purescript-docs-search#readme",
45− "dependencies": {},
46 "devDependencies": {
48 "devDependencies": {
47 "esbuild": "^0.11.10",
49 "esbuild": "^0.11.10",
48 "glob": "^7.1.6",
50 "glob": "^7.1.6",
49 "markdown-it": "^12.0.4",
51 "markdown-it": "^12.0.4",
50 "puppeteer": "^8.0.0",
52 "puppeteer": "^8.0.0",
51− "spago": "^0.20.0"
53+ "spago": "^0.20.9"
52 }
54 }
53}
55}
spago.dhall+1
@@ -33,6 +33,7 @@
33 , "node-readline"
33 , "node-readline"
34 , "optparse"
34 , "optparse"
35 , "ordered-collections"
35 , "ordered-collections"
36+ , "parallel"
36 , "partial"
37 , "partial"
37 , "prelude"
38 , "prelude"
38 , "profunctor"
39 , "profunctor"
src/Docs/Search/Config.purs+1−1
@@ -7,7 +7,7 @@ import Prelude
7import Data.Newtype (wrap)
7import Data.Newtype (wrap)
8
8
9version :: String
9version :: String
10−version = "0.0.11"
10+version = "0.0.12"
11
11
12mkShapeScriptPath :: String -> String
12mkShapeScriptPath :: String -> String
13mkShapeScriptPath shape = "./index/types/" <> shape <> ".js"
13mkShapeScriptPath shape = "./index/types/" <> shape <> ".js"
src/Docs/Search/Declarations.purs+28−3
@@ -11,7 +11,7 @@ import Prim hiding (Type)
11import Control.Alt ((<|>))
11import Control.Alt ((<|>))
12import Data.Array ((!!))
12import Data.Array ((!!))
13import Data.Array as Array
13import Data.Array as Array
14−import Data.Foldable (foldr)
14+import Data.Foldable (foldl, foldr)
15import Data.List (List, (:))
15import Data.List (List, (:))
16import Data.List as List
16import Data.List as List
17import Data.Maybe (Maybe(..), fromMaybe)
17import Data.Maybe (Maybe(..), fromMaybe)
@@ -244,8 +244,33 @@ mkChildInfo
244 (SearchResult { info: parentInfo, moduleName, name: resultName })
244 (SearchResult { info: parentInfo, moduleName, name: resultName })
245 (ChildDeclaration { info } )
245 (ChildDeclaration { info } )
246
246
247− | ChildDeclDataConstructor <- info.declType =
247+ | ChildDeclDataConstructor <- info.declType
248+ , DataResult { dataDeclType, typeArguments } <- parentInfo =
249+ let
250+ parentTypeCtor :: Type
251+ parentTypeCtor = TypeConstructor
252+ $ QualifiedName { moduleNameParts:
253+ String.split (wrap ".") (unwrap moduleName)
254+ , name: resultName }
255+
256+ parentTypeArgs :: Array Type
257+ parentTypeArgs = typeArguments <#> unwrap >>> \{ name } -> TypeVar name
258+
259+ parentType :: Type
260+ parentType = foldl TypeApp parentTypeCtor parentTypeArgs
261+
262+ typeArrow :: Type -> Type
263+ typeArrow =
264+ TypeApp (TypeConstructor (QualifiedName { moduleNameParts: [ "Prim" ]
265+ , name: Identifier "Function" }))
266+
267+ makeType :: Array Type -> Type
268+ makeType = foldr (\a b -> TypeApp (typeArrow a) b) parentType
269+ in
248− info.arguments <#> \arguments -> DataConstructorResult { arguments }
270+ info.arguments <#> \arguments ->
271+ DataConstructorResult { dataDeclType
272+ , "type": makeType arguments
273+ }
249
274
250 | ChildDeclTypeClassMember <- info.declType
275 | ChildDeclTypeClassMember <- info.declType
251 , TypeClassResult { arguments } <- parentInfo =
276 , TypeClassResult { arguments } <- parentInfo =
src/Docs/Search/IndexBuilder.purs+39−10
@@ -5,13 +5,14 @@ import Docs.Search.Config as Config
5import Docs.Search.Declarations (Declarations(..), mkDeclarations)
5import Docs.Search.Declarations (Declarations(..), mkDeclarations)
6import Docs.Search.DocsJson (DocsJson)
6import Docs.Search.DocsJson (DocsJson)
7import Docs.Search.Extra ((>#>))
7import Docs.Search.Extra ((>#>))
8+import Docs.Search.Meta (Meta)
8import Docs.Search.ModuleIndex (PackedModuleIndex, mkPackedModuleIndex)
9import Docs.Search.ModuleIndex (PackedModuleIndex, mkPackedModuleIndex)
10+import Docs.Search.ModuleParser (parseModuleName)
9import Docs.Search.PackageIndex (PackageInfo, mkPackageInfo)
11import Docs.Search.PackageIndex (PackageInfo, mkPackageInfo)
10import Docs.Search.Score (mkScores)
12import Docs.Search.Score (mkScores)
11import Docs.Search.SearchResult (SearchResult)
13import Docs.Search.SearchResult (SearchResult)
12import Docs.Search.TypeIndex (TypeIndex, mkTypeIndex)
14import Docs.Search.TypeIndex (TypeIndex, mkTypeIndex)
13−import Docs.Search.Types (PackageName, PartId)
15+import Docs.Search.Types (ModuleName, PackageName, PartId)
14−import Docs.Search.Meta (Meta)
15
16
16import Prelude
17import Prelude
17
18
@@ -20,6 +21,7 @@ import Data.Argonaut.Decode (decodeJson)
20import Data.Argonaut.Decode.Error (printJsonDecodeError)
21import Data.Argonaut.Decode.Error (printJsonDecodeError)
21import Data.Argonaut.Encode (encodeJson)
22import Data.Argonaut.Encode (encodeJson)
22import Data.Argonaut.Parser (jsonParser)
23import Data.Argonaut.Parser (jsonParser)
24+import Data.Array (concat)
23import Data.Array as Array
25import Data.Array as Array
24import Data.Either (Either(..), either)
26import Data.Either (Either(..), either)
25import Data.Foldable (sum)
27import Data.Foldable (sum)
@@ -38,14 +40,15 @@ import Data.String.Common (replace) as String
38import Data.String.Pattern (Pattern(..), Replacement(..))
40import Data.String.Pattern (Pattern(..), Replacement(..))
39import Data.Traversable (for, for_)
41import Data.Traversable (for, for_)
40import Data.Tuple (Tuple(..), fst)
42import Data.Tuple (Tuple(..), fst)
43+import Data.Tuple.Nested ((/\))
41import Effect (Effect)
44import Effect (Effect)
42import Effect.Aff (Aff, launchAff_, parallel, sequential)
45import Effect.Aff (Aff, launchAff_, parallel, sequential)
43import Effect.Class (liftEffect)
46import Effect.Class (liftEffect)
44import Effect.Console (log)
47import Effect.Console (log)
45import Node.Encoding (Encoding(UTF8))
48import Node.Encoding (Encoding(UTF8))
46import Node.FS.Aff (mkdir, readFile, readTextFile, readdir, stat, writeFile, writeTextFile)
49import Node.FS.Aff (mkdir, readFile, readTextFile, readdir, stat, writeFile, writeTextFile)
47−import Node.FS.Sync (exists)
48import Node.FS.Stats (isDirectory, isFile)
50import Node.FS.Stats (isDirectory, isFile)
51+import Node.FS.Sync (exists)
49import Node.Process as Process
52import Node.Process as Process
50import Web.Bower.PackageMeta (PackageMeta(..))
53import Web.Bower.PackageMeta (PackageMeta(..))
51
54
@@ -56,6 +59,7 @@ type Config =
56 , generatedDocs :: String
59 , generatedDocs :: String
57 , noPatch :: Boolean
60 , noPatch :: Boolean
58 , packageName :: PackageName
61 , packageName :: PackageName
62+ , sourceFiles :: Array String
59 }
63 }
60
64
61
65
@@ -71,8 +75,11 @@ run' cfg = do
71 liftEffect do
75 liftEffect do
72 log "Building the search index..."
76 log "Building the search index..."
73
77
78+ docsJsons /\ moduleNames /\ packageMetas <- sequential $
79+ (\d h m -> d /\ h /\ m)
74− docsJsons <- decodeDocsJsons cfg
80+ <$> parallel (decodeDocsJsons cfg)
81+ <*> parallel (parseModuleHeaders cfg.sourceFiles)
75− packageMetas <- decodeBowerJsons cfg
82+ <*> parallel (decodeBowerJsons cfg)
76
83
77 let countOfPackages = Array.length packageMetas
84 let countOfPackages = Array.length packageMetas
78 countOfModules = Array.length docsJsons
85 countOfModules = Array.length docsJsons
@@ -89,14 +96,14 @@ run' cfg = do
89 index = mkDeclarations scores docsJsons
96 index = mkDeclarations scores docsJsons
90 typeIndex = mkTypeIndex scores docsJsons
97 typeIndex = mkTypeIndex scores docsJsons
91 packageInfo = mkPackageInfo scores packageMetas
98 packageInfo = mkPackageInfo scores packageMetas
92− moduleIndex = mkPackedModuleIndex index
99+ moduleIndex = mkPackedModuleIndex index moduleNames
93 meta = { localPackageName: cfg.packageName }
100 meta = { localPackageName: cfg.packageName }
94
101
95 createDirectories cfg
102 createDirectories cfg
96
103
97 void $ sequential do
104 void $ sequential do
98 ignore <$> parallel (writeIndex cfg index)
105 ignore <$> parallel (writeIndex cfg index)
99− <*> parallel (writeTypeIndex cfg typeIndex)
106+ <*> parallel (writeTypeIndex typeIndex)
100 <*> parallel (writePackageInfo packageInfo)
107 <*> parallel (writePackageInfo packageInfo)
101 <*> parallel (writeModuleIndex moduleIndex)
108 <*> parallel (writeModuleIndex moduleIndex)
102 <*> parallel (writeMeta meta)
109 <*> parallel (writeMeta meta)
@@ -176,6 +183,28 @@ decodeDocsJsons cfg@{ docsFiles } = do
176
183
177 pure docsJsons
184 pure docsJsons
178
185
186+-- | This function accepts an array of globs pointing to project sources
187+-- | and returns a list of module names extracted from these files.
188+-- | Unfortunately, we can't get all module names from `docs.json`s, because
189+-- | reexport-only modules do not have a single declaration in them, so we can't
190+-- | count them normally in `mkPackedModuleIndex.extract`, where we only look at
191+-- | exported declarations.
192+parseModuleHeaders :: Array String -> Aff (Array ModuleName)
193+parseModuleHeaders globs = do
194+ files <- getPathsByGlobs globs
195+
196+ -- we are not checking if the globs match at least one file, because
197+ -- we want to support scenarios where there is no "current project"
198+
199+ concat <$> for files \filePath -> do
200+ fileContents <- readTextFile UTF8 filePath
201+ case parseModuleName fileContents of
202+ Nothing -> do
203+ liftEffect $ log $
204+ "Module header decoding failed for " <> filePath <>
205+ ", unable to extract module name"
206+ pure []
207+ Just res -> pure [res]
179
208
180decodeBowerJsons
209decodeBowerJsons
181 :: forall rest
210 :: forall rest
@@ -210,8 +239,8 @@ decodeBowerJsons { bowerFiles } = do
210
239
211
240
212-- | Write type index parts to files.
241-- | Write type index parts to files.
213−writeTypeIndex :: Config -> TypeIndex -> Aff Unit
242+writeTypeIndex :: TypeIndex -> Aff Unit
214−writeTypeIndex { generatedDocs } typeIndex =
243+writeTypeIndex typeIndex =
215 for_ entries \(Tuple typeShape results) -> do
244 for_ entries \(Tuple typeShape results) -> do
216 writeTextFile UTF8 (unwrap Config.typeIndexDirectory <> "/" <> typeShape <> ".js")
245 writeTextFile UTF8 (unwrap Config.typeIndexDirectory <> "/" <> typeShape <> ".js")
217 (mkHeader typeShape <> stringify (encodeJson results))
246 (mkHeader typeShape <> stringify (encodeJson results))
@@ -265,7 +294,7 @@ getIndex (Declarations trie) =
265 Trie.query prefix trie
294 Trie.query prefix trie
266 else
295 else
267 -- Entries with path lengths > 1 have been added already.
296 -- Entries with path lengths > 1 have been added already.
268− List.filter (\(Tuple path value) -> List.length path == 1) (
297+ List.filter (\(Tuple path _value) -> List.length path == 1) (
269 Trie.query prefix trie
298 Trie.query prefix trie
270 )
299 )
271 in
300 in
src/Docs/Search/Interactive.purs+38−5
@@ -6,6 +6,7 @@ import Docs.Search.DocsJson (DataDeclType(..))
6import Docs.Search.Engine (mkEngineState, packageInfoToString, Result(..))
6import Docs.Search.Engine (mkEngineState, packageInfoToString, Result(..))
7import Docs.Search.Engine as Engine
7import Docs.Search.Engine as Engine
8import Docs.Search.Extra (stringToList, (>#>))
8import Docs.Search.Extra (stringToList, (>#>))
9+import Docs.Search.IndexBuilder (parseModuleHeaders)
9import Docs.Search.IndexBuilder as IndexBuilder
10import Docs.Search.IndexBuilder as IndexBuilder
10import Docs.Search.ModuleIndex (ModuleResult, mkPackedModuleIndex, unpackModuleIndex)
11import Docs.Search.ModuleIndex (ModuleResult, mkPackedModuleIndex, unpackModuleIndex)
11import Docs.Search.NodeEngine (nodeEngine)
12import Docs.Search.NodeEngine (nodeEngine)
@@ -19,7 +20,8 @@ import Docs.Search.TypePrinter (keyword, showConstraint, showFunDeps, showType,
19import Docs.Search.Types (ModuleName, PackageName, PackageInfo, Identifier)
20import Docs.Search.Types (ModuleName, PackageName, PackageInfo, Identifier)
20
21
21import Prelude
22import Prelude
22−import Prim hiding (Type, Constraint)
23+
24+import Control.Parallel (parallel, sequential)
23import Data.Array as Array
25import Data.Array as Array
24import Data.Identity (Identity(..))
26import Data.Identity (Identity(..))
25import Data.List as List
27import Data.List as List
@@ -28,17 +30,20 @@ import Data.Newtype (un, unwrap, wrap)
28import Data.Search.Trie as Trie
30import Data.Search.Trie as Trie
29import Data.String (length) as String
31import Data.String (length) as String
30import Data.String.Common (split, toLower, trim) as String
32import Data.String.Common (split, toLower, trim) as String
33+import Data.Tuple.Nested ((/\))
31import Effect (Effect)
34import Effect (Effect)
32import Effect.Aff (launchAff_)
35import Effect.Aff (launchAff_)
33import Effect.Class (liftEffect)
36import Effect.Class (liftEffect)
34import Effect.Console (log, clear) as Console
37import Effect.Console (log, clear) as Console
35import Node.ReadLine (createConsoleInterface, question)
38import Node.ReadLine (createConsoleInterface, question)
39+import Prim hiding (Type, Constraint)
36
40
37
41
38type Config =
42type Config =
39 { docsFiles :: Array String
43 { docsFiles :: Array String
40 , bowerFiles :: Array String
44 , bowerFiles :: Array String
41 , packageName :: PackageName
45 , packageName :: PackageName
46+ , sourceFiles :: Array String
42 }
47 }
43
48
44
49
@@ -48,14 +53,17 @@ run cfg = launchAff_ $ do
48 liftEffect do
53 liftEffect do
49 Console.log "Loading search index..."
54 Console.log "Loading search index..."
50
55
56+ docsJsons /\ moduleNames /\ packageMetas <- sequential $
57+ (\d h m -> d /\ h /\ m)
51− docsJsons <- IndexBuilder.decodeDocsJsons cfg
58+ <$> parallel (IndexBuilder.decodeDocsJsons cfg)
59+ <*> parallel (parseModuleHeaders cfg.sourceFiles)
52− packageMetas <- IndexBuilder.decodeBowerJsons cfg
60+ <*> parallel (IndexBuilder.decodeBowerJsons cfg)
53
61
54 let scores = mkScores packageMetas
62 let scores = mkScores packageMetas
55 index = mkDeclarations scores docsJsons
63 index = mkDeclarations scores docsJsons
56 typeIndex = docsJsons >>= resultsWithTypes scores
64 typeIndex = docsJsons >>= resultsWithTypes scores
57 packageIndex = mkPackageIndex $ mkPackageInfo scores packageMetas
65 packageIndex = mkPackageIndex $ mkPackageInfo scores packageMetas
58− moduleIndex = unpackModuleIndex $ mkPackedModuleIndex index
66+ moduleIndex = unpackModuleIndex $ mkPackedModuleIndex index moduleNames
59 engineState = mkEngineState (unwrap index) typeIndex packageIndex moduleIndex scores
67 engineState = mkEngineState (unwrap index) typeIndex packageIndex moduleIndex scores
60
68
61 let countOfDefinitions = Trie.size $ unwrap index
69 let countOfDefinitions = Trie.size $ unwrap index
@@ -186,6 +194,9 @@ showSignature result@{ name, info } =
186 ValueAliasResult ->
194 ValueAliasResult ->
187 yellow ("(" <> unwrap name <> ")")
195 yellow ("(" <> unwrap name <> ")")
188
196
197+ DataConstructorResult info' ->
198+ showDataConstructorSignature info' result
199+
189 _ -> yellow $ unwrap name
200 _ -> yellow $ unwrap name
190
201
191
202
@@ -286,11 +297,33 @@ showExternDataSignature { kind } { name } =
286 keyword "foreign data" <>
297 keyword "foreign data" <>
287 space <>
298 space <>
288 yellow (unwrap name) <>
299 yellow (unwrap name) <>
289− space <>
290 syntax " :: " <>
300 syntax " :: " <>
291 showType kind
301 showType kind
292
302
293
303
304+showDataConstructorSignature
305+ :: forall rest
306+ . { dataDeclType :: DataDeclType
307+ , "type" :: Type
308+ }
309+ -> { name :: Identifier
310+ | rest
311+ }
312+ -> String
313+showDataConstructorSignature { dataDeclType, type: ctorType } { name } =
314+ ( keyword
315+ case dataDeclType of
316+ NewtypeDataDecl -> "newtype constructor"
317+ DataDataDecl -> "data constructor"
318+ ) <>
319+ space <>
320+ yellow (unwrap name) <>
321+ space <>
322+ syntax "::" <>
323+ space <>
324+ showType ctorType
325+
326+
294leftShift :: Int -> String -> String
327leftShift :: Int -> String -> String
295leftShift shift str =
328leftShift shift str =
296 Array.intercalate "\n" $
329 Array.intercalate "\n" $
src/Docs/Search/Main.purs+26−26
@@ -1,19 +1,19 @@
1-- | The main module of the CLI interface app.
1-- | The main module of the CLI interface app.
2module Docs.Search.Main where
2module Docs.Search.Main where
3
3
4−import Prelude
4+import Docs.Search.Config as Config
5−
6import Docs.Search.IndexBuilder as IndexBuilder
5import Docs.Search.IndexBuilder as IndexBuilder
7import Docs.Search.Interactive as Interactive
6import Docs.Search.Interactive as Interactive
8−import Docs.Search.Config as Config
9import Docs.Search.Types (PackageName(..))
7import Docs.Search.Types (PackageName(..))
10
8
9+import Prelude
10+
11import Data.Generic.Rep (class Generic)
11import Data.Generic.Rep (class Generic)
12−import Data.Show.Generic (genericShow)
13import Data.List as List
12import Data.List as List
14import Data.List.NonEmpty as NonEmpty
13import Data.List.NonEmpty as NonEmpty
15import Data.Maybe (Maybe, fromMaybe, optional)
14import Data.Maybe (Maybe, fromMaybe, optional)
16import Data.Newtype (unwrap)
15import Data.Newtype (unwrap)
16+import Data.Show.Generic (genericShow)
17import Data.Unfoldable (class Unfoldable)
17import Data.Unfoldable (class Unfoldable)
18import Effect (Effect)
18import Effect (Effect)
19import Effect.Console (log)
19import Effect.Console (log)
@@ -28,6 +28,7 @@ main = do
28 let defaultCommands = Search { docsFiles: defaultDocsFiles
28 let defaultCommands = Search { docsFiles: defaultDocsFiles
29 , bowerFiles: defaultBowerFiles
29 , bowerFiles: defaultBowerFiles
30 , packageName: Config.defaultPackageName
30 , packageName: Config.defaultPackageName
31+ , sourceFiles: defaultSourceFiles
31 }
32 }
32
33
33 case fromMaybe defaultCommands args of
34 case fromMaybe defaultCommands args of
@@ -35,7 +36,6 @@ main = do
35 Search cfg -> Interactive.run cfg
36 Search cfg -> Interactive.run cfg
36 Version -> log Config.version
37 Version -> log Config.version
37
38
38−
39getArgs :: Effect (Maybe Commands)
39getArgs :: Effect (Maybe Commands)
40getArgs = execParser opts
40getArgs = execParser opts
41 where
41 where
@@ -45,19 +45,16 @@ getArgs = execParser opts
45 <> progDesc "Search frontend for the documentation generated by the PureScript compiler."
45 <> progDesc "Search frontend for the documentation generated by the PureScript compiler."
46 )
46 )
47
47
48−
49data Commands
48data Commands
50 = BuildIndex IndexBuilder.Config
49 = BuildIndex IndexBuilder.Config
51 | Search Interactive.Config
50 | Search Interactive.Config
52 | Version
51 | Version
53
52
54−
55derive instance genericCommands :: Generic Commands _
53derive instance genericCommands :: Generic Commands _
56
54
57instance showCommands :: Show Commands where
55instance showCommands :: Show Commands where
58 show = genericShow
56 show = genericShow
59
57
60−
61commands :: Parser (Maybe Commands)
58commands :: Parser (Maybe Commands)
62commands = optional $ subparser
59commands = optional $ subparser
63 ( command "build-index"
60 ( command "build-index"
@@ -80,39 +77,30 @@ commands = optional $ subparser
80
77
81buildIndex :: Parser Commands
78buildIndex :: Parser Commands
82buildIndex = ado
79buildIndex = ado
83−
84 docsFiles <- docsFilesOption
80 docsFiles <- docsFilesOption
85−
86 bowerFiles <- bowerFilesOption
81 bowerFiles <- bowerFilesOption
87−
88 packageName <- packageNameOption
82 packageName <- packageNameOption
89−
83+ sourceFiles <- sourceFilesOption
90 generatedDocs <- strOption
84 generatedDocs <- strOption
91 ( long "generated-docs"
85 ( long "generated-docs"
92 <> metavar "DIR"
86 <> metavar "DIR"
93 <> value "./generated-docs/"
87 <> value "./generated-docs/"
88+ <> help "Path to the generated documentation HTML that will be patched. Search app will be injected into each HTML document."
94 )
89 )
95−
96 noPatch <- flag false true
90 noPatch <- flag false true
97 ( long "no-patch"
91 ( long "no-patch"
98 <> help "Do not patch the HTML docs, only build indices"
92 <> help "Do not patch the HTML docs, only build indices"
99 )
93 )
100−
101−
102− in BuildIndex { docsFiles, bowerFiles, generatedDocs, noPatch, packageName }
94+ in BuildIndex { docsFiles, bowerFiles, generatedDocs, noPatch, packageName, sourceFiles }
103
95
104
96
105startInteractive :: Parser Commands
97startInteractive :: Parser Commands
106startInteractive = ado
98startInteractive = ado
107−
108 docsFiles <- docsFilesOption
99 docsFiles <- docsFilesOption
109−
110 bowerFiles <- bowerFilesOption
100 bowerFiles <- bowerFilesOption
111−
112 packageName <- packageNameOption
101 packageName <- packageNameOption
113−
102+ sourceFiles <- sourceFilesOption
114− in Search { docsFiles, bowerFiles, packageName }
103+ in Search { docsFiles, bowerFiles, packageName, sourceFiles }
115−
116
104
117docsFilesOption :: Parser (Array String)
105docsFilesOption :: Parser (Array String)
118docsFilesOption = fromMaybe defaultDocsFiles <$>
106docsFilesOption = fromMaybe defaultDocsFiles <$>
@@ -121,11 +109,11 @@ docsFilesOption = fromMaybe defaultDocsFiles <$>
121 ( strOption
109 ( strOption
122 ( long "docs-files"
110 ( long "docs-files"
123 <> metavar "GLOB"
111 <> metavar "GLOB"
112+ <> help "Glob that captures `docs.json` files that should be used to build the index"
124 )
113 )
125 )
114 )
126 )
115 )
127
116
128−
129bowerFilesOption :: Parser (Array String)
117bowerFilesOption :: Parser (Array String)
130bowerFilesOption = fromMaybe defaultBowerFiles <$>
118bowerFilesOption = fromMaybe defaultBowerFiles <$>
131 optional
119 optional
@@ -133,31 +121,43 @@ bowerFilesOption = fromMaybe defaultBowerFiles <$>
133 ( strOption
121 ( strOption
134 ( long "bower-jsons"
122 ( long "bower-jsons"
135 <> metavar "GLOB"
123 <> metavar "GLOB"
124+ <> help "Glob that captures `bower.json` files. These files are used to build dependency trees to compute package popularity scores based on how many dependants a package has."
136 )
125 )
137 )
126 )
138 )
127 )
139
128
140−
141packageNameOption :: Parser PackageName
129packageNameOption :: Parser PackageName
142packageNameOption =
130packageNameOption =
143 PackageName <$> strOption
131 PackageName <$> strOption
144 ( long "package-name"
132 ( long "package-name"
145 <> metavar "PACKAGE"
133 <> metavar "PACKAGE"
146 <> value (unwrap Config.defaultPackageName)
134 <> value (unwrap Config.defaultPackageName)
135+ <> help "Local package name as it should appear in the search results"
147 )
136 )
148
137
138+sourceFilesOption :: Parser (Array String)
139+sourceFilesOption = fromMaybe defaultSourceFiles <$>
140+ optional
141+ ( some
142+ ( strOption
143+ ( long "source-files"
144+ <> metavar "GLOB"
145+ <> help "Path to project source files, used for more precise module indexing (see #62). Default: src/**/*.purs"
146+ )
147+ )
148+ )
149
149
150defaultDocsFiles :: Array String
150defaultDocsFiles :: Array String
151defaultDocsFiles = [ "output/**/docs.json" ]
151defaultDocsFiles = [ "output/**/docs.json" ]
152
152
153−
154defaultBowerFiles :: Array String
153defaultBowerFiles :: Array String
155defaultBowerFiles = [ ".spago/*/*/bower.json", "bower_components/purescript-*/bower.json" ]
154defaultBowerFiles = [ ".spago/*/*/bower.json", "bower_components/purescript-*/bower.json" ]
156
155
156+defaultSourceFiles :: Array String
157+defaultSourceFiles = [ "src/**/*.purs" ]
157
158
158many :: forall a f. Unfoldable f => Parser a -> Parser (f a)
159many :: forall a f. Unfoldable f => Parser a -> Parser (f a)
159many x = CA.many x <#> List.toUnfoldable
160many x = CA.many x <#> List.toUnfoldable
160
161
161−
162some :: forall a f. Unfoldable f => Parser a -> Parser (f a)
162some :: forall a f. Unfoldable f => Parser a -> Parser (f a)
163some x = CA.some x <#> NonEmpty.toUnfoldable
163some x = CA.some x <#> NonEmpty.toUnfoldable
src/Docs/Search/ModuleIndex.purs+10−5
@@ -2,10 +2,10 @@ module Docs.Search.ModuleIndex where
2
2
3import Docs.Search.Config as Config
3import Docs.Search.Config as Config
4import Docs.Search.Declarations (Declarations(..))
4import Docs.Search.Declarations (Declarations(..))
5−import Docs.Search.SearchResult (SearchResult(..))
6−import Docs.Search.Types (ModuleName, PackageInfo, PackageScore)
7import Docs.Search.Extra (stringToList)
5import Docs.Search.Extra (stringToList)
8import Docs.Search.Score (Scores, getPackageScore)
6import Docs.Search.Score (Scores, getPackageScore)
7+import Docs.Search.SearchResult (SearchResult(..))
8+import Docs.Search.Types (ModuleName, PackageInfo(..), PackageScore)
9
9
10import Prelude
10import Prelude
11
11
@@ -21,7 +21,7 @@ import Data.Lens.Record (prop)
21import Data.List (List, (:))
21import Data.List (List, (:))
22import Data.Map (Map)
22import Data.Map (Map)
23import Data.Map as Map
23import Data.Map as Map
24−import Data.Maybe (fromMaybe)
24+import Data.Maybe (Maybe(..), fromMaybe)
25import Data.Newtype (unwrap)
25import Data.Newtype (unwrap)
26import Data.Search.Trie (Trie)
26import Data.Search.Trie (Trie)
27import Data.Search.Trie as Trie
27import Data.Search.Trie as Trie
@@ -91,10 +91,15 @@ queryModuleIndex scores { index, modulePackages } query =
91
91
92
92
93-- | Constructs a mapping from packages to modules
93-- | Constructs a mapping from packages to modules
94−mkPackedModuleIndex :: Declarations -> PackedModuleIndex
94+mkPackedModuleIndex :: Declarations -> Array ModuleName -> PackedModuleIndex
95−mkPackedModuleIndex (Declarations trie) =
95+mkPackedModuleIndex (Declarations trie) moduleNames =
96+ addLocalPackageModuleNames $
96 foldr (Map.unionWith Set.union) Map.empty $ extract <$> Trie.values trie
97 foldr (Map.unionWith Set.union) Map.empty $ extract <$> Trie.values trie
97 where
98 where
99+ -- Add modules from src/ that may not contain any definitions, only
100+ -- re-exports
101+ addLocalPackageModuleNames = flip Map.alter LocalPackage $
102+ Just <<< append (Set.fromFoldable moduleNames) <<< fromMaybe Set.empty
98 extract
103 extract
99 :: List SearchResult
104 :: List SearchResult
100 -> Map PackageInfo (Set ModuleName)
105 -> Map PackageInfo (Set ModuleName)
src/Docs/Search/ModuleParser.pursnew file+50
@@ -0,0 +1,50 @@
1+module Docs.Search.ModuleParser where
2+
3+import Prelude
4+
5+import Control.Alt ((<|>))
6+import Data.Either (hush)
7+import Data.Foldable (intercalate)
8+import Data.Maybe (Maybe)
9+import Data.Newtype (wrap)
10+import Docs.Search.Types (ModuleName)
11+import Effect (Effect)
12+import StringParser (Parser, char, choice, fix, many, manyTill, noneOf, regex, runParser, sepBy, sepBy1, string, try, whiteSpace)
13+
14+parseModuleName :: String -> Maybe ModuleName
15+parseModuleName = map wrap <<< hush <<< runParser do
16+ void $ many whiteSpaceOrComment
17+ moduleHeader
18+
19+whiteSpaceOrComment :: Parser Unit
20+whiteSpaceOrComment =
21+ choice
22+ [ try $ multiLineComment
23+ , try $ singleLineComment
24+ , try $ void whiteSpace
25+ ]
26+
27+multiLineComment :: Parser Unit
28+multiLineComment = do
29+ void $ string "{-"
30+ void $ manyTill (void $ noneOf []) (string "-}")
31+
32+singleLineComment :: Parser Unit
33+singleLineComment = do
34+ void $ string "--"
35+ void $ manyTill (void $ noneOf ['\n']) (char '\n')
36+
37+moduleHeader :: Parser String
38+moduleHeader = do
39+ void $ string "module"
40+ void $ many whiteSpaceOrComment
41+ moduleName
42+
43+moduleName :: Parser String
44+moduleName = sepBy1 moduleNameWord (string ".") <#> intercalate "."
45+
46+moduleNameWord :: Parser String
47+moduleNameWord = do
48+ first <- regex "[A-Z]"
49+ rest <- regex "[A-Za-z0-9]*"
50+ pure $ first <> rest
src/Docs/Search/PackageIndex.purs+1−1
@@ -56,7 +56,7 @@ mkPackageInfo packageScores pms =
56 , score: getPackageScoreForPackageName packageScores packageName
56 , score: getPackageScoreForPackageName packageScores packageName
57 , dependencies:
57 , dependencies:
58 unwrap dependencies <#>
58 unwrap dependencies <#>
59− (_.packageName >>> RawPackageName >>> normalizePackageName)
59+ _.packageName >>> RawPackageName >>> normalizePackageName
60 , repository: repository <#> (_.url)
60 , repository: repository <#> (_.url)
61 }
61 }
62
62
src/Docs/Search/SearchResult.purs+2−1
@@ -22,7 +22,8 @@ data ResultInfo
22 | ExternDataResult { kind :: Type }
22 | ExternDataResult { kind :: Type }
23 | TypeSynonymResult { arguments :: Array TypeArgument
23 | TypeSynonymResult { arguments :: Array TypeArgument
24 , type :: Type }
24 , type :: Type }
25− | DataConstructorResult { arguments :: Array Type }
25+ | DataConstructorResult { dataDeclType :: DataDeclType
26+ , type :: Type }
26 | TypeClassMemberResult { type :: Type
27 | TypeClassMemberResult { type :: Type
27 , typeClass :: QualifiedName
28 , typeClass :: QualifiedName
28 , typeClassArguments :: Array TypeArgument }
29 , typeClassArguments :: Array TypeArgument }
src/Docs/Search/Types.purs+6−3
@@ -31,6 +31,9 @@ derive newtype instance ordModuleName :: Ord ModuleName
31derive newtype instance decodeJsonModuleName :: DecodeJson ModuleName
31derive newtype instance decodeJsonModuleName :: DecodeJson ModuleName
32derive newtype instance encodeJsonModuleName :: EncodeJson ModuleName
32derive newtype instance encodeJsonModuleName :: EncodeJson ModuleName
33
33
34+instance Show ModuleName where
35+ show = genericShow
36+
34
37
35-- | Non-normalized package name, e.g. `purescript-prelude` or just `prelude`.
38-- | Non-normalized package name, e.g. `purescript-prelude` or just `prelude`.
36newtype RawPackageName = RawPackageName String
39newtype RawPackageName = RawPackageName String
@@ -55,14 +58,14 @@ data PackageInfo = LocalPackage | Builtin | Package PackageName | UnknownPackage
55derive instance eqPackageInfo :: Eq PackageInfo
58derive instance eqPackageInfo :: Eq PackageInfo
56derive instance ordPackageInfo :: Ord PackageInfo
59derive instance ordPackageInfo :: Ord PackageInfo
57derive instance genericPackageInfo :: Generic PackageInfo _
60derive instance genericPackageInfo :: Generic PackageInfo _
58−instance showPackageInfo :: Show PackageInfo where
59− show = genericShow
60−
61instance decodeJsonPackageInfo :: DecodeJson PackageInfo where
61instance decodeJsonPackageInfo :: DecodeJson PackageInfo where
62 decodeJson = genericDecodeJson
62 decodeJson = genericDecodeJson
63instance encodeJsonPackageInfo :: EncodeJson PackageInfo where
63instance encodeJsonPackageInfo :: EncodeJson PackageInfo where
64 encodeJson = genericEncodeJson
64 encodeJson = genericEncodeJson
65
65
66+instance showPackageInfo :: Show PackageInfo where
67+ show = genericShow
68+
66
69
67newtype PackageScore = PackageScore Int
70newtype PackageScore = PackageScore Int
68
71
test/Main.purs+5−4
@@ -3,16 +3,16 @@ module Test.Main where
3import Prelude
3import Prelude
4
4
5import Effect (Effect)
5import Effect (Effect)
6+import Effect.Aff (launchAff_)
6import Test.Declarations as Declarations
7import Test.Declarations as Declarations
7import Test.IndexBuilder as IndexBuilder
8import Test.IndexBuilder as IndexBuilder
8import Test.ModuleIndex as ModuleIndex
9import Test.ModuleIndex as ModuleIndex
9−import Test.TypeQuery as TypeQuery
10+import Test.ModuleParser as ModuleParser
10−import Test.TypeJson as TypeJson
11−-- import Test.UI as UI
12import Test.Spec (Spec)
11import Test.Spec (Spec)
13import Test.Spec.Reporter.Console (consoleReporter)
12import Test.Spec.Reporter.Console (consoleReporter)
14import Test.Spec.Runner (runSpec)
13import Test.Spec.Runner (runSpec)
15−import Effect.Aff (launchAff_)
14+import Test.TypeJson as TypeJson
15+import Test.TypeQuery as TypeQuery
16
16
17main :: Effect Unit
17main :: Effect Unit
18main = do
18main = do
@@ -21,6 +21,7 @@ main = do
21
21
22mainTest :: Spec Unit
22mainTest :: Spec Unit
23mainTest = do
23mainTest = do
24+ ModuleParser.tests
24 TypeQuery.tests
25 TypeQuery.tests
25 TypeJson.tests
26 TypeJson.tests
26 IndexBuilder.tests
27 IndexBuilder.tests
test/Test/ModuleParser.pursnew file+61
@@ -0,0 +1,61 @@
1+module Test.ModuleParser where
2+
3+import Docs.Search.IndexBuilder (getPathsByGlobs)
4+import Docs.Search.ModuleParser (multiLineComment, parseModuleName, singleLineComment)
5+import Docs.Search.Types (ModuleName(..))
6+
7+import Prelude
8+
9+import Data.Array as Array
10+import Data.Either (Either(..))
11+import Data.Foldable (for_)
12+import Data.Maybe (Maybe(..))
13+import Effect.Class (liftEffect)
14+import Effect.Console as Console
15+import Effect.Exception (throw)
16+import Node.Encoding (Encoding(..))
17+import Node.FS.Aff (readTextFile)
18+import StringParser (runParser)
19+import Test.Spec (Spec, describe, it)
20+import Test.Spec.Assertions (shouldEqual)
21+
22+tests :: Spec Unit
23+tests = do
24+ describe "ModuleParser" do
25+ it "test #0" do
26+ parseModuleName "module Foo" `shouldEqual` Just (ModuleName "Foo")
27+ it "test #1" do
28+ parseModuleName "module Foo.Bar.B" `shouldEqual` Just (ModuleName "Foo.Bar.B")
29+ it "test #2" do
30+ parseModuleName " module Foo" `shouldEqual` Just (ModuleName "Foo")
31+ it "test #3" do
32+ parseModuleName " {- asdas -} module Foo" `shouldEqual` Just (ModuleName "Foo")
33+ it "test #4" do
34+ parseModuleName "{--}module Foo" `shouldEqual` Just (ModuleName "Foo")
35+ it "test #5" do
36+ parseModuleName "--\nmodule Foo" `shouldEqual` Just (ModuleName "Foo")
37+ it "test #6" do
38+ parseModuleName "--\n-- foo\nmodule Foo" `shouldEqual` Just (ModuleName "Foo")
39+ it "test #7" do
40+ parseModuleName "-- \n -- foo\n {- bar -} --baz\n module Foo" `shouldEqual` Just (ModuleName "Foo")
41+ it "multiline comment #1" do
42+ runParser multiLineComment "{--}" `shouldEqual` Right unit
43+ it "multiline comment #1" do
44+ runParser multiLineComment "{- foo -}" `shouldEqual` Right unit
45+ it "multiline comment #1" do
46+ runParser multiLineComment "{- foo\nbar\nbar\n -}" `shouldEqual` Right unit
47+ it "single line comment #1" do
48+ runParser singleLineComment "-- asd\n" `shouldEqual` Right unit
49+ it "single line comment #1" do
50+ runParser singleLineComment "--\n" `shouldEqual` Right unit
51+ it "Parses every module in .spago/" do
52+ files <- getPathsByGlobs ["./.spago/**/*.purs"]
53+ liftEffect $ Console.log $ "Modules in .spago: " <> show (Array.length files)
54+ for_ files \filePath -> do
55+ fileContents <- readTextFile UTF8 filePath
56+ case parseModuleName fileContents of
57+ Nothing -> do
58+ liftEffect $ throw $
59+ "Module header decoding failed for " <> filePath <>
60+ ", unable to extract module name"
61+ Just _ -> pure unit