├── .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 | 8 | 9 | 10 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 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 | 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 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/scala_compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/scala_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 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 | --------------------------------------------------------------------------------