diff options
-rw-r--r-- | docs/customservices.md | 32 | ||||
-rw-r--r-- | dummy-data/README.md | 6 | ||||
-rw-r--r-- | dummy-data/octoprint/api/job | 30 | ||||
-rw-r--r-- | dummy-data/octoprint/api/status_printer_offline-error.json | 26 | ||||
-rw-r--r-- | dummy-data/octoprint/api/status_printer_offline.json | 26 | ||||
-rw-r--r-- | dummy-data/octoprint/api/status_printer_operational.json | 26 | ||||
-rw-r--r-- | dummy-data/octoprint/api/status_printer_printing.json | 30 | ||||
-rw-r--r-- | dummy-data/octoprint/api/status_printer_printing_1of2.json | 30 | ||||
-rw-r--r-- | dummy-data/octoprint/api/status_printer_printing_2of2.json | 30 | ||||
-rw-r--r-- | dummy-data/octoprint/api/status_printing_completion.json | 30 | ||||
-rw-r--r-- | dummy-data/speedtesttracker/api/speedtest/latest | 7 | ||||
-rw-r--r-- | package.json | 6 | ||||
-rw-r--r-- | public/assets/config-demo.yml.dist | 5 | ||||
-rw-r--r-- | src/assets/app.scss | 2 | ||||
-rw-r--r-- | src/assets/components/status.scss | 48 | ||||
-rw-r--r-- | src/components/services/OctoPrint.vue | 108 | ||||
-rw-r--r-- | yarn.lock | 172 |
17 files changed, 596 insertions, 18 deletions
diff --git a/docs/customservices.md b/docs/customservices.md index 5bb08ff..88e4e2f 100644 --- a/docs/customservices.md +++ b/docs/customservices.md | |||
@@ -31,6 +31,7 @@ within Homer: | |||
31 | - [Speedtest Tracker](#SpeedtestTracker) | 31 | - [Speedtest Tracker](#SpeedtestTracker) |
32 | - [What's Up Docker](#whats-up-docker) | 32 | - [What's Up Docker](#whats-up-docker) |
33 | - [SABnzbd](#sabnzbd) | 33 | - [SABnzbd](#sabnzbd) |
34 | - [OctoPrint](#sabnzbd) | ||
34 | 35 | ||
35 | If you experiencing any issue, please have a look to the [troubleshooting](troubleshooting.md) page. | 36 | If you experiencing any issue, please have a look to the [troubleshooting](troubleshooting.md) page. |
36 | 37 | ||
@@ -84,7 +85,7 @@ Two lines are needed in the config.yml : | |||
84 | 85 | ||
85 | ```yaml | 86 | ```yaml |
86 | type: "Medusa" | 87 | type: "Medusa" |
87 | apikey: "01234deb70424befb1f4ef6a23456789" | 88 | apikey: "<---insert-api-key-here--->" |
88 | ``` | 89 | ``` |
89 | 90 | ||
90 | The url must be the root url of Medusa application. | 91 | The url must be the root url of Medusa application. |
@@ -97,7 +98,7 @@ Two lines are needed in the config.yml : | |||
97 | 98 | ||
98 | ```yaml | 99 | ```yaml |
99 | type: "Lidarr", "Prowlarr", "Radarr" or "Sonarr" | 100 | type: "Lidarr", "Prowlarr", "Radarr" or "Sonarr" |
100 | apikey: "01234deb70424befb1f4ef6a23456789" | 101 | apikey: "<---insert-api-key-here--->" |
101 | ``` | 102 | ``` |
102 | 103 | ||
103 | The url must be the root url of Lidarr, Prowlarr, Radarr or Sonarr application. | 104 | The url must be the root url of Lidarr, Prowlarr, Radarr or Sonarr application. |
@@ -108,7 +109,7 @@ If you are using an older version of Radarr or Sonarr which don't support the ne | |||
108 | - name: "Radarr" | 109 | - name: "Radarr" |
109 | type: "Radarr" | 110 | type: "Radarr" |
110 | url: "http://localhost:7878/" | 111 | url: "http://localhost:7878/" |
111 | apikey: "MY-SUPER-SECRET-API-KEY" | 112 | apikey: "<---insert-api-key-here--->" |
112 | target: "_blank" | 113 | target: "_blank" |
113 | legacyApi: true | 114 | legacyApi: true |
114 | ``` | 115 | ``` |
@@ -119,7 +120,7 @@ This service displays total number of documents stored. Two lines are required: | |||
119 | 120 | ||
120 | ```yaml | 121 | ```yaml |
121 | type: "PaperlessNG" | 122 | type: "PaperlessNG" |
122 | apikey: "0123456789abcdef123456789abcdef" | 123 | apikey: "<---insert-api-key-here--->" |
123 | ``` | 124 | ``` |
124 | 125 | ||
125 | API key can be generated in Settings > Administration > Auth Tokens | 126 | API key can be generated in Settings > Administration > Auth Tokens |
@@ -175,7 +176,7 @@ See https://docs.portainer.io/v/ce-2.11/user/account-settings#access-tokens | |||
175 | logo: "assets/tools/sample.png" | 176 | logo: "assets/tools/sample.png" |
176 | url: "http://192.168.0.151/" | 177 | url: "http://192.168.0.151/" |
177 | type: "Portainer" | 178 | type: "Portainer" |
178 | apikey: "MY-SUPER-SECRET-API-KEY" | 179 | apikey: "<---insert-api-key-here--->" |
179 | # environments: | 180 | # environments: |
180 | # - "raspberry" | 181 | # - "raspberry" |
181 | # - "local" | 182 | # - "local" |
@@ -190,7 +191,7 @@ You need to set the type to Emby, provide an api key and choose which stats to s | |||
190 | logo: "assets/tools/sample.png" | 191 | logo: "assets/tools/sample.png" |
191 | url: "http://192.168.0.151/" | 192 | url: "http://192.168.0.151/" |
192 | type: "Emby" | 193 | type: "Emby" |
193 | apikey: "MY-SUPER-SECRET-API-KEY" | 194 | apikey: "<---insert-api-key-here--->" |
194 | libraryType: "music" #Choose which stats to show. Can be one of: music, series or movies. | 195 | libraryType: "music" #Choose which stats to show. Can be one of: music, series or movies. |
195 | ``` | 196 | ``` |
196 | 197 | ||
@@ -220,7 +221,7 @@ the "Web Interface" section of settings on the Tautulli web UI. | |||
220 | logo: "assets/tools/sample.png" | 221 | logo: "assets/tools/sample.png" |
221 | url: "http://192.168.0.151:8181" | 222 | url: "http://192.168.0.151:8181" |
222 | type: "Tautulli" | 223 | type: "Tautulli" |
223 | apikey: "MY-SUPER-SECRET-API-KEY" | 224 | apikey: "<---insert-api-key-here--->" |
224 | ``` | 225 | ``` |
225 | 226 | ||
226 | Because the service type and link don't necessarily have to match, you could | 227 | Because the service type and link don't necessarily have to match, you could |
@@ -233,7 +234,7 @@ endpoint pointing to Tautulli! | |||
233 | url: "http://192.168.0.151:32400/web" # Plex | 234 | url: "http://192.168.0.151:32400/web" # Plex |
234 | endpoint: "http://192.168.0.151:8181" # Tautulli | 235 | endpoint: "http://192.168.0.151:8181" # Tautulli |
235 | type: "Tautulli" | 236 | type: "Tautulli" |
236 | apikey: "MY-SUPER-SECRET-API-KEY" | 237 | apikey: "<---insert-api-key-here--->" |
237 | ``` | 238 | ``` |
238 | 239 | ||
239 | ## Mealie | 240 | ## Mealie |
@@ -248,7 +249,7 @@ Two lines are needed in the config.yml : | |||
248 | 249 | ||
249 | ```yaml | 250 | ```yaml |
250 | type: "Healthchecks" | 251 | type: "Healthchecks" |
251 | apikey: "01234deb70424befb1f4ef6a23456789" | 252 | apikey: "<---insert-api-key-here--->" |
252 | ``` | 253 | ``` |
253 | 254 | ||
254 | The url must be the root url of the Healthchecks application. | 255 | The url must be the root url of the Healthchecks application. |
@@ -377,3 +378,16 @@ the "Config" > "General" section of the SABnzbd config in the SABnzbd web UI. | |||
377 | apikey: "MY-SUPER-SECRET-API-KEY" | 378 | apikey: "MY-SUPER-SECRET-API-KEY" |
378 | downloadInterval: 5000 # (Optional) Interval (in ms) for updating the download count | 379 | downloadInterval: 5000 # (Optional) Interval (in ms) for updating the download count |
379 | ``` | 380 | ``` |
381 | |||
382 | ## OctoPrint | ||
383 | |||
384 | The OctoPrint service only needs an `apikey` & `url` and optionally a `display` option. | ||
385 | |||
386 | ```yaml | ||
387 | - name: "Octoprint" | ||
388 | logo: "https://cdn-icons-png.flaticon.com/512/3112/3112529.png" | ||
389 | apikey: "xxxxxxxxxxxx" # insert your own API key here. Request one from https://openweathermap.org/api. | ||
390 | url: "http://192.168.0.151:8080" | ||
391 | display: "text" # 'text' or 'bar'. Default to `text`. | ||
392 | type: "OctoPrint" | ||
393 | ``` \ No newline at end of file | ||
diff --git a/dummy-data/README.md b/dummy-data/README.md index 6db4712..78b2243 100644 --- a/dummy-data/README.md +++ b/dummy-data/README.md | |||
@@ -3,6 +3,12 @@ | |||
3 | This directory content makes possible to test custom services cards or create a demo without actually running the service. | 3 | This directory content makes possible to test custom services cards or create a demo without actually running the service. |
4 | The principle is simple: save a sample output of the API used in the service in a static file in this directory. The path must be identical as the service endpoint to be used seamlessly. | 4 | The principle is simple: save a sample output of the API used in the service in a static file in this directory. The path must be identical as the service endpoint to be used seamlessly. |
5 | 5 | ||
6 | ## Start the mock server to expose dummy data | ||
7 | |||
8 | ```sh | ||
9 | yarn mock | ||
10 | ``` | ||
11 | |||
6 | ## How to add a new services sample | 12 | ## How to add a new services sample |
7 | 13 | ||
8 | - create a directory for your service, and any sub-folder existing in the service api path. | 14 | - create a directory for your service, and any sub-folder existing in the service api path. |
diff --git a/dummy-data/octoprint/api/job b/dummy-data/octoprint/api/job new file mode 100644 index 0000000..c1ec6ed --- /dev/null +++ b/dummy-data/octoprint/api/job | |||
@@ -0,0 +1,30 @@ | |||
1 | { | ||
2 | "job": { | ||
3 | "averagePrintTime": 669.3131185749999, | ||
4 | "estimatedPrintTime": 314.87566979223726, | ||
5 | "filament": { | ||
6 | "tool0": { | ||
7 | "length": 134.81171000000032, | ||
8 | "volume": 0.0 | ||
9 | } | ||
10 | }, | ||
11 | "file": { | ||
12 | "date": 1665547748, | ||
13 | "display": "CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
14 | "name": "CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
15 | "origin": "local", | ||
16 | "path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
17 | "size": 129581 | ||
18 | }, | ||
19 | "lastPrintTime": 669.3131185749999, | ||
20 | "user": "friendlyngeeks" | ||
21 | }, | ||
22 | "progress": { | ||
23 | "completion": 27.456185706237797, | ||
24 | "filepos": 35578, | ||
25 | "printTime": 460, | ||
26 | "printTimeLeft": 4612, | ||
27 | "printTimeLeftOrigin": "linear" | ||
28 | }, | ||
29 | "state": "Printing" | ||
30 | } \ No newline at end of file | ||
diff --git a/dummy-data/octoprint/api/status_printer_offline-error.json b/dummy-data/octoprint/api/status_printer_offline-error.json new file mode 100644 index 0000000..10fa163 --- /dev/null +++ b/dummy-data/octoprint/api/status_printer_offline-error.json | |||
@@ -0,0 +1,26 @@ | |||
1 | { | ||
2 | "error": "SerialException: device reports readiness to read but returned no data (device disconnected or multiple access on port?)", | ||
3 | "job": { | ||
4 | "averagePrintTime": null, | ||
5 | "estimatedPrintTime": null, | ||
6 | "filament": null, | ||
7 | "file": { | ||
8 | "date": null, | ||
9 | "display": null, | ||
10 | "name": null, | ||
11 | "origin": null, | ||
12 | "path": null, | ||
13 | "size": null | ||
14 | }, | ||
15 | "lastPrintTime": null, | ||
16 | "user": null | ||
17 | }, | ||
18 | "progress": { | ||
19 | "completion": null, | ||
20 | "filepos": null, | ||
21 | "printTime": null, | ||
22 | "printTimeLeft": null, | ||
23 | "printTimeLeftOrigin": null | ||
24 | }, | ||
25 | "state": "Offline after error" | ||
26 | } \ No newline at end of file | ||
diff --git a/dummy-data/octoprint/api/status_printer_offline.json b/dummy-data/octoprint/api/status_printer_offline.json new file mode 100644 index 0000000..c733409 --- /dev/null +++ b/dummy-data/octoprint/api/status_printer_offline.json | |||
@@ -0,0 +1,26 @@ | |||
1 | { | ||
2 | "job": { | ||
3 | "estimatedPrintTime": null, | ||
4 | "filament": { | ||
5 | "length": null, | ||
6 | "volume": null | ||
7 | }, | ||
8 | "file": { | ||
9 | "date": null, | ||
10 | "name": null, | ||
11 | "origin": null, | ||
12 | "path": null, | ||
13 | "size": null | ||
14 | }, | ||
15 | "lastPrintTime": null, | ||
16 | "user": null | ||
17 | }, | ||
18 | "progress": { | ||
19 | "completion": null, | ||
20 | "filepos": null, | ||
21 | "printTime": null, | ||
22 | "printTimeLeft": null, | ||
23 | "printTimeOrigin": null | ||
24 | }, | ||
25 | "state": "Offline" | ||
26 | } \ No newline at end of file | ||
diff --git a/dummy-data/octoprint/api/status_printer_operational.json b/dummy-data/octoprint/api/status_printer_operational.json new file mode 100644 index 0000000..993d798 --- /dev/null +++ b/dummy-data/octoprint/api/status_printer_operational.json | |||
@@ -0,0 +1,26 @@ | |||
1 | { | ||
2 | "job": { | ||
3 | "estimatedPrintTime": null, | ||
4 | "filament": { | ||
5 | "length": null, | ||
6 | "volume": null | ||
7 | }, | ||
8 | "file": { | ||
9 | "date": null, | ||
10 | "name": null, | ||
11 | "origin": null, | ||
12 | "path": null, | ||
13 | "size": null | ||
14 | }, | ||
15 | "lastPrintTime": null, | ||
16 | "user": null | ||
17 | }, | ||
18 | "progress": { | ||
19 | "completion": null, | ||
20 | "filepos": null, | ||
21 | "printTime": null, | ||
22 | "printTimeLeft": null, | ||
23 | "printTimeOrigin": null | ||
24 | }, | ||
25 | "state": "Operational" | ||
26 | } \ No newline at end of file | ||
diff --git a/dummy-data/octoprint/api/status_printer_printing.json b/dummy-data/octoprint/api/status_printer_printing.json new file mode 100644 index 0000000..09cf3cf --- /dev/null +++ b/dummy-data/octoprint/api/status_printer_printing.json | |||
@@ -0,0 +1,30 @@ | |||
1 | { | ||
2 | "job": { | ||
3 | "averagePrintTime": 669.3131185749999, | ||
4 | "estimatedPrintTime": 314.87566979223726, | ||
5 | "filament": { | ||
6 | "tool0": { | ||
7 | "length": 134.81171000000032, | ||
8 | "volume": 0.0 | ||
9 | } | ||
10 | }, | ||
11 | "file": { | ||
12 | "date": 1665547748, | ||
13 | "display": "CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
14 | "name": "CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
15 | "origin": "local", | ||
16 | "path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
17 | "size": 129581 | ||
18 | }, | ||
19 | "lastPrintTime": 669.3131185749999, | ||
20 | "user": "friendlyngeeks" | ||
21 | }, | ||
22 | "progress": { | ||
23 | "completion": 0.1551153332664511, | ||
24 | "filepos": 201, | ||
25 | "printTime": 0, | ||
26 | "printTimeLeft": 668, | ||
27 | "printTimeLeftOrigin": "average" | ||
28 | }, | ||
29 | "state": "Printing" | ||
30 | } \ No newline at end of file | ||
diff --git a/dummy-data/octoprint/api/status_printer_printing_1of2.json b/dummy-data/octoprint/api/status_printer_printing_1of2.json new file mode 100644 index 0000000..09cf3cf --- /dev/null +++ b/dummy-data/octoprint/api/status_printer_printing_1of2.json | |||
@@ -0,0 +1,30 @@ | |||
1 | { | ||
2 | "job": { | ||
3 | "averagePrintTime": 669.3131185749999, | ||
4 | "estimatedPrintTime": 314.87566979223726, | ||
5 | "filament": { | ||
6 | "tool0": { | ||
7 | "length": 134.81171000000032, | ||
8 | "volume": 0.0 | ||
9 | } | ||
10 | }, | ||
11 | "file": { | ||
12 | "date": 1665547748, | ||
13 | "display": "CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
14 | "name": "CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
15 | "origin": "local", | ||
16 | "path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
17 | "size": 129581 | ||
18 | }, | ||
19 | "lastPrintTime": 669.3131185749999, | ||
20 | "user": "friendlyngeeks" | ||
21 | }, | ||
22 | "progress": { | ||
23 | "completion": 0.1551153332664511, | ||
24 | "filepos": 201, | ||
25 | "printTime": 0, | ||
26 | "printTimeLeft": 668, | ||
27 | "printTimeLeftOrigin": "average" | ||
28 | }, | ||
29 | "state": "Printing" | ||
30 | } \ No newline at end of file | ||
diff --git a/dummy-data/octoprint/api/status_printer_printing_2of2.json b/dummy-data/octoprint/api/status_printer_printing_2of2.json new file mode 100644 index 0000000..2acf861 --- /dev/null +++ b/dummy-data/octoprint/api/status_printer_printing_2of2.json | |||
@@ -0,0 +1,30 @@ | |||
1 | { | ||
2 | "job": { | ||
3 | "averagePrintTime": 669.3131185749999, | ||
4 | "estimatedPrintTime": 314.87566979223726, | ||
5 | "filament": { | ||
6 | "tool0": { | ||
7 | "length": 134.81171000000032, | ||
8 | "volume": 0.0 | ||
9 | } | ||
10 | }, | ||
11 | "file": { | ||
12 | "date": 1665547748, | ||
13 | "display": "CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
14 | "name": "CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
15 | "origin": "local", | ||
16 | "path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
17 | "size": 129581 | ||
18 | }, | ||
19 | "lastPrintTime": 669.3131185749999, | ||
20 | "user": "friendlyngeeks" | ||
21 | }, | ||
22 | "progress": { | ||
23 | "completion": 27.456185706237797, | ||
24 | "filepos": 35578, | ||
25 | "printTime": 476, | ||
26 | "printTimeLeft": 1612, | ||
27 | "printTimeLeftOrigin": "linear" | ||
28 | }, | ||
29 | "state": "Printing" | ||
30 | } \ No newline at end of file | ||
diff --git a/dummy-data/octoprint/api/status_printing_completion.json b/dummy-data/octoprint/api/status_printing_completion.json new file mode 100644 index 0000000..55728ba --- /dev/null +++ b/dummy-data/octoprint/api/status_printing_completion.json | |||
@@ -0,0 +1,30 @@ | |||
1 | { | ||
2 | "job": { | ||
3 | "averagePrintTime": 698.814525153, | ||
4 | "estimatedPrintTime": 314.87566979223726, | ||
5 | "filament": { | ||
6 | "tool0": { | ||
7 | "length": 134.81171000000032, | ||
8 | "volume": 0.0 | ||
9 | } | ||
10 | }, | ||
11 | "file": { | ||
12 | "date": 1665547748, | ||
13 | "display": "CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
14 | "name": "CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
15 | "origin": "local", | ||
16 | "path": "MISC/CE3PRO_3mmX3mm Brass insert V2.gcode", | ||
17 | "size": 129581 | ||
18 | }, | ||
19 | "lastPrintTime": 728.315931731, | ||
20 | "user": "friendlyngeeks" | ||
21 | }, | ||
22 | "progress": { | ||
23 | "completion": 100.0, | ||
24 | "filepos": 129581, | ||
25 | "printTime": 728, | ||
26 | "printTimeLeft": 0, | ||
27 | "printTimeLeftOrigin": null | ||
28 | }, | ||
29 | "state": "Operational" | ||
30 | } \ No newline at end of file | ||
diff --git a/dummy-data/speedtesttracker/api/speedtest/latest b/dummy-data/speedtesttracker/api/speedtest/latest new file mode 100644 index 0000000..c8e3c1e --- /dev/null +++ b/dummy-data/speedtesttracker/api/speedtest/latest | |||
@@ -0,0 +1,7 @@ | |||
1 | { | ||
2 | "data": { | ||
3 | "download": 42.452234, | ||
4 | "upload": 34.3948, | ||
5 | "ping": 12.9873 | ||
6 | } | ||
7 | } \ No newline at end of file | ||
diff --git a/package.json b/package.json index 93953c1..c97dc56 100644 --- a/package.json +++ b/package.json | |||
@@ -3,6 +3,7 @@ | |||
3 | "version": "22.07.2", | 3 | "version": "22.07.2", |
4 | "scripts": { | 4 | "scripts": { |
5 | "dev": "vite", | 5 | "dev": "vite", |
6 | "mock": "http-server dummy-data/ --cors", | ||
6 | "build": "vite build", | 7 | "build": "vite build", |
7 | "preview": "vite preview --port 5050", | 8 | "preview": "vite preview --port 5050", |
8 | "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore" | 9 | "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs --fix --ignore-path .gitignore" |
@@ -10,9 +11,9 @@ | |||
10 | "dependencies": { | 11 | "dependencies": { |
11 | "@fortawesome/fontawesome-free": "^6.2.0", | 12 | "@fortawesome/fontawesome-free": "^6.2.0", |
12 | "bulma": "^0.9.4", | 13 | "bulma": "^0.9.4", |
13 | "yaml": "^2.1.3", | ||
14 | "lodash.merge": "^4.6.2", | 14 | "lodash.merge": "^4.6.2", |
15 | "vue": "^3.2.41" | 15 | "vue": "^3.2.41", |
16 | "yaml": "^2.1.3" | ||
16 | }, | 17 | }, |
17 | "devDependencies": { | 18 | "devDependencies": { |
18 | "@rushstack/eslint-patch": "^1.2.0", | 19 | "@rushstack/eslint-patch": "^1.2.0", |
@@ -20,6 +21,7 @@ | |||
20 | "@vue/eslint-config-prettier": "^7.0.0", | 21 | "@vue/eslint-config-prettier": "^7.0.0", |
21 | "eslint": "^8.26.0", | 22 | "eslint": "^8.26.0", |
22 | "eslint-plugin-vue": "^9.6.0", | 23 | "eslint-plugin-vue": "^9.6.0", |
24 | "http-server": "^14.1.1", | ||
23 | "prettier": "^2.7.1", | 25 | "prettier": "^2.7.1", |
24 | "sass": "^1.55.0", | 26 | "sass": "^1.55.0", |
25 | "vite": "^3.2.1", | 27 | "vite": "^3.2.1", |
diff --git a/public/assets/config-demo.yml.dist b/public/assets/config-demo.yml.dist index 4d088cc..22dd3b0 100644 --- a/public/assets/config-demo.yml.dist +++ b/public/assets/config-demo.yml.dist | |||
@@ -93,6 +93,11 @@ services: | |||
93 | - name: "Tools" | 93 | - name: "Tools" |
94 | icon: "fa-solid fa-screwdriver-wrench" | 94 | icon: "fa-solid fa-screwdriver-wrench" |
95 | items: | 95 | items: |
96 | - name: "Octoprint" | ||
97 | logo: "https://cdn-icons-png.flaticon.com/512/3112/3112529.png" | ||
98 | apikey: "xxxxxxxxxxxx" | ||
99 | endpoint: "https://homer-demo-content.netlify.app/octoprint" | ||
100 | type: "OctoPrint" | ||
96 | - name: "Example item" | 101 | - name: "Example item" |
97 | logo: "assets/tools/sample.png" | 102 | logo: "assets/tools/sample.png" |
98 | subtitle: "This another example" | 103 | subtitle: "This another example" |
diff --git a/src/assets/app.scss b/src/assets/app.scss index d112482..4ce417a 100644 --- a/src/assets/app.scss +++ b/src/assets/app.scss | |||
@@ -1,8 +1,8 @@ | |||
1 | @charset "utf-8"; | 1 | @charset "utf-8"; |
2 | 2 | ||
3 | @import "./webfonts/webfonts.scss"; | 3 | @import "./webfonts/webfonts.scss"; |
4 | |||
5 | @import "../../node_modules/bulma/bulma"; | 4 | @import "../../node_modules/bulma/bulma"; |
5 | @import "./components/status.scss"; | ||
6 | 6 | ||
7 | // Themes import | 7 | // Themes import |
8 | @import "./themes/sui.scss"; | 8 | @import "./themes/sui.scss"; |
diff --git a/src/assets/components/status.scss b/src/assets/components/status.scss new file mode 100644 index 0000000..b5fd20b --- /dev/null +++ b/src/assets/components/status.scss | |||
@@ -0,0 +1,48 @@ | |||
1 | .status { | ||
2 | font-size: 0.8rem; | ||
3 | color: var(--text-title); | ||
4 | |||
5 | &.offline:before, &.error:before { | ||
6 | background-color: #d65c68; | ||
7 | box-shadow: 0 0 5px 1px #d65c68; | ||
8 | color: #d65c68; | ||
9 | } | ||
10 | |||
11 | &.pending:before { | ||
12 | background-color: #e8bb7d; | ||
13 | box-shadow: 0 0 5px 1px #e8bb7d; | ||
14 | } | ||
15 | |||
16 | &.online:before, &.ready:before { | ||
17 | background-color: #94e185; | ||
18 | box-shadow: 0 0 5px 1px #94e185; | ||
19 | } | ||
20 | |||
21 | &.in-progress:before { | ||
22 | background-color: #8fe87d; | ||
23 | box-shadow: 0 0 5px 1px #8fe87d; | ||
24 | animation: pulse 1s alternate infinite; | ||
25 | } | ||
26 | |||
27 | @keyframes pulse { | ||
28 | 0% { | ||
29 | background: rgba(255, 255, 255, 0.2); | ||
30 | box-shadow: inset 0px 0px 10px 2px rgba(0, 255, 182, 0.3), | ||
31 | 0px 0px 5px 2px rgba(0, 255, 135, 0.2); | ||
32 | } | ||
33 | 100% { | ||
34 | background: rgba(255, 255, 255, 1); | ||
35 | box-shadow: inset 0px 0px 10px 2px rgba(0, 255, 182, 0.5), | ||
36 | 0px 0px 15px 2px rgba(0, 255, 135, 1); | ||
37 | } | ||
38 | } | ||
39 | |||
40 | &:before { | ||
41 | content: " "; | ||
42 | display: inline-block; | ||
43 | width: 8px; | ||
44 | height: 8px; | ||
45 | margin-right: 10px; | ||
46 | border-radius: 8px; | ||
47 | } | ||
48 | } \ No newline at end of file | ||
diff --git a/src/components/services/OctoPrint.vue b/src/components/services/OctoPrint.vue new file mode 100644 index 0000000..c5da8d9 --- /dev/null +++ b/src/components/services/OctoPrint.vue | |||
@@ -0,0 +1,108 @@ | |||
1 | <template> | ||
2 | <Generic :item="item" :title="state"> | ||
3 | <template #content> | ||
4 | <p class="title is-4">{{ item.name }}</p> | ||
5 | <p class="subtitle is-6"> | ||
6 | <template v-if="item.subtitle && !state"> | ||
7 | {{ item.subtitle }} | ||
8 | </template> | ||
9 | <template v-if="!error && display == 'text'"> | ||
10 | <i class="fa-solid fa-gear mr-1"></i> | ||
11 | <b v-if="completion">{{ completion.toFixed() }}%</b> | ||
12 | <span class="separator mx-1"> | </span> | ||
13 | <span v-if="printTime" :title="`${toTime(printTimeLeft)} left`"> | ||
14 | <i class="fa-solid fa-stopwatch mr-1"></i> | ||
15 | {{ toTime(printTime) }} | ||
16 | </span> | ||
17 | </template> | ||
18 | <template v-if="!error && display == 'bar'"> | ||
19 | <progress | ||
20 | v-if="completion" | ||
21 | class="progress is-primary" | ||
22 | :value="completion" | ||
23 | max="100" | ||
24 | :title="`${state} - ${completion.toFixed()}%, ${toTime( | ||
25 | printTimeLeft | ||
26 | )} left`" | ||
27 | > | ||
28 | {{ completion }}% | ||
29 | </progress> | ||
30 | </template> | ||
31 | <span v-if="error" :title="error">{{ error }}</span> | ||
32 | </p> | ||
33 | </template> | ||
34 | <template #indicator> | ||
35 | <i :class="['status', statusClass]" :title="state"></i> | ||
36 | </template> | ||
37 | </Generic> | ||
38 | </template> | ||
39 | |||
40 | <script> | ||
41 | import service from "@/mixins/service.js"; | ||
42 | import Generic from "./Generic.vue"; | ||
43 | |||
44 | export default { | ||
45 | name: "OctoPrint", | ||
46 | mixins: [service], | ||
47 | props: { | ||
48 | item: Object, | ||
49 | }, | ||
50 | components: { | ||
51 | Generic, | ||
52 | }, | ||
53 | data: () => ({ | ||
54 | printTime: null, | ||
55 | printTimeLeft: null, | ||
56 | completion: null, | ||
57 | state: null, | ||
58 | error: null, | ||
59 | }), | ||
60 | computed: { | ||
61 | statusClass: function () { | ||
62 | switch (this.state) { | ||
63 | case "Operational": | ||
64 | return "ready"; | ||
65 | case "Offline": | ||
66 | return "offline"; | ||
67 | case "Printing": | ||
68 | return "in-progress"; | ||
69 | default: | ||
70 | return "pending"; | ||
71 | } | ||
72 | }, | ||
73 | }, | ||
74 | created() { | ||
75 | this.display = this.item.display == "bar" ? this.item.display : "text"; | ||
76 | this.fetchStatus(); | ||
77 | }, | ||
78 | methods: { | ||
79 | fetchStatus: async function () { | ||
80 | try { | ||
81 | const response = await this.fetch(`api/job?apikey=${this.item.apikey}`); | ||
82 | this.printTime = response.progress.printTime; | ||
83 | this.printTimeLeft = response.progress.printTimeLeft; | ||
84 | this.completion = response.progress.completion; | ||
85 | this.state = response.state; | ||
86 | this.error = response.error; | ||
87 | } catch (e) { | ||
88 | this.error = `Fail to fetch octoprint data (${e.message})`; | ||
89 | console.error(e); | ||
90 | } | ||
91 | }, | ||
92 | toTime: function (timastamp) { | ||
93 | return new Date(timastamp * 1000).toTimeString().substring(0, 5); | ||
94 | }, | ||
95 | }, | ||
96 | }; | ||
97 | </script> | ||
98 | |||
99 | <style scoped lang="scss"> | ||
100 | .fa-triangle-exclamation::before { | ||
101 | color: #d65c68; | ||
102 | } | ||
103 | |||
104 | .progress { | ||
105 | height: 8px; | ||
106 | width: 90%; | ||
107 | } | ||
108 | </style> | ||
@@ -1269,6 +1269,13 @@ argparse@^2.0.1: | |||
1269 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" | 1269 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" |
1270 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== | 1270 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== |
1271 | 1271 | ||
1272 | async@^2.6.4: | ||
1273 | version "2.6.4" | ||
1274 | resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" | ||
1275 | integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== | ||
1276 | dependencies: | ||
1277 | lodash "^4.17.14" | ||
1278 | |||
1272 | async@^3.2.3: | 1279 | async@^3.2.3: |
1273 | version "3.2.4" | 1280 | version "3.2.4" |
1274 | resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" | 1281 | resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" |
@@ -1315,6 +1322,13 @@ balanced-match@^1.0.0: | |||
1315 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" | 1322 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" |
1316 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== | 1323 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== |
1317 | 1324 | ||
1325 | basic-auth@^2.0.1: | ||
1326 | version "2.0.1" | ||
1327 | resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" | ||
1328 | integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== | ||
1329 | dependencies: | ||
1330 | safe-buffer "5.1.2" | ||
1331 | |||
1318 | binary-extensions@^2.0.0: | 1332 | binary-extensions@^2.0.0: |
1319 | version "2.2.0" | 1333 | version "2.2.0" |
1320 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" | 1334 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" |
@@ -1399,7 +1413,7 @@ chalk@^2.0.0: | |||
1399 | escape-string-regexp "^1.0.5" | 1413 | escape-string-regexp "^1.0.5" |
1400 | supports-color "^5.3.0" | 1414 | supports-color "^5.3.0" |
1401 | 1415 | ||
1402 | chalk@^4.0.0, chalk@^4.0.2: | 1416 | chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.2: |
1403 | version "4.1.2" | 1417 | version "4.1.2" |
1404 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" | 1418 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" |
1405 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== | 1419 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== |
@@ -1476,6 +1490,11 @@ core-js-compat@^3.21.0, core-js-compat@^3.22.1: | |||
1476 | browserslist "^4.21.0" | 1490 | browserslist "^4.21.0" |
1477 | semver "7.0.0" | 1491 | semver "7.0.0" |
1478 | 1492 | ||
1493 | corser@^2.0.1: | ||
1494 | version "2.0.1" | ||
1495 | resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87" | ||
1496 | integrity sha512-utCYNzRSQIZNPIcGZdQc92UVJYAhtGAteCFg0yRaFm8f0P+CPtyGyHXJcGXnffjCybUCEx3FQ2G7U3/o9eIkVQ== | ||
1497 | |||
1479 | cross-spawn@^7.0.2: | 1498 | cross-spawn@^7.0.2: |
1480 | version "7.0.3" | 1499 | version "7.0.3" |
1481 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" | 1500 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" |
@@ -1500,6 +1519,13 @@ csstype@^2.6.8: | |||
1500 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda" | 1519 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.20.tgz#9229c65ea0b260cf4d3d997cb06288e36a8d6dda" |
1501 | integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA== | 1520 | integrity sha512-/WwNkdXfckNgw6S5R125rrW8ez139lBHWouiBvX8dfMFtcn6V81REDqnH7+CRpRipfYlyU1CmOnOxrmGcFOjeA== |
1502 | 1521 | ||
1522 | debug@^3.2.7: | ||
1523 | version "3.2.7" | ||
1524 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" | ||
1525 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== | ||
1526 | dependencies: | ||
1527 | ms "^2.1.1" | ||
1528 | |||
1503 | debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: | 1529 | debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4: |
1504 | version "4.3.4" | 1530 | version "4.3.4" |
1505 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" | 1531 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" |
@@ -1872,6 +1898,11 @@ esutils@^2.0.2: | |||
1872 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" | 1898 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" |
1873 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== | 1899 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== |
1874 | 1900 | ||
1901 | eventemitter3@^4.0.0: | ||
1902 | version "4.0.7" | ||
1903 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" | ||
1904 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== | ||
1905 | |||
1875 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: | 1906 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: |
1876 | version "3.1.3" | 1907 | version "3.1.3" |
1877 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" | 1908 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" |
@@ -1952,6 +1983,11 @@ flatted@^3.1.0: | |||
1952 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" | 1983 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.6.tgz#022e9218c637f9f3fc9c35ab9c9193f05add60b2" |
1953 | integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== | 1984 | integrity sha512-0sQoMh9s0BYsm+12Huy/rkKxVu4R1+r96YX5cG44rHV0pQ6iC3Q+mkoMFaGWObMFYQxCVT+ssG1ksneA2MI9KQ== |
1954 | 1985 | ||
1986 | follow-redirects@^1.0.0: | ||
1987 | version "1.15.2" | ||
1988 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" | ||
1989 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== | ||
1990 | |||
1955 | fs-extra@^9.0.1: | 1991 | fs-extra@^9.0.1: |
1956 | version "9.1.0" | 1992 | version "9.1.0" |
1957 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" | 1993 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" |
@@ -2108,6 +2144,53 @@ has@^1.0.3: | |||
2108 | dependencies: | 2144 | dependencies: |
2109 | function-bind "^1.1.1" | 2145 | function-bind "^1.1.1" |
2110 | 2146 | ||
2147 | he@^1.2.0: | ||
2148 | version "1.2.0" | ||
2149 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" | ||
2150 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== | ||
2151 | |||
2152 | html-encoding-sniffer@^3.0.0: | ||
2153 | version "3.0.0" | ||
2154 | resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" | ||
2155 | integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== | ||
2156 | dependencies: | ||
2157 | whatwg-encoding "^2.0.0" | ||
2158 | |||
2159 | http-proxy@^1.18.1: | ||
2160 | version "1.18.1" | ||
2161 | resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" | ||
2162 | integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== | ||
2163 | dependencies: | ||
2164 | eventemitter3 "^4.0.0" | ||
2165 | follow-redirects "^1.0.0" | ||
2166 | requires-port "^1.0.0" | ||
2167 | |||
2168 | http-server@^14.1.1: | ||
2169 | version "14.1.1" | ||
2170 | resolved "https://registry.yarnpkg.com/http-server/-/http-server-14.1.1.tgz#d60fbb37d7c2fdff0f0fbff0d0ee6670bd285e2e" | ||
2171 | integrity sha512-+cbxadF40UXd9T01zUHgA+rlo2Bg1Srer4+B4NwIHdaGxAGGv59nYRnGGDJ9LBk7alpS0US+J+bLLdQOOkJq4A== | ||
2172 | dependencies: | ||
2173 | basic-auth "^2.0.1" | ||
2174 | chalk "^4.1.2" | ||
2175 | corser "^2.0.1" | ||
2176 | he "^1.2.0" | ||
2177 | html-encoding-sniffer "^3.0.0" | ||
2178 | http-proxy "^1.18.1" | ||
2179 | mime "^1.6.0" | ||
2180 | minimist "^1.2.6" | ||
2181 | opener "^1.5.1" | ||
2182 | portfinder "^1.0.28" | ||
2183 | secure-compare "3.0.1" | ||
2184 | union "~0.5.0" | ||
2185 | url-join "^4.0.1" | ||
2186 | |||
2187 | iconv-lite@0.6.3: | ||
2188 | version "0.6.3" | ||
2189 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" | ||
2190 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== | ||
2191 | dependencies: | ||
2192 | safer-buffer ">= 2.1.2 < 3.0.0" | ||
2193 | |||
2111 | idb@^7.0.1: | 2194 | idb@^7.0.1: |
2112 | version "7.1.0" | 2195 | version "7.1.0" |
2113 | resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.0.tgz#2cc886be57738419e57f9aab58f647e5e2160270" | 2196 | resolved "https://registry.yarnpkg.com/idb/-/idb-7.1.0.tgz#2cc886be57738419e57f9aab58f647e5e2160270" |
@@ -2414,7 +2497,7 @@ lodash.sortby@^4.7.0: | |||
2414 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" | 2497 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" |
2415 | integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== | 2498 | integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== |
2416 | 2499 | ||
2417 | lodash@^4.17.20, lodash@^4.17.21: | 2500 | lodash@^4.17.14, lodash@^4.17.20, lodash@^4.17.21: |
2418 | version "4.17.21" | 2501 | version "4.17.21" |
2419 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" | 2502 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" |
2420 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== | 2503 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== |
@@ -2451,6 +2534,11 @@ micromatch@^4.0.4: | |||
2451 | braces "^3.0.2" | 2534 | braces "^3.0.2" |
2452 | picomatch "^2.3.1" | 2535 | picomatch "^2.3.1" |
2453 | 2536 | ||
2537 | mime@^1.6.0: | ||
2538 | version "1.6.0" | ||
2539 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" | ||
2540 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== | ||
2541 | |||
2454 | minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: | 2542 | minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: |
2455 | version "3.1.2" | 2543 | version "3.1.2" |
2456 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" | 2544 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" |
@@ -2465,11 +2553,28 @@ minimatch@^5.0.1: | |||
2465 | dependencies: | 2553 | dependencies: |
2466 | brace-expansion "^2.0.1" | 2554 | brace-expansion "^2.0.1" |
2467 | 2555 | ||
2556 | minimist@^1.2.6: | ||
2557 | version "1.2.7" | ||
2558 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18" | ||
2559 | integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g== | ||
2560 | |||
2561 | mkdirp@^0.5.6: | ||
2562 | version "0.5.6" | ||
2563 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" | ||
2564 | integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== | ||
2565 | dependencies: | ||
2566 | minimist "^1.2.6" | ||
2567 | |||
2468 | ms@2.1.2: | 2568 | ms@2.1.2: |
2469 | version "2.1.2" | 2569 | version "2.1.2" |
2470 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" | 2570 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" |
2471 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== | 2571 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== |
2472 | 2572 | ||
2573 | ms@^2.1.1: | ||
2574 | version "2.1.3" | ||
2575 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" | ||
2576 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== | ||
2577 | |||
2473 | nanoid@^3.3.4: | 2578 | nanoid@^3.3.4: |
2474 | version "3.3.4" | 2579 | version "3.3.4" |
2475 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" | 2580 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" |
@@ -2524,6 +2629,11 @@ once@^1.3.0: | |||
2524 | dependencies: | 2629 | dependencies: |
2525 | wrappy "1" | 2630 | wrappy "1" |
2526 | 2631 | ||
2632 | opener@^1.5.1: | ||
2633 | version "1.5.2" | ||
2634 | resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" | ||
2635 | integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== | ||
2636 | |||
2527 | optionator@^0.9.1: | 2637 | optionator@^0.9.1: |
2528 | version "0.9.1" | 2638 | version "0.9.1" |
2529 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" | 2639 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" |
@@ -2587,6 +2697,15 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: | |||
2587 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" | 2697 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" |
2588 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== | 2698 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== |
2589 | 2699 | ||
2700 | portfinder@^1.0.28: | ||
2701 | version "1.0.32" | ||
2702 | resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.32.tgz#2fe1b9e58389712429dc2bea5beb2146146c7f81" | ||
2703 | integrity sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg== | ||
2704 | dependencies: | ||
2705 | async "^2.6.4" | ||
2706 | debug "^3.2.7" | ||
2707 | mkdirp "^0.5.6" | ||
2708 | |||
2590 | postcss-selector-parser@^6.0.9: | 2709 | postcss-selector-parser@^6.0.9: |
2591 | version "6.0.10" | 2710 | version "6.0.10" |
2592 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" | 2711 | resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz#79b61e2c0d1bfc2602d549e11d0876256f8df88d" |
@@ -2645,6 +2764,13 @@ punycode@^2.1.0: | |||
2645 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" | 2764 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" |
2646 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== | 2765 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== |
2647 | 2766 | ||
2767 | qs@^6.4.0: | ||
2768 | version "6.11.0" | ||
2769 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" | ||
2770 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== | ||
2771 | dependencies: | ||
2772 | side-channel "^1.0.4" | ||
2773 | |||
2648 | queue-microtask@^1.2.2: | 2774 | queue-microtask@^1.2.2: |
2649 | version "1.2.3" | 2775 | version "1.2.3" |
2650 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" | 2776 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" |
@@ -2731,6 +2857,11 @@ require-from-string@^2.0.2: | |||
2731 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" | 2857 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" |
2732 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== | 2858 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== |
2733 | 2859 | ||
2860 | requires-port@^1.0.0: | ||
2861 | version "1.0.0" | ||
2862 | resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" | ||
2863 | integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== | ||
2864 | |||
2734 | resolve-from@^4.0.0: | 2865 | resolve-from@^4.0.0: |
2735 | version "4.0.0" | 2866 | version "4.0.0" |
2736 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" | 2867 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" |
@@ -2788,15 +2919,20 @@ run-parallel@^1.1.9: | |||
2788 | dependencies: | 2919 | dependencies: |
2789 | queue-microtask "^1.2.2" | 2920 | queue-microtask "^1.2.2" |
2790 | 2921 | ||
2922 | safe-buffer@5.1.2, safe-buffer@~5.1.1: | ||
2923 | version "5.1.2" | ||
2924 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" | ||
2925 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== | ||
2926 | |||
2791 | safe-buffer@^5.1.0: | 2927 | safe-buffer@^5.1.0: |
2792 | version "5.2.1" | 2928 | version "5.2.1" |
2793 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" | 2929 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" |
2794 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== | 2930 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== |
2795 | 2931 | ||
2796 | safe-buffer@~5.1.1: | 2932 | "safer-buffer@>= 2.1.2 < 3.0.0": |
2797 | version "5.1.2" | 2933 | version "2.1.2" |
2798 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" | 2934 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" |
2799 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== | 2935 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== |
2800 | 2936 | ||
2801 | sass@^1.55.0: | 2937 | sass@^1.55.0: |
2802 | version "1.55.0" | 2938 | version "1.55.0" |
@@ -2807,6 +2943,11 @@ sass@^1.55.0: | |||
2807 | immutable "^4.0.0" | 2943 | immutable "^4.0.0" |
2808 | source-map-js ">=0.6.2 <2.0.0" | 2944 | source-map-js ">=0.6.2 <2.0.0" |
2809 | 2945 | ||
2946 | secure-compare@3.0.1: | ||
2947 | version "3.0.1" | ||
2948 | resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3" | ||
2949 | integrity sha512-AckIIV90rPDcBcglUwXPF3kg0P0qmPsPXAj6BBEENQE1p5yA1xfmDJzfi1Tappj37Pv2mVbKpL3Z1T+Nn7k1Qw== | ||
2950 | |||
2810 | semver@7.0.0: | 2951 | semver@7.0.0: |
2811 | version "7.0.0" | 2952 | version "7.0.0" |
2812 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" | 2953 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" |
@@ -3058,6 +3199,13 @@ unicode-property-aliases-ecmascript@^2.0.0: | |||
3058 | resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" | 3199 | resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz#0a36cb9a585c4f6abd51ad1deddb285c165297c8" |
3059 | integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== | 3200 | integrity sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ== |
3060 | 3201 | ||
3202 | union@~0.5.0: | ||
3203 | version "0.5.0" | ||
3204 | resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075" | ||
3205 | integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA== | ||
3206 | dependencies: | ||
3207 | qs "^6.4.0" | ||
3208 | |||
3061 | unique-string@^2.0.0: | 3209 | unique-string@^2.0.0: |
3062 | version "2.0.0" | 3210 | version "2.0.0" |
3063 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" | 3211 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" |
@@ -3090,6 +3238,11 @@ uri-js@^4.2.2: | |||
3090 | dependencies: | 3238 | dependencies: |
3091 | punycode "^2.1.0" | 3239 | punycode "^2.1.0" |
3092 | 3240 | ||
3241 | url-join@^4.0.1: | ||
3242 | version "4.0.1" | ||
3243 | resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" | ||
3244 | integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== | ||
3245 | |||
3093 | util-deprecate@^1.0.2: | 3246 | util-deprecate@^1.0.2: |
3094 | version "1.0.2" | 3247 | version "1.0.2" |
3095 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" | 3248 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" |
@@ -3148,6 +3301,13 @@ webidl-conversions@^4.0.2: | |||
3148 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" | 3301 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" |
3149 | integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== | 3302 | integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== |
3150 | 3303 | ||
3304 | whatwg-encoding@^2.0.0: | ||
3305 | version "2.0.0" | ||
3306 | resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" | ||
3307 | integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== | ||
3308 | dependencies: | ||
3309 | iconv-lite "0.6.3" | ||
3310 | |||
3151 | whatwg-url@^7.0.0: | 3311 | whatwg-url@^7.0.0: |
3152 | version "7.1.0" | 3312 | version "7.1.0" |
3153 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" | 3313 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" |