├── .gitignore
├── .idea
├── .gitignore
├── codeStyles
│ ├── Project.xml
│ └── codeStyleConfig.xml
├── misc.xml
├── modules.xml
├── modules
│ ├── typelevel-project-build.iml
│ └── typelevel-project.iml
├── sbt.xml
├── scala_compiler.xml
├── scala_settings.xml
└── vcs.xml
├── .scalafmt.conf
├── .vscode
└── settings.json
├── README.md
├── app
├── app.js
├── css
│ └── style.css
├── index.html
├── package-lock.json
├── package.json
├── src
│ └── main
│ │ └── scala
│ │ └── com
│ │ └── rockthejvm
│ │ └── livedemo
│ │ └── App.scala
└── static
│ └── img
│ ├── accordion-add-img.png
│ ├── accordion-minus-img.png
│ ├── fiery-lava 128x128.png
│ ├── icon.png
│ ├── resume.png
│ └── social-banner.png
├── build.sbt
├── common
└── shared
│ └── src
│ └── main
│ └── scala
│ └── com
│ └── rockthejvm
│ └── livedemo
│ └── domain
│ └── job.scala
├── db
├── docker-compose.yml
└── sql
│ └── db.sql
├── project
├── build.properties
├── metals.sbt
├── plugins.sbt
└── project
│ ├── metals.sbt
│ └── project
│ └── metals.sbt
└── server
└── src
└── main
└── scala
└── com
└── rockthejvm
└── livedemo
├── Application.scala
├── core
├── Dummy.scala
└── Jobs.scala
└── http
└── JobRoutes.scala
/.gitignore:
--------------------------------------------------------------------------------
1 | # Created by https://www.toptal.com/developers/gitignore/api/scala,intellij,sbt
2 | # Edit at https://www.toptal.com/developers/gitignore?templates=scala,intellij,sbt
3 |
4 | ### Intellij ###
5 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
6 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
7 |
8 | # User-specific stuff
9 | .idea/**/workspace.xml
10 | .idea/**/tasks.xml
11 | .idea/**/usage.statistics.xml
12 | .idea/**/dictionaries
13 | .idea/**/shelf
14 |
15 | # AWS User-specific
16 | .idea/**/aws.xml
17 |
18 | # Generated files
19 | .idea/**/contentModel.xml
20 |
21 | # Sensitive or high-churn files
22 | .idea/**/dataSources/
23 | .idea/**/dataSources.ids
24 | .idea/**/dataSources.local.xml
25 | .idea/**/sqlDataSources.xml
26 | .idea/**/dynamic.xml
27 | .idea/**/uiDesigner.xml
28 | .idea/**/dbnavigator.xml
29 |
30 | # Gradle
31 | .idea/**/gradle.xml
32 | .idea/**/libraries
33 |
34 | # Gradle and Maven with auto-import
35 | # When using Gradle or Maven with auto-import, you should exclude module files,
36 | # since they will be recreated, and may cause churn. Uncomment if using
37 | # auto-import.
38 | # .idea/artifacts
39 | # .idea/compiler.xml
40 | # .idea/jarRepositories.xml
41 | # .idea/modules.xml
42 | # .idea/*.iml
43 | # .idea/modules
44 | # *.iml
45 | # *.ipr
46 |
47 | # CMake
48 | cmake-build-*/
49 |
50 | # Mongo Explorer plugin
51 | .idea/**/mongoSettings.xml
52 |
53 | # File-based project format
54 | *.iws
55 |
56 | # IntelliJ
57 | out/
58 |
59 | # mpeltonen/sbt-idea plugin
60 | .idea_modules/
61 |
62 | # JIRA plugin
63 | atlassian-ide-plugin.xml
64 |
65 | # Cursive Clojure plugin
66 | .idea/replstate.xml
67 |
68 | # SonarLint plugin
69 | .idea/sonarlint/
70 |
71 | # Crashlytics plugin (for Android Studio and IntelliJ)
72 | com_crashlytics_export_strings.xml
73 | crashlytics.properties
74 | crashlytics-build.properties
75 | fabric.properties
76 |
77 | # Editor-based Rest Client
78 | .idea/httpRequests
79 |
80 | # Android studio 3.1+ serialized cache file
81 | .idea/caches/build_file_checksums.ser
82 |
83 | ### Intellij Patch ###
84 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721
85 |
86 | # *.iml
87 | # modules.xml
88 | # .idea/misc.xml
89 | # *.ipr
90 |
91 | # Sonarlint plugin
92 | # https://plugins.jetbrains.com/plugin/7973-sonarlint
93 | .idea/**/sonarlint/
94 |
95 | # SonarQube Plugin
96 | # https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin
97 | .idea/**/sonarIssues.xml
98 |
99 | # Markdown Navigator plugin
100 | # https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced
101 | .idea/**/markdown-navigator.xml
102 | .idea/**/markdown-navigator-enh.xml
103 | .idea/**/markdown-navigator/
104 |
105 | # Cache file creation bug
106 | # See https://youtrack.jetbrains.com/issue/JBR-2257
107 | .idea/$CACHE_FILE$
108 |
109 | # CodeStream plugin
110 | # https://plugins.jetbrains.com/plugin/12206-codestream
111 | .idea/codestream.xml
112 |
113 | # Azure Toolkit for IntelliJ plugin
114 | # https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij
115 | .idea/**/azureSettings.xml
116 |
117 | ### SBT ###
118 | # Simple Build Tool
119 | # http://www.scala-sbt.org/release/docs/Getting-Started/Directories.html#configuring-version-control
120 |
121 | dist/*
122 | target/
123 | lib_managed/
124 | src_managed/
125 | project/boot/
126 | project/plugins/project/
127 | .history
128 | .cache
129 | .lib/
130 |
131 | ### SBT Patch ###
132 | .bsp/
133 |
134 | ### Scala ###
135 | *.class
136 | *.log
137 |
138 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
139 | hs_err_pid*
140 |
141 | # End of https://www.toptal.com/developers/gitignore/api/scala,intellij,sbt
142 |
143 | .bloop
144 | .bloop
145 | .bloop/**/*.tasty
146 |
147 | ### app ###
148 | app/.DS_Store
149 | app/.parcel-cache
150 | app/node_modules
151 | app/dist
152 |
153 | ### Bloop
154 | .bloop/
155 |
156 | ### Metals
157 | .metals/
158 |
159 | ### Build files
160 | app/build
161 | build/
162 |
163 | ### staging/prod configs and deployments
164 | server/src/main/resources/prod/
165 | server/src/main/resources/staging/
166 | app/dist-prod
167 | app/dist-staging
168 |
169 | **/.DS_Store
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/modules/typelevel-project-build.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
--------------------------------------------------------------------------------
/.idea/modules/typelevel-project.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
--------------------------------------------------------------------------------
/.idea/sbt.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/scala_compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/scala_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.scalafmt.conf:
--------------------------------------------------------------------------------
1 | version = "3.5.9"
2 |
3 | align.preset = more
4 | maxColumn = 100
5 | runner.dialect = scala3
6 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "files.watcherExclude": {
3 | "**/target": true
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Typelevel full-stack demo app
2 |
3 | This is a demonstration of a full-stack Scala 3 application that we write during [this video tutorial](https://youtu.be/6NHEGejBQ0w).
4 |
5 | At a MUCH greater length and in greater detail, we write a _production-grade_ full-stack application in the [Typelevel Rite of Passage](https://rockthejvm.com/p/typelevel-rite-of-passage) course, starting from the basic ideas in this tutorial.
6 |
7 | ### How to use this code
8 |
9 | Option 1 - clone the repo and write your app on top of it
10 |
11 | Option 2 - clone the repo, checkout the `start` tag and follow along with the [tutorial](https://youtu.be/6NHEGejBQ0w) - this is how you can get the maximum lessons out of the video.
12 |
--------------------------------------------------------------------------------
/app/app.js:
--------------------------------------------------------------------------------
1 | import { RockTheJvmApp } from './target/scala-3.3.1/app-fastopt.js';
2 |
3 | RockTheJvmApp.launch("app")
--------------------------------------------------------------------------------
/app/css/style.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rockthejvm/full-stack-typelevel-demo/2bc37ee04b96ac21cf88543f710083ec1e34413c/app/css/style.css
--------------------------------------------------------------------------------
/app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Rock the JVM Demo App
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/app/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "app",
3 | "lockfileVersion": 3,
4 | "requires": true,
5 | "packages": {
6 | "": {
7 | "dependencies": {
8 | "moment": "^2.29.4"
9 | },
10 | "devDependencies": {
11 | "parcel": "^2.1.0",
12 | "process": "^0.11.10",
13 | "sass": "^1.34.0"
14 | }
15 | },
16 | "node_modules/@babel/code-frame": {
17 | "version": "7.23.5",
18 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
19 | "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
20 | "dev": true,
21 | "dependencies": {
22 | "@babel/highlight": "^7.23.4",
23 | "chalk": "^2.4.2"
24 | },
25 | "engines": {
26 | "node": ">=6.9.0"
27 | }
28 | },
29 | "node_modules/@babel/code-frame/node_modules/ansi-styles": {
30 | "version": "3.2.1",
31 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
32 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
33 | "dev": true,
34 | "dependencies": {
35 | "color-convert": "^1.9.0"
36 | },
37 | "engines": {
38 | "node": ">=4"
39 | }
40 | },
41 | "node_modules/@babel/code-frame/node_modules/chalk": {
42 | "version": "2.4.2",
43 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
44 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
45 | "dev": true,
46 | "dependencies": {
47 | "ansi-styles": "^3.2.1",
48 | "escape-string-regexp": "^1.0.5",
49 | "supports-color": "^5.3.0"
50 | },
51 | "engines": {
52 | "node": ">=4"
53 | }
54 | },
55 | "node_modules/@babel/code-frame/node_modules/color-convert": {
56 | "version": "1.9.3",
57 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
58 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
59 | "dev": true,
60 | "dependencies": {
61 | "color-name": "1.1.3"
62 | }
63 | },
64 | "node_modules/@babel/code-frame/node_modules/color-name": {
65 | "version": "1.1.3",
66 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
67 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
68 | "dev": true
69 | },
70 | "node_modules/@babel/code-frame/node_modules/has-flag": {
71 | "version": "3.0.0",
72 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
73 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
74 | "dev": true,
75 | "engines": {
76 | "node": ">=4"
77 | }
78 | },
79 | "node_modules/@babel/code-frame/node_modules/supports-color": {
80 | "version": "5.5.0",
81 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
82 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
83 | "dev": true,
84 | "dependencies": {
85 | "has-flag": "^3.0.0"
86 | },
87 | "engines": {
88 | "node": ">=4"
89 | }
90 | },
91 | "node_modules/@babel/helper-validator-identifier": {
92 | "version": "7.22.20",
93 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
94 | "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
95 | "dev": true,
96 | "engines": {
97 | "node": ">=6.9.0"
98 | }
99 | },
100 | "node_modules/@babel/highlight": {
101 | "version": "7.23.4",
102 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
103 | "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
104 | "dev": true,
105 | "dependencies": {
106 | "@babel/helper-validator-identifier": "^7.22.20",
107 | "chalk": "^2.4.2",
108 | "js-tokens": "^4.0.0"
109 | },
110 | "engines": {
111 | "node": ">=6.9.0"
112 | }
113 | },
114 | "node_modules/@babel/highlight/node_modules/ansi-styles": {
115 | "version": "3.2.1",
116 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
117 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
118 | "dev": true,
119 | "dependencies": {
120 | "color-convert": "^1.9.0"
121 | },
122 | "engines": {
123 | "node": ">=4"
124 | }
125 | },
126 | "node_modules/@babel/highlight/node_modules/chalk": {
127 | "version": "2.4.2",
128 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
129 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
130 | "dev": true,
131 | "dependencies": {
132 | "ansi-styles": "^3.2.1",
133 | "escape-string-regexp": "^1.0.5",
134 | "supports-color": "^5.3.0"
135 | },
136 | "engines": {
137 | "node": ">=4"
138 | }
139 | },
140 | "node_modules/@babel/highlight/node_modules/color-convert": {
141 | "version": "1.9.3",
142 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
143 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
144 | "dev": true,
145 | "dependencies": {
146 | "color-name": "1.1.3"
147 | }
148 | },
149 | "node_modules/@babel/highlight/node_modules/color-name": {
150 | "version": "1.1.3",
151 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
152 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
153 | "dev": true
154 | },
155 | "node_modules/@babel/highlight/node_modules/has-flag": {
156 | "version": "3.0.0",
157 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
158 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
159 | "dev": true,
160 | "engines": {
161 | "node": ">=4"
162 | }
163 | },
164 | "node_modules/@babel/highlight/node_modules/supports-color": {
165 | "version": "5.5.0",
166 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
167 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
168 | "dev": true,
169 | "dependencies": {
170 | "has-flag": "^3.0.0"
171 | },
172 | "engines": {
173 | "node": ">=4"
174 | }
175 | },
176 | "node_modules/@lezer/common": {
177 | "version": "1.2.1",
178 | "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.1.tgz",
179 | "integrity": "sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==",
180 | "dev": true
181 | },
182 | "node_modules/@lezer/lr": {
183 | "version": "1.3.14",
184 | "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.14.tgz",
185 | "integrity": "sha512-z5mY4LStlA3yL7aHT/rqgG614cfcvklS+8oFRFBYrs4YaWLJyKKM4+nN6KopToX0o9Hj6zmH6M5kinOYuy06ug==",
186 | "dev": true,
187 | "dependencies": {
188 | "@lezer/common": "^1.0.0"
189 | }
190 | },
191 | "node_modules/@lmdb/lmdb-darwin-arm64": {
192 | "version": "2.8.5",
193 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.8.5.tgz",
194 | "integrity": "sha512-KPDeVScZgA1oq0CiPBcOa3kHIqU+pTOwRFDIhxvmf8CTNvqdZQYp5cCKW0bUk69VygB2PuTiINFWbY78aR2pQw==",
195 | "cpu": [
196 | "arm64"
197 | ],
198 | "dev": true,
199 | "optional": true,
200 | "os": [
201 | "darwin"
202 | ]
203 | },
204 | "node_modules/@lmdb/lmdb-darwin-x64": {
205 | "version": "2.8.5",
206 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.8.5.tgz",
207 | "integrity": "sha512-w/sLhN4T7MW1nB3R/U8WK5BgQLz904wh+/SmA2jD8NnF7BLLoUgflCNxOeSPOWp8geP6nP/+VjWzZVip7rZ1ug==",
208 | "cpu": [
209 | "x64"
210 | ],
211 | "dev": true,
212 | "optional": true,
213 | "os": [
214 | "darwin"
215 | ]
216 | },
217 | "node_modules/@lmdb/lmdb-linux-arm": {
218 | "version": "2.8.5",
219 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.8.5.tgz",
220 | "integrity": "sha512-c0TGMbm2M55pwTDIfkDLB6BpIsgxV4PjYck2HiOX+cy/JWiBXz32lYbarPqejKs9Flm7YVAKSILUducU9g2RVg==",
221 | "cpu": [
222 | "arm"
223 | ],
224 | "dev": true,
225 | "optional": true,
226 | "os": [
227 | "linux"
228 | ]
229 | },
230 | "node_modules/@lmdb/lmdb-linux-arm64": {
231 | "version": "2.8.5",
232 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.8.5.tgz",
233 | "integrity": "sha512-vtbZRHH5UDlL01TT5jB576Zox3+hdyogvpcbvVJlmU5PdL3c5V7cj1EODdh1CHPksRl+cws/58ugEHi8bcj4Ww==",
234 | "cpu": [
235 | "arm64"
236 | ],
237 | "dev": true,
238 | "optional": true,
239 | "os": [
240 | "linux"
241 | ]
242 | },
243 | "node_modules/@lmdb/lmdb-linux-x64": {
244 | "version": "2.8.5",
245 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.8.5.tgz",
246 | "integrity": "sha512-Xkc8IUx9aEhP0zvgeKy7IQ3ReX2N8N1L0WPcQwnZweWmOuKfwpS3GRIYqLtK5za/w3E60zhFfNdS+3pBZPytqQ==",
247 | "cpu": [
248 | "x64"
249 | ],
250 | "dev": true,
251 | "optional": true,
252 | "os": [
253 | "linux"
254 | ]
255 | },
256 | "node_modules/@lmdb/lmdb-win32-x64": {
257 | "version": "2.8.5",
258 | "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.8.5.tgz",
259 | "integrity": "sha512-4wvrf5BgnR8RpogHhtpCPJMKBmvyZPhhUtEwMJbXh0ni2BucpfF07jlmyM11zRqQ2XIq6PbC2j7W7UCCcm1rRQ==",
260 | "cpu": [
261 | "x64"
262 | ],
263 | "dev": true,
264 | "optional": true,
265 | "os": [
266 | "win32"
267 | ]
268 | },
269 | "node_modules/@mischnic/json-sourcemap": {
270 | "version": "0.1.1",
271 | "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.1.tgz",
272 | "integrity": "sha512-iA7+tyVqfrATAIsIRWQG+a7ZLLD0VaOCKV2Wd/v4mqIU3J9c4jx9p7S0nw1XH3gJCKNBOOwACOPYYSUu9pgT+w==",
273 | "dev": true,
274 | "dependencies": {
275 | "@lezer/common": "^1.0.0",
276 | "@lezer/lr": "^1.0.0",
277 | "json5": "^2.2.1"
278 | },
279 | "engines": {
280 | "node": ">=12.0.0"
281 | }
282 | },
283 | "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": {
284 | "version": "3.0.2",
285 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz",
286 | "integrity": "sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==",
287 | "cpu": [
288 | "arm64"
289 | ],
290 | "dev": true,
291 | "optional": true,
292 | "os": [
293 | "darwin"
294 | ]
295 | },
296 | "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": {
297 | "version": "3.0.2",
298 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz",
299 | "integrity": "sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==",
300 | "cpu": [
301 | "x64"
302 | ],
303 | "dev": true,
304 | "optional": true,
305 | "os": [
306 | "darwin"
307 | ]
308 | },
309 | "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": {
310 | "version": "3.0.2",
311 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz",
312 | "integrity": "sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==",
313 | "cpu": [
314 | "arm"
315 | ],
316 | "dev": true,
317 | "optional": true,
318 | "os": [
319 | "linux"
320 | ]
321 | },
322 | "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": {
323 | "version": "3.0.2",
324 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz",
325 | "integrity": "sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==",
326 | "cpu": [
327 | "arm64"
328 | ],
329 | "dev": true,
330 | "optional": true,
331 | "os": [
332 | "linux"
333 | ]
334 | },
335 | "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": {
336 | "version": "3.0.2",
337 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz",
338 | "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==",
339 | "cpu": [
340 | "x64"
341 | ],
342 | "dev": true,
343 | "optional": true,
344 | "os": [
345 | "linux"
346 | ]
347 | },
348 | "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": {
349 | "version": "3.0.2",
350 | "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz",
351 | "integrity": "sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==",
352 | "cpu": [
353 | "x64"
354 | ],
355 | "dev": true,
356 | "optional": true,
357 | "os": [
358 | "win32"
359 | ]
360 | },
361 | "node_modules/@parcel/bundler-default": {
362 | "version": "2.11.0",
363 | "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.11.0.tgz",
364 | "integrity": "sha512-ZIs0865Lp871ZK83k5I9L4DeeE26muNMrHa7j8bvls6fKBJKAn8djrhfU4XOLyziU4aAOobcPwXU0+npWqs52g==",
365 | "dev": true,
366 | "dependencies": {
367 | "@parcel/diagnostic": "2.11.0",
368 | "@parcel/graph": "3.1.0",
369 | "@parcel/plugin": "2.11.0",
370 | "@parcel/rust": "2.11.0",
371 | "@parcel/utils": "2.11.0",
372 | "nullthrows": "^1.1.1"
373 | },
374 | "engines": {
375 | "node": ">= 12.0.0",
376 | "parcel": "^2.11.0"
377 | },
378 | "funding": {
379 | "type": "opencollective",
380 | "url": "https://opencollective.com/parcel"
381 | }
382 | },
383 | "node_modules/@parcel/cache": {
384 | "version": "2.11.0",
385 | "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.11.0.tgz",
386 | "integrity": "sha512-RSSkGNjO00lJPyftzaC9eaNVs4jMjPSAm0VJNWQ9JSm2n4A9BzQtTFAt1vhJOzzW1UsQvvBge9DdfkB7a2gIOw==",
387 | "dev": true,
388 | "dependencies": {
389 | "@parcel/fs": "2.11.0",
390 | "@parcel/logger": "2.11.0",
391 | "@parcel/utils": "2.11.0",
392 | "lmdb": "2.8.5"
393 | },
394 | "engines": {
395 | "node": ">= 12.0.0"
396 | },
397 | "funding": {
398 | "type": "opencollective",
399 | "url": "https://opencollective.com/parcel"
400 | },
401 | "peerDependencies": {
402 | "@parcel/core": "^2.11.0"
403 | }
404 | },
405 | "node_modules/@parcel/codeframe": {
406 | "version": "2.11.0",
407 | "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.11.0.tgz",
408 | "integrity": "sha512-YHs9g/i5af/sd/JrWAojU9YFbKffcJ3Tx2EJaK0ME8OJsye91UaI/3lxSUYLmJG9e4WLNJtqci8V5FBMz//ZPg==",
409 | "dev": true,
410 | "dependencies": {
411 | "chalk": "^4.1.0"
412 | },
413 | "engines": {
414 | "node": ">= 12.0.0"
415 | },
416 | "funding": {
417 | "type": "opencollective",
418 | "url": "https://opencollective.com/parcel"
419 | }
420 | },
421 | "node_modules/@parcel/compressor-raw": {
422 | "version": "2.11.0",
423 | "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.11.0.tgz",
424 | "integrity": "sha512-RArhBPRTCfz77soX2IECH09NUd76UBWujXiPRcXGPIHK+C3L1cRuzsNcA39QeSb3thz3b99JcozMJ1nkC2Bsgw==",
425 | "dev": true,
426 | "dependencies": {
427 | "@parcel/plugin": "2.11.0"
428 | },
429 | "engines": {
430 | "node": ">= 12.0.0",
431 | "parcel": "^2.11.0"
432 | },
433 | "funding": {
434 | "type": "opencollective",
435 | "url": "https://opencollective.com/parcel"
436 | }
437 | },
438 | "node_modules/@parcel/config-default": {
439 | "version": "2.11.0",
440 | "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.11.0.tgz",
441 | "integrity": "sha512-1e2+qcZkm5/0f4eI20p/DemcYiSxq9d/eyjpTXA7PulJaHbL1wonwUAuy3mvnAvDnLOJmAk/obDVgX1ZfxMGtg==",
442 | "dev": true,
443 | "dependencies": {
444 | "@parcel/bundler-default": "2.11.0",
445 | "@parcel/compressor-raw": "2.11.0",
446 | "@parcel/namer-default": "2.11.0",
447 | "@parcel/optimizer-css": "2.11.0",
448 | "@parcel/optimizer-htmlnano": "2.11.0",
449 | "@parcel/optimizer-image": "2.11.0",
450 | "@parcel/optimizer-svgo": "2.11.0",
451 | "@parcel/optimizer-swc": "2.11.0",
452 | "@parcel/packager-css": "2.11.0",
453 | "@parcel/packager-html": "2.11.0",
454 | "@parcel/packager-js": "2.11.0",
455 | "@parcel/packager-raw": "2.11.0",
456 | "@parcel/packager-svg": "2.11.0",
457 | "@parcel/packager-wasm": "2.11.0",
458 | "@parcel/reporter-dev-server": "2.11.0",
459 | "@parcel/resolver-default": "2.11.0",
460 | "@parcel/runtime-browser-hmr": "2.11.0",
461 | "@parcel/runtime-js": "2.11.0",
462 | "@parcel/runtime-react-refresh": "2.11.0",
463 | "@parcel/runtime-service-worker": "2.11.0",
464 | "@parcel/transformer-babel": "2.11.0",
465 | "@parcel/transformer-css": "2.11.0",
466 | "@parcel/transformer-html": "2.11.0",
467 | "@parcel/transformer-image": "2.11.0",
468 | "@parcel/transformer-js": "2.11.0",
469 | "@parcel/transformer-json": "2.11.0",
470 | "@parcel/transformer-postcss": "2.11.0",
471 | "@parcel/transformer-posthtml": "2.11.0",
472 | "@parcel/transformer-raw": "2.11.0",
473 | "@parcel/transformer-react-refresh-wrap": "2.11.0",
474 | "@parcel/transformer-svg": "2.11.0"
475 | },
476 | "funding": {
477 | "type": "opencollective",
478 | "url": "https://opencollective.com/parcel"
479 | },
480 | "peerDependencies": {
481 | "@parcel/core": "^2.11.0"
482 | }
483 | },
484 | "node_modules/@parcel/core": {
485 | "version": "2.11.0",
486 | "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.11.0.tgz",
487 | "integrity": "sha512-Npe0S6hVaqWEwRL+HI7gtOYOaoE5bJQZTgUDhsDoppWbau51jOlRYOZTXuvRK/jxXnze4/S1sdM24xBYAQ5qkw==",
488 | "dev": true,
489 | "dependencies": {
490 | "@mischnic/json-sourcemap": "^0.1.0",
491 | "@parcel/cache": "2.11.0",
492 | "@parcel/diagnostic": "2.11.0",
493 | "@parcel/events": "2.11.0",
494 | "@parcel/fs": "2.11.0",
495 | "@parcel/graph": "3.1.0",
496 | "@parcel/logger": "2.11.0",
497 | "@parcel/package-manager": "2.11.0",
498 | "@parcel/plugin": "2.11.0",
499 | "@parcel/profiler": "2.11.0",
500 | "@parcel/rust": "2.11.0",
501 | "@parcel/source-map": "^2.1.1",
502 | "@parcel/types": "2.11.0",
503 | "@parcel/utils": "2.11.0",
504 | "@parcel/workers": "2.11.0",
505 | "abortcontroller-polyfill": "^1.1.9",
506 | "base-x": "^3.0.8",
507 | "browserslist": "^4.6.6",
508 | "clone": "^2.1.1",
509 | "dotenv": "^7.0.0",
510 | "dotenv-expand": "^5.1.0",
511 | "json5": "^2.2.0",
512 | "msgpackr": "^1.9.9",
513 | "nullthrows": "^1.1.1",
514 | "semver": "^7.5.2"
515 | },
516 | "engines": {
517 | "node": ">= 12.0.0"
518 | },
519 | "funding": {
520 | "type": "opencollective",
521 | "url": "https://opencollective.com/parcel"
522 | }
523 | },
524 | "node_modules/@parcel/diagnostic": {
525 | "version": "2.11.0",
526 | "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.11.0.tgz",
527 | "integrity": "sha512-4dJmOXVL5YGGQRRsQosQbSRONBcboB71mSwaeaEgz3pPdq9QXVPLACkGe/jTXSqa3OnAHu3g5vQLpE1g5xqBqw==",
528 | "dev": true,
529 | "dependencies": {
530 | "@mischnic/json-sourcemap": "^0.1.0",
531 | "nullthrows": "^1.1.1"
532 | },
533 | "engines": {
534 | "node": ">= 12.0.0"
535 | },
536 | "funding": {
537 | "type": "opencollective",
538 | "url": "https://opencollective.com/parcel"
539 | }
540 | },
541 | "node_modules/@parcel/events": {
542 | "version": "2.11.0",
543 | "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.11.0.tgz",
544 | "integrity": "sha512-K6SOjOrQsz1GdNl2qKBktq7KJ3Q3yxK8WXdmQYo10wG39dr051xtMb38aqieTp4eVhL8Yaq2iJgGkdr11fuBnA==",
545 | "dev": true,
546 | "engines": {
547 | "node": ">= 12.0.0"
548 | },
549 | "funding": {
550 | "type": "opencollective",
551 | "url": "https://opencollective.com/parcel"
552 | }
553 | },
554 | "node_modules/@parcel/fs": {
555 | "version": "2.11.0",
556 | "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.11.0.tgz",
557 | "integrity": "sha512-zWckdnnovdrgdFX4QYuQV4bbKCsh6IYCkmwaB4yp47rhw1MP0lkBINLt4yFPHBxWXOpElCfxjL+z69c9xJQRBQ==",
558 | "dev": true,
559 | "dependencies": {
560 | "@parcel/rust": "2.11.0",
561 | "@parcel/types": "2.11.0",
562 | "@parcel/utils": "2.11.0",
563 | "@parcel/watcher": "^2.0.7",
564 | "@parcel/workers": "2.11.0"
565 | },
566 | "engines": {
567 | "node": ">= 12.0.0"
568 | },
569 | "funding": {
570 | "type": "opencollective",
571 | "url": "https://opencollective.com/parcel"
572 | },
573 | "peerDependencies": {
574 | "@parcel/core": "^2.11.0"
575 | }
576 | },
577 | "node_modules/@parcel/graph": {
578 | "version": "3.1.0",
579 | "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-3.1.0.tgz",
580 | "integrity": "sha512-d1dTW5C7A52HgDtoXlyvlET1ypSlmIxSIZOJ1xp3R9L9hgo3h1u3jHNyaoTe/WPkGVe2QnFxh0h+UibVJhu9vg==",
581 | "dev": true,
582 | "dependencies": {
583 | "nullthrows": "^1.1.1"
584 | },
585 | "engines": {
586 | "node": ">= 12.0.0"
587 | },
588 | "funding": {
589 | "type": "opencollective",
590 | "url": "https://opencollective.com/parcel"
591 | }
592 | },
593 | "node_modules/@parcel/logger": {
594 | "version": "2.11.0",
595 | "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.11.0.tgz",
596 | "integrity": "sha512-HtMEdCq3LKnvv4T2CIskcqlf2gpBvHMm3pkeUFB/hc/7hW/hE1k6/HA2VOQvc0tBsaMpmEx7PCrfrH56usQSyA==",
597 | "dev": true,
598 | "dependencies": {
599 | "@parcel/diagnostic": "2.11.0",
600 | "@parcel/events": "2.11.0"
601 | },
602 | "engines": {
603 | "node": ">= 12.0.0"
604 | },
605 | "funding": {
606 | "type": "opencollective",
607 | "url": "https://opencollective.com/parcel"
608 | }
609 | },
610 | "node_modules/@parcel/markdown-ansi": {
611 | "version": "2.11.0",
612 | "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.11.0.tgz",
613 | "integrity": "sha512-YA60EWbXi6cLOIzcwRC2wijotPauOGQbUi0vSbu0O6/mjQ68kWCMGz0hwZjDRQcPypQVJEIvTgMymLbvumxwhg==",
614 | "dev": true,
615 | "dependencies": {
616 | "chalk": "^4.1.0"
617 | },
618 | "engines": {
619 | "node": ">= 12.0.0"
620 | },
621 | "funding": {
622 | "type": "opencollective",
623 | "url": "https://opencollective.com/parcel"
624 | }
625 | },
626 | "node_modules/@parcel/namer-default": {
627 | "version": "2.11.0",
628 | "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.11.0.tgz",
629 | "integrity": "sha512-DEwBSKSClg4DA2xAWimYkw9bFi7MFb9TdT7/TYZStMTsfYHPWOyyjGR7aVr3Ra4wNb+XX6g4rR41yp3HD6KO7A==",
630 | "dev": true,
631 | "dependencies": {
632 | "@parcel/diagnostic": "2.11.0",
633 | "@parcel/plugin": "2.11.0",
634 | "nullthrows": "^1.1.1"
635 | },
636 | "engines": {
637 | "node": ">= 12.0.0",
638 | "parcel": "^2.11.0"
639 | },
640 | "funding": {
641 | "type": "opencollective",
642 | "url": "https://opencollective.com/parcel"
643 | }
644 | },
645 | "node_modules/@parcel/node-resolver-core": {
646 | "version": "3.2.0",
647 | "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.2.0.tgz",
648 | "integrity": "sha512-XJRSxCkNbGFWjfmwFdcQZ/qlzWZd35qLtvLz2va8euGL7M5OMEQOv7dsvEhl0R+CC2zcnfFzZwxk78q6ezs8AQ==",
649 | "dev": true,
650 | "dependencies": {
651 | "@mischnic/json-sourcemap": "^0.1.0",
652 | "@parcel/diagnostic": "2.11.0",
653 | "@parcel/fs": "2.11.0",
654 | "@parcel/rust": "2.11.0",
655 | "@parcel/utils": "2.11.0",
656 | "nullthrows": "^1.1.1",
657 | "semver": "^7.5.2"
658 | },
659 | "engines": {
660 | "node": ">= 12.0.0"
661 | },
662 | "funding": {
663 | "type": "opencollective",
664 | "url": "https://opencollective.com/parcel"
665 | }
666 | },
667 | "node_modules/@parcel/optimizer-css": {
668 | "version": "2.11.0",
669 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.11.0.tgz",
670 | "integrity": "sha512-bV97PRxshHV3dMwOpLRgcP1QNhrVWh6VVDfm2gmWULpvsjoykcPS6vrCFksY5CpQsSvNHqJBzQjWS8FubUI76w==",
671 | "dev": true,
672 | "dependencies": {
673 | "@parcel/diagnostic": "2.11.0",
674 | "@parcel/plugin": "2.11.0",
675 | "@parcel/source-map": "^2.1.1",
676 | "@parcel/utils": "2.11.0",
677 | "browserslist": "^4.6.6",
678 | "lightningcss": "^1.22.1",
679 | "nullthrows": "^1.1.1"
680 | },
681 | "engines": {
682 | "node": ">= 12.0.0",
683 | "parcel": "^2.11.0"
684 | },
685 | "funding": {
686 | "type": "opencollective",
687 | "url": "https://opencollective.com/parcel"
688 | }
689 | },
690 | "node_modules/@parcel/optimizer-htmlnano": {
691 | "version": "2.11.0",
692 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.11.0.tgz",
693 | "integrity": "sha512-c20pz4EFF5DNFmqYgptlIj49eT6xjGLkDTdHH3RRzxKovuSXWfYSPs3GED3ZsjVuQyjNQif+/MAk9547F7hrdQ==",
694 | "dev": true,
695 | "dependencies": {
696 | "@parcel/plugin": "2.11.0",
697 | "htmlnano": "^2.0.0",
698 | "nullthrows": "^1.1.1",
699 | "posthtml": "^0.16.5",
700 | "svgo": "^2.4.0"
701 | },
702 | "engines": {
703 | "node": ">= 12.0.0",
704 | "parcel": "^2.11.0"
705 | },
706 | "funding": {
707 | "type": "opencollective",
708 | "url": "https://opencollective.com/parcel"
709 | }
710 | },
711 | "node_modules/@parcel/optimizer-htmlnano/node_modules/css-select": {
712 | "version": "4.3.0",
713 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
714 | "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
715 | "dev": true,
716 | "dependencies": {
717 | "boolbase": "^1.0.0",
718 | "css-what": "^6.0.1",
719 | "domhandler": "^4.3.1",
720 | "domutils": "^2.8.0",
721 | "nth-check": "^2.0.1"
722 | },
723 | "funding": {
724 | "url": "https://github.com/sponsors/fb55"
725 | }
726 | },
727 | "node_modules/@parcel/optimizer-htmlnano/node_modules/css-tree": {
728 | "version": "1.1.3",
729 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
730 | "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
731 | "dev": true,
732 | "dependencies": {
733 | "mdn-data": "2.0.14",
734 | "source-map": "^0.6.1"
735 | },
736 | "engines": {
737 | "node": ">=8.0.0"
738 | }
739 | },
740 | "node_modules/@parcel/optimizer-htmlnano/node_modules/csso": {
741 | "version": "4.2.0",
742 | "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
743 | "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
744 | "dev": true,
745 | "dependencies": {
746 | "css-tree": "^1.1.2"
747 | },
748 | "engines": {
749 | "node": ">=8.0.0"
750 | }
751 | },
752 | "node_modules/@parcel/optimizer-htmlnano/node_modules/mdn-data": {
753 | "version": "2.0.14",
754 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
755 | "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
756 | "dev": true
757 | },
758 | "node_modules/@parcel/optimizer-htmlnano/node_modules/svgo": {
759 | "version": "2.8.0",
760 | "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz",
761 | "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==",
762 | "dev": true,
763 | "dependencies": {
764 | "@trysound/sax": "0.2.0",
765 | "commander": "^7.2.0",
766 | "css-select": "^4.1.3",
767 | "css-tree": "^1.1.3",
768 | "csso": "^4.2.0",
769 | "picocolors": "^1.0.0",
770 | "stable": "^0.1.8"
771 | },
772 | "bin": {
773 | "svgo": "bin/svgo"
774 | },
775 | "engines": {
776 | "node": ">=10.13.0"
777 | }
778 | },
779 | "node_modules/@parcel/optimizer-image": {
780 | "version": "2.11.0",
781 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.11.0.tgz",
782 | "integrity": "sha512-jCaJww5QFG2GuNzYW8nlSW+Ea+Cv47TRnOPJNquFIajgfTLJ5ddsWbaNal0GQsL8yNiCBKWd1AV4W0RH9tG0Jg==",
783 | "dev": true,
784 | "dependencies": {
785 | "@parcel/diagnostic": "2.11.0",
786 | "@parcel/plugin": "2.11.0",
787 | "@parcel/rust": "2.11.0",
788 | "@parcel/utils": "2.11.0",
789 | "@parcel/workers": "2.11.0"
790 | },
791 | "engines": {
792 | "node": ">= 12.0.0",
793 | "parcel": "^2.11.0"
794 | },
795 | "funding": {
796 | "type": "opencollective",
797 | "url": "https://opencollective.com/parcel"
798 | },
799 | "peerDependencies": {
800 | "@parcel/core": "^2.11.0"
801 | }
802 | },
803 | "node_modules/@parcel/optimizer-svgo": {
804 | "version": "2.11.0",
805 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.11.0.tgz",
806 | "integrity": "sha512-TQpvfBhjV2IsuFHXUolbDS6XWB3DDR2rYTlqlA8LMmuOY7jQd9Bnkl4JnapzWm/bRuzRlzdGjjVCPGL8iShFvA==",
807 | "dev": true,
808 | "dependencies": {
809 | "@parcel/diagnostic": "2.11.0",
810 | "@parcel/plugin": "2.11.0",
811 | "@parcel/utils": "2.11.0",
812 | "svgo": "^2.4.0"
813 | },
814 | "engines": {
815 | "node": ">= 12.0.0",
816 | "parcel": "^2.11.0"
817 | },
818 | "funding": {
819 | "type": "opencollective",
820 | "url": "https://opencollective.com/parcel"
821 | }
822 | },
823 | "node_modules/@parcel/optimizer-svgo/node_modules/css-select": {
824 | "version": "4.3.0",
825 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz",
826 | "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==",
827 | "dev": true,
828 | "dependencies": {
829 | "boolbase": "^1.0.0",
830 | "css-what": "^6.0.1",
831 | "domhandler": "^4.3.1",
832 | "domutils": "^2.8.0",
833 | "nth-check": "^2.0.1"
834 | },
835 | "funding": {
836 | "url": "https://github.com/sponsors/fb55"
837 | }
838 | },
839 | "node_modules/@parcel/optimizer-svgo/node_modules/css-tree": {
840 | "version": "1.1.3",
841 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
842 | "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
843 | "dev": true,
844 | "dependencies": {
845 | "mdn-data": "2.0.14",
846 | "source-map": "^0.6.1"
847 | },
848 | "engines": {
849 | "node": ">=8.0.0"
850 | }
851 | },
852 | "node_modules/@parcel/optimizer-svgo/node_modules/csso": {
853 | "version": "4.2.0",
854 | "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz",
855 | "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==",
856 | "dev": true,
857 | "dependencies": {
858 | "css-tree": "^1.1.2"
859 | },
860 | "engines": {
861 | "node": ">=8.0.0"
862 | }
863 | },
864 | "node_modules/@parcel/optimizer-svgo/node_modules/mdn-data": {
865 | "version": "2.0.14",
866 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
867 | "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
868 | "dev": true
869 | },
870 | "node_modules/@parcel/optimizer-svgo/node_modules/svgo": {
871 | "version": "2.8.0",
872 | "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz",
873 | "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==",
874 | "dev": true,
875 | "dependencies": {
876 | "@trysound/sax": "0.2.0",
877 | "commander": "^7.2.0",
878 | "css-select": "^4.1.3",
879 | "css-tree": "^1.1.3",
880 | "csso": "^4.2.0",
881 | "picocolors": "^1.0.0",
882 | "stable": "^0.1.8"
883 | },
884 | "bin": {
885 | "svgo": "bin/svgo"
886 | },
887 | "engines": {
888 | "node": ">=10.13.0"
889 | }
890 | },
891 | "node_modules/@parcel/optimizer-swc": {
892 | "version": "2.11.0",
893 | "resolved": "https://registry.npmjs.org/@parcel/optimizer-swc/-/optimizer-swc-2.11.0.tgz",
894 | "integrity": "sha512-ftf42F3JyZxJb6nnLlgNGyNQ273YOla4dFGH/tWC8iTwObHUpWe7cMbCGcrSJBvAlsLkZfLpFNAXFxUgxdKyHQ==",
895 | "dev": true,
896 | "dependencies": {
897 | "@parcel/diagnostic": "2.11.0",
898 | "@parcel/plugin": "2.11.0",
899 | "@parcel/source-map": "^2.1.1",
900 | "@parcel/utils": "2.11.0",
901 | "@swc/core": "^1.3.36",
902 | "nullthrows": "^1.1.1"
903 | },
904 | "engines": {
905 | "node": ">= 12.0.0",
906 | "parcel": "^2.11.0"
907 | },
908 | "funding": {
909 | "type": "opencollective",
910 | "url": "https://opencollective.com/parcel"
911 | }
912 | },
913 | "node_modules/@parcel/package-manager": {
914 | "version": "2.11.0",
915 | "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.11.0.tgz",
916 | "integrity": "sha512-QzdsrUYlAwIzb8by7WJjqYnbR1MoMKWbtE1MXUeYsZbFusV8B6pOH+lwqNJKS/BFtddZMRPYFueZS2N2fwzjig==",
917 | "dev": true,
918 | "dependencies": {
919 | "@parcel/diagnostic": "2.11.0",
920 | "@parcel/fs": "2.11.0",
921 | "@parcel/logger": "2.11.0",
922 | "@parcel/node-resolver-core": "3.2.0",
923 | "@parcel/types": "2.11.0",
924 | "@parcel/utils": "2.11.0",
925 | "@parcel/workers": "2.11.0",
926 | "semver": "^7.5.2"
927 | },
928 | "engines": {
929 | "node": ">= 12.0.0"
930 | },
931 | "funding": {
932 | "type": "opencollective",
933 | "url": "https://opencollective.com/parcel"
934 | },
935 | "peerDependencies": {
936 | "@parcel/core": "^2.11.0"
937 | }
938 | },
939 | "node_modules/@parcel/packager-css": {
940 | "version": "2.11.0",
941 | "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.11.0.tgz",
942 | "integrity": "sha512-AyIxsp4eL8c22vp2oO2hSRnr3hSVNkARNZc9DG6uXxCc2Is5tUEX0I4PwxWnAx0EI44l+3zX/o414zT8yV9wwQ==",
943 | "dev": true,
944 | "dependencies": {
945 | "@parcel/diagnostic": "2.11.0",
946 | "@parcel/plugin": "2.11.0",
947 | "@parcel/source-map": "^2.1.1",
948 | "@parcel/utils": "2.11.0",
949 | "nullthrows": "^1.1.1"
950 | },
951 | "engines": {
952 | "node": ">= 12.0.0",
953 | "parcel": "^2.11.0"
954 | },
955 | "funding": {
956 | "type": "opencollective",
957 | "url": "https://opencollective.com/parcel"
958 | }
959 | },
960 | "node_modules/@parcel/packager-html": {
961 | "version": "2.11.0",
962 | "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.11.0.tgz",
963 | "integrity": "sha512-ho5AQ70naTV8IqkKIbKtK+jsXQ5TJfFgtBvmJlyB3YydRMbIc+3g4G0xgIvf15V4uCMw9Md0Sv1W65nQXHPQoA==",
964 | "dev": true,
965 | "dependencies": {
966 | "@parcel/plugin": "2.11.0",
967 | "@parcel/types": "2.11.0",
968 | "@parcel/utils": "2.11.0",
969 | "nullthrows": "^1.1.1",
970 | "posthtml": "^0.16.5"
971 | },
972 | "engines": {
973 | "node": ">= 12.0.0",
974 | "parcel": "^2.11.0"
975 | },
976 | "funding": {
977 | "type": "opencollective",
978 | "url": "https://opencollective.com/parcel"
979 | }
980 | },
981 | "node_modules/@parcel/packager-js": {
982 | "version": "2.11.0",
983 | "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.11.0.tgz",
984 | "integrity": "sha512-SxjCsd0xQfg5H73YtVJj9VOpr9s0rwMsSoeykjkatbkEla9NsZajsUkd/bfYf+/0WvEKOrB8oUBo15HkGOgKug==",
985 | "dev": true,
986 | "dependencies": {
987 | "@parcel/diagnostic": "2.11.0",
988 | "@parcel/plugin": "2.11.0",
989 | "@parcel/rust": "2.11.0",
990 | "@parcel/source-map": "^2.1.1",
991 | "@parcel/types": "2.11.0",
992 | "@parcel/utils": "2.11.0",
993 | "globals": "^13.2.0",
994 | "nullthrows": "^1.1.1"
995 | },
996 | "engines": {
997 | "node": ">= 12.0.0",
998 | "parcel": "^2.11.0"
999 | },
1000 | "funding": {
1001 | "type": "opencollective",
1002 | "url": "https://opencollective.com/parcel"
1003 | }
1004 | },
1005 | "node_modules/@parcel/packager-raw": {
1006 | "version": "2.11.0",
1007 | "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.11.0.tgz",
1008 | "integrity": "sha512-2/0JQ8DZrz7cVNXwD6OYoUUtSSnlr4dsz8ZkpFDKsBJhvMHtC78Sq+1EDixDGOMiUcalSEjNsoHtkpq9uNh+Xw==",
1009 | "dev": true,
1010 | "dependencies": {
1011 | "@parcel/plugin": "2.11.0"
1012 | },
1013 | "engines": {
1014 | "node": ">= 12.0.0",
1015 | "parcel": "^2.11.0"
1016 | },
1017 | "funding": {
1018 | "type": "opencollective",
1019 | "url": "https://opencollective.com/parcel"
1020 | }
1021 | },
1022 | "node_modules/@parcel/packager-svg": {
1023 | "version": "2.11.0",
1024 | "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.11.0.tgz",
1025 | "integrity": "sha512-2wQBkzLwcaWFGWz8TP+bgsXgiueWPzrjKsWugWdDfq0FbXh8XVeR/599qnus3RFHZy4cH6L6yq/7zxcljtxK8A==",
1026 | "dev": true,
1027 | "dependencies": {
1028 | "@parcel/plugin": "2.11.0",
1029 | "@parcel/types": "2.11.0",
1030 | "@parcel/utils": "2.11.0",
1031 | "posthtml": "^0.16.4"
1032 | },
1033 | "engines": {
1034 | "node": ">= 12.0.0",
1035 | "parcel": "^2.11.0"
1036 | },
1037 | "funding": {
1038 | "type": "opencollective",
1039 | "url": "https://opencollective.com/parcel"
1040 | }
1041 | },
1042 | "node_modules/@parcel/packager-wasm": {
1043 | "version": "2.11.0",
1044 | "resolved": "https://registry.npmjs.org/@parcel/packager-wasm/-/packager-wasm-2.11.0.tgz",
1045 | "integrity": "sha512-tTy4EbDXeeiZ0oB7L2FWaHSD1mbmYZP6R5HXqkvc5dECGUKPU5Jz6ek2C5AM+HfQdQLKXPQ/Xw3eJnI/AmctVg==",
1046 | "dev": true,
1047 | "dependencies": {
1048 | "@parcel/plugin": "2.11.0"
1049 | },
1050 | "engines": {
1051 | "node": ">=12.0.0",
1052 | "parcel": "^2.11.0"
1053 | },
1054 | "funding": {
1055 | "type": "opencollective",
1056 | "url": "https://opencollective.com/parcel"
1057 | }
1058 | },
1059 | "node_modules/@parcel/plugin": {
1060 | "version": "2.11.0",
1061 | "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.11.0.tgz",
1062 | "integrity": "sha512-9npuKBlhnPn7oeUpLJGecceg16GkXbvzbr6MNSZiHhkx3IBeITHQXlZnp2zAjUOFreNsYOfifwEF2S4KsARfBQ==",
1063 | "dev": true,
1064 | "dependencies": {
1065 | "@parcel/types": "2.11.0"
1066 | },
1067 | "engines": {
1068 | "node": ">= 12.0.0"
1069 | },
1070 | "funding": {
1071 | "type": "opencollective",
1072 | "url": "https://opencollective.com/parcel"
1073 | }
1074 | },
1075 | "node_modules/@parcel/profiler": {
1076 | "version": "2.11.0",
1077 | "resolved": "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.11.0.tgz",
1078 | "integrity": "sha512-s10SS09prOdwnaAcjK8M5zO8o+zPJJW5oOqXPNdf6KH4NGD/ue7iOk2xM8QLw6ulSwxE7NDt++lyfW3AXgCZwg==",
1079 | "dev": true,
1080 | "dependencies": {
1081 | "@parcel/diagnostic": "2.11.0",
1082 | "@parcel/events": "2.11.0",
1083 | "chrome-trace-event": "^1.0.2"
1084 | },
1085 | "engines": {
1086 | "node": ">= 12.0.0"
1087 | },
1088 | "funding": {
1089 | "type": "opencollective",
1090 | "url": "https://opencollective.com/parcel"
1091 | }
1092 | },
1093 | "node_modules/@parcel/reporter-cli": {
1094 | "version": "2.11.0",
1095 | "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.11.0.tgz",
1096 | "integrity": "sha512-hY0iO0f+LifgJHDUIjGQJnxLFSkk2jlbfy+kIaft5oI3/IM+UljecfGO+14XH8mYlqRXXPsT09TJe8ZKQzp4ZQ==",
1097 | "dev": true,
1098 | "dependencies": {
1099 | "@parcel/plugin": "2.11.0",
1100 | "@parcel/types": "2.11.0",
1101 | "@parcel/utils": "2.11.0",
1102 | "chalk": "^4.1.0",
1103 | "cli-progress": "^3.12.0",
1104 | "term-size": "^2.2.1"
1105 | },
1106 | "engines": {
1107 | "node": ">= 12.0.0",
1108 | "parcel": "^2.11.0"
1109 | },
1110 | "funding": {
1111 | "type": "opencollective",
1112 | "url": "https://opencollective.com/parcel"
1113 | }
1114 | },
1115 | "node_modules/@parcel/reporter-dev-server": {
1116 | "version": "2.11.0",
1117 | "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.11.0.tgz",
1118 | "integrity": "sha512-T4ue1+oLFNdcd9maw8QWQuxzOS2kX2jOrSvYKwYd9oGnqiAr1rpiHYYKJhHng+PF5ybwWkj8dUJfGh2NoQysJA==",
1119 | "dev": true,
1120 | "dependencies": {
1121 | "@parcel/plugin": "2.11.0",
1122 | "@parcel/utils": "2.11.0"
1123 | },
1124 | "engines": {
1125 | "node": ">= 12.0.0",
1126 | "parcel": "^2.11.0"
1127 | },
1128 | "funding": {
1129 | "type": "opencollective",
1130 | "url": "https://opencollective.com/parcel"
1131 | }
1132 | },
1133 | "node_modules/@parcel/reporter-tracer": {
1134 | "version": "2.11.0",
1135 | "resolved": "https://registry.npmjs.org/@parcel/reporter-tracer/-/reporter-tracer-2.11.0.tgz",
1136 | "integrity": "sha512-33q4ftO26OPWHkUpEm0bzzSjW2kHEh6q/JFePwf8W6APTQVruj4mV46+Fh6rxX42ixs92K/QoiE0gYgWZQVDHA==",
1137 | "dev": true,
1138 | "dependencies": {
1139 | "@parcel/plugin": "2.11.0",
1140 | "@parcel/utils": "2.11.0",
1141 | "chrome-trace-event": "^1.0.3",
1142 | "nullthrows": "^1.1.1"
1143 | },
1144 | "engines": {
1145 | "node": ">= 12.0.0",
1146 | "parcel": "^2.11.0"
1147 | },
1148 | "funding": {
1149 | "type": "opencollective",
1150 | "url": "https://opencollective.com/parcel"
1151 | }
1152 | },
1153 | "node_modules/@parcel/resolver-default": {
1154 | "version": "2.11.0",
1155 | "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.11.0.tgz",
1156 | "integrity": "sha512-suZNN2lE5W48LPTwAbG7gnj1IeubkCVEm0XspWXcXUtCzglimNJ8PVVBGx171o5CqDpdbGF3AqHjG9N3uOwXag==",
1157 | "dev": true,
1158 | "dependencies": {
1159 | "@parcel/node-resolver-core": "3.2.0",
1160 | "@parcel/plugin": "2.11.0"
1161 | },
1162 | "engines": {
1163 | "node": ">= 12.0.0",
1164 | "parcel": "^2.11.0"
1165 | },
1166 | "funding": {
1167 | "type": "opencollective",
1168 | "url": "https://opencollective.com/parcel"
1169 | }
1170 | },
1171 | "node_modules/@parcel/runtime-browser-hmr": {
1172 | "version": "2.11.0",
1173 | "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.11.0.tgz",
1174 | "integrity": "sha512-uVwNBtoLMrlPHLvRS05BVhLseduMOpZT36yiIjS0YSBJcC6/otI9AY7ZiDPYmrB5xTqM0R+D554JhPaJHCuocw==",
1175 | "dev": true,
1176 | "dependencies": {
1177 | "@parcel/plugin": "2.11.0",
1178 | "@parcel/utils": "2.11.0"
1179 | },
1180 | "engines": {
1181 | "node": ">= 12.0.0",
1182 | "parcel": "^2.11.0"
1183 | },
1184 | "funding": {
1185 | "type": "opencollective",
1186 | "url": "https://opencollective.com/parcel"
1187 | }
1188 | },
1189 | "node_modules/@parcel/runtime-js": {
1190 | "version": "2.11.0",
1191 | "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.11.0.tgz",
1192 | "integrity": "sha512-fH3nJoexINz7s4cDzp0Vjsx0k1pMYSa5ch38LbbNqCKTermy0pS0zZuvgfLfHFFP+AMRpFQenrF7h7N3bgDmHw==",
1193 | "dev": true,
1194 | "dependencies": {
1195 | "@parcel/diagnostic": "2.11.0",
1196 | "@parcel/plugin": "2.11.0",
1197 | "@parcel/utils": "2.11.0",
1198 | "nullthrows": "^1.1.1"
1199 | },
1200 | "engines": {
1201 | "node": ">= 12.0.0",
1202 | "parcel": "^2.11.0"
1203 | },
1204 | "funding": {
1205 | "type": "opencollective",
1206 | "url": "https://opencollective.com/parcel"
1207 | }
1208 | },
1209 | "node_modules/@parcel/runtime-react-refresh": {
1210 | "version": "2.11.0",
1211 | "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.11.0.tgz",
1212 | "integrity": "sha512-Kfnc7gLjhoephLMnjABrkIkzVfzPrpJlxiJFIleY2Fm57YhmCfKsEYxm3lHOutNaYl1VArW0LKClPH/VHG9vfQ==",
1213 | "dev": true,
1214 | "dependencies": {
1215 | "@parcel/plugin": "2.11.0",
1216 | "@parcel/utils": "2.11.0",
1217 | "react-error-overlay": "6.0.9",
1218 | "react-refresh": "^0.9.0"
1219 | },
1220 | "engines": {
1221 | "node": ">= 12.0.0",
1222 | "parcel": "^2.11.0"
1223 | },
1224 | "funding": {
1225 | "type": "opencollective",
1226 | "url": "https://opencollective.com/parcel"
1227 | }
1228 | },
1229 | "node_modules/@parcel/runtime-service-worker": {
1230 | "version": "2.11.0",
1231 | "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.11.0.tgz",
1232 | "integrity": "sha512-c8MaSpSbXIKuN5sA/g4UsrsH1BtBZ6Em+eSxt9AYbdPtWrW+qwCioNVZj9lugBRUzDMjVfJz0yK59nS42hABvw==",
1233 | "dev": true,
1234 | "dependencies": {
1235 | "@parcel/plugin": "2.11.0",
1236 | "@parcel/utils": "2.11.0",
1237 | "nullthrows": "^1.1.1"
1238 | },
1239 | "engines": {
1240 | "node": ">= 12.0.0",
1241 | "parcel": "^2.11.0"
1242 | },
1243 | "funding": {
1244 | "type": "opencollective",
1245 | "url": "https://opencollective.com/parcel"
1246 | }
1247 | },
1248 | "node_modules/@parcel/rust": {
1249 | "version": "2.11.0",
1250 | "resolved": "https://registry.npmjs.org/@parcel/rust/-/rust-2.11.0.tgz",
1251 | "integrity": "sha512-UkLWdHOD8Md2YmJDPsqd3yIs9chhdl/ATfV/B/xdPKGmqtNouYpDCRlq+WxMt3mLoYgHEg9UwrWLTebo2rr2iQ==",
1252 | "dev": true,
1253 | "engines": {
1254 | "node": ">= 12.0.0"
1255 | },
1256 | "funding": {
1257 | "type": "opencollective",
1258 | "url": "https://opencollective.com/parcel"
1259 | }
1260 | },
1261 | "node_modules/@parcel/source-map": {
1262 | "version": "2.1.1",
1263 | "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz",
1264 | "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==",
1265 | "dev": true,
1266 | "dependencies": {
1267 | "detect-libc": "^1.0.3"
1268 | },
1269 | "engines": {
1270 | "node": "^12.18.3 || >=14"
1271 | }
1272 | },
1273 | "node_modules/@parcel/transformer-babel": {
1274 | "version": "2.11.0",
1275 | "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.11.0.tgz",
1276 | "integrity": "sha512-WKGblnp7r426VG+cpeQzc6dj/30EoUaYwyl4OEaigQSJizyuPWTBWTz6FUw+ih1/sg37h+D1BIh9C2FsVzpzbw==",
1277 | "dev": true,
1278 | "dependencies": {
1279 | "@parcel/diagnostic": "2.11.0",
1280 | "@parcel/plugin": "2.11.0",
1281 | "@parcel/source-map": "^2.1.1",
1282 | "@parcel/utils": "2.11.0",
1283 | "browserslist": "^4.6.6",
1284 | "json5": "^2.2.0",
1285 | "nullthrows": "^1.1.1",
1286 | "semver": "^7.5.2"
1287 | },
1288 | "engines": {
1289 | "node": ">= 12.0.0",
1290 | "parcel": "^2.11.0"
1291 | },
1292 | "funding": {
1293 | "type": "opencollective",
1294 | "url": "https://opencollective.com/parcel"
1295 | }
1296 | },
1297 | "node_modules/@parcel/transformer-css": {
1298 | "version": "2.11.0",
1299 | "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.11.0.tgz",
1300 | "integrity": "sha512-nFmBulF/ErNoafO87JbVrBavjBMNwE/kahbCRVxc2Mvlphz4F4lBW4eDRS5l4xBqFJaNkHr9R55ehLBBilF4Jw==",
1301 | "dev": true,
1302 | "dependencies": {
1303 | "@parcel/diagnostic": "2.11.0",
1304 | "@parcel/plugin": "2.11.0",
1305 | "@parcel/source-map": "^2.1.1",
1306 | "@parcel/utils": "2.11.0",
1307 | "browserslist": "^4.6.6",
1308 | "lightningcss": "^1.22.1",
1309 | "nullthrows": "^1.1.1"
1310 | },
1311 | "engines": {
1312 | "node": ">= 12.0.0",
1313 | "parcel": "^2.11.0"
1314 | },
1315 | "funding": {
1316 | "type": "opencollective",
1317 | "url": "https://opencollective.com/parcel"
1318 | }
1319 | },
1320 | "node_modules/@parcel/transformer-html": {
1321 | "version": "2.11.0",
1322 | "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.11.0.tgz",
1323 | "integrity": "sha512-90vp7mbvvfqPr9XIINpMcELtywj56f1bxfOkLQgWU1bm22H0FT3i5dqdac++2My0IGDvMwhAEjQfbn4pA579NQ==",
1324 | "dev": true,
1325 | "dependencies": {
1326 | "@parcel/diagnostic": "2.11.0",
1327 | "@parcel/plugin": "2.11.0",
1328 | "@parcel/rust": "2.11.0",
1329 | "nullthrows": "^1.1.1",
1330 | "posthtml": "^0.16.5",
1331 | "posthtml-parser": "^0.10.1",
1332 | "posthtml-render": "^3.0.0",
1333 | "semver": "^7.5.2",
1334 | "srcset": "4"
1335 | },
1336 | "engines": {
1337 | "node": ">= 12.0.0",
1338 | "parcel": "^2.11.0"
1339 | },
1340 | "funding": {
1341 | "type": "opencollective",
1342 | "url": "https://opencollective.com/parcel"
1343 | }
1344 | },
1345 | "node_modules/@parcel/transformer-image": {
1346 | "version": "2.11.0",
1347 | "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.11.0.tgz",
1348 | "integrity": "sha512-QiZj18UHf3lVFsi65Vz8YbS3ydx9Pe9x8ktMxE1oh9qpznN8lD7gE/Z9DxuTZB84EZ9pKytKwcv5WGXP25xIFg==",
1349 | "dev": true,
1350 | "dependencies": {
1351 | "@parcel/plugin": "2.11.0",
1352 | "@parcel/utils": "2.11.0",
1353 | "@parcel/workers": "2.11.0",
1354 | "nullthrows": "^1.1.1"
1355 | },
1356 | "engines": {
1357 | "node": ">= 12.0.0",
1358 | "parcel": "^2.11.0"
1359 | },
1360 | "peerDependencies": {
1361 | "@parcel/core": "^2.11.0"
1362 | }
1363 | },
1364 | "node_modules/@parcel/transformer-js": {
1365 | "version": "2.11.0",
1366 | "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.11.0.tgz",
1367 | "integrity": "sha512-G1sv0n8/fJqHqwUs0iVnVdmRY0Kh8kWaDkuWcU/GJBHMGhUnLXKdNwxX2Av9UdBL14bU1nTINfr9qOfnQotXWg==",
1368 | "dev": true,
1369 | "dependencies": {
1370 | "@parcel/diagnostic": "2.11.0",
1371 | "@parcel/plugin": "2.11.0",
1372 | "@parcel/rust": "2.11.0",
1373 | "@parcel/source-map": "^2.1.1",
1374 | "@parcel/utils": "2.11.0",
1375 | "@parcel/workers": "2.11.0",
1376 | "@swc/helpers": "^0.5.0",
1377 | "browserslist": "^4.6.6",
1378 | "nullthrows": "^1.1.1",
1379 | "regenerator-runtime": "^0.13.7",
1380 | "semver": "^7.5.2"
1381 | },
1382 | "engines": {
1383 | "node": ">= 12.0.0",
1384 | "parcel": "^2.11.0"
1385 | },
1386 | "funding": {
1387 | "type": "opencollective",
1388 | "url": "https://opencollective.com/parcel"
1389 | },
1390 | "peerDependencies": {
1391 | "@parcel/core": "^2.11.0"
1392 | }
1393 | },
1394 | "node_modules/@parcel/transformer-json": {
1395 | "version": "2.11.0",
1396 | "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.11.0.tgz",
1397 | "integrity": "sha512-Wt/wgSBaRWmPL4gpvjkV0bCBRxFOtsuLNzsm8vYA5poxTFhuLY+AoyQ8S2+xXU4VxwBfdppfIr2Ny3SwGs8xbQ==",
1398 | "dev": true,
1399 | "dependencies": {
1400 | "@parcel/plugin": "2.11.0",
1401 | "json5": "^2.2.0"
1402 | },
1403 | "engines": {
1404 | "node": ">= 12.0.0",
1405 | "parcel": "^2.11.0"
1406 | },
1407 | "funding": {
1408 | "type": "opencollective",
1409 | "url": "https://opencollective.com/parcel"
1410 | }
1411 | },
1412 | "node_modules/@parcel/transformer-postcss": {
1413 | "version": "2.11.0",
1414 | "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.11.0.tgz",
1415 | "integrity": "sha512-Ugy8XHBaUptGotsvwzq7gPCvkCopTIqqZ0JZ40Jmy9slGms8wnx06pNHA1Be/RcJwkJ2TbSu+7ncZdgmP5x5GQ==",
1416 | "dev": true,
1417 | "dependencies": {
1418 | "@parcel/diagnostic": "2.11.0",
1419 | "@parcel/plugin": "2.11.0",
1420 | "@parcel/rust": "2.11.0",
1421 | "@parcel/utils": "2.11.0",
1422 | "clone": "^2.1.1",
1423 | "nullthrows": "^1.1.1",
1424 | "postcss-value-parser": "^4.2.0",
1425 | "semver": "^7.5.2"
1426 | },
1427 | "engines": {
1428 | "node": ">= 12.0.0",
1429 | "parcel": "^2.11.0"
1430 | },
1431 | "funding": {
1432 | "type": "opencollective",
1433 | "url": "https://opencollective.com/parcel"
1434 | }
1435 | },
1436 | "node_modules/@parcel/transformer-posthtml": {
1437 | "version": "2.11.0",
1438 | "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.11.0.tgz",
1439 | "integrity": "sha512-dMK4p1RRAoIJEjK/Wz9GOLqwHqdD/VQDhMPk+6sUKp5zf2MhSohUstpp5gKsSZivCM3PS2f8k9rgroacJ/ReuA==",
1440 | "dev": true,
1441 | "dependencies": {
1442 | "@parcel/plugin": "2.11.0",
1443 | "@parcel/utils": "2.11.0",
1444 | "nullthrows": "^1.1.1",
1445 | "posthtml": "^0.16.5",
1446 | "posthtml-parser": "^0.10.1",
1447 | "posthtml-render": "^3.0.0",
1448 | "semver": "^7.5.2"
1449 | },
1450 | "engines": {
1451 | "node": ">= 12.0.0",
1452 | "parcel": "^2.11.0"
1453 | },
1454 | "funding": {
1455 | "type": "opencollective",
1456 | "url": "https://opencollective.com/parcel"
1457 | }
1458 | },
1459 | "node_modules/@parcel/transformer-raw": {
1460 | "version": "2.11.0",
1461 | "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.11.0.tgz",
1462 | "integrity": "sha512-2ltp3TgS+cxEqSM1vk5gDtJrYx4KMuRRtbSgSvkdldyOgPhflnLU3/HRz72hXSNGqYOV0/JN0+ocsfPnqR00ug==",
1463 | "dev": true,
1464 | "dependencies": {
1465 | "@parcel/plugin": "2.11.0"
1466 | },
1467 | "engines": {
1468 | "node": ">= 12.0.0",
1469 | "parcel": "^2.11.0"
1470 | },
1471 | "funding": {
1472 | "type": "opencollective",
1473 | "url": "https://opencollective.com/parcel"
1474 | }
1475 | },
1476 | "node_modules/@parcel/transformer-react-refresh-wrap": {
1477 | "version": "2.11.0",
1478 | "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.11.0.tgz",
1479 | "integrity": "sha512-6pY0CdIgIpXC6XpsDWizf+zLgiuEsJ106HjWLwF7/R72BrvDhLPZ6jRu4UTrnd6bM89KahPw9fZZzjKoA5Efcw==",
1480 | "dev": true,
1481 | "dependencies": {
1482 | "@parcel/plugin": "2.11.0",
1483 | "@parcel/utils": "2.11.0",
1484 | "react-refresh": "^0.9.0"
1485 | },
1486 | "engines": {
1487 | "node": ">= 12.0.0",
1488 | "parcel": "^2.11.0"
1489 | },
1490 | "funding": {
1491 | "type": "opencollective",
1492 | "url": "https://opencollective.com/parcel"
1493 | }
1494 | },
1495 | "node_modules/@parcel/transformer-svg": {
1496 | "version": "2.11.0",
1497 | "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.11.0.tgz",
1498 | "integrity": "sha512-GrTNi04OoQSXsyrB7FqQPeYREscEXFhIBPkyQ0q7WDG/yYynWljiA0kwITCtMjPfv2EDVks292dvM3EcnERRIA==",
1499 | "dev": true,
1500 | "dependencies": {
1501 | "@parcel/diagnostic": "2.11.0",
1502 | "@parcel/plugin": "2.11.0",
1503 | "@parcel/rust": "2.11.0",
1504 | "nullthrows": "^1.1.1",
1505 | "posthtml": "^0.16.5",
1506 | "posthtml-parser": "^0.10.1",
1507 | "posthtml-render": "^3.0.0",
1508 | "semver": "^7.5.2"
1509 | },
1510 | "engines": {
1511 | "node": ">= 12.0.0",
1512 | "parcel": "^2.11.0"
1513 | },
1514 | "funding": {
1515 | "type": "opencollective",
1516 | "url": "https://opencollective.com/parcel"
1517 | }
1518 | },
1519 | "node_modules/@parcel/types": {
1520 | "version": "2.11.0",
1521 | "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.11.0.tgz",
1522 | "integrity": "sha512-lN5XlfV9b1s2rli8q1LqsLtu+D4ZwNI3sKmNcL/3tohSfQcF2EgF+MaiANGo9VzXOzoWFHt4dqWjO4OcdyC5tg==",
1523 | "dev": true,
1524 | "dependencies": {
1525 | "@parcel/cache": "2.11.0",
1526 | "@parcel/diagnostic": "2.11.0",
1527 | "@parcel/fs": "2.11.0",
1528 | "@parcel/package-manager": "2.11.0",
1529 | "@parcel/source-map": "^2.1.1",
1530 | "@parcel/workers": "2.11.0",
1531 | "utility-types": "^3.10.0"
1532 | }
1533 | },
1534 | "node_modules/@parcel/utils": {
1535 | "version": "2.11.0",
1536 | "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.11.0.tgz",
1537 | "integrity": "sha512-AcL70cXlIyE7eQdvjQbYxegN5l+skqvlJllxTWg4YkIZe9p8Gmv74jLAeLWh5F+IGl5WRn0TSy9JhNJjIMQGwQ==",
1538 | "dev": true,
1539 | "dependencies": {
1540 | "@parcel/codeframe": "2.11.0",
1541 | "@parcel/diagnostic": "2.11.0",
1542 | "@parcel/logger": "2.11.0",
1543 | "@parcel/markdown-ansi": "2.11.0",
1544 | "@parcel/rust": "2.11.0",
1545 | "@parcel/source-map": "^2.1.1",
1546 | "chalk": "^4.1.0",
1547 | "nullthrows": "^1.1.1"
1548 | },
1549 | "engines": {
1550 | "node": ">= 12.0.0"
1551 | },
1552 | "funding": {
1553 | "type": "opencollective",
1554 | "url": "https://opencollective.com/parcel"
1555 | }
1556 | },
1557 | "node_modules/@parcel/watcher": {
1558 | "version": "2.4.0",
1559 | "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.0.tgz",
1560 | "integrity": "sha512-XJLGVL0DEclX5pcWa2N9SX1jCGTDd8l972biNooLFtjneuGqodupPQh6XseXIBBeVIMaaJ7bTcs3qGvXwsp4vg==",
1561 | "dev": true,
1562 | "hasInstallScript": true,
1563 | "dependencies": {
1564 | "detect-libc": "^1.0.3",
1565 | "is-glob": "^4.0.3",
1566 | "micromatch": "^4.0.5",
1567 | "node-addon-api": "^7.0.0"
1568 | },
1569 | "engines": {
1570 | "node": ">= 10.0.0"
1571 | },
1572 | "funding": {
1573 | "type": "opencollective",
1574 | "url": "https://opencollective.com/parcel"
1575 | },
1576 | "optionalDependencies": {
1577 | "@parcel/watcher-android-arm64": "2.4.0",
1578 | "@parcel/watcher-darwin-arm64": "2.4.0",
1579 | "@parcel/watcher-darwin-x64": "2.4.0",
1580 | "@parcel/watcher-freebsd-x64": "2.4.0",
1581 | "@parcel/watcher-linux-arm-glibc": "2.4.0",
1582 | "@parcel/watcher-linux-arm64-glibc": "2.4.0",
1583 | "@parcel/watcher-linux-arm64-musl": "2.4.0",
1584 | "@parcel/watcher-linux-x64-glibc": "2.4.0",
1585 | "@parcel/watcher-linux-x64-musl": "2.4.0",
1586 | "@parcel/watcher-win32-arm64": "2.4.0",
1587 | "@parcel/watcher-win32-ia32": "2.4.0",
1588 | "@parcel/watcher-win32-x64": "2.4.0"
1589 | }
1590 | },
1591 | "node_modules/@parcel/watcher-android-arm64": {
1592 | "version": "2.4.0",
1593 | "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.0.tgz",
1594 | "integrity": "sha512-+fPtO/GsbYX1LJnCYCaDVT3EOBjvSFdQN9Mrzh9zWAOOfvidPWyScTrHIZHHfJBvlHzNA0Gy0U3NXFA/M7PHUA==",
1595 | "cpu": [
1596 | "arm64"
1597 | ],
1598 | "dev": true,
1599 | "optional": true,
1600 | "os": [
1601 | "android"
1602 | ],
1603 | "engines": {
1604 | "node": ">= 10.0.0"
1605 | },
1606 | "funding": {
1607 | "type": "opencollective",
1608 | "url": "https://opencollective.com/parcel"
1609 | }
1610 | },
1611 | "node_modules/@parcel/watcher-darwin-arm64": {
1612 | "version": "2.4.0",
1613 | "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.0.tgz",
1614 | "integrity": "sha512-T/At5pansFuQ8VJLRx0C6C87cgfqIYhW2N/kBfLCUvDhCah0EnLLwaD/6MW3ux+rpgkpQAnMELOCTKlbwncwiA==",
1615 | "cpu": [
1616 | "arm64"
1617 | ],
1618 | "dev": true,
1619 | "optional": true,
1620 | "os": [
1621 | "darwin"
1622 | ],
1623 | "engines": {
1624 | "node": ">= 10.0.0"
1625 | },
1626 | "funding": {
1627 | "type": "opencollective",
1628 | "url": "https://opencollective.com/parcel"
1629 | }
1630 | },
1631 | "node_modules/@parcel/watcher-darwin-x64": {
1632 | "version": "2.4.0",
1633 | "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.0.tgz",
1634 | "integrity": "sha512-vZMv9jl+szz5YLsSqEGCMSllBl1gU1snfbRL5ysJU03MEa6gkVy9OMcvXV1j4g0++jHEcvzhs3Z3LpeEbVmY6Q==",
1635 | "cpu": [
1636 | "x64"
1637 | ],
1638 | "dev": true,
1639 | "optional": true,
1640 | "os": [
1641 | "darwin"
1642 | ],
1643 | "engines": {
1644 | "node": ">= 10.0.0"
1645 | },
1646 | "funding": {
1647 | "type": "opencollective",
1648 | "url": "https://opencollective.com/parcel"
1649 | }
1650 | },
1651 | "node_modules/@parcel/watcher-freebsd-x64": {
1652 | "version": "2.4.0",
1653 | "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.0.tgz",
1654 | "integrity": "sha512-dHTRMIplPDT1M0+BkXjtMN+qLtqq24sLDUhmU+UxxLP2TEY2k8GIoqIJiVrGWGomdWsy5IO27aDV1vWyQ6gfHA==",
1655 | "cpu": [
1656 | "x64"
1657 | ],
1658 | "dev": true,
1659 | "optional": true,
1660 | "os": [
1661 | "freebsd"
1662 | ],
1663 | "engines": {
1664 | "node": ">= 10.0.0"
1665 | },
1666 | "funding": {
1667 | "type": "opencollective",
1668 | "url": "https://opencollective.com/parcel"
1669 | }
1670 | },
1671 | "node_modules/@parcel/watcher-linux-arm-glibc": {
1672 | "version": "2.4.0",
1673 | "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.0.tgz",
1674 | "integrity": "sha512-9NQXD+qk46RwATNC3/UB7HWurscY18CnAPMTFcI9Y8CTbtm63/eex1SNt+BHFinEQuLBjaZwR2Lp+n7pmEJPpQ==",
1675 | "cpu": [
1676 | "arm"
1677 | ],
1678 | "dev": true,
1679 | "optional": true,
1680 | "os": [
1681 | "linux"
1682 | ],
1683 | "engines": {
1684 | "node": ">= 10.0.0"
1685 | },
1686 | "funding": {
1687 | "type": "opencollective",
1688 | "url": "https://opencollective.com/parcel"
1689 | }
1690 | },
1691 | "node_modules/@parcel/watcher-linux-arm64-glibc": {
1692 | "version": "2.4.0",
1693 | "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.0.tgz",
1694 | "integrity": "sha512-QuJTAQdsd7PFW9jNGaV9Pw+ZMWV9wKThEzzlY3Lhnnwy7iW23qtQFPql8iEaSFMCVI5StNNmONUopk+MFKpiKg==",
1695 | "cpu": [
1696 | "arm64"
1697 | ],
1698 | "dev": true,
1699 | "optional": true,
1700 | "os": [
1701 | "linux"
1702 | ],
1703 | "engines": {
1704 | "node": ">= 10.0.0"
1705 | },
1706 | "funding": {
1707 | "type": "opencollective",
1708 | "url": "https://opencollective.com/parcel"
1709 | }
1710 | },
1711 | "node_modules/@parcel/watcher-linux-arm64-musl": {
1712 | "version": "2.4.0",
1713 | "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.0.tgz",
1714 | "integrity": "sha512-oyN+uA9xcTDo/45bwsd6TFHa7Lc7hKujyMlvwrCLvSckvWogndCEoVYFNfZ6JJ2KNL/6fFiGPcbjp8jJmEh5Ng==",
1715 | "cpu": [
1716 | "arm64"
1717 | ],
1718 | "dev": true,
1719 | "optional": true,
1720 | "os": [
1721 | "linux"
1722 | ],
1723 | "engines": {
1724 | "node": ">= 10.0.0"
1725 | },
1726 | "funding": {
1727 | "type": "opencollective",
1728 | "url": "https://opencollective.com/parcel"
1729 | }
1730 | },
1731 | "node_modules/@parcel/watcher-linux-x64-glibc": {
1732 | "version": "2.4.0",
1733 | "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.0.tgz",
1734 | "integrity": "sha512-KphV8awJmxU3q52JQvJot0QMu07CIyEjV+2Tb2ZtbucEgqyRcxOBDMsqp1JNq5nuDXtcCC0uHQICeiEz38dPBQ==",
1735 | "cpu": [
1736 | "x64"
1737 | ],
1738 | "dev": true,
1739 | "optional": true,
1740 | "os": [
1741 | "linux"
1742 | ],
1743 | "engines": {
1744 | "node": ">= 10.0.0"
1745 | },
1746 | "funding": {
1747 | "type": "opencollective",
1748 | "url": "https://opencollective.com/parcel"
1749 | }
1750 | },
1751 | "node_modules/@parcel/watcher-linux-x64-musl": {
1752 | "version": "2.4.0",
1753 | "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.0.tgz",
1754 | "integrity": "sha512-7jzcOonpXNWcSijPpKD5IbC6xC7yTibjJw9jviVzZostYLGxbz8LDJLUnLzLzhASPlPGgpeKLtFUMjAAzM+gSA==",
1755 | "cpu": [
1756 | "x64"
1757 | ],
1758 | "dev": true,
1759 | "optional": true,
1760 | "os": [
1761 | "linux"
1762 | ],
1763 | "engines": {
1764 | "node": ">= 10.0.0"
1765 | },
1766 | "funding": {
1767 | "type": "opencollective",
1768 | "url": "https://opencollective.com/parcel"
1769 | }
1770 | },
1771 | "node_modules/@parcel/watcher-win32-arm64": {
1772 | "version": "2.4.0",
1773 | "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.0.tgz",
1774 | "integrity": "sha512-NOej2lqlq8bQNYhUMnOD0nwvNql8ToQF+1Zhi9ULZoG+XTtJ9hNnCFfyICxoZLXor4bBPTOnzs/aVVoefYnjIg==",
1775 | "cpu": [
1776 | "arm64"
1777 | ],
1778 | "dev": true,
1779 | "optional": true,
1780 | "os": [
1781 | "win32"
1782 | ],
1783 | "engines": {
1784 | "node": ">= 10.0.0"
1785 | },
1786 | "funding": {
1787 | "type": "opencollective",
1788 | "url": "https://opencollective.com/parcel"
1789 | }
1790 | },
1791 | "node_modules/@parcel/watcher-win32-ia32": {
1792 | "version": "2.4.0",
1793 | "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.0.tgz",
1794 | "integrity": "sha512-IO/nM+K2YD/iwjWAfHFMBPz4Zqn6qBDqZxY4j2n9s+4+OuTSRM/y/irksnuqcspom5DjkSeF9d0YbO+qpys+JA==",
1795 | "cpu": [
1796 | "ia32"
1797 | ],
1798 | "dev": true,
1799 | "optional": true,
1800 | "os": [
1801 | "win32"
1802 | ],
1803 | "engines": {
1804 | "node": ">= 10.0.0"
1805 | },
1806 | "funding": {
1807 | "type": "opencollective",
1808 | "url": "https://opencollective.com/parcel"
1809 | }
1810 | },
1811 | "node_modules/@parcel/watcher-win32-x64": {
1812 | "version": "2.4.0",
1813 | "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.0.tgz",
1814 | "integrity": "sha512-pAUyUVjfFjWaf/pShmJpJmNxZhbMvJASUpdes9jL6bTEJ+gDxPRSpXTIemNyNsb9AtbiGXs9XduP1reThmd+dA==",
1815 | "cpu": [
1816 | "x64"
1817 | ],
1818 | "dev": true,
1819 | "optional": true,
1820 | "os": [
1821 | "win32"
1822 | ],
1823 | "engines": {
1824 | "node": ">= 10.0.0"
1825 | },
1826 | "funding": {
1827 | "type": "opencollective",
1828 | "url": "https://opencollective.com/parcel"
1829 | }
1830 | },
1831 | "node_modules/@parcel/workers": {
1832 | "version": "2.11.0",
1833 | "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.11.0.tgz",
1834 | "integrity": "sha512-wjybqdSy6Nk0N9iBGsFcp7739W2zvx0WGfVxPVShqhz46pIkPOiFF/iSn+kFu5EmMKTRWeUif42+a6rRZ7pCnQ==",
1835 | "dev": true,
1836 | "dependencies": {
1837 | "@parcel/diagnostic": "2.11.0",
1838 | "@parcel/logger": "2.11.0",
1839 | "@parcel/profiler": "2.11.0",
1840 | "@parcel/types": "2.11.0",
1841 | "@parcel/utils": "2.11.0",
1842 | "nullthrows": "^1.1.1"
1843 | },
1844 | "engines": {
1845 | "node": ">= 12.0.0"
1846 | },
1847 | "funding": {
1848 | "type": "opencollective",
1849 | "url": "https://opencollective.com/parcel"
1850 | },
1851 | "peerDependencies": {
1852 | "@parcel/core": "^2.11.0"
1853 | }
1854 | },
1855 | "node_modules/@swc/core": {
1856 | "version": "1.3.104",
1857 | "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.104.tgz",
1858 | "integrity": "sha512-9LWH/qzR/Pmyco+XwPiPfz59T1sryI7o5dmqb593MfCkaX5Fzl9KhwQTI47i21/bXYuCdfa9ySZuVkzXMirYxA==",
1859 | "dev": true,
1860 | "hasInstallScript": true,
1861 | "dependencies": {
1862 | "@swc/counter": "^0.1.1",
1863 | "@swc/types": "^0.1.5"
1864 | },
1865 | "engines": {
1866 | "node": ">=10"
1867 | },
1868 | "funding": {
1869 | "type": "opencollective",
1870 | "url": "https://opencollective.com/swc"
1871 | },
1872 | "optionalDependencies": {
1873 | "@swc/core-darwin-arm64": "1.3.104",
1874 | "@swc/core-darwin-x64": "1.3.104",
1875 | "@swc/core-linux-arm-gnueabihf": "1.3.104",
1876 | "@swc/core-linux-arm64-gnu": "1.3.104",
1877 | "@swc/core-linux-arm64-musl": "1.3.104",
1878 | "@swc/core-linux-x64-gnu": "1.3.104",
1879 | "@swc/core-linux-x64-musl": "1.3.104",
1880 | "@swc/core-win32-arm64-msvc": "1.3.104",
1881 | "@swc/core-win32-ia32-msvc": "1.3.104",
1882 | "@swc/core-win32-x64-msvc": "1.3.104"
1883 | },
1884 | "peerDependencies": {
1885 | "@swc/helpers": "^0.5.0"
1886 | },
1887 | "peerDependenciesMeta": {
1888 | "@swc/helpers": {
1889 | "optional": true
1890 | }
1891 | }
1892 | },
1893 | "node_modules/@swc/core-darwin-arm64": {
1894 | "version": "1.3.104",
1895 | "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.104.tgz",
1896 | "integrity": "sha512-rCnVj8x3kn6s914Adddu+zROHUn6mUEMkNKUckofs3W9OthNlZXJA3C5bS2MMTRFXCWamJ0Zmh6INFpz+f4Tfg==",
1897 | "cpu": [
1898 | "arm64"
1899 | ],
1900 | "dev": true,
1901 | "optional": true,
1902 | "os": [
1903 | "darwin"
1904 | ],
1905 | "engines": {
1906 | "node": ">=10"
1907 | }
1908 | },
1909 | "node_modules/@swc/core-darwin-x64": {
1910 | "version": "1.3.104",
1911 | "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.104.tgz",
1912 | "integrity": "sha512-LBCWGTYkn1UjyxrmcLS3vZgtCDVhwxsQMV7jz5duc7Gas8SRWh6ZYqvUkjlXMDX1yx0uvzHrkaRw445+zDRj7Q==",
1913 | "cpu": [
1914 | "x64"
1915 | ],
1916 | "dev": true,
1917 | "optional": true,
1918 | "os": [
1919 | "darwin"
1920 | ],
1921 | "engines": {
1922 | "node": ">=10"
1923 | }
1924 | },
1925 | "node_modules/@swc/core-linux-arm-gnueabihf": {
1926 | "version": "1.3.104",
1927 | "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.104.tgz",
1928 | "integrity": "sha512-iFbsWcx0TKHWnFBNCuUstYqRtfkyBx7FKv5To1Hx14EMuvvoCD/qUoJEiNfDQN5n/xU9g5xq4RdbjEWCFLhAbA==",
1929 | "cpu": [
1930 | "arm"
1931 | ],
1932 | "dev": true,
1933 | "optional": true,
1934 | "os": [
1935 | "linux"
1936 | ],
1937 | "engines": {
1938 | "node": ">=10"
1939 | }
1940 | },
1941 | "node_modules/@swc/core-linux-arm64-gnu": {
1942 | "version": "1.3.104",
1943 | "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.104.tgz",
1944 | "integrity": "sha512-1BIIp+nUPrRHHaJ35YJqrwXPwYSITp5robqqjyTwoKGw2kq0x+A964kpWul6v0d7A9Ial8fyH4m13eSWBodD2A==",
1945 | "cpu": [
1946 | "arm64"
1947 | ],
1948 | "dev": true,
1949 | "optional": true,
1950 | "os": [
1951 | "linux"
1952 | ],
1953 | "engines": {
1954 | "node": ">=10"
1955 | }
1956 | },
1957 | "node_modules/@swc/core-linux-arm64-musl": {
1958 | "version": "1.3.104",
1959 | "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.104.tgz",
1960 | "integrity": "sha512-IyDNkzpKwvLqmRwTW+s8f8OsOSSj1N6juZKbvNHpZRfWZkz3T70q3vJlDBWQwy8z8cm7ckd7YUT3eKcSBPPowg==",
1961 | "cpu": [
1962 | "arm64"
1963 | ],
1964 | "dev": true,
1965 | "optional": true,
1966 | "os": [
1967 | "linux"
1968 | ],
1969 | "engines": {
1970 | "node": ">=10"
1971 | }
1972 | },
1973 | "node_modules/@swc/core-linux-x64-gnu": {
1974 | "version": "1.3.104",
1975 | "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.104.tgz",
1976 | "integrity": "sha512-MfX/wiRdTjE5uXHTDnaX69xI4UBfxIhcxbVlMj//N+7AX/G2pl2UFityfVMU2HpM12BRckrCxVI8F/Zy3DZkYQ==",
1977 | "cpu": [
1978 | "x64"
1979 | ],
1980 | "dev": true,
1981 | "optional": true,
1982 | "os": [
1983 | "linux"
1984 | ],
1985 | "engines": {
1986 | "node": ">=10"
1987 | }
1988 | },
1989 | "node_modules/@swc/core-linux-x64-musl": {
1990 | "version": "1.3.104",
1991 | "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.104.tgz",
1992 | "integrity": "sha512-5yeILaxA31gGEmquErO8yxlq1xu0XVt+fz5mbbKXKZMRRILxYxNzAGb5mzV41r0oHz6Vhv4AXX/WMCmeWl+HkQ==",
1993 | "cpu": [
1994 | "x64"
1995 | ],
1996 | "dev": true,
1997 | "optional": true,
1998 | "os": [
1999 | "linux"
2000 | ],
2001 | "engines": {
2002 | "node": ">=10"
2003 | }
2004 | },
2005 | "node_modules/@swc/core-win32-arm64-msvc": {
2006 | "version": "1.3.104",
2007 | "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.104.tgz",
2008 | "integrity": "sha512-rwcImsYnWDWGmeESG0XdGGOql5s3cG5wA8C4hHHKdH76zamPfDKKQFBsjmoNi0f1IsxaI9AJPeOmD4bAhT1ZoQ==",
2009 | "cpu": [
2010 | "arm64"
2011 | ],
2012 | "dev": true,
2013 | "optional": true,
2014 | "os": [
2015 | "win32"
2016 | ],
2017 | "engines": {
2018 | "node": ">=10"
2019 | }
2020 | },
2021 | "node_modules/@swc/core-win32-ia32-msvc": {
2022 | "version": "1.3.104",
2023 | "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.104.tgz",
2024 | "integrity": "sha512-ICDA+CJLYC7NkePnrbh/MvXwDQfy3rZSFgrVdrqRosv9DKHdFjYDnA9++7ozjrIdFdBrFW2NR7pyUcidlwhNzA==",
2025 | "cpu": [
2026 | "ia32"
2027 | ],
2028 | "dev": true,
2029 | "optional": true,
2030 | "os": [
2031 | "win32"
2032 | ],
2033 | "engines": {
2034 | "node": ">=10"
2035 | }
2036 | },
2037 | "node_modules/@swc/core-win32-x64-msvc": {
2038 | "version": "1.3.104",
2039 | "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.104.tgz",
2040 | "integrity": "sha512-fZJ1Ju62U4lMZVU+nHxLkFNcu0hG5Y0Yj/5zjrlbuX5N8J5eDndWAFsVnQhxRTZqKhZB53pvWRQs5FItSDqgXg==",
2041 | "cpu": [
2042 | "x64"
2043 | ],
2044 | "dev": true,
2045 | "optional": true,
2046 | "os": [
2047 | "win32"
2048 | ],
2049 | "engines": {
2050 | "node": ">=10"
2051 | }
2052 | },
2053 | "node_modules/@swc/counter": {
2054 | "version": "0.1.2",
2055 | "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.2.tgz",
2056 | "integrity": "sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==",
2057 | "dev": true
2058 | },
2059 | "node_modules/@swc/helpers": {
2060 | "version": "0.5.3",
2061 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.3.tgz",
2062 | "integrity": "sha512-FaruWX6KdudYloq1AHD/4nU+UsMTdNE8CKyrseXWEcgjDAbvkwJg2QGPAnfIJLIWsjZOSPLOAykK6fuYp4vp4A==",
2063 | "dev": true,
2064 | "dependencies": {
2065 | "tslib": "^2.4.0"
2066 | }
2067 | },
2068 | "node_modules/@swc/types": {
2069 | "version": "0.1.5",
2070 | "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.5.tgz",
2071 | "integrity": "sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==",
2072 | "dev": true
2073 | },
2074 | "node_modules/@trysound/sax": {
2075 | "version": "0.2.0",
2076 | "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
2077 | "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
2078 | "dev": true,
2079 | "engines": {
2080 | "node": ">=10.13.0"
2081 | }
2082 | },
2083 | "node_modules/abortcontroller-polyfill": {
2084 | "version": "1.7.5",
2085 | "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz",
2086 | "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==",
2087 | "dev": true
2088 | },
2089 | "node_modules/ansi-regex": {
2090 | "version": "5.0.1",
2091 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2092 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2093 | "dev": true,
2094 | "engines": {
2095 | "node": ">=8"
2096 | }
2097 | },
2098 | "node_modules/ansi-styles": {
2099 | "version": "4.3.0",
2100 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2101 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2102 | "dev": true,
2103 | "dependencies": {
2104 | "color-convert": "^2.0.1"
2105 | },
2106 | "engines": {
2107 | "node": ">=8"
2108 | },
2109 | "funding": {
2110 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2111 | }
2112 | },
2113 | "node_modules/anymatch": {
2114 | "version": "3.1.3",
2115 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
2116 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
2117 | "dev": true,
2118 | "dependencies": {
2119 | "normalize-path": "^3.0.0",
2120 | "picomatch": "^2.0.4"
2121 | },
2122 | "engines": {
2123 | "node": ">= 8"
2124 | }
2125 | },
2126 | "node_modules/argparse": {
2127 | "version": "2.0.1",
2128 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
2129 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
2130 | "dev": true
2131 | },
2132 | "node_modules/base-x": {
2133 | "version": "3.0.9",
2134 | "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz",
2135 | "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==",
2136 | "dev": true,
2137 | "dependencies": {
2138 | "safe-buffer": "^5.0.1"
2139 | }
2140 | },
2141 | "node_modules/binary-extensions": {
2142 | "version": "2.2.0",
2143 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
2144 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
2145 | "dev": true,
2146 | "engines": {
2147 | "node": ">=8"
2148 | }
2149 | },
2150 | "node_modules/boolbase": {
2151 | "version": "1.0.0",
2152 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
2153 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
2154 | "dev": true
2155 | },
2156 | "node_modules/braces": {
2157 | "version": "3.0.2",
2158 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
2159 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
2160 | "dev": true,
2161 | "dependencies": {
2162 | "fill-range": "^7.0.1"
2163 | },
2164 | "engines": {
2165 | "node": ">=8"
2166 | }
2167 | },
2168 | "node_modules/browserslist": {
2169 | "version": "4.22.2",
2170 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
2171 | "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
2172 | "dev": true,
2173 | "funding": [
2174 | {
2175 | "type": "opencollective",
2176 | "url": "https://opencollective.com/browserslist"
2177 | },
2178 | {
2179 | "type": "tidelift",
2180 | "url": "https://tidelift.com/funding/github/npm/browserslist"
2181 | },
2182 | {
2183 | "type": "github",
2184 | "url": "https://github.com/sponsors/ai"
2185 | }
2186 | ],
2187 | "dependencies": {
2188 | "caniuse-lite": "^1.0.30001565",
2189 | "electron-to-chromium": "^1.4.601",
2190 | "node-releases": "^2.0.14",
2191 | "update-browserslist-db": "^1.0.13"
2192 | },
2193 | "bin": {
2194 | "browserslist": "cli.js"
2195 | },
2196 | "engines": {
2197 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
2198 | }
2199 | },
2200 | "node_modules/callsites": {
2201 | "version": "3.1.0",
2202 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
2203 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
2204 | "dev": true,
2205 | "engines": {
2206 | "node": ">=6"
2207 | }
2208 | },
2209 | "node_modules/caniuse-lite": {
2210 | "version": "1.0.30001579",
2211 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001579.tgz",
2212 | "integrity": "sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==",
2213 | "dev": true,
2214 | "funding": [
2215 | {
2216 | "type": "opencollective",
2217 | "url": "https://opencollective.com/browserslist"
2218 | },
2219 | {
2220 | "type": "tidelift",
2221 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
2222 | },
2223 | {
2224 | "type": "github",
2225 | "url": "https://github.com/sponsors/ai"
2226 | }
2227 | ]
2228 | },
2229 | "node_modules/chalk": {
2230 | "version": "4.1.2",
2231 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
2232 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
2233 | "dev": true,
2234 | "dependencies": {
2235 | "ansi-styles": "^4.1.0",
2236 | "supports-color": "^7.1.0"
2237 | },
2238 | "engines": {
2239 | "node": ">=10"
2240 | },
2241 | "funding": {
2242 | "url": "https://github.com/chalk/chalk?sponsor=1"
2243 | }
2244 | },
2245 | "node_modules/chokidar": {
2246 | "version": "3.5.3",
2247 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
2248 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
2249 | "dev": true,
2250 | "funding": [
2251 | {
2252 | "type": "individual",
2253 | "url": "https://paulmillr.com/funding/"
2254 | }
2255 | ],
2256 | "dependencies": {
2257 | "anymatch": "~3.1.2",
2258 | "braces": "~3.0.2",
2259 | "glob-parent": "~5.1.2",
2260 | "is-binary-path": "~2.1.0",
2261 | "is-glob": "~4.0.1",
2262 | "normalize-path": "~3.0.0",
2263 | "readdirp": "~3.6.0"
2264 | },
2265 | "engines": {
2266 | "node": ">= 8.10.0"
2267 | },
2268 | "optionalDependencies": {
2269 | "fsevents": "~2.3.2"
2270 | }
2271 | },
2272 | "node_modules/chrome-trace-event": {
2273 | "version": "1.0.3",
2274 | "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
2275 | "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
2276 | "dev": true,
2277 | "engines": {
2278 | "node": ">=6.0"
2279 | }
2280 | },
2281 | "node_modules/cli-progress": {
2282 | "version": "3.12.0",
2283 | "resolved": "https://registry.npmjs.org/cli-progress/-/cli-progress-3.12.0.tgz",
2284 | "integrity": "sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==",
2285 | "dev": true,
2286 | "dependencies": {
2287 | "string-width": "^4.2.3"
2288 | },
2289 | "engines": {
2290 | "node": ">=4"
2291 | }
2292 | },
2293 | "node_modules/clone": {
2294 | "version": "2.1.2",
2295 | "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
2296 | "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
2297 | "dev": true,
2298 | "engines": {
2299 | "node": ">=0.8"
2300 | }
2301 | },
2302 | "node_modules/color-convert": {
2303 | "version": "2.0.1",
2304 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
2305 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
2306 | "dev": true,
2307 | "dependencies": {
2308 | "color-name": "~1.1.4"
2309 | },
2310 | "engines": {
2311 | "node": ">=7.0.0"
2312 | }
2313 | },
2314 | "node_modules/color-name": {
2315 | "version": "1.1.4",
2316 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
2317 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
2318 | "dev": true
2319 | },
2320 | "node_modules/commander": {
2321 | "version": "7.2.0",
2322 | "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
2323 | "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
2324 | "dev": true,
2325 | "engines": {
2326 | "node": ">= 10"
2327 | }
2328 | },
2329 | "node_modules/cosmiconfig": {
2330 | "version": "8.3.6",
2331 | "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz",
2332 | "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==",
2333 | "dev": true,
2334 | "dependencies": {
2335 | "import-fresh": "^3.3.0",
2336 | "js-yaml": "^4.1.0",
2337 | "parse-json": "^5.2.0",
2338 | "path-type": "^4.0.0"
2339 | },
2340 | "engines": {
2341 | "node": ">=14"
2342 | },
2343 | "funding": {
2344 | "url": "https://github.com/sponsors/d-fischer"
2345 | },
2346 | "peerDependencies": {
2347 | "typescript": ">=4.9.5"
2348 | },
2349 | "peerDependenciesMeta": {
2350 | "typescript": {
2351 | "optional": true
2352 | }
2353 | }
2354 | },
2355 | "node_modules/css-select": {
2356 | "version": "5.1.0",
2357 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
2358 | "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
2359 | "dev": true,
2360 | "optional": true,
2361 | "peer": true,
2362 | "dependencies": {
2363 | "boolbase": "^1.0.0",
2364 | "css-what": "^6.1.0",
2365 | "domhandler": "^5.0.2",
2366 | "domutils": "^3.0.1",
2367 | "nth-check": "^2.0.1"
2368 | },
2369 | "funding": {
2370 | "url": "https://github.com/sponsors/fb55"
2371 | }
2372 | },
2373 | "node_modules/css-select/node_modules/dom-serializer": {
2374 | "version": "2.0.0",
2375 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
2376 | "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
2377 | "dev": true,
2378 | "optional": true,
2379 | "peer": true,
2380 | "dependencies": {
2381 | "domelementtype": "^2.3.0",
2382 | "domhandler": "^5.0.2",
2383 | "entities": "^4.2.0"
2384 | },
2385 | "funding": {
2386 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
2387 | }
2388 | },
2389 | "node_modules/css-select/node_modules/domhandler": {
2390 | "version": "5.0.3",
2391 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
2392 | "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
2393 | "dev": true,
2394 | "optional": true,
2395 | "peer": true,
2396 | "dependencies": {
2397 | "domelementtype": "^2.3.0"
2398 | },
2399 | "engines": {
2400 | "node": ">= 4"
2401 | },
2402 | "funding": {
2403 | "url": "https://github.com/fb55/domhandler?sponsor=1"
2404 | }
2405 | },
2406 | "node_modules/css-select/node_modules/domutils": {
2407 | "version": "3.1.0",
2408 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
2409 | "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
2410 | "dev": true,
2411 | "optional": true,
2412 | "peer": true,
2413 | "dependencies": {
2414 | "dom-serializer": "^2.0.0",
2415 | "domelementtype": "^2.3.0",
2416 | "domhandler": "^5.0.3"
2417 | },
2418 | "funding": {
2419 | "url": "https://github.com/fb55/domutils?sponsor=1"
2420 | }
2421 | },
2422 | "node_modules/css-select/node_modules/entities": {
2423 | "version": "4.5.0",
2424 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
2425 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
2426 | "dev": true,
2427 | "optional": true,
2428 | "peer": true,
2429 | "engines": {
2430 | "node": ">=0.12"
2431 | },
2432 | "funding": {
2433 | "url": "https://github.com/fb55/entities?sponsor=1"
2434 | }
2435 | },
2436 | "node_modules/css-tree": {
2437 | "version": "2.3.1",
2438 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
2439 | "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
2440 | "dev": true,
2441 | "optional": true,
2442 | "peer": true,
2443 | "dependencies": {
2444 | "mdn-data": "2.0.30",
2445 | "source-map-js": "^1.0.1"
2446 | },
2447 | "engines": {
2448 | "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
2449 | }
2450 | },
2451 | "node_modules/css-what": {
2452 | "version": "6.1.0",
2453 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
2454 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
2455 | "dev": true,
2456 | "engines": {
2457 | "node": ">= 6"
2458 | },
2459 | "funding": {
2460 | "url": "https://github.com/sponsors/fb55"
2461 | }
2462 | },
2463 | "node_modules/csso": {
2464 | "version": "5.0.5",
2465 | "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
2466 | "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
2467 | "dev": true,
2468 | "optional": true,
2469 | "peer": true,
2470 | "dependencies": {
2471 | "css-tree": "~2.2.0"
2472 | },
2473 | "engines": {
2474 | "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
2475 | "npm": ">=7.0.0"
2476 | }
2477 | },
2478 | "node_modules/csso/node_modules/css-tree": {
2479 | "version": "2.2.1",
2480 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
2481 | "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
2482 | "dev": true,
2483 | "optional": true,
2484 | "peer": true,
2485 | "dependencies": {
2486 | "mdn-data": "2.0.28",
2487 | "source-map-js": "^1.0.1"
2488 | },
2489 | "engines": {
2490 | "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
2491 | "npm": ">=7.0.0"
2492 | }
2493 | },
2494 | "node_modules/csso/node_modules/mdn-data": {
2495 | "version": "2.0.28",
2496 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
2497 | "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
2498 | "dev": true,
2499 | "optional": true,
2500 | "peer": true
2501 | },
2502 | "node_modules/detect-libc": {
2503 | "version": "1.0.3",
2504 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
2505 | "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
2506 | "dev": true,
2507 | "bin": {
2508 | "detect-libc": "bin/detect-libc.js"
2509 | },
2510 | "engines": {
2511 | "node": ">=0.10"
2512 | }
2513 | },
2514 | "node_modules/dom-serializer": {
2515 | "version": "1.4.1",
2516 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz",
2517 | "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==",
2518 | "dev": true,
2519 | "dependencies": {
2520 | "domelementtype": "^2.0.1",
2521 | "domhandler": "^4.2.0",
2522 | "entities": "^2.0.0"
2523 | },
2524 | "funding": {
2525 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
2526 | }
2527 | },
2528 | "node_modules/dom-serializer/node_modules/entities": {
2529 | "version": "2.2.0",
2530 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
2531 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==",
2532 | "dev": true,
2533 | "funding": {
2534 | "url": "https://github.com/fb55/entities?sponsor=1"
2535 | }
2536 | },
2537 | "node_modules/domelementtype": {
2538 | "version": "2.3.0",
2539 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
2540 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
2541 | "dev": true,
2542 | "funding": [
2543 | {
2544 | "type": "github",
2545 | "url": "https://github.com/sponsors/fb55"
2546 | }
2547 | ]
2548 | },
2549 | "node_modules/domhandler": {
2550 | "version": "4.3.1",
2551 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz",
2552 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==",
2553 | "dev": true,
2554 | "dependencies": {
2555 | "domelementtype": "^2.2.0"
2556 | },
2557 | "engines": {
2558 | "node": ">= 4"
2559 | },
2560 | "funding": {
2561 | "url": "https://github.com/fb55/domhandler?sponsor=1"
2562 | }
2563 | },
2564 | "node_modules/domutils": {
2565 | "version": "2.8.0",
2566 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
2567 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
2568 | "dev": true,
2569 | "dependencies": {
2570 | "dom-serializer": "^1.0.1",
2571 | "domelementtype": "^2.2.0",
2572 | "domhandler": "^4.2.0"
2573 | },
2574 | "funding": {
2575 | "url": "https://github.com/fb55/domutils?sponsor=1"
2576 | }
2577 | },
2578 | "node_modules/dotenv": {
2579 | "version": "7.0.0",
2580 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz",
2581 | "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==",
2582 | "dev": true,
2583 | "engines": {
2584 | "node": ">=6"
2585 | }
2586 | },
2587 | "node_modules/dotenv-expand": {
2588 | "version": "5.1.0",
2589 | "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
2590 | "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==",
2591 | "dev": true
2592 | },
2593 | "node_modules/electron-to-chromium": {
2594 | "version": "1.4.639",
2595 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.639.tgz",
2596 | "integrity": "sha512-CkKf3ZUVZchr+zDpAlNLEEy2NJJ9T64ULWaDgy3THXXlPVPkLu3VOs9Bac44nebVtdwl2geSj6AxTtGDOxoXhg==",
2597 | "dev": true
2598 | },
2599 | "node_modules/emoji-regex": {
2600 | "version": "8.0.0",
2601 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2602 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
2603 | "dev": true
2604 | },
2605 | "node_modules/entities": {
2606 | "version": "3.0.1",
2607 | "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz",
2608 | "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==",
2609 | "dev": true,
2610 | "engines": {
2611 | "node": ">=0.12"
2612 | },
2613 | "funding": {
2614 | "url": "https://github.com/fb55/entities?sponsor=1"
2615 | }
2616 | },
2617 | "node_modules/error-ex": {
2618 | "version": "1.3.2",
2619 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
2620 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
2621 | "dev": true,
2622 | "dependencies": {
2623 | "is-arrayish": "^0.2.1"
2624 | }
2625 | },
2626 | "node_modules/escalade": {
2627 | "version": "3.1.1",
2628 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
2629 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
2630 | "dev": true,
2631 | "engines": {
2632 | "node": ">=6"
2633 | }
2634 | },
2635 | "node_modules/escape-string-regexp": {
2636 | "version": "1.0.5",
2637 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
2638 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
2639 | "dev": true,
2640 | "engines": {
2641 | "node": ">=0.8.0"
2642 | }
2643 | },
2644 | "node_modules/fill-range": {
2645 | "version": "7.0.1",
2646 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
2647 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
2648 | "dev": true,
2649 | "dependencies": {
2650 | "to-regex-range": "^5.0.1"
2651 | },
2652 | "engines": {
2653 | "node": ">=8"
2654 | }
2655 | },
2656 | "node_modules/fsevents": {
2657 | "version": "2.3.3",
2658 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
2659 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
2660 | "dev": true,
2661 | "hasInstallScript": true,
2662 | "optional": true,
2663 | "os": [
2664 | "darwin"
2665 | ],
2666 | "engines": {
2667 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
2668 | }
2669 | },
2670 | "node_modules/get-port": {
2671 | "version": "4.2.0",
2672 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz",
2673 | "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==",
2674 | "dev": true,
2675 | "engines": {
2676 | "node": ">=6"
2677 | }
2678 | },
2679 | "node_modules/glob-parent": {
2680 | "version": "5.1.2",
2681 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
2682 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
2683 | "dev": true,
2684 | "dependencies": {
2685 | "is-glob": "^4.0.1"
2686 | },
2687 | "engines": {
2688 | "node": ">= 6"
2689 | }
2690 | },
2691 | "node_modules/globals": {
2692 | "version": "13.24.0",
2693 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
2694 | "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
2695 | "dev": true,
2696 | "dependencies": {
2697 | "type-fest": "^0.20.2"
2698 | },
2699 | "engines": {
2700 | "node": ">=8"
2701 | },
2702 | "funding": {
2703 | "url": "https://github.com/sponsors/sindresorhus"
2704 | }
2705 | },
2706 | "node_modules/has-flag": {
2707 | "version": "4.0.0",
2708 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
2709 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
2710 | "dev": true,
2711 | "engines": {
2712 | "node": ">=8"
2713 | }
2714 | },
2715 | "node_modules/htmlnano": {
2716 | "version": "2.1.0",
2717 | "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.1.0.tgz",
2718 | "integrity": "sha512-jVGRE0Ep9byMBKEu0Vxgl8dhXYOUk0iNQ2pjsG+BcRB0u0oDF5A9p/iBGMg/PGKYUyMD0OAGu8dVT5Lzj8S58g==",
2719 | "dev": true,
2720 | "dependencies": {
2721 | "cosmiconfig": "^8.0.0",
2722 | "posthtml": "^0.16.5",
2723 | "timsort": "^0.3.0"
2724 | },
2725 | "peerDependencies": {
2726 | "cssnano": "^6.0.0",
2727 | "postcss": "^8.3.11",
2728 | "purgecss": "^5.0.0",
2729 | "relateurl": "^0.2.7",
2730 | "srcset": "4.0.0",
2731 | "svgo": "^3.0.2",
2732 | "terser": "^5.10.0",
2733 | "uncss": "^0.17.3"
2734 | },
2735 | "peerDependenciesMeta": {
2736 | "cssnano": {
2737 | "optional": true
2738 | },
2739 | "postcss": {
2740 | "optional": true
2741 | },
2742 | "purgecss": {
2743 | "optional": true
2744 | },
2745 | "relateurl": {
2746 | "optional": true
2747 | },
2748 | "srcset": {
2749 | "optional": true
2750 | },
2751 | "svgo": {
2752 | "optional": true
2753 | },
2754 | "terser": {
2755 | "optional": true
2756 | },
2757 | "uncss": {
2758 | "optional": true
2759 | }
2760 | }
2761 | },
2762 | "node_modules/htmlparser2": {
2763 | "version": "7.2.0",
2764 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz",
2765 | "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==",
2766 | "dev": true,
2767 | "funding": [
2768 | "https://github.com/fb55/htmlparser2?sponsor=1",
2769 | {
2770 | "type": "github",
2771 | "url": "https://github.com/sponsors/fb55"
2772 | }
2773 | ],
2774 | "dependencies": {
2775 | "domelementtype": "^2.0.1",
2776 | "domhandler": "^4.2.2",
2777 | "domutils": "^2.8.0",
2778 | "entities": "^3.0.1"
2779 | }
2780 | },
2781 | "node_modules/immutable": {
2782 | "version": "4.3.4",
2783 | "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz",
2784 | "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==",
2785 | "dev": true
2786 | },
2787 | "node_modules/import-fresh": {
2788 | "version": "3.3.0",
2789 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
2790 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
2791 | "dev": true,
2792 | "dependencies": {
2793 | "parent-module": "^1.0.0",
2794 | "resolve-from": "^4.0.0"
2795 | },
2796 | "engines": {
2797 | "node": ">=6"
2798 | },
2799 | "funding": {
2800 | "url": "https://github.com/sponsors/sindresorhus"
2801 | }
2802 | },
2803 | "node_modules/is-arrayish": {
2804 | "version": "0.2.1",
2805 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
2806 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
2807 | "dev": true
2808 | },
2809 | "node_modules/is-binary-path": {
2810 | "version": "2.1.0",
2811 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
2812 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
2813 | "dev": true,
2814 | "dependencies": {
2815 | "binary-extensions": "^2.0.0"
2816 | },
2817 | "engines": {
2818 | "node": ">=8"
2819 | }
2820 | },
2821 | "node_modules/is-extglob": {
2822 | "version": "2.1.1",
2823 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
2824 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
2825 | "dev": true,
2826 | "engines": {
2827 | "node": ">=0.10.0"
2828 | }
2829 | },
2830 | "node_modules/is-fullwidth-code-point": {
2831 | "version": "3.0.0",
2832 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
2833 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
2834 | "dev": true,
2835 | "engines": {
2836 | "node": ">=8"
2837 | }
2838 | },
2839 | "node_modules/is-glob": {
2840 | "version": "4.0.3",
2841 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
2842 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
2843 | "dev": true,
2844 | "dependencies": {
2845 | "is-extglob": "^2.1.1"
2846 | },
2847 | "engines": {
2848 | "node": ">=0.10.0"
2849 | }
2850 | },
2851 | "node_modules/is-json": {
2852 | "version": "2.0.1",
2853 | "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz",
2854 | "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==",
2855 | "dev": true
2856 | },
2857 | "node_modules/is-number": {
2858 | "version": "7.0.0",
2859 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
2860 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
2861 | "dev": true,
2862 | "engines": {
2863 | "node": ">=0.12.0"
2864 | }
2865 | },
2866 | "node_modules/js-tokens": {
2867 | "version": "4.0.0",
2868 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
2869 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
2870 | "dev": true
2871 | },
2872 | "node_modules/js-yaml": {
2873 | "version": "4.1.0",
2874 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
2875 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
2876 | "dev": true,
2877 | "dependencies": {
2878 | "argparse": "^2.0.1"
2879 | },
2880 | "bin": {
2881 | "js-yaml": "bin/js-yaml.js"
2882 | }
2883 | },
2884 | "node_modules/json-parse-even-better-errors": {
2885 | "version": "2.3.1",
2886 | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
2887 | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
2888 | "dev": true
2889 | },
2890 | "node_modules/json5": {
2891 | "version": "2.2.3",
2892 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
2893 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
2894 | "dev": true,
2895 | "bin": {
2896 | "json5": "lib/cli.js"
2897 | },
2898 | "engines": {
2899 | "node": ">=6"
2900 | }
2901 | },
2902 | "node_modules/lightningcss": {
2903 | "version": "1.23.0",
2904 | "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.23.0.tgz",
2905 | "integrity": "sha512-SEArWKMHhqn/0QzOtclIwH5pXIYQOUEkF8DgICd/105O+GCgd7jxjNod/QPnBCSWvpRHQBGVz5fQ9uScby03zA==",
2906 | "dev": true,
2907 | "dependencies": {
2908 | "detect-libc": "^1.0.3"
2909 | },
2910 | "engines": {
2911 | "node": ">= 12.0.0"
2912 | },
2913 | "funding": {
2914 | "type": "opencollective",
2915 | "url": "https://opencollective.com/parcel"
2916 | },
2917 | "optionalDependencies": {
2918 | "lightningcss-darwin-arm64": "1.23.0",
2919 | "lightningcss-darwin-x64": "1.23.0",
2920 | "lightningcss-freebsd-x64": "1.23.0",
2921 | "lightningcss-linux-arm-gnueabihf": "1.23.0",
2922 | "lightningcss-linux-arm64-gnu": "1.23.0",
2923 | "lightningcss-linux-arm64-musl": "1.23.0",
2924 | "lightningcss-linux-x64-gnu": "1.23.0",
2925 | "lightningcss-linux-x64-musl": "1.23.0",
2926 | "lightningcss-win32-x64-msvc": "1.23.0"
2927 | }
2928 | },
2929 | "node_modules/lightningcss-darwin-arm64": {
2930 | "version": "1.23.0",
2931 | "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.23.0.tgz",
2932 | "integrity": "sha512-kl4Pk3Q2lnE6AJ7Qaij47KNEfY2/UXRZBT/zqGA24B8qwkgllr/j7rclKOf1axcslNXvvUdztjo4Xqh39Yq1aA==",
2933 | "cpu": [
2934 | "arm64"
2935 | ],
2936 | "dev": true,
2937 | "optional": true,
2938 | "os": [
2939 | "darwin"
2940 | ],
2941 | "engines": {
2942 | "node": ">= 12.0.0"
2943 | },
2944 | "funding": {
2945 | "type": "opencollective",
2946 | "url": "https://opencollective.com/parcel"
2947 | }
2948 | },
2949 | "node_modules/lightningcss-darwin-x64": {
2950 | "version": "1.23.0",
2951 | "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.23.0.tgz",
2952 | "integrity": "sha512-KeRFCNoYfDdcolcFXvokVw+PXCapd2yHS1Diko1z1BhRz/nQuD5XyZmxjWdhmhN/zj5sH8YvWsp0/lPLVzqKpg==",
2953 | "cpu": [
2954 | "x64"
2955 | ],
2956 | "dev": true,
2957 | "optional": true,
2958 | "os": [
2959 | "darwin"
2960 | ],
2961 | "engines": {
2962 | "node": ">= 12.0.0"
2963 | },
2964 | "funding": {
2965 | "type": "opencollective",
2966 | "url": "https://opencollective.com/parcel"
2967 | }
2968 | },
2969 | "node_modules/lightningcss-freebsd-x64": {
2970 | "version": "1.23.0",
2971 | "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.23.0.tgz",
2972 | "integrity": "sha512-xhnhf0bWPuZxcqknvMDRFFo2TInrmQRWZGB0f6YoAsZX8Y+epfjHeeOIGCfAmgF0DgZxHwYc8mIR5tQU9/+ROA==",
2973 | "cpu": [
2974 | "x64"
2975 | ],
2976 | "dev": true,
2977 | "optional": true,
2978 | "os": [
2979 | "freebsd"
2980 | ],
2981 | "engines": {
2982 | "node": ">= 12.0.0"
2983 | },
2984 | "funding": {
2985 | "type": "opencollective",
2986 | "url": "https://opencollective.com/parcel"
2987 | }
2988 | },
2989 | "node_modules/lightningcss-linux-arm-gnueabihf": {
2990 | "version": "1.23.0",
2991 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.23.0.tgz",
2992 | "integrity": "sha512-fBamf/bULvmWft9uuX+bZske236pUZEoUlaHNBjnueaCTJ/xd8eXgb0cEc7S5o0Nn6kxlauMBnqJpF70Bgq3zg==",
2993 | "cpu": [
2994 | "arm"
2995 | ],
2996 | "dev": true,
2997 | "optional": true,
2998 | "os": [
2999 | "linux"
3000 | ],
3001 | "engines": {
3002 | "node": ">= 12.0.0"
3003 | },
3004 | "funding": {
3005 | "type": "opencollective",
3006 | "url": "https://opencollective.com/parcel"
3007 | }
3008 | },
3009 | "node_modules/lightningcss-linux-arm64-gnu": {
3010 | "version": "1.23.0",
3011 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.23.0.tgz",
3012 | "integrity": "sha512-RS7sY77yVLOmZD6xW2uEHByYHhQi5JYWmgVumYY85BfNoVI3DupXSlzbw+b45A9NnVKq45+oXkiN6ouMMtTwfg==",
3013 | "cpu": [
3014 | "arm64"
3015 | ],
3016 | "dev": true,
3017 | "optional": true,
3018 | "os": [
3019 | "linux"
3020 | ],
3021 | "engines": {
3022 | "node": ">= 12.0.0"
3023 | },
3024 | "funding": {
3025 | "type": "opencollective",
3026 | "url": "https://opencollective.com/parcel"
3027 | }
3028 | },
3029 | "node_modules/lightningcss-linux-arm64-musl": {
3030 | "version": "1.23.0",
3031 | "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.23.0.tgz",
3032 | "integrity": "sha512-cU00LGb6GUXCwof6ACgSMKo3q7XYbsyTj0WsKHLi1nw7pV0NCq8nFTn6ZRBYLoKiV8t+jWl0Hv8KkgymmK5L5g==",
3033 | "cpu": [
3034 | "arm64"
3035 | ],
3036 | "dev": true,
3037 | "optional": true,
3038 | "os": [
3039 | "linux"
3040 | ],
3041 | "engines": {
3042 | "node": ">= 12.0.0"
3043 | },
3044 | "funding": {
3045 | "type": "opencollective",
3046 | "url": "https://opencollective.com/parcel"
3047 | }
3048 | },
3049 | "node_modules/lightningcss-linux-x64-gnu": {
3050 | "version": "1.23.0",
3051 | "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.23.0.tgz",
3052 | "integrity": "sha512-q4jdx5+5NfB0/qMbXbOmuC6oo7caPnFghJbIAV90cXZqgV8Am3miZhC4p+sQVdacqxfd+3nrle4C8icR3p1AYw==",
3053 | "cpu": [
3054 | "x64"
3055 | ],
3056 | "dev": true,
3057 | "optional": true,
3058 | "os": [
3059 | "linux"
3060 | ],
3061 | "engines": {
3062 | "node": ">= 12.0.0"
3063 | },
3064 | "funding": {
3065 | "type": "opencollective",
3066 | "url": "https://opencollective.com/parcel"
3067 | }
3068 | },
3069 | "node_modules/lightningcss-linux-x64-musl": {
3070 | "version": "1.23.0",
3071 | "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.23.0.tgz",
3072 | "integrity": "sha512-G9Ri3qpmF4qef2CV/80dADHKXRAQeQXpQTLx7AiQrBYQHqBjB75oxqj06FCIe5g4hNCqLPnM9fsO4CyiT1sFSQ==",
3073 | "cpu": [
3074 | "x64"
3075 | ],
3076 | "dev": true,
3077 | "optional": true,
3078 | "os": [
3079 | "linux"
3080 | ],
3081 | "engines": {
3082 | "node": ">= 12.0.0"
3083 | },
3084 | "funding": {
3085 | "type": "opencollective",
3086 | "url": "https://opencollective.com/parcel"
3087 | }
3088 | },
3089 | "node_modules/lightningcss-win32-x64-msvc": {
3090 | "version": "1.23.0",
3091 | "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.23.0.tgz",
3092 | "integrity": "sha512-1rcBDJLU+obPPJM6qR5fgBUiCdZwZLafZM5f9kwjFLkb/UBNIzmae39uCSmh71nzPCTXZqHbvwu23OWnWEz+eg==",
3093 | "cpu": [
3094 | "x64"
3095 | ],
3096 | "dev": true,
3097 | "optional": true,
3098 | "os": [
3099 | "win32"
3100 | ],
3101 | "engines": {
3102 | "node": ">= 12.0.0"
3103 | },
3104 | "funding": {
3105 | "type": "opencollective",
3106 | "url": "https://opencollective.com/parcel"
3107 | }
3108 | },
3109 | "node_modules/lines-and-columns": {
3110 | "version": "1.2.4",
3111 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
3112 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
3113 | "dev": true
3114 | },
3115 | "node_modules/lmdb": {
3116 | "version": "2.8.5",
3117 | "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.8.5.tgz",
3118 | "integrity": "sha512-9bMdFfc80S+vSldBmG3HOuLVHnxRdNTlpzR6QDnzqCQtCzGUEAGTzBKYMeIM+I/sU4oZfgbcbS7X7F65/z/oxQ==",
3119 | "dev": true,
3120 | "hasInstallScript": true,
3121 | "dependencies": {
3122 | "msgpackr": "^1.9.5",
3123 | "node-addon-api": "^6.1.0",
3124 | "node-gyp-build-optional-packages": "5.1.1",
3125 | "ordered-binary": "^1.4.1",
3126 | "weak-lru-cache": "^1.2.2"
3127 | },
3128 | "bin": {
3129 | "download-lmdb-prebuilds": "bin/download-prebuilds.js"
3130 | },
3131 | "optionalDependencies": {
3132 | "@lmdb/lmdb-darwin-arm64": "2.8.5",
3133 | "@lmdb/lmdb-darwin-x64": "2.8.5",
3134 | "@lmdb/lmdb-linux-arm": "2.8.5",
3135 | "@lmdb/lmdb-linux-arm64": "2.8.5",
3136 | "@lmdb/lmdb-linux-x64": "2.8.5",
3137 | "@lmdb/lmdb-win32-x64": "2.8.5"
3138 | }
3139 | },
3140 | "node_modules/lmdb/node_modules/node-addon-api": {
3141 | "version": "6.1.0",
3142 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
3143 | "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==",
3144 | "dev": true
3145 | },
3146 | "node_modules/lru-cache": {
3147 | "version": "6.0.0",
3148 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
3149 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
3150 | "dev": true,
3151 | "dependencies": {
3152 | "yallist": "^4.0.0"
3153 | },
3154 | "engines": {
3155 | "node": ">=10"
3156 | }
3157 | },
3158 | "node_modules/mdn-data": {
3159 | "version": "2.0.30",
3160 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
3161 | "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
3162 | "dev": true,
3163 | "optional": true,
3164 | "peer": true
3165 | },
3166 | "node_modules/micromatch": {
3167 | "version": "4.0.5",
3168 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
3169 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
3170 | "dev": true,
3171 | "dependencies": {
3172 | "braces": "^3.0.2",
3173 | "picomatch": "^2.3.1"
3174 | },
3175 | "engines": {
3176 | "node": ">=8.6"
3177 | }
3178 | },
3179 | "node_modules/moment": {
3180 | "version": "2.30.1",
3181 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
3182 | "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
3183 | "engines": {
3184 | "node": "*"
3185 | }
3186 | },
3187 | "node_modules/msgpackr": {
3188 | "version": "1.10.1",
3189 | "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.10.1.tgz",
3190 | "integrity": "sha512-r5VRLv9qouXuLiIBrLpl2d5ZvPt8svdQTl5/vMvE4nzDMyEX4sgW5yWhuBBj5UmgwOTWj8CIdSXn5sAfsHAWIQ==",
3191 | "dev": true,
3192 | "optionalDependencies": {
3193 | "msgpackr-extract": "^3.0.2"
3194 | }
3195 | },
3196 | "node_modules/msgpackr-extract": {
3197 | "version": "3.0.2",
3198 | "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz",
3199 | "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==",
3200 | "dev": true,
3201 | "hasInstallScript": true,
3202 | "optional": true,
3203 | "dependencies": {
3204 | "node-gyp-build-optional-packages": "5.0.7"
3205 | },
3206 | "bin": {
3207 | "download-msgpackr-prebuilds": "bin/download-prebuilds.js"
3208 | },
3209 | "optionalDependencies": {
3210 | "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2",
3211 | "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2",
3212 | "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2",
3213 | "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2",
3214 | "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2",
3215 | "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2"
3216 | }
3217 | },
3218 | "node_modules/msgpackr-extract/node_modules/node-gyp-build-optional-packages": {
3219 | "version": "5.0.7",
3220 | "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz",
3221 | "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==",
3222 | "dev": true,
3223 | "optional": true,
3224 | "bin": {
3225 | "node-gyp-build-optional-packages": "bin.js",
3226 | "node-gyp-build-optional-packages-optional": "optional.js",
3227 | "node-gyp-build-optional-packages-test": "build-test.js"
3228 | }
3229 | },
3230 | "node_modules/node-addon-api": {
3231 | "version": "7.1.0",
3232 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz",
3233 | "integrity": "sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==",
3234 | "dev": true,
3235 | "engines": {
3236 | "node": "^16 || ^18 || >= 20"
3237 | }
3238 | },
3239 | "node_modules/node-gyp-build-optional-packages": {
3240 | "version": "5.1.1",
3241 | "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.1.1.tgz",
3242 | "integrity": "sha512-+P72GAjVAbTxjjwUmwjVrqrdZROD4nf8KgpBoDxqXXTiYZZt/ud60dE5yvCSr9lRO8e8yv6kgJIC0K0PfZFVQw==",
3243 | "dev": true,
3244 | "dependencies": {
3245 | "detect-libc": "^2.0.1"
3246 | },
3247 | "bin": {
3248 | "node-gyp-build-optional-packages": "bin.js",
3249 | "node-gyp-build-optional-packages-optional": "optional.js",
3250 | "node-gyp-build-optional-packages-test": "build-test.js"
3251 | }
3252 | },
3253 | "node_modules/node-gyp-build-optional-packages/node_modules/detect-libc": {
3254 | "version": "2.0.2",
3255 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
3256 | "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
3257 | "dev": true,
3258 | "engines": {
3259 | "node": ">=8"
3260 | }
3261 | },
3262 | "node_modules/node-releases": {
3263 | "version": "2.0.14",
3264 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
3265 | "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
3266 | "dev": true
3267 | },
3268 | "node_modules/normalize-path": {
3269 | "version": "3.0.0",
3270 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
3271 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
3272 | "dev": true,
3273 | "engines": {
3274 | "node": ">=0.10.0"
3275 | }
3276 | },
3277 | "node_modules/nth-check": {
3278 | "version": "2.1.1",
3279 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
3280 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
3281 | "dev": true,
3282 | "dependencies": {
3283 | "boolbase": "^1.0.0"
3284 | },
3285 | "funding": {
3286 | "url": "https://github.com/fb55/nth-check?sponsor=1"
3287 | }
3288 | },
3289 | "node_modules/nullthrows": {
3290 | "version": "1.1.1",
3291 | "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz",
3292 | "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==",
3293 | "dev": true
3294 | },
3295 | "node_modules/ordered-binary": {
3296 | "version": "1.5.1",
3297 | "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.5.1.tgz",
3298 | "integrity": "sha512-5VyHfHY3cd0iza71JepYG50My+YUbrFtGoUz2ooEydPyPM7Aai/JW098juLr+RG6+rDJuzNNTsEQu2DZa1A41A==",
3299 | "dev": true
3300 | },
3301 | "node_modules/parcel": {
3302 | "version": "2.11.0",
3303 | "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.11.0.tgz",
3304 | "integrity": "sha512-H/RI1/DmuOkL8RuG/EpNPvtzrbF+7jA/R56ydEEm+lqFbYktKB4COR7JXdHkZXRgbSJyimrFB8d0r9+SaRnj0Q==",
3305 | "dev": true,
3306 | "dependencies": {
3307 | "@parcel/config-default": "2.11.0",
3308 | "@parcel/core": "2.11.0",
3309 | "@parcel/diagnostic": "2.11.0",
3310 | "@parcel/events": "2.11.0",
3311 | "@parcel/fs": "2.11.0",
3312 | "@parcel/logger": "2.11.0",
3313 | "@parcel/package-manager": "2.11.0",
3314 | "@parcel/reporter-cli": "2.11.0",
3315 | "@parcel/reporter-dev-server": "2.11.0",
3316 | "@parcel/reporter-tracer": "2.11.0",
3317 | "@parcel/utils": "2.11.0",
3318 | "chalk": "^4.1.0",
3319 | "commander": "^7.0.0",
3320 | "get-port": "^4.2.0"
3321 | },
3322 | "bin": {
3323 | "parcel": "lib/bin.js"
3324 | },
3325 | "engines": {
3326 | "node": ">= 12.0.0"
3327 | },
3328 | "funding": {
3329 | "type": "opencollective",
3330 | "url": "https://opencollective.com/parcel"
3331 | }
3332 | },
3333 | "node_modules/parent-module": {
3334 | "version": "1.0.1",
3335 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
3336 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
3337 | "dev": true,
3338 | "dependencies": {
3339 | "callsites": "^3.0.0"
3340 | },
3341 | "engines": {
3342 | "node": ">=6"
3343 | }
3344 | },
3345 | "node_modules/parse-json": {
3346 | "version": "5.2.0",
3347 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
3348 | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
3349 | "dev": true,
3350 | "dependencies": {
3351 | "@babel/code-frame": "^7.0.0",
3352 | "error-ex": "^1.3.1",
3353 | "json-parse-even-better-errors": "^2.3.0",
3354 | "lines-and-columns": "^1.1.6"
3355 | },
3356 | "engines": {
3357 | "node": ">=8"
3358 | },
3359 | "funding": {
3360 | "url": "https://github.com/sponsors/sindresorhus"
3361 | }
3362 | },
3363 | "node_modules/path-type": {
3364 | "version": "4.0.0",
3365 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
3366 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
3367 | "dev": true,
3368 | "engines": {
3369 | "node": ">=8"
3370 | }
3371 | },
3372 | "node_modules/picocolors": {
3373 | "version": "1.0.0",
3374 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
3375 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
3376 | "dev": true
3377 | },
3378 | "node_modules/picomatch": {
3379 | "version": "2.3.1",
3380 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
3381 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
3382 | "dev": true,
3383 | "engines": {
3384 | "node": ">=8.6"
3385 | },
3386 | "funding": {
3387 | "url": "https://github.com/sponsors/jonschlinkert"
3388 | }
3389 | },
3390 | "node_modules/postcss-value-parser": {
3391 | "version": "4.2.0",
3392 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
3393 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
3394 | "dev": true
3395 | },
3396 | "node_modules/posthtml": {
3397 | "version": "0.16.6",
3398 | "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz",
3399 | "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==",
3400 | "dev": true,
3401 | "dependencies": {
3402 | "posthtml-parser": "^0.11.0",
3403 | "posthtml-render": "^3.0.0"
3404 | },
3405 | "engines": {
3406 | "node": ">=12.0.0"
3407 | }
3408 | },
3409 | "node_modules/posthtml-parser": {
3410 | "version": "0.10.2",
3411 | "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz",
3412 | "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==",
3413 | "dev": true,
3414 | "dependencies": {
3415 | "htmlparser2": "^7.1.1"
3416 | },
3417 | "engines": {
3418 | "node": ">=12"
3419 | }
3420 | },
3421 | "node_modules/posthtml-render": {
3422 | "version": "3.0.0",
3423 | "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz",
3424 | "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==",
3425 | "dev": true,
3426 | "dependencies": {
3427 | "is-json": "^2.0.1"
3428 | },
3429 | "engines": {
3430 | "node": ">=12"
3431 | }
3432 | },
3433 | "node_modules/posthtml/node_modules/posthtml-parser": {
3434 | "version": "0.11.0",
3435 | "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz",
3436 | "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==",
3437 | "dev": true,
3438 | "dependencies": {
3439 | "htmlparser2": "^7.1.1"
3440 | },
3441 | "engines": {
3442 | "node": ">=12"
3443 | }
3444 | },
3445 | "node_modules/process": {
3446 | "version": "0.11.10",
3447 | "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
3448 | "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
3449 | "dev": true,
3450 | "engines": {
3451 | "node": ">= 0.6.0"
3452 | }
3453 | },
3454 | "node_modules/react-error-overlay": {
3455 | "version": "6.0.9",
3456 | "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz",
3457 | "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==",
3458 | "dev": true
3459 | },
3460 | "node_modules/react-refresh": {
3461 | "version": "0.9.0",
3462 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz",
3463 | "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==",
3464 | "dev": true,
3465 | "engines": {
3466 | "node": ">=0.10.0"
3467 | }
3468 | },
3469 | "node_modules/readdirp": {
3470 | "version": "3.6.0",
3471 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
3472 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
3473 | "dev": true,
3474 | "dependencies": {
3475 | "picomatch": "^2.2.1"
3476 | },
3477 | "engines": {
3478 | "node": ">=8.10.0"
3479 | }
3480 | },
3481 | "node_modules/regenerator-runtime": {
3482 | "version": "0.13.11",
3483 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz",
3484 | "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==",
3485 | "dev": true
3486 | },
3487 | "node_modules/resolve-from": {
3488 | "version": "4.0.0",
3489 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
3490 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
3491 | "dev": true,
3492 | "engines": {
3493 | "node": ">=4"
3494 | }
3495 | },
3496 | "node_modules/safe-buffer": {
3497 | "version": "5.2.1",
3498 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
3499 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
3500 | "dev": true,
3501 | "funding": [
3502 | {
3503 | "type": "github",
3504 | "url": "https://github.com/sponsors/feross"
3505 | },
3506 | {
3507 | "type": "patreon",
3508 | "url": "https://www.patreon.com/feross"
3509 | },
3510 | {
3511 | "type": "consulting",
3512 | "url": "https://feross.org/support"
3513 | }
3514 | ]
3515 | },
3516 | "node_modules/sass": {
3517 | "version": "1.70.0",
3518 | "resolved": "https://registry.npmjs.org/sass/-/sass-1.70.0.tgz",
3519 | "integrity": "sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==",
3520 | "dev": true,
3521 | "dependencies": {
3522 | "chokidar": ">=3.0.0 <4.0.0",
3523 | "immutable": "^4.0.0",
3524 | "source-map-js": ">=0.6.2 <2.0.0"
3525 | },
3526 | "bin": {
3527 | "sass": "sass.js"
3528 | },
3529 | "engines": {
3530 | "node": ">=14.0.0"
3531 | }
3532 | },
3533 | "node_modules/semver": {
3534 | "version": "7.5.4",
3535 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
3536 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
3537 | "dev": true,
3538 | "dependencies": {
3539 | "lru-cache": "^6.0.0"
3540 | },
3541 | "bin": {
3542 | "semver": "bin/semver.js"
3543 | },
3544 | "engines": {
3545 | "node": ">=10"
3546 | }
3547 | },
3548 | "node_modules/source-map": {
3549 | "version": "0.6.1",
3550 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
3551 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
3552 | "dev": true,
3553 | "engines": {
3554 | "node": ">=0.10.0"
3555 | }
3556 | },
3557 | "node_modules/source-map-js": {
3558 | "version": "1.0.2",
3559 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
3560 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
3561 | "dev": true,
3562 | "engines": {
3563 | "node": ">=0.10.0"
3564 | }
3565 | },
3566 | "node_modules/srcset": {
3567 | "version": "4.0.0",
3568 | "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz",
3569 | "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==",
3570 | "dev": true,
3571 | "engines": {
3572 | "node": ">=12"
3573 | },
3574 | "funding": {
3575 | "url": "https://github.com/sponsors/sindresorhus"
3576 | }
3577 | },
3578 | "node_modules/stable": {
3579 | "version": "0.1.8",
3580 | "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
3581 | "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
3582 | "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility",
3583 | "dev": true
3584 | },
3585 | "node_modules/string-width": {
3586 | "version": "4.2.3",
3587 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
3588 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
3589 | "dev": true,
3590 | "dependencies": {
3591 | "emoji-regex": "^8.0.0",
3592 | "is-fullwidth-code-point": "^3.0.0",
3593 | "strip-ansi": "^6.0.1"
3594 | },
3595 | "engines": {
3596 | "node": ">=8"
3597 | }
3598 | },
3599 | "node_modules/strip-ansi": {
3600 | "version": "6.0.1",
3601 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
3602 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
3603 | "dev": true,
3604 | "dependencies": {
3605 | "ansi-regex": "^5.0.1"
3606 | },
3607 | "engines": {
3608 | "node": ">=8"
3609 | }
3610 | },
3611 | "node_modules/supports-color": {
3612 | "version": "7.2.0",
3613 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
3614 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
3615 | "dev": true,
3616 | "dependencies": {
3617 | "has-flag": "^4.0.0"
3618 | },
3619 | "engines": {
3620 | "node": ">=8"
3621 | }
3622 | },
3623 | "node_modules/svgo": {
3624 | "version": "3.2.0",
3625 | "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz",
3626 | "integrity": "sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==",
3627 | "dev": true,
3628 | "optional": true,
3629 | "peer": true,
3630 | "dependencies": {
3631 | "@trysound/sax": "0.2.0",
3632 | "commander": "^7.2.0",
3633 | "css-select": "^5.1.0",
3634 | "css-tree": "^2.3.1",
3635 | "css-what": "^6.1.0",
3636 | "csso": "^5.0.5",
3637 | "picocolors": "^1.0.0"
3638 | },
3639 | "bin": {
3640 | "svgo": "bin/svgo"
3641 | },
3642 | "engines": {
3643 | "node": ">=14.0.0"
3644 | },
3645 | "funding": {
3646 | "type": "opencollective",
3647 | "url": "https://opencollective.com/svgo"
3648 | }
3649 | },
3650 | "node_modules/term-size": {
3651 | "version": "2.2.1",
3652 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz",
3653 | "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==",
3654 | "dev": true,
3655 | "engines": {
3656 | "node": ">=8"
3657 | },
3658 | "funding": {
3659 | "url": "https://github.com/sponsors/sindresorhus"
3660 | }
3661 | },
3662 | "node_modules/timsort": {
3663 | "version": "0.3.0",
3664 | "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz",
3665 | "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==",
3666 | "dev": true
3667 | },
3668 | "node_modules/to-regex-range": {
3669 | "version": "5.0.1",
3670 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
3671 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
3672 | "dev": true,
3673 | "dependencies": {
3674 | "is-number": "^7.0.0"
3675 | },
3676 | "engines": {
3677 | "node": ">=8.0"
3678 | }
3679 | },
3680 | "node_modules/tslib": {
3681 | "version": "2.6.2",
3682 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
3683 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==",
3684 | "dev": true
3685 | },
3686 | "node_modules/type-fest": {
3687 | "version": "0.20.2",
3688 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
3689 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
3690 | "dev": true,
3691 | "engines": {
3692 | "node": ">=10"
3693 | },
3694 | "funding": {
3695 | "url": "https://github.com/sponsors/sindresorhus"
3696 | }
3697 | },
3698 | "node_modules/update-browserslist-db": {
3699 | "version": "1.0.13",
3700 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
3701 | "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
3702 | "dev": true,
3703 | "funding": [
3704 | {
3705 | "type": "opencollective",
3706 | "url": "https://opencollective.com/browserslist"
3707 | },
3708 | {
3709 | "type": "tidelift",
3710 | "url": "https://tidelift.com/funding/github/npm/browserslist"
3711 | },
3712 | {
3713 | "type": "github",
3714 | "url": "https://github.com/sponsors/ai"
3715 | }
3716 | ],
3717 | "dependencies": {
3718 | "escalade": "^3.1.1",
3719 | "picocolors": "^1.0.0"
3720 | },
3721 | "bin": {
3722 | "update-browserslist-db": "cli.js"
3723 | },
3724 | "peerDependencies": {
3725 | "browserslist": ">= 4.21.0"
3726 | }
3727 | },
3728 | "node_modules/utility-types": {
3729 | "version": "3.11.0",
3730 | "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.11.0.tgz",
3731 | "integrity": "sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==",
3732 | "dev": true,
3733 | "engines": {
3734 | "node": ">= 4"
3735 | }
3736 | },
3737 | "node_modules/weak-lru-cache": {
3738 | "version": "1.2.2",
3739 | "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz",
3740 | "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==",
3741 | "dev": true
3742 | },
3743 | "node_modules/yallist": {
3744 | "version": "4.0.0",
3745 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
3746 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
3747 | "dev": true
3748 | }
3749 | }
3750 | }
3751 |
--------------------------------------------------------------------------------
/app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "scripts": {
3 | "start": "parcel index.html --no-cache --dist-dir dist --log-level info",
4 | "build-staging": "parcel build build/index.html --dist-dir dist-staging --log-level info",
5 | "build-prod": "parcel build build/index.html --dist-dir dist-prod --log-level info"
6 | },
7 | "devDependencies": {
8 | "parcel": "^2.1.0",
9 | "process": "^0.11.10",
10 | "sass": "^1.34.0"
11 | },
12 | "dependencies": {
13 | "moment": "^2.29.4"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/scala/com/rockthejvm/livedemo/App.scala:
--------------------------------------------------------------------------------
1 | package com.rockthejvm.livedemo
2 |
3 | import scala.scalajs.js
4 | import scala.scalajs.js.annotation.*
5 |
6 | import cats.effect.*
7 | import tyrian.*
8 | import tyrian.Html.*
9 | import tyrian.http.*
10 | import io.circe.syntax.*
11 | import io.circe.parser.*
12 | import io.circe.generic.auto.*
13 |
14 | import com.rockthejvm.livedemo.domain.job.Job
15 |
16 | enum Msg {
17 | case NoMsg
18 | case LoadJobs(jobs: List[Job])
19 | case Error(e: String)
20 | }
21 |
22 | case class Model(jobs: List[Job] = List())
23 |
24 | @JSExportTopLevel("RockTheJvmApp")
25 | object App extends TyrianApp[Msg, Model] {
26 |
27 | def backendCall: Cmd[IO, Msg] =
28 | Http.send(
29 | Request.get("http://localhost:4041/jobs"),
30 | Decoder[Msg](
31 | resp =>
32 | parse(resp.body).flatMap(_.as[List[Job]]) match {
33 | case Left(e) => Msg.Error(e.getMessage())
34 | case Right(list) => Msg.LoadJobs(list)
35 | },
36 | err => Msg.Error(err.toString)
37 | )
38 | )
39 |
40 | override def init(flags: Map[String, String]): (Model, Cmd[IO, Msg]) =
41 | (Model(), backendCall)
42 |
43 | override def view(model: Model): Html[Msg] =
44 | div(`class` := "row")(
45 | p("This is the first ScalaJS app by Rock the JVM"),
46 | div(`class` := "contents ")(
47 | model.jobs.map { job =>
48 | div(job.toString)
49 | }
50 | )
51 | )
52 |
53 | override def update(model: Model): Msg => (Model, Cmd[IO, Msg]) = msg =>
54 | msg match {
55 | case Msg.NoMsg => (model, Cmd.None)
56 | case Msg.Error(e) => (model, Cmd.None)
57 | case Msg.LoadJobs(list) => (model.copy(jobs = model.jobs ++ list), Cmd.None)
58 | }
59 |
60 | override def subscriptions(model: Model): Sub[IO, Msg] =
61 | Sub.None
62 | }
63 |
--------------------------------------------------------------------------------
/app/static/img/accordion-add-img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rockthejvm/full-stack-typelevel-demo/2bc37ee04b96ac21cf88543f710083ec1e34413c/app/static/img/accordion-add-img.png
--------------------------------------------------------------------------------
/app/static/img/accordion-minus-img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rockthejvm/full-stack-typelevel-demo/2bc37ee04b96ac21cf88543f710083ec1e34413c/app/static/img/accordion-minus-img.png
--------------------------------------------------------------------------------
/app/static/img/fiery-lava 128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rockthejvm/full-stack-typelevel-demo/2bc37ee04b96ac21cf88543f710083ec1e34413c/app/static/img/fiery-lava 128x128.png
--------------------------------------------------------------------------------
/app/static/img/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rockthejvm/full-stack-typelevel-demo/2bc37ee04b96ac21cf88543f710083ec1e34413c/app/static/img/icon.png
--------------------------------------------------------------------------------
/app/static/img/resume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rockthejvm/full-stack-typelevel-demo/2bc37ee04b96ac21cf88543f710083ec1e34413c/app/static/img/resume.png
--------------------------------------------------------------------------------
/app/static/img/social-banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rockthejvm/full-stack-typelevel-demo/2bc37ee04b96ac21cf88543f710083ec1e34413c/app/static/img/social-banner.png
--------------------------------------------------------------------------------
/build.sbt:
--------------------------------------------------------------------------------
1 | ThisBuild / version := "1.0.0"
2 |
3 | lazy val rockthejvm = "com.rockthejvm"
4 | lazy val scala3Version = "3.3.1"
5 |
6 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////
7 | // Common - contains domain model
8 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////
9 |
10 | lazy val core = (crossProject(JSPlatform, JVMPlatform) in file("common"))
11 | .settings(
12 | name := "common",
13 | scalaVersion := scala3Version,
14 | organization := rockthejvm
15 | )
16 | .jvmSettings(
17 | // add here if necessary
18 | )
19 | .jsSettings(
20 | // Add JS-specific settings here
21 | )
22 |
23 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////
24 | // Frontend
25 | ///////////////////////////////////////////////////////////////////////////////////////////////////////////
26 |
27 | lazy val tyrianVersion = "0.6.1"
28 | lazy val fs2DomVersion = "0.1.0"
29 | lazy val laikaVersion = "0.19.0"
30 | lazy val circeVersion = "0.14.0"
31 |
32 | lazy val app = (project in file("app"))
33 | .enablePlugins(ScalaJSPlugin)
34 | .settings(
35 | name := "app",
36 | scalaVersion := scala3Version,
37 | organization := rockthejvm,
38 | libraryDependencies ++= Seq(
39 | "io.indigoengine" %%% "tyrian-io" % tyrianVersion,
40 | "com.armanbilge" %%% "fs2-dom" % fs2DomVersion,
41 | "org.planet42" %%% "laika-core" % laikaVersion,
42 | "io.circe" %%% "circe-core" % circeVersion,
43 | "io.circe" %%% "circe-parser" % circeVersion,
44 | "io.circe" %%% "circe-generic" % circeVersion
45 | ),
46 | scalaJSLinkerConfig ~= { _.withModuleKind(ModuleKind.CommonJSModule) },
47 | semanticdbEnabled := true,
48 | autoAPIMappings := true
49 | )
50 | .dependsOn(core.js)
51 |
52 | lazy val catsEffectVersion = "3.3.14"
53 | lazy val http4sVersion = "0.23.15"
54 | lazy val doobieVersion = "1.0.0-RC1"
55 | lazy val pureConfigVersion = "0.17.1"
56 | lazy val log4catsVersion = "2.4.0"
57 | lazy val tsecVersion = "0.4.0"
58 | lazy val scalaTestVersion = "3.2.12"
59 | lazy val scalaTestCatsEffectVersion = "1.4.0"
60 | lazy val testContainerVersion = "1.17.3"
61 | lazy val logbackVersion = "1.4.0"
62 | lazy val slf4jVersion = "2.0.0"
63 | lazy val javaMailVersion = "1.6.2"
64 | lazy val stripeVersion = "22.12.0"
65 |
66 | lazy val server = (project in file("server"))
67 | .settings(
68 | name := "server",
69 | scalaVersion := scala3Version,
70 | organization := rockthejvm,
71 | libraryDependencies ++= Seq(
72 | "org.typelevel" %% "cats-effect" % catsEffectVersion,
73 | "org.http4s" %% "http4s-dsl" % http4sVersion,
74 | "org.http4s" %% "http4s-ember-server" % http4sVersion,
75 | "org.http4s" %% "http4s-circe" % http4sVersion,
76 | "io.circe" %% "circe-generic" % circeVersion,
77 | "io.circe" %% "circe-fs2" % circeVersion,
78 | "org.tpolecat" %% "doobie-core" % doobieVersion,
79 | "org.tpolecat" %% "doobie-hikari" % doobieVersion,
80 | "org.tpolecat" %% "doobie-postgres" % doobieVersion,
81 | "org.tpolecat" %% "doobie-scalatest" % doobieVersion % Test,
82 | "com.github.pureconfig" %% "pureconfig-core" % pureConfigVersion,
83 | "org.typelevel" %% "log4cats-slf4j" % log4catsVersion,
84 | "org.slf4j" % "slf4j-simple" % slf4jVersion,
85 | "io.github.jmcardon" %% "tsec-http4s" % tsecVersion,
86 | "com.sun.mail" % "javax.mail" % javaMailVersion,
87 | "com.stripe" % "stripe-java" % stripeVersion,
88 | "org.typelevel" %% "log4cats-noop" % log4catsVersion % Test,
89 | "org.scalatest" %% "scalatest" % scalaTestVersion % Test,
90 | "org.typelevel" %% "cats-effect-testing-scalatest" % scalaTestCatsEffectVersion % Test,
91 | "org.testcontainers" % "testcontainers" % testContainerVersion % Test,
92 | "org.testcontainers" % "postgresql" % testContainerVersion % Test,
93 | "ch.qos.logback" % "logback-classic" % logbackVersion % Test
94 | ),
95 | Compile / mainClass := Some("com.rockthejvm.livedemo.Application")
96 | )
97 | .dependsOn(core.jvm)
98 |
--------------------------------------------------------------------------------
/common/shared/src/main/scala/com/rockthejvm/livedemo/domain/job.scala:
--------------------------------------------------------------------------------
1 | package com.rockthejvm.livedemo.domain
2 |
3 | object job {
4 | case class Job(
5 | company: String,
6 | title: String,
7 | description: String,
8 | externalUrl: String,
9 | salaryLo: Option[Int],
10 | salaryHi: Option[Int],
11 | currency: Option[String],
12 | remote: Boolean,
13 | location: String,
14 | country: Option[String]
15 | )
16 |
17 | object Job {
18 | val dummy = Job(
19 | "Rock the JVM",
20 | "Instructor",
21 | "Scala teacher",
22 | "rockthejvm.com",
23 | Some(0),
24 | Some(99),
25 | Some("EUR"),
26 | true,
27 | "Bucharest",
28 | Some("Romania")
29 | )
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/db/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3.1'
2 |
3 | services:
4 | db:
5 | image: postgres
6 | restart: always
7 | volumes:
8 | - "./sql:/docker-entrypoint-initdb.d"
9 | environment:
10 | - "POSTGRES_USER=docker"
11 | - "POSTGRES_PASSWORD=docker"
12 | ports:
13 | - "5444:5432"
14 |
--------------------------------------------------------------------------------
/db/sql/db.sql:
--------------------------------------------------------------------------------
1 |
2 | create table jobs(
3 | id uuid primary key default gen_random_uuid (),
4 | company text not null,
5 | title text not null,
6 | description text not null,
7 | externalUrl text not null,
8 | salaryLo integer,
9 | salaryHi integer,
10 | currency text,
11 | remote boolean,
12 | location text not null,
13 | country text
14 | );
15 |
16 | insert into jobs(
17 | company,
18 | title,
19 | description,
20 | externalUrl,
21 | salaryLo,
22 | salaryHi,
23 | currency,
24 | remote,
25 | location,
26 | country
27 | ) values (
28 | 'Rock the JVM',
29 | 'Instructor',
30 | 'Scala teacher',
31 | 'rockthejvm.com',
32 | 0,
33 | 99,
34 | 'EUR',
35 | true,
36 | 'Bucharest',
37 | 'Romania'
38 | );
39 |
40 | insert into jobs(
41 | company,
42 | title,
43 | description,
44 | externalUrl,
45 | salaryLo,
46 | salaryHi,
47 | currency,
48 | remote,
49 | location,
50 | country
51 | ) values (
52 | 'Google',
53 | 'Software Engineer',
54 | 'Writing a money printer',
55 | 'google.com',
56 | 100000,
57 | 9999999,
58 | 'USD',
59 | false,
60 | 'NYC',
61 | 'USA'
62 | );
--------------------------------------------------------------------------------
/project/build.properties:
--------------------------------------------------------------------------------
1 | sbt.version = 1.10.0
2 |
--------------------------------------------------------------------------------
/project/metals.sbt:
--------------------------------------------------------------------------------
1 | // DO NOT EDIT! This file is auto-generated.
2 |
3 | // This file enables sbt-bloop to create bloop config files.
4 |
5 | addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.5.13")
6 |
7 |
--------------------------------------------------------------------------------
/project/plugins.sbt:
--------------------------------------------------------------------------------
1 | addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.9.11")
2 | addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.12.0")
3 | addSbtPlugin("ch.epfl.scala" % "sbt-scalajs-bundler" % "0.21.0")
4 | addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.2.0")
5 |
--------------------------------------------------------------------------------
/project/project/metals.sbt:
--------------------------------------------------------------------------------
1 | // DO NOT EDIT! This file is auto-generated.
2 |
3 | // This file enables sbt-bloop to create bloop config files.
4 |
5 | addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.5.13")
6 |
7 |
--------------------------------------------------------------------------------
/project/project/project/metals.sbt:
--------------------------------------------------------------------------------
1 | // DO NOT EDIT! This file is auto-generated.
2 |
3 | // This file enables sbt-bloop to create bloop config files.
4 |
5 | addSbtPlugin("ch.epfl.scala" % "sbt-bloop" % "1.5.13")
6 |
7 |
--------------------------------------------------------------------------------
/server/src/main/scala/com/rockthejvm/livedemo/Application.scala:
--------------------------------------------------------------------------------
1 | package com.rockthejvm.livedemo
2 |
3 | import cats.effect.*
4 | import doobie.util.ExecutionContexts
5 | import doobie.hikari.HikariTransactor
6 | import com.comcast.ip4s.*
7 | import org.http4s.ember.server.EmberServerBuilder
8 | import org.http4s.server.middleware.CORS
9 |
10 | import com.rockthejvm.livedemo.core.*
11 | import com.rockthejvm.livedemo.http.*
12 |
13 | object Application extends IOApp.Simple {
14 | def makePostgres = for {
15 | ec <- ExecutionContexts.fixedThreadPool[IO](32)
16 | transactor <- HikariTransactor.newHikariTransactor[IO](
17 | "org.postgresql.Driver",
18 | "jdbc:postgresql://localhost:5444/",
19 | "docker",
20 | "docker",
21 | ec
22 | )
23 | } yield transactor
24 |
25 | def makeServer = for {
26 | postgres <- makePostgres
27 | jobs <- JobsLive.resource[IO](postgres)
28 | jobApi <- JobRoutes.resource[IO](jobs)
29 | server <- EmberServerBuilder
30 | .default[IO]
31 | .withHost(host"0.0.0.0")
32 | .withPort(port"4041")
33 | .withHttpApp(CORS(jobApi.routes.orNotFound))
34 | .build
35 | } yield server
36 |
37 | override def run: IO[Unit] =
38 | makeServer.use(_ => IO.println("Rock the JVM! Server ready.") *> IO.never)
39 | }
40 |
--------------------------------------------------------------------------------
/server/src/main/scala/com/rockthejvm/livedemo/core/Dummy.scala:
--------------------------------------------------------------------------------
1 | package com.rockthejvm.livedemo.core
2 |
3 | import cats.*
4 | import cats.syntax.all.*
5 | import cats.effect.kernel.Resource
6 |
7 | trait Dummy[F[_]] {
8 | def action(arg: Int): F[String]
9 | }
10 |
11 | class DummyLive[F[_]: Applicative] private extends Dummy[F] {
12 | override def action(arg: Int): F[String] =
13 | s"Called an action with the arg $arg".pure[F]
14 | }
15 |
16 | object DummyLive {
17 | // "Smart constructor"
18 | def make[F[_]: Applicative]: F[Dummy[F]] =
19 | new DummyLive[F].pure[F]
20 |
21 | // resource constructor
22 | def resource[F[_]: Applicative]: Resource[F, Dummy[F]] =
23 | Resource.pure(new DummyLive[F])
24 | }
25 |
--------------------------------------------------------------------------------
/server/src/main/scala/com/rockthejvm/livedemo/core/Jobs.scala:
--------------------------------------------------------------------------------
1 | package com.rockthejvm.livedemo.core
2 |
3 | import com.rockthejvm.livedemo.domain.job.*
4 | import java.util.UUID
5 |
6 | import cats.effect.*
7 | import cats.syntax.all.*
8 | import doobie.implicits.*
9 | import doobie.postgres.implicits.*
10 | import doobie.util.transactor.Transactor
11 | import java.{util => ju}
12 | import doobie.util.ExecutionContexts
13 | import doobie.hikari.HikariTransactor
14 |
15 | trait Jobs[F[_]] { // "algebra"
16 | def create(job: Job): F[UUID]
17 | def all: F[List[Job]]
18 | }
19 |
20 | class JobsLive[F[_]: Concurrent] private (transactor: Transactor[F]) extends Jobs[F] {
21 | override def all: F[List[Job]] =
22 | sql"""
23 | SELECT
24 | company,
25 | title,
26 | description,
27 | externalUrl,
28 | salaryLo,
29 | salaryHi,
30 | currency,
31 | remote,
32 | location,
33 | country
34 | FROM jobs
35 | """
36 | .query[Job]
37 | .stream
38 | .transact(transactor)
39 | .compile
40 | .toList
41 |
42 | override def create(job: Job): F[ju.UUID] =
43 | sql"""
44 | INSERT INTO jobs(
45 | company,
46 | title,
47 | description,
48 | externalUrl,
49 | salaryLo,
50 | salaryHi,
51 | currency,
52 | remote,
53 | location,
54 | country
55 | ) VALUES (
56 | ${job.company},
57 | ${job.title},
58 | ${job.description},
59 | ${job.externalUrl},
60 | ${job.salaryLo},
61 | ${job.salaryHi},
62 | ${job.currency},
63 | ${job.remote},
64 | ${job.location},
65 | ${job.country}
66 | )
67 | """.update
68 | .withUniqueGeneratedKeys[UUID]("id")
69 | .transact(transactor)
70 | }
71 |
72 | object JobsLive {
73 | def make[F[_]: Concurrent](postgres: Transactor[F]): F[JobsLive[F]] =
74 | new JobsLive[F](postgres).pure[F]
75 |
76 | def resource[F[_]: Concurrent](postgres: Transactor[F]): Resource[F, JobsLive[F]] =
77 | Resource.pure(new JobsLive[F](postgres))
78 | }
79 |
80 | object JobsPlayground extends IOApp.Simple {
81 |
82 | def makePostgres = for {
83 | ec <- ExecutionContexts.fixedThreadPool[IO](32)
84 | transactor <- HikariTransactor.newHikariTransactor[IO](
85 | "org.postgresql.Driver",
86 | "jdbc:postgresql://localhost:5444/",
87 | "docker",
88 | "docker",
89 | ec
90 | )
91 | } yield transactor
92 |
93 | def program(postgres: Transactor[IO]) =
94 | for {
95 | jobs <- JobsLive.make[IO](postgres)
96 | _ <- jobs.create(Job.dummy)
97 | list <- jobs.all
98 | _ <- IO.println(list)
99 | } yield ()
100 |
101 | override def run: IO[Unit] =
102 | makePostgres.use(program)
103 | }
104 |
--------------------------------------------------------------------------------
/server/src/main/scala/com/rockthejvm/livedemo/http/JobRoutes.scala:
--------------------------------------------------------------------------------
1 | package com.rockthejvm.livedemo.http
2 |
3 | import cats.effect.*
4 | import cats.*
5 | import cats.syntax.all.*
6 | import org.http4s.*
7 | import org.http4s.implicits.*
8 | import org.http4s.dsl.Http4sDsl
9 | import org.http4s.circe.CirceEntityCodec.*
10 | import io.circe.generic.auto.*
11 |
12 | import com.rockthejvm.livedemo.core.*
13 | import com.rockthejvm.livedemo.domain.job.*
14 | import org.http4s.server.Router
15 |
16 | class JobRoutes[F[_]: Concurrent] private (jobs: Jobs[F]) extends Http4sDsl[F] {
17 | private val prefix = "/jobs"
18 |
19 | // post /jobs/create { Job }
20 | private val createJobRoute: HttpRoutes[F] = HttpRoutes.of[F] {
21 | case req @ POST -> Root / "create" =>
22 | for {
23 | job <- req.as[Job]
24 | id <- jobs.create(job)
25 | resp <- Created(id)
26 | } yield resp
27 | }
28 |
29 | // get /jobs
30 | private val getAllRoute: HttpRoutes[F] = HttpRoutes.of[F] { case GET -> Root =>
31 | jobs.all.flatMap(jobs => Ok(jobs))
32 | }
33 |
34 | val routes: HttpRoutes[F] = Router(
35 | prefix -> (createJobRoute <+> getAllRoute)
36 | )
37 | }
38 |
39 | object JobRoutes {
40 | def resource[F[_]: Concurrent](jobs: Jobs[F]): Resource[F, JobRoutes[F]] =
41 | Resource.pure(new JobRoutes[F](jobs))
42 | }
43 |
--------------------------------------------------------------------------------