├── .github
└── ISSUE_TEMPLATE
│ ├── 01_bug-report.md
│ ├── 02_feature-request.md
│ └── 03_public_instance.md
├── .gitignore
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Cartograph.md
├── LICENSE
├── README.md
├── backend
├── Cargo.lock
├── Cargo.toml
├── config.example.json
├── migrations
│ └── 000_single_view.sql
├── schema.sql
└── src
│ ├── config.rs
│ ├── main.rs
│ ├── models.rs
│ └── routes.rs
├── example.nginx
└── frontend
├── .prettierrc.json
├── .yarnrc.yml
├── config.example.json
├── favicon.svg
├── fonts
├── CartographCF-Regular.woff2
├── CartographCF-RegularItalic.woff2
└── FiraCode-VF.woff2
├── index.html
├── index.pug
├── min
└── rosepine.min.css
├── package.json
├── src
├── env.d.ts
├── icons.ts
├── index.ts
└── tsconfig.json
├── style
├── font-fira.scss
├── font.scss
├── style.scss
└── tooltip.scss
├── vite.config.ts
└── yarn.lock
/.github/ISSUE_TEMPLATE/01_bug-report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 🐛 Bug Report
3 | about: Create a report to help us improve
4 | title: '🐛 '
5 | labels: bug
6 | assignees: ''
7 | ---
8 |
9 |
13 |
14 | ## 💡 Summary
15 |
16 |
17 |
18 | ## 🥰 Expected Behavior
19 |
20 |
21 |
22 | ## 🤬 Actual Behavior
23 |
24 |
25 |
26 | ## 📝 Steps to Reproduce
27 |
28 | 1.
29 | 2.
30 | 3.
31 |
32 | ## 📌 Environment
33 |
34 |
35 |
36 | zer0bin version:
37 | Your OS:
38 | Your browser:
39 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/02_feature-request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: ✨ Feature Request
3 | about: Suggest an idea for this project
4 | title: '✨ '
5 | labels: feature request
6 | assignees: ''
7 |
8 | ---
9 |
10 | ## Summary
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/03_public_instance.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 🚀 Public instance
3 | about: Submit a public instance
4 | title: '🚀 '
5 | labels: public instance
6 |
7 | ---
8 |
9 |
12 |
13 | ## Details
14 |
15 | - Domain name:
16 | - What country is the server in:
17 | - What server hardware/provider is the server on:
18 | - Are you using CloudFlare or any Google services (domain, DNS, etc):
19 | - What version of zer0bin is it running:
20 | - Have you made any modifications to zer0bin? If so, what?:
21 | - What are the ratelimits:
22 | - What is the expiration time of pastes:
23 | - What is the max paste size:
24 |
25 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | **/target/
2 | **/.yarn
3 | **/node_modules/
4 | **/dist/
5 | **/.parcel-cache/
6 | **/config.json
7 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | We as members, contributors, and leaders pledge to make participation in our
6 | community a harassment-free experience for everyone, regardless of age, body
7 | size, visible or invisible disability, ethnicity, sex characteristics, gender
8 | identity and expression, level of experience, education, socio-economic status,
9 | nationality, personal appearance, race, religion, or sexual identity
10 | and orientation.
11 |
12 | We pledge to act and interact in ways that contribute to an open, welcoming,
13 | diverse, inclusive, and healthy community.
14 |
15 | ## Our Standards
16 |
17 | Examples of behavior that contributes to a positive environment for our
18 | community include:
19 |
20 | - Demonstrating empathy and kindness toward other people
21 | - Being respectful of differing opinions, viewpoints, and experiences
22 | - Giving and gracefully accepting constructive feedback
23 | - Accepting responsibility and apologizing to those affected by our mistakes,
24 | and learning from the experience
25 | - Focusing on what is best not just for us as individuals, but for the
26 | overall community
27 |
28 | Examples of unacceptable behavior include:
29 |
30 | - The use of sexualized language or imagery, and sexual attention or
31 | advances of any kind
32 | - Trolling, insulting or derogatory comments, and personal or political attacks
33 | - Public or private harassment
34 | - Publishing others' private information, such as a physical or email
35 | address, without their explicit permission
36 | - Other conduct which could reasonably be considered inappropriate in a
37 | professional setting
38 |
39 | ## Enforcement Responsibilities
40 |
41 | Community leaders are responsible for clarifying and enforcing our standards of
42 | acceptable behavior and will take appropriate and fair corrective action in
43 | response to any behavior that they deem inappropriate, threatening, offensive,
44 | or harmful.
45 |
46 | Community leaders have the right and responsibility to remove, edit, or reject
47 | comments, commits, code, wiki edits, issues, and other contributions that are
48 | not aligned to this Code of Conduct, and will communicate reasons for moderation
49 | decisions when appropriate.
50 |
51 | ## Scope
52 |
53 | This Code of Conduct applies within all community spaces, and also applies when
54 | an individual is officially representing the community in public spaces.
55 | Examples of representing our community include using an official e-mail address,
56 | posting via an official social media account, or acting as an appointed
57 | representative at an online or offline event.
58 |
59 | ## Enforcement
60 |
61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
62 | reported to the community leaders responsible for enforcement at
63 | dominic@domm.me.
64 | All complaints will be reviewed and investigated promptly and fairly.
65 |
66 | All community leaders are obligated to respect the privacy and security of the
67 | reporter of any incident.
68 |
69 | ## Enforcement Guidelines
70 |
71 | Community leaders will follow these Community Impact Guidelines in determining
72 | the consequences for any action they deem in violation of this Code of Conduct:
73 |
74 | ### 1. Correction
75 |
76 | **Community Impact**: Use of inappropriate language or other behavior deemed
77 | unprofessional or unwelcome in the community.
78 |
79 | **Consequence**: A private, written warning from community leaders, providing
80 | clarity around the nature of the violation and an explanation of why the
81 | behavior was inappropriate. A public apology may be requested.
82 |
83 | ### 2. Warning
84 |
85 | **Community Impact**: A violation through a single incident or series
86 | of actions.
87 |
88 | **Consequence**: A warning with consequences for continued behavior. No
89 | interaction with the people involved, including unsolicited interaction with
90 | those enforcing the Code of Conduct, for a specified period of time. This
91 | includes avoiding interactions in community spaces as well as external channels
92 | like social media. Violating these terms may lead to a temporary or
93 | permanent ban.
94 |
95 | ### 3. Temporary Ban
96 |
97 | **Community Impact**: A serious violation of community standards, including
98 | sustained inappropriate behavior.
99 |
100 | **Consequence**: A temporary ban from any sort of interaction or public
101 | communication with the community for a specified period of time. No public or
102 | private interaction with the people involved, including unsolicited interaction
103 | with those enforcing the Code of Conduct, is allowed during this period.
104 | Violating these terms may lead to a permanent ban.
105 |
106 | ### 4. Permanent Ban
107 |
108 | **Community Impact**: Demonstrating a pattern of violation of community
109 | standards, including sustained inappropriate behavior, harassment of an
110 | individual, or aggression toward or disparagement of classes of individuals.
111 |
112 | **Consequence**: A permanent ban from any sort of public interaction within
113 | the community.
114 |
115 | ## Attribution
116 |
117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118 | version 2.0, available at
119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
120 |
121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct
122 | enforcement ladder](https://github.com/mozilla/diversity).
123 |
124 | [homepage]: https://www.contributor-covenant.org
125 |
126 | For answers to common questions about this code of conduct, see the FAQ at
127 | https://www.contributor-covenant.org/faq. Translations are available at
128 | https://www.contributor-covenant.org/translations.
129 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing Guidelines
2 |
3 | - Follow the repository structure
4 | - Commit messages must be descriptive and concise
5 | - Your code must be formatted with the formatters we use
6 | - The frontend must use our `prettier` config
7 | - The backend must use `rustfmt`
8 | - The frontend must be installed with `yarn` and compiled with `parcel`
9 | - Additional frontend packages must not be considered bloated
10 | - All commits must follow [Conventional Commits](https://marketplace.visualstudio.com/items?itemName=vivaxy.vscode-conventional-commits)
11 |
--------------------------------------------------------------------------------
/Cartograph.md:
--------------------------------------------------------------------------------
1 | "Wait, but isn't Cartograph CF a paid font you need a license for?"
2 |
3 | 
4 |
5 | # Ok but fr
6 |
7 | People have been pirating Cartograph CF for a looong time, but if you would like to use Fira Code (a free font) instead:
8 | 1. `cd frontend`
9 | 2. `mv style/font-fira.scss style/font.scss`
10 | 3. Rebuild frontend
11 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2022 Domterion, ThatOneCalculator
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
25 |
26 | # Features
27 |
28 | - ✨ Code highlighting and line numbers (default)
29 | - 📖 Markdown rendering (click the button)
30 | - 🔥 Single-view pastes (click the button)
31 | - 🧑💻 [CLI Client](https://github.com/zer0bin-dev/zer0)
32 | - 🚀 Easily selfhostable
33 | - 👀 View counter
34 | - ⌨️ Keybinds
35 | - Ctrl + S : save paste
36 | - Ctrl + N : new paste
37 | - Ctrl + D : duplicate paste
38 | - Ctrl + M : toggle markdown mode
39 | - 📱 Mobile-friendly UI
40 | - 🧈 Super smooth scrolling
41 | - 🖼️ Badge generation for stats (seen below)
42 |
43 | # Public instances
44 |
45 | Submit your public instance [here](https://github.com/Domterion/zer0bin/issues/new?assignees=&labels=&template=03_public_instance.md&title=%F0%9F%9A%80+)!
46 |
47 | | URL | Expiration | Max paste size | Total Pastes | Version | Country |
48 | | ---------------------------------------------- | ---------- | -------------- | -------------------------------------------- | --------------------------------------------- | ------- |
49 | | [paste.mint.lgbt](https://paste.mint.lgbt) | 30 days | 50,000 chars |  |  | 🇨🇱 Chile |
50 |
51 |
52 | # Technologies used
53 |
54 | ### Frontend:
55 |
56 |
57 |
58 | ### Backend:
59 |
60 |
61 |
62 | ### Misc:
63 |
64 |
65 |
66 | ###### (Sorta) made with [Skill Icons](https://skillicons.dev/)
67 |
68 | # More info
69 |
70 | ### Looking for API reference, self-hosting instructions, and/or benchmarks?
71 |
72 |
73 |
74 |
75 | # Contributing
76 |
77 | See [CONTRIBUTING.md](./CONTRIBUTING.md)
78 |
--------------------------------------------------------------------------------
/backend/Cargo.lock:
--------------------------------------------------------------------------------
1 | # This file is automatically @generated by Cargo.
2 | # It is not intended for manual editing.
3 | version = 3
4 |
5 | [[package]]
6 | name = "actix-codec"
7 | version = "0.5.0"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "57a7559404a7f3573127aab53c08ce37a6c6a315c374a31070f3c91cd1b4a7fe"
10 | dependencies = [
11 | "bitflags",
12 | "bytes",
13 | "futures-core",
14 | "futures-sink",
15 | "log",
16 | "memchr",
17 | "pin-project-lite",
18 | "tokio",
19 | "tokio-util",
20 | ]
21 |
22 | [[package]]
23 | name = "actix-cors"
24 | version = "0.6.1"
25 | source = "registry+https://github.com/rust-lang/crates.io-index"
26 | checksum = "414360eed71ba2d5435b185ba43ecbe281dfab5df3898286d6b7be8074372c92"
27 | dependencies = [
28 | "actix-utils",
29 | "actix-web",
30 | "derive_more",
31 | "futures-util",
32 | "log",
33 | "once_cell",
34 | "smallvec",
35 | ]
36 |
37 | [[package]]
38 | name = "actix-governor"
39 | version = "0.3.0"
40 | source = "registry+https://github.com/rust-lang/crates.io-index"
41 | checksum = "5c301a901d90b7a1ea575aacd21ac02d1210f546f00f2291cdfada51c76f92de"
42 | dependencies = [
43 | "actix-http",
44 | "actix-web",
45 | "futures",
46 | "governor",
47 | ]
48 |
49 | [[package]]
50 | name = "actix-http"
51 | version = "3.0.4"
52 | source = "registry+https://github.com/rust-lang/crates.io-index"
53 | checksum = "a5885cb81a0d4d0d322864bea1bb6c2a8144626b4fdc625d4c51eba197e7797a"
54 | dependencies = [
55 | "actix-codec",
56 | "actix-rt",
57 | "actix-service",
58 | "actix-utils",
59 | "ahash",
60 | "base64",
61 | "bitflags",
62 | "brotli",
63 | "bytes",
64 | "bytestring",
65 | "derive_more",
66 | "encoding_rs",
67 | "flate2",
68 | "futures-core",
69 | "h2",
70 | "http",
71 | "httparse",
72 | "httpdate",
73 | "itoa 1.0.1",
74 | "language-tags",
75 | "local-channel",
76 | "log",
77 | "mime",
78 | "percent-encoding",
79 | "pin-project-lite",
80 | "rand",
81 | "sha-1 0.10.0",
82 | "smallvec",
83 | "zstd",
84 | ]
85 |
86 | [[package]]
87 | name = "actix-macros"
88 | version = "0.2.3"
89 | source = "registry+https://github.com/rust-lang/crates.io-index"
90 | checksum = "465a6172cf69b960917811022d8f29bc0b7fa1398bc4f78b3c466673db1213b6"
91 | dependencies = [
92 | "quote",
93 | "syn",
94 | ]
95 |
96 | [[package]]
97 | name = "actix-router"
98 | version = "0.5.0"
99 | source = "registry+https://github.com/rust-lang/crates.io-index"
100 | checksum = "eb60846b52c118f2f04a56cc90880a274271c489b2498623d58176f8ca21fa80"
101 | dependencies = [
102 | "bytestring",
103 | "firestorm",
104 | "http",
105 | "log",
106 | "regex",
107 | "serde",
108 | ]
109 |
110 | [[package]]
111 | name = "actix-rt"
112 | version = "2.7.0"
113 | source = "registry+https://github.com/rust-lang/crates.io-index"
114 | checksum = "7ea16c295198e958ef31930a6ef37d0fb64e9ca3b6116e6b93a8bdae96ee1000"
115 | dependencies = [
116 | "actix-macros",
117 | "futures-core",
118 | "tokio",
119 | ]
120 |
121 | [[package]]
122 | name = "actix-server"
123 | version = "2.1.1"
124 | source = "registry+https://github.com/rust-lang/crates.io-index"
125 | checksum = "0da34f8e659ea1b077bb4637948b815cd3768ad5a188fdcd74ff4d84240cd824"
126 | dependencies = [
127 | "actix-rt",
128 | "actix-service",
129 | "actix-utils",
130 | "futures-core",
131 | "futures-util",
132 | "mio",
133 | "num_cpus",
134 | "socket2",
135 | "tokio",
136 | "tracing",
137 | ]
138 |
139 | [[package]]
140 | name = "actix-service"
141 | version = "2.0.2"
142 | source = "registry+https://github.com/rust-lang/crates.io-index"
143 | checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a"
144 | dependencies = [
145 | "futures-core",
146 | "paste",
147 | "pin-project-lite",
148 | ]
149 |
150 | [[package]]
151 | name = "actix-utils"
152 | version = "3.0.0"
153 | source = "registry+https://github.com/rust-lang/crates.io-index"
154 | checksum = "e491cbaac2e7fc788dfff99ff48ef317e23b3cf63dbaf7aaab6418f40f92aa94"
155 | dependencies = [
156 | "local-waker",
157 | "pin-project-lite",
158 | ]
159 |
160 | [[package]]
161 | name = "actix-web"
162 | version = "4.0.1"
163 | source = "registry+https://github.com/rust-lang/crates.io-index"
164 | checksum = "f4e5ebffd51d50df56a3ae0de0e59487340ca456f05dd0b90c0a7a6dd6a74d31"
165 | dependencies = [
166 | "actix-codec",
167 | "actix-http",
168 | "actix-macros",
169 | "actix-router",
170 | "actix-rt",
171 | "actix-server",
172 | "actix-service",
173 | "actix-utils",
174 | "actix-web-codegen",
175 | "ahash",
176 | "bytes",
177 | "bytestring",
178 | "cfg-if",
179 | "cookie",
180 | "derive_more",
181 | "encoding_rs",
182 | "futures-core",
183 | "futures-util",
184 | "itoa 1.0.1",
185 | "language-tags",
186 | "log",
187 | "mime",
188 | "once_cell",
189 | "pin-project-lite",
190 | "regex",
191 | "serde",
192 | "serde_json",
193 | "serde_urlencoded",
194 | "smallvec",
195 | "socket2",
196 | "time 0.3.9",
197 | "url",
198 | ]
199 |
200 | [[package]]
201 | name = "actix-web-codegen"
202 | version = "4.0.0"
203 | source = "registry+https://github.com/rust-lang/crates.io-index"
204 | checksum = "7525bedf54704abb1d469e88d7e7e9226df73778798a69cea5022d53b2ae91bc"
205 | dependencies = [
206 | "actix-router",
207 | "proc-macro2",
208 | "quote",
209 | "syn",
210 | ]
211 |
212 | [[package]]
213 | name = "adler"
214 | version = "1.0.2"
215 | source = "registry+https://github.com/rust-lang/crates.io-index"
216 | checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
217 |
218 | [[package]]
219 | name = "ahash"
220 | version = "0.7.6"
221 | source = "registry+https://github.com/rust-lang/crates.io-index"
222 | checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47"
223 | dependencies = [
224 | "getrandom",
225 | "once_cell",
226 | "version_check",
227 | ]
228 |
229 | [[package]]
230 | name = "aho-corasick"
231 | version = "0.7.18"
232 | source = "registry+https://github.com/rust-lang/crates.io-index"
233 | checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
234 | dependencies = [
235 | "memchr",
236 | ]
237 |
238 | [[package]]
239 | name = "alloc-no-stdlib"
240 | version = "2.0.3"
241 | source = "registry+https://github.com/rust-lang/crates.io-index"
242 | checksum = "35ef4730490ad1c4eae5c4325b2a95f521d023e5c885853ff7aca0a6a1631db3"
243 |
244 | [[package]]
245 | name = "alloc-stdlib"
246 | version = "0.2.1"
247 | source = "registry+https://github.com/rust-lang/crates.io-index"
248 | checksum = "697ed7edc0f1711de49ce108c541623a0af97c6c60b2f6e2b65229847ac843c2"
249 | dependencies = [
250 | "alloc-no-stdlib",
251 | ]
252 |
253 | [[package]]
254 | name = "atoi"
255 | version = "0.4.0"
256 | source = "registry+https://github.com/rust-lang/crates.io-index"
257 | checksum = "616896e05fc0e2649463a93a15183c6a16bf03413a7af88ef1285ddedfa9cda5"
258 | dependencies = [
259 | "num-traits",
260 | ]
261 |
262 | [[package]]
263 | name = "autocfg"
264 | version = "1.1.0"
265 | source = "registry+https://github.com/rust-lang/crates.io-index"
266 | checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
267 |
268 | [[package]]
269 | name = "backend"
270 | version = "1.1.1"
271 | dependencies = [
272 | "actix-cors",
273 | "actix-governor",
274 | "actix-rt",
275 | "actix-web",
276 | "badge-maker",
277 | "chrono",
278 | "nanoid",
279 | "serde",
280 | "serde_json",
281 | "sqlx",
282 | ]
283 |
284 | [[package]]
285 | name = "badge-maker"
286 | version = "0.2.1"
287 | source = "registry+https://github.com/rust-lang/crates.io-index"
288 | checksum = "383647c1ae7388c2801ef995f6de2f9551a361ad637f2a0e4fea41c51dd37b81"
289 | dependencies = [
290 | "aho-corasick",
291 | "bincode",
292 | "itoa 0.4.8",
293 | "lazy_static",
294 | "regex",
295 | "seahash",
296 | "serde",
297 | "thiserror",
298 | ]
299 |
300 | [[package]]
301 | name = "base64"
302 | version = "0.13.0"
303 | source = "registry+https://github.com/rust-lang/crates.io-index"
304 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
305 |
306 | [[package]]
307 | name = "bincode"
308 | version = "1.3.3"
309 | source = "registry+https://github.com/rust-lang/crates.io-index"
310 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
311 | dependencies = [
312 | "serde",
313 | ]
314 |
315 | [[package]]
316 | name = "bitflags"
317 | version = "1.3.2"
318 | source = "registry+https://github.com/rust-lang/crates.io-index"
319 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
320 |
321 | [[package]]
322 | name = "block-buffer"
323 | version = "0.9.0"
324 | source = "registry+https://github.com/rust-lang/crates.io-index"
325 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
326 | dependencies = [
327 | "generic-array",
328 | ]
329 |
330 | [[package]]
331 | name = "block-buffer"
332 | version = "0.10.2"
333 | source = "registry+https://github.com/rust-lang/crates.io-index"
334 | checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
335 | dependencies = [
336 | "generic-array",
337 | ]
338 |
339 | [[package]]
340 | name = "brotli"
341 | version = "3.3.4"
342 | source = "registry+https://github.com/rust-lang/crates.io-index"
343 | checksum = "a1a0b1dbcc8ae29329621f8d4f0d835787c1c38bb1401979b49d13b0b305ff68"
344 | dependencies = [
345 | "alloc-no-stdlib",
346 | "alloc-stdlib",
347 | "brotli-decompressor",
348 | ]
349 |
350 | [[package]]
351 | name = "brotli-decompressor"
352 | version = "2.3.2"
353 | source = "registry+https://github.com/rust-lang/crates.io-index"
354 | checksum = "59ad2d4653bf5ca36ae797b1f4bb4dbddb60ce49ca4aed8a2ce4829f60425b80"
355 | dependencies = [
356 | "alloc-no-stdlib",
357 | "alloc-stdlib",
358 | ]
359 |
360 | [[package]]
361 | name = "bumpalo"
362 | version = "3.9.1"
363 | source = "registry+https://github.com/rust-lang/crates.io-index"
364 | checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899"
365 |
366 | [[package]]
367 | name = "byteorder"
368 | version = "1.4.3"
369 | source = "registry+https://github.com/rust-lang/crates.io-index"
370 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
371 |
372 | [[package]]
373 | name = "bytes"
374 | version = "1.1.0"
375 | source = "registry+https://github.com/rust-lang/crates.io-index"
376 | checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
377 |
378 | [[package]]
379 | name = "bytestring"
380 | version = "1.0.0"
381 | source = "registry+https://github.com/rust-lang/crates.io-index"
382 | checksum = "90706ba19e97b90786e19dc0d5e2abd80008d99d4c0c5d1ad0b5e72cec7c494d"
383 | dependencies = [
384 | "bytes",
385 | ]
386 |
387 | [[package]]
388 | name = "cc"
389 | version = "1.0.73"
390 | source = "registry+https://github.com/rust-lang/crates.io-index"
391 | checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11"
392 | dependencies = [
393 | "jobserver",
394 | ]
395 |
396 | [[package]]
397 | name = "cfg-if"
398 | version = "1.0.0"
399 | source = "registry+https://github.com/rust-lang/crates.io-index"
400 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
401 |
402 | [[package]]
403 | name = "chrono"
404 | version = "0.4.19"
405 | source = "registry+https://github.com/rust-lang/crates.io-index"
406 | checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
407 | dependencies = [
408 | "libc",
409 | "num-integer",
410 | "num-traits",
411 | "serde",
412 | "time 0.1.44",
413 | "winapi",
414 | ]
415 |
416 | [[package]]
417 | name = "convert_case"
418 | version = "0.4.0"
419 | source = "registry+https://github.com/rust-lang/crates.io-index"
420 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e"
421 |
422 | [[package]]
423 | name = "cookie"
424 | version = "0.16.0"
425 | source = "registry+https://github.com/rust-lang/crates.io-index"
426 | checksum = "94d4706de1b0fa5b132270cddffa8585166037822e260a944fe161acd137ca05"
427 | dependencies = [
428 | "percent-encoding",
429 | "time 0.3.9",
430 | "version_check",
431 | ]
432 |
433 | [[package]]
434 | name = "cpufeatures"
435 | version = "0.2.2"
436 | source = "registry+https://github.com/rust-lang/crates.io-index"
437 | checksum = "59a6001667ab124aebae2a495118e11d30984c3a653e99d86d58971708cf5e4b"
438 | dependencies = [
439 | "libc",
440 | ]
441 |
442 | [[package]]
443 | name = "crc"
444 | version = "2.1.0"
445 | source = "registry+https://github.com/rust-lang/crates.io-index"
446 | checksum = "49fc9a695bca7f35f5f4c15cddc84415f66a74ea78eef08e90c5024f2b540e23"
447 | dependencies = [
448 | "crc-catalog",
449 | ]
450 |
451 | [[package]]
452 | name = "crc-catalog"
453 | version = "1.1.1"
454 | source = "registry+https://github.com/rust-lang/crates.io-index"
455 | checksum = "ccaeedb56da03b09f598226e25e80088cb4cd25f316e6e4df7d695f0feeb1403"
456 |
457 | [[package]]
458 | name = "crc32fast"
459 | version = "1.3.2"
460 | source = "registry+https://github.com/rust-lang/crates.io-index"
461 | checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d"
462 | dependencies = [
463 | "cfg-if",
464 | ]
465 |
466 | [[package]]
467 | name = "crossbeam-queue"
468 | version = "0.3.5"
469 | source = "registry+https://github.com/rust-lang/crates.io-index"
470 | checksum = "1f25d8400f4a7a5778f0e4e52384a48cbd9b5c495d110786187fc750075277a2"
471 | dependencies = [
472 | "cfg-if",
473 | "crossbeam-utils",
474 | ]
475 |
476 | [[package]]
477 | name = "crossbeam-utils"
478 | version = "0.8.8"
479 | source = "registry+https://github.com/rust-lang/crates.io-index"
480 | checksum = "0bf124c720b7686e3c2663cf54062ab0f68a88af2fb6a030e87e30bf721fcb38"
481 | dependencies = [
482 | "cfg-if",
483 | "lazy_static",
484 | ]
485 |
486 | [[package]]
487 | name = "crypto-common"
488 | version = "0.1.3"
489 | source = "registry+https://github.com/rust-lang/crates.io-index"
490 | checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
491 | dependencies = [
492 | "generic-array",
493 | "typenum",
494 | ]
495 |
496 | [[package]]
497 | name = "crypto-mac"
498 | version = "0.11.1"
499 | source = "registry+https://github.com/rust-lang/crates.io-index"
500 | checksum = "b1d1a86f49236c215f271d40892d5fc950490551400b02ef360692c29815c714"
501 | dependencies = [
502 | "generic-array",
503 | "subtle",
504 | ]
505 |
506 | [[package]]
507 | name = "dashmap"
508 | version = "5.2.0"
509 | source = "registry+https://github.com/rust-lang/crates.io-index"
510 | checksum = "4c8858831f7781322e539ea39e72449c46b059638250c14344fec8d0aa6e539c"
511 | dependencies = [
512 | "cfg-if",
513 | "num_cpus",
514 | "parking_lot 0.12.0",
515 | ]
516 |
517 | [[package]]
518 | name = "derive_more"
519 | version = "0.99.17"
520 | source = "registry+https://github.com/rust-lang/crates.io-index"
521 | checksum = "4fb810d30a7c1953f91334de7244731fc3f3c10d7fe163338a35b9f640960321"
522 | dependencies = [
523 | "convert_case",
524 | "proc-macro2",
525 | "quote",
526 | "rustc_version",
527 | "syn",
528 | ]
529 |
530 | [[package]]
531 | name = "digest"
532 | version = "0.9.0"
533 | source = "registry+https://github.com/rust-lang/crates.io-index"
534 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
535 | dependencies = [
536 | "generic-array",
537 | ]
538 |
539 | [[package]]
540 | name = "digest"
541 | version = "0.10.3"
542 | source = "registry+https://github.com/rust-lang/crates.io-index"
543 | checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
544 | dependencies = [
545 | "block-buffer 0.10.2",
546 | "crypto-common",
547 | ]
548 |
549 | [[package]]
550 | name = "dirs"
551 | version = "4.0.0"
552 | source = "registry+https://github.com/rust-lang/crates.io-index"
553 | checksum = "ca3aa72a6f96ea37bbc5aa912f6788242832f75369bdfdadcb0e38423f100059"
554 | dependencies = [
555 | "dirs-sys",
556 | ]
557 |
558 | [[package]]
559 | name = "dirs-sys"
560 | version = "0.3.7"
561 | source = "registry+https://github.com/rust-lang/crates.io-index"
562 | checksum = "1b1d1d91c932ef41c0f2663aa8b0ca0342d444d842c06914aa0a7e352d0bada6"
563 | dependencies = [
564 | "libc",
565 | "redox_users",
566 | "winapi",
567 | ]
568 |
569 | [[package]]
570 | name = "dotenv"
571 | version = "0.15.0"
572 | source = "registry+https://github.com/rust-lang/crates.io-index"
573 | checksum = "77c90badedccf4105eca100756a0b1289e191f6fcbdadd3cee1d2f614f97da8f"
574 |
575 | [[package]]
576 | name = "either"
577 | version = "1.6.1"
578 | source = "registry+https://github.com/rust-lang/crates.io-index"
579 | checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
580 |
581 | [[package]]
582 | name = "encoding_rs"
583 | version = "0.8.30"
584 | source = "registry+https://github.com/rust-lang/crates.io-index"
585 | checksum = "7896dc8abb250ffdda33912550faa54c88ec8b998dec0b2c55ab224921ce11df"
586 | dependencies = [
587 | "cfg-if",
588 | ]
589 |
590 | [[package]]
591 | name = "firestorm"
592 | version = "0.5.0"
593 | source = "registry+https://github.com/rust-lang/crates.io-index"
594 | checksum = "4d3d6188b8804df28032815ea256b6955c9625c24da7525f387a7af02fbb8f01"
595 |
596 | [[package]]
597 | name = "flate2"
598 | version = "1.0.22"
599 | source = "registry+https://github.com/rust-lang/crates.io-index"
600 | checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f"
601 | dependencies = [
602 | "cfg-if",
603 | "crc32fast",
604 | "libc",
605 | "miniz_oxide",
606 | ]
607 |
608 | [[package]]
609 | name = "fnv"
610 | version = "1.0.7"
611 | source = "registry+https://github.com/rust-lang/crates.io-index"
612 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
613 |
614 | [[package]]
615 | name = "form_urlencoded"
616 | version = "1.0.1"
617 | source = "registry+https://github.com/rust-lang/crates.io-index"
618 | checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
619 | dependencies = [
620 | "matches",
621 | "percent-encoding",
622 | ]
623 |
624 | [[package]]
625 | name = "futures"
626 | version = "0.3.21"
627 | source = "registry+https://github.com/rust-lang/crates.io-index"
628 | checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e"
629 | dependencies = [
630 | "futures-channel",
631 | "futures-core",
632 | "futures-executor",
633 | "futures-io",
634 | "futures-sink",
635 | "futures-task",
636 | "futures-util",
637 | ]
638 |
639 | [[package]]
640 | name = "futures-channel"
641 | version = "0.3.21"
642 | source = "registry+https://github.com/rust-lang/crates.io-index"
643 | checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010"
644 | dependencies = [
645 | "futures-core",
646 | "futures-sink",
647 | ]
648 |
649 | [[package]]
650 | name = "futures-core"
651 | version = "0.3.21"
652 | source = "registry+https://github.com/rust-lang/crates.io-index"
653 | checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3"
654 |
655 | [[package]]
656 | name = "futures-executor"
657 | version = "0.3.21"
658 | source = "registry+https://github.com/rust-lang/crates.io-index"
659 | checksum = "9420b90cfa29e327d0429f19be13e7ddb68fa1cccb09d65e5706b8c7a749b8a6"
660 | dependencies = [
661 | "futures-core",
662 | "futures-task",
663 | "futures-util",
664 | ]
665 |
666 | [[package]]
667 | name = "futures-intrusive"
668 | version = "0.4.0"
669 | source = "registry+https://github.com/rust-lang/crates.io-index"
670 | checksum = "62007592ac46aa7c2b6416f7deb9a8a8f63a01e0f1d6e1787d5630170db2b63e"
671 | dependencies = [
672 | "futures-core",
673 | "lock_api",
674 | "parking_lot 0.11.2",
675 | ]
676 |
677 | [[package]]
678 | name = "futures-io"
679 | version = "0.3.21"
680 | source = "registry+https://github.com/rust-lang/crates.io-index"
681 | checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b"
682 |
683 | [[package]]
684 | name = "futures-macro"
685 | version = "0.3.21"
686 | source = "registry+https://github.com/rust-lang/crates.io-index"
687 | checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512"
688 | dependencies = [
689 | "proc-macro2",
690 | "quote",
691 | "syn",
692 | ]
693 |
694 | [[package]]
695 | name = "futures-sink"
696 | version = "0.3.21"
697 | source = "registry+https://github.com/rust-lang/crates.io-index"
698 | checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868"
699 |
700 | [[package]]
701 | name = "futures-task"
702 | version = "0.3.21"
703 | source = "registry+https://github.com/rust-lang/crates.io-index"
704 | checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a"
705 |
706 | [[package]]
707 | name = "futures-timer"
708 | version = "3.0.2"
709 | source = "registry+https://github.com/rust-lang/crates.io-index"
710 | checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
711 |
712 | [[package]]
713 | name = "futures-util"
714 | version = "0.3.21"
715 | source = "registry+https://github.com/rust-lang/crates.io-index"
716 | checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a"
717 | dependencies = [
718 | "futures-channel",
719 | "futures-core",
720 | "futures-io",
721 | "futures-macro",
722 | "futures-sink",
723 | "futures-task",
724 | "memchr",
725 | "pin-project-lite",
726 | "pin-utils",
727 | "slab",
728 | ]
729 |
730 | [[package]]
731 | name = "generic-array"
732 | version = "0.14.5"
733 | source = "registry+https://github.com/rust-lang/crates.io-index"
734 | checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
735 | dependencies = [
736 | "typenum",
737 | "version_check",
738 | ]
739 |
740 | [[package]]
741 | name = "getrandom"
742 | version = "0.2.6"
743 | source = "registry+https://github.com/rust-lang/crates.io-index"
744 | checksum = "9be70c98951c83b8d2f8f60d7065fa6d5146873094452a1008da8c2f1e4205ad"
745 | dependencies = [
746 | "cfg-if",
747 | "libc",
748 | "wasi 0.10.0+wasi-snapshot-preview1",
749 | ]
750 |
751 | [[package]]
752 | name = "governor"
753 | version = "0.4.2"
754 | source = "registry+https://github.com/rust-lang/crates.io-index"
755 | checksum = "19775995ee20209163239355bc3ad2f33f83da35d9ef72dea26e5af753552c87"
756 | dependencies = [
757 | "dashmap",
758 | "futures",
759 | "futures-timer",
760 | "no-std-compat",
761 | "nonzero_ext",
762 | "parking_lot 0.12.0",
763 | "quanta",
764 | "rand",
765 | "smallvec",
766 | ]
767 |
768 | [[package]]
769 | name = "h2"
770 | version = "0.3.13"
771 | source = "registry+https://github.com/rust-lang/crates.io-index"
772 | checksum = "37a82c6d637fc9515a4694bbf1cb2457b79d81ce52b3108bdeea58b07dd34a57"
773 | dependencies = [
774 | "bytes",
775 | "fnv",
776 | "futures-core",
777 | "futures-sink",
778 | "futures-util",
779 | "http",
780 | "indexmap",
781 | "slab",
782 | "tokio",
783 | "tokio-util",
784 | "tracing",
785 | ]
786 |
787 | [[package]]
788 | name = "hashbrown"
789 | version = "0.11.2"
790 | source = "registry+https://github.com/rust-lang/crates.io-index"
791 | checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
792 | dependencies = [
793 | "ahash",
794 | ]
795 |
796 | [[package]]
797 | name = "hashlink"
798 | version = "0.7.0"
799 | source = "registry+https://github.com/rust-lang/crates.io-index"
800 | checksum = "7249a3129cbc1ffccd74857f81464a323a152173cdb134e0fd81bc803b29facf"
801 | dependencies = [
802 | "hashbrown",
803 | ]
804 |
805 | [[package]]
806 | name = "heck"
807 | version = "0.3.3"
808 | source = "registry+https://github.com/rust-lang/crates.io-index"
809 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
810 | dependencies = [
811 | "unicode-segmentation",
812 | ]
813 |
814 | [[package]]
815 | name = "hermit-abi"
816 | version = "0.1.19"
817 | source = "registry+https://github.com/rust-lang/crates.io-index"
818 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
819 | dependencies = [
820 | "libc",
821 | ]
822 |
823 | [[package]]
824 | name = "hex"
825 | version = "0.4.3"
826 | source = "registry+https://github.com/rust-lang/crates.io-index"
827 | checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
828 |
829 | [[package]]
830 | name = "hmac"
831 | version = "0.11.0"
832 | source = "registry+https://github.com/rust-lang/crates.io-index"
833 | checksum = "2a2a2320eb7ec0ebe8da8f744d7812d9fc4cb4d09344ac01898dbcb6a20ae69b"
834 | dependencies = [
835 | "crypto-mac",
836 | "digest 0.9.0",
837 | ]
838 |
839 | [[package]]
840 | name = "http"
841 | version = "0.2.6"
842 | source = "registry+https://github.com/rust-lang/crates.io-index"
843 | checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03"
844 | dependencies = [
845 | "bytes",
846 | "fnv",
847 | "itoa 1.0.1",
848 | ]
849 |
850 | [[package]]
851 | name = "httparse"
852 | version = "1.6.0"
853 | source = "registry+https://github.com/rust-lang/crates.io-index"
854 | checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4"
855 |
856 | [[package]]
857 | name = "httpdate"
858 | version = "1.0.2"
859 | source = "registry+https://github.com/rust-lang/crates.io-index"
860 | checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
861 |
862 | [[package]]
863 | name = "idna"
864 | version = "0.2.3"
865 | source = "registry+https://github.com/rust-lang/crates.io-index"
866 | checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
867 | dependencies = [
868 | "matches",
869 | "unicode-bidi",
870 | "unicode-normalization",
871 | ]
872 |
873 | [[package]]
874 | name = "indexmap"
875 | version = "1.8.1"
876 | source = "registry+https://github.com/rust-lang/crates.io-index"
877 | checksum = "0f647032dfaa1f8b6dc29bd3edb7bbef4861b8b8007ebb118d6db284fd59f6ee"
878 | dependencies = [
879 | "autocfg",
880 | "hashbrown",
881 | ]
882 |
883 | [[package]]
884 | name = "instant"
885 | version = "0.1.12"
886 | source = "registry+https://github.com/rust-lang/crates.io-index"
887 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
888 | dependencies = [
889 | "cfg-if",
890 | ]
891 |
892 | [[package]]
893 | name = "itertools"
894 | version = "0.10.3"
895 | source = "registry+https://github.com/rust-lang/crates.io-index"
896 | checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
897 | dependencies = [
898 | "either",
899 | ]
900 |
901 | [[package]]
902 | name = "itoa"
903 | version = "0.4.8"
904 | source = "registry+https://github.com/rust-lang/crates.io-index"
905 | checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
906 |
907 | [[package]]
908 | name = "itoa"
909 | version = "1.0.1"
910 | source = "registry+https://github.com/rust-lang/crates.io-index"
911 | checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
912 |
913 | [[package]]
914 | name = "jobserver"
915 | version = "0.1.24"
916 | source = "registry+https://github.com/rust-lang/crates.io-index"
917 | checksum = "af25a77299a7f711a01975c35a6a424eb6862092cc2d6c72c4ed6cbc56dfc1fa"
918 | dependencies = [
919 | "libc",
920 | ]
921 |
922 | [[package]]
923 | name = "js-sys"
924 | version = "0.3.56"
925 | source = "registry+https://github.com/rust-lang/crates.io-index"
926 | checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04"
927 | dependencies = [
928 | "wasm-bindgen",
929 | ]
930 |
931 | [[package]]
932 | name = "language-tags"
933 | version = "0.3.2"
934 | source = "registry+https://github.com/rust-lang/crates.io-index"
935 | checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388"
936 |
937 | [[package]]
938 | name = "lazy_static"
939 | version = "1.4.0"
940 | source = "registry+https://github.com/rust-lang/crates.io-index"
941 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
942 |
943 | [[package]]
944 | name = "libc"
945 | version = "0.2.121"
946 | source = "registry+https://github.com/rust-lang/crates.io-index"
947 | checksum = "efaa7b300f3b5fe8eb6bf21ce3895e1751d9665086af2d64b42f19701015ff4f"
948 |
949 | [[package]]
950 | name = "local-channel"
951 | version = "0.1.2"
952 | source = "registry+https://github.com/rust-lang/crates.io-index"
953 | checksum = "6246c68cf195087205a0512559c97e15eaf95198bf0e206d662092cdcb03fe9f"
954 | dependencies = [
955 | "futures-core",
956 | "futures-sink",
957 | "futures-util",
958 | "local-waker",
959 | ]
960 |
961 | [[package]]
962 | name = "local-waker"
963 | version = "0.1.2"
964 | source = "registry+https://github.com/rust-lang/crates.io-index"
965 | checksum = "902eb695eb0591864543cbfbf6d742510642a605a61fc5e97fe6ceb5a30ac4fb"
966 |
967 | [[package]]
968 | name = "lock_api"
969 | version = "0.4.7"
970 | source = "registry+https://github.com/rust-lang/crates.io-index"
971 | checksum = "327fa5b6a6940e4699ec49a9beae1ea4845c6bab9314e4f84ac68742139d8c53"
972 | dependencies = [
973 | "autocfg",
974 | "scopeguard",
975 | ]
976 |
977 | [[package]]
978 | name = "log"
979 | version = "0.4.16"
980 | source = "registry+https://github.com/rust-lang/crates.io-index"
981 | checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8"
982 | dependencies = [
983 | "cfg-if",
984 | ]
985 |
986 | [[package]]
987 | name = "mach"
988 | version = "0.3.2"
989 | source = "registry+https://github.com/rust-lang/crates.io-index"
990 | checksum = "b823e83b2affd8f40a9ee8c29dbc56404c1e34cd2710921f2801e2cf29527afa"
991 | dependencies = [
992 | "libc",
993 | ]
994 |
995 | [[package]]
996 | name = "matches"
997 | version = "0.1.9"
998 | source = "registry+https://github.com/rust-lang/crates.io-index"
999 | checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
1000 |
1001 | [[package]]
1002 | name = "md-5"
1003 | version = "0.9.1"
1004 | source = "registry+https://github.com/rust-lang/crates.io-index"
1005 | checksum = "7b5a279bb9607f9f53c22d496eade00d138d1bdcccd07d74650387cf94942a15"
1006 | dependencies = [
1007 | "block-buffer 0.9.0",
1008 | "digest 0.9.0",
1009 | "opaque-debug",
1010 | ]
1011 |
1012 | [[package]]
1013 | name = "memchr"
1014 | version = "2.4.1"
1015 | source = "registry+https://github.com/rust-lang/crates.io-index"
1016 | checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
1017 |
1018 | [[package]]
1019 | name = "mime"
1020 | version = "0.3.16"
1021 | source = "registry+https://github.com/rust-lang/crates.io-index"
1022 | checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
1023 |
1024 | [[package]]
1025 | name = "minimal-lexical"
1026 | version = "0.2.1"
1027 | source = "registry+https://github.com/rust-lang/crates.io-index"
1028 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
1029 |
1030 | [[package]]
1031 | name = "miniz_oxide"
1032 | version = "0.4.4"
1033 | source = "registry+https://github.com/rust-lang/crates.io-index"
1034 | checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b"
1035 | dependencies = [
1036 | "adler",
1037 | "autocfg",
1038 | ]
1039 |
1040 | [[package]]
1041 | name = "mio"
1042 | version = "0.8.2"
1043 | source = "registry+https://github.com/rust-lang/crates.io-index"
1044 | checksum = "52da4364ffb0e4fe33a9841a98a3f3014fb964045ce4f7a45a398243c8d6b0c9"
1045 | dependencies = [
1046 | "libc",
1047 | "log",
1048 | "miow",
1049 | "ntapi",
1050 | "wasi 0.11.0+wasi-snapshot-preview1",
1051 | "winapi",
1052 | ]
1053 |
1054 | [[package]]
1055 | name = "miow"
1056 | version = "0.3.7"
1057 | source = "registry+https://github.com/rust-lang/crates.io-index"
1058 | checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
1059 | dependencies = [
1060 | "winapi",
1061 | ]
1062 |
1063 | [[package]]
1064 | name = "nanoid"
1065 | version = "0.4.0"
1066 | source = "registry+https://github.com/rust-lang/crates.io-index"
1067 | checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8"
1068 | dependencies = [
1069 | "rand",
1070 | ]
1071 |
1072 | [[package]]
1073 | name = "no-std-compat"
1074 | version = "0.4.1"
1075 | source = "registry+https://github.com/rust-lang/crates.io-index"
1076 | checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c"
1077 |
1078 | [[package]]
1079 | name = "nom"
1080 | version = "7.1.1"
1081 | source = "registry+https://github.com/rust-lang/crates.io-index"
1082 | checksum = "a8903e5a29a317527874d0402f867152a3d21c908bb0b933e416c65e301d4c36"
1083 | dependencies = [
1084 | "memchr",
1085 | "minimal-lexical",
1086 | ]
1087 |
1088 | [[package]]
1089 | name = "nonzero_ext"
1090 | version = "0.3.0"
1091 | source = "registry+https://github.com/rust-lang/crates.io-index"
1092 | checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21"
1093 |
1094 | [[package]]
1095 | name = "ntapi"
1096 | version = "0.3.7"
1097 | source = "registry+https://github.com/rust-lang/crates.io-index"
1098 | checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f"
1099 | dependencies = [
1100 | "winapi",
1101 | ]
1102 |
1103 | [[package]]
1104 | name = "num-integer"
1105 | version = "0.1.44"
1106 | source = "registry+https://github.com/rust-lang/crates.io-index"
1107 | checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
1108 | dependencies = [
1109 | "autocfg",
1110 | "num-traits",
1111 | ]
1112 |
1113 | [[package]]
1114 | name = "num-traits"
1115 | version = "0.2.14"
1116 | source = "registry+https://github.com/rust-lang/crates.io-index"
1117 | checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
1118 | dependencies = [
1119 | "autocfg",
1120 | ]
1121 |
1122 | [[package]]
1123 | name = "num_cpus"
1124 | version = "1.13.1"
1125 | source = "registry+https://github.com/rust-lang/crates.io-index"
1126 | checksum = "19e64526ebdee182341572e50e9ad03965aa510cd94427a4549448f285e957a1"
1127 | dependencies = [
1128 | "hermit-abi",
1129 | "libc",
1130 | ]
1131 |
1132 | [[package]]
1133 | name = "num_threads"
1134 | version = "0.1.5"
1135 | source = "registry+https://github.com/rust-lang/crates.io-index"
1136 | checksum = "aba1801fb138d8e85e11d0fc70baf4fe1cdfffda7c6cd34a854905df588e5ed0"
1137 | dependencies = [
1138 | "libc",
1139 | ]
1140 |
1141 | [[package]]
1142 | name = "once_cell"
1143 | version = "1.10.0"
1144 | source = "registry+https://github.com/rust-lang/crates.io-index"
1145 | checksum = "87f3e037eac156d1775da914196f0f37741a274155e34a0b7e427c35d2a2ecb9"
1146 |
1147 | [[package]]
1148 | name = "opaque-debug"
1149 | version = "0.3.0"
1150 | source = "registry+https://github.com/rust-lang/crates.io-index"
1151 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
1152 |
1153 | [[package]]
1154 | name = "parking_lot"
1155 | version = "0.11.2"
1156 | source = "registry+https://github.com/rust-lang/crates.io-index"
1157 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
1158 | dependencies = [
1159 | "instant",
1160 | "lock_api",
1161 | "parking_lot_core 0.8.5",
1162 | ]
1163 |
1164 | [[package]]
1165 | name = "parking_lot"
1166 | version = "0.12.0"
1167 | source = "registry+https://github.com/rust-lang/crates.io-index"
1168 | checksum = "87f5ec2493a61ac0506c0f4199f99070cbe83857b0337006a30f3e6719b8ef58"
1169 | dependencies = [
1170 | "lock_api",
1171 | "parking_lot_core 0.9.2",
1172 | ]
1173 |
1174 | [[package]]
1175 | name = "parking_lot_core"
1176 | version = "0.8.5"
1177 | source = "registry+https://github.com/rust-lang/crates.io-index"
1178 | checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
1179 | dependencies = [
1180 | "cfg-if",
1181 | "instant",
1182 | "libc",
1183 | "redox_syscall",
1184 | "smallvec",
1185 | "winapi",
1186 | ]
1187 |
1188 | [[package]]
1189 | name = "parking_lot_core"
1190 | version = "0.9.2"
1191 | source = "registry+https://github.com/rust-lang/crates.io-index"
1192 | checksum = "995f667a6c822200b0433ac218e05582f0e2efa1b922a3fd2fbaadc5f87bab37"
1193 | dependencies = [
1194 | "cfg-if",
1195 | "libc",
1196 | "redox_syscall",
1197 | "smallvec",
1198 | "windows-sys",
1199 | ]
1200 |
1201 | [[package]]
1202 | name = "paste"
1203 | version = "1.0.7"
1204 | source = "registry+https://github.com/rust-lang/crates.io-index"
1205 | checksum = "0c520e05135d6e763148b6426a837e239041653ba7becd2e538c076c738025fc"
1206 |
1207 | [[package]]
1208 | name = "percent-encoding"
1209 | version = "2.1.0"
1210 | source = "registry+https://github.com/rust-lang/crates.io-index"
1211 | checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
1212 |
1213 | [[package]]
1214 | name = "pin-project-lite"
1215 | version = "0.2.8"
1216 | source = "registry+https://github.com/rust-lang/crates.io-index"
1217 | checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c"
1218 |
1219 | [[package]]
1220 | name = "pin-utils"
1221 | version = "0.1.0"
1222 | source = "registry+https://github.com/rust-lang/crates.io-index"
1223 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
1224 |
1225 | [[package]]
1226 | name = "ppv-lite86"
1227 | version = "0.2.16"
1228 | source = "registry+https://github.com/rust-lang/crates.io-index"
1229 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
1230 |
1231 | [[package]]
1232 | name = "proc-macro2"
1233 | version = "1.0.36"
1234 | source = "registry+https://github.com/rust-lang/crates.io-index"
1235 | checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
1236 | dependencies = [
1237 | "unicode-xid",
1238 | ]
1239 |
1240 | [[package]]
1241 | name = "quanta"
1242 | version = "0.9.3"
1243 | source = "registry+https://github.com/rust-lang/crates.io-index"
1244 | checksum = "20afe714292d5e879d8b12740aa223c6a88f118af41870e8b6196e39a02238a8"
1245 | dependencies = [
1246 | "crossbeam-utils",
1247 | "libc",
1248 | "mach",
1249 | "once_cell",
1250 | "raw-cpuid",
1251 | "wasi 0.10.0+wasi-snapshot-preview1",
1252 | "web-sys",
1253 | "winapi",
1254 | ]
1255 |
1256 | [[package]]
1257 | name = "quote"
1258 | version = "1.0.17"
1259 | source = "registry+https://github.com/rust-lang/crates.io-index"
1260 | checksum = "632d02bff7f874a36f33ea8bb416cd484b90cc66c1194b1a1110d067a7013f58"
1261 | dependencies = [
1262 | "proc-macro2",
1263 | ]
1264 |
1265 | [[package]]
1266 | name = "rand"
1267 | version = "0.8.5"
1268 | source = "registry+https://github.com/rust-lang/crates.io-index"
1269 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
1270 | dependencies = [
1271 | "libc",
1272 | "rand_chacha",
1273 | "rand_core",
1274 | ]
1275 |
1276 | [[package]]
1277 | name = "rand_chacha"
1278 | version = "0.3.1"
1279 | source = "registry+https://github.com/rust-lang/crates.io-index"
1280 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
1281 | dependencies = [
1282 | "ppv-lite86",
1283 | "rand_core",
1284 | ]
1285 |
1286 | [[package]]
1287 | name = "rand_core"
1288 | version = "0.6.3"
1289 | source = "registry+https://github.com/rust-lang/crates.io-index"
1290 | checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7"
1291 | dependencies = [
1292 | "getrandom",
1293 | ]
1294 |
1295 | [[package]]
1296 | name = "raw-cpuid"
1297 | version = "10.3.0"
1298 | source = "registry+https://github.com/rust-lang/crates.io-index"
1299 | checksum = "738bc47119e3eeccc7e94c4a506901aea5e7b4944ecd0829cbebf4af04ceda12"
1300 | dependencies = [
1301 | "bitflags",
1302 | ]
1303 |
1304 | [[package]]
1305 | name = "redox_syscall"
1306 | version = "0.2.13"
1307 | source = "registry+https://github.com/rust-lang/crates.io-index"
1308 | checksum = "62f25bc4c7e55e0b0b7a1d43fb893f4fa1361d0abe38b9ce4f323c2adfe6ef42"
1309 | dependencies = [
1310 | "bitflags",
1311 | ]
1312 |
1313 | [[package]]
1314 | name = "redox_users"
1315 | version = "0.4.3"
1316 | source = "registry+https://github.com/rust-lang/crates.io-index"
1317 | checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
1318 | dependencies = [
1319 | "getrandom",
1320 | "redox_syscall",
1321 | "thiserror",
1322 | ]
1323 |
1324 | [[package]]
1325 | name = "regex"
1326 | version = "1.5.5"
1327 | source = "registry+https://github.com/rust-lang/crates.io-index"
1328 | checksum = "1a11647b6b25ff05a515cb92c365cec08801e83423a235b51e231e1808747286"
1329 | dependencies = [
1330 | "aho-corasick",
1331 | "memchr",
1332 | "regex-syntax",
1333 | ]
1334 |
1335 | [[package]]
1336 | name = "regex-syntax"
1337 | version = "0.6.25"
1338 | source = "registry+https://github.com/rust-lang/crates.io-index"
1339 | checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
1340 |
1341 | [[package]]
1342 | name = "ring"
1343 | version = "0.16.20"
1344 | source = "registry+https://github.com/rust-lang/crates.io-index"
1345 | checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc"
1346 | dependencies = [
1347 | "cc",
1348 | "libc",
1349 | "once_cell",
1350 | "spin",
1351 | "untrusted",
1352 | "web-sys",
1353 | "winapi",
1354 | ]
1355 |
1356 | [[package]]
1357 | name = "rustc_version"
1358 | version = "0.4.0"
1359 | source = "registry+https://github.com/rust-lang/crates.io-index"
1360 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
1361 | dependencies = [
1362 | "semver",
1363 | ]
1364 |
1365 | [[package]]
1366 | name = "rustls"
1367 | version = "0.19.1"
1368 | source = "registry+https://github.com/rust-lang/crates.io-index"
1369 | checksum = "35edb675feee39aec9c99fa5ff985081995a06d594114ae14cbe797ad7b7a6d7"
1370 | dependencies = [
1371 | "base64",
1372 | "log",
1373 | "ring",
1374 | "sct",
1375 | "webpki",
1376 | ]
1377 |
1378 | [[package]]
1379 | name = "ryu"
1380 | version = "1.0.9"
1381 | source = "registry+https://github.com/rust-lang/crates.io-index"
1382 | checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
1383 |
1384 | [[package]]
1385 | name = "scopeguard"
1386 | version = "1.1.0"
1387 | source = "registry+https://github.com/rust-lang/crates.io-index"
1388 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
1389 |
1390 | [[package]]
1391 | name = "sct"
1392 | version = "0.6.1"
1393 | source = "registry+https://github.com/rust-lang/crates.io-index"
1394 | checksum = "b362b83898e0e69f38515b82ee15aa80636befe47c3b6d3d89a911e78fc228ce"
1395 | dependencies = [
1396 | "ring",
1397 | "untrusted",
1398 | ]
1399 |
1400 | [[package]]
1401 | name = "seahash"
1402 | version = "4.1.0"
1403 | source = "registry+https://github.com/rust-lang/crates.io-index"
1404 | checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
1405 |
1406 | [[package]]
1407 | name = "semver"
1408 | version = "1.0.7"
1409 | source = "registry+https://github.com/rust-lang/crates.io-index"
1410 | checksum = "d65bd28f48be7196d222d95b9243287f48d27aca604e08497513019ff0502cc4"
1411 |
1412 | [[package]]
1413 | name = "serde"
1414 | version = "1.0.136"
1415 | source = "registry+https://github.com/rust-lang/crates.io-index"
1416 | checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
1417 | dependencies = [
1418 | "serde_derive",
1419 | ]
1420 |
1421 | [[package]]
1422 | name = "serde_derive"
1423 | version = "1.0.136"
1424 | source = "registry+https://github.com/rust-lang/crates.io-index"
1425 | checksum = "08597e7152fcd306f41838ed3e37be9eaeed2b61c42e2117266a554fab4662f9"
1426 | dependencies = [
1427 | "proc-macro2",
1428 | "quote",
1429 | "syn",
1430 | ]
1431 |
1432 | [[package]]
1433 | name = "serde_json"
1434 | version = "1.0.79"
1435 | source = "registry+https://github.com/rust-lang/crates.io-index"
1436 | checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
1437 | dependencies = [
1438 | "itoa 1.0.1",
1439 | "ryu",
1440 | "serde",
1441 | ]
1442 |
1443 | [[package]]
1444 | name = "serde_urlencoded"
1445 | version = "0.7.1"
1446 | source = "registry+https://github.com/rust-lang/crates.io-index"
1447 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd"
1448 | dependencies = [
1449 | "form_urlencoded",
1450 | "itoa 1.0.1",
1451 | "ryu",
1452 | "serde",
1453 | ]
1454 |
1455 | [[package]]
1456 | name = "sha-1"
1457 | version = "0.9.8"
1458 | source = "registry+https://github.com/rust-lang/crates.io-index"
1459 | checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6"
1460 | dependencies = [
1461 | "block-buffer 0.9.0",
1462 | "cfg-if",
1463 | "cpufeatures",
1464 | "digest 0.9.0",
1465 | "opaque-debug",
1466 | ]
1467 |
1468 | [[package]]
1469 | name = "sha-1"
1470 | version = "0.10.0"
1471 | source = "registry+https://github.com/rust-lang/crates.io-index"
1472 | checksum = "028f48d513f9678cda28f6e4064755b3fbb2af6acd672f2c209b62323f7aea0f"
1473 | dependencies = [
1474 | "cfg-if",
1475 | "cpufeatures",
1476 | "digest 0.10.3",
1477 | ]
1478 |
1479 | [[package]]
1480 | name = "sha2"
1481 | version = "0.9.9"
1482 | source = "registry+https://github.com/rust-lang/crates.io-index"
1483 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
1484 | dependencies = [
1485 | "block-buffer 0.9.0",
1486 | "cfg-if",
1487 | "cpufeatures",
1488 | "digest 0.9.0",
1489 | "opaque-debug",
1490 | ]
1491 |
1492 | [[package]]
1493 | name = "signal-hook-registry"
1494 | version = "1.4.0"
1495 | source = "registry+https://github.com/rust-lang/crates.io-index"
1496 | checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
1497 | dependencies = [
1498 | "libc",
1499 | ]
1500 |
1501 | [[package]]
1502 | name = "slab"
1503 | version = "0.4.6"
1504 | source = "registry+https://github.com/rust-lang/crates.io-index"
1505 | checksum = "eb703cfe953bccee95685111adeedb76fabe4e97549a58d16f03ea7b9367bb32"
1506 |
1507 | [[package]]
1508 | name = "smallvec"
1509 | version = "1.8.0"
1510 | source = "registry+https://github.com/rust-lang/crates.io-index"
1511 | checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
1512 |
1513 | [[package]]
1514 | name = "socket2"
1515 | version = "0.4.4"
1516 | source = "registry+https://github.com/rust-lang/crates.io-index"
1517 | checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0"
1518 | dependencies = [
1519 | "libc",
1520 | "winapi",
1521 | ]
1522 |
1523 | [[package]]
1524 | name = "spin"
1525 | version = "0.5.2"
1526 | source = "registry+https://github.com/rust-lang/crates.io-index"
1527 | checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
1528 |
1529 | [[package]]
1530 | name = "sqlformat"
1531 | version = "0.1.8"
1532 | source = "registry+https://github.com/rust-lang/crates.io-index"
1533 | checksum = "b4b7922be017ee70900be125523f38bdd644f4f06a1b16e8fa5a8ee8c34bffd4"
1534 | dependencies = [
1535 | "itertools",
1536 | "nom",
1537 | "unicode_categories",
1538 | ]
1539 |
1540 | [[package]]
1541 | name = "sqlx"
1542 | version = "0.5.11"
1543 | source = "registry+https://github.com/rust-lang/crates.io-index"
1544 | checksum = "fc15591eb44ffb5816a4a70a7efd5dd87bfd3aa84c4c200401c4396140525826"
1545 | dependencies = [
1546 | "sqlx-core",
1547 | "sqlx-macros",
1548 | ]
1549 |
1550 | [[package]]
1551 | name = "sqlx-core"
1552 | version = "0.5.11"
1553 | source = "registry+https://github.com/rust-lang/crates.io-index"
1554 | checksum = "195183bf6ff8328bb82c0511a83faf60aacf75840103388851db61d7a9854ae3"
1555 | dependencies = [
1556 | "ahash",
1557 | "atoi",
1558 | "base64",
1559 | "bitflags",
1560 | "byteorder",
1561 | "bytes",
1562 | "chrono",
1563 | "crc",
1564 | "crossbeam-queue",
1565 | "dirs",
1566 | "either",
1567 | "futures-channel",
1568 | "futures-core",
1569 | "futures-intrusive",
1570 | "futures-util",
1571 | "hashlink",
1572 | "hex",
1573 | "hmac",
1574 | "indexmap",
1575 | "itoa 1.0.1",
1576 | "libc",
1577 | "log",
1578 | "md-5",
1579 | "memchr",
1580 | "once_cell",
1581 | "paste",
1582 | "percent-encoding",
1583 | "rand",
1584 | "rustls",
1585 | "serde",
1586 | "serde_json",
1587 | "sha-1 0.9.8",
1588 | "sha2",
1589 | "smallvec",
1590 | "sqlformat",
1591 | "sqlx-rt",
1592 | "stringprep",
1593 | "thiserror",
1594 | "tokio-stream",
1595 | "url",
1596 | "webpki",
1597 | "webpki-roots",
1598 | "whoami",
1599 | ]
1600 |
1601 | [[package]]
1602 | name = "sqlx-macros"
1603 | version = "0.5.11"
1604 | source = "registry+https://github.com/rust-lang/crates.io-index"
1605 | checksum = "eee35713129561f5e55c554bba1c378e2a7e67f81257b7311183de98c50e6f94"
1606 | dependencies = [
1607 | "dotenv",
1608 | "either",
1609 | "heck",
1610 | "once_cell",
1611 | "proc-macro2",
1612 | "quote",
1613 | "sha2",
1614 | "sqlx-core",
1615 | "sqlx-rt",
1616 | "syn",
1617 | "url",
1618 | ]
1619 |
1620 | [[package]]
1621 | name = "sqlx-rt"
1622 | version = "0.5.11"
1623 | source = "registry+https://github.com/rust-lang/crates.io-index"
1624 | checksum = "b555e70fbbf84e269ec3858b7a6515bcfe7a166a7cc9c636dd6efd20431678b6"
1625 | dependencies = [
1626 | "once_cell",
1627 | "tokio",
1628 | "tokio-rustls",
1629 | ]
1630 |
1631 | [[package]]
1632 | name = "stringprep"
1633 | version = "0.1.2"
1634 | source = "registry+https://github.com/rust-lang/crates.io-index"
1635 | checksum = "8ee348cb74b87454fff4b551cbf727025810a004f88aeacae7f85b87f4e9a1c1"
1636 | dependencies = [
1637 | "unicode-bidi",
1638 | "unicode-normalization",
1639 | ]
1640 |
1641 | [[package]]
1642 | name = "subtle"
1643 | version = "2.4.1"
1644 | source = "registry+https://github.com/rust-lang/crates.io-index"
1645 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
1646 |
1647 | [[package]]
1648 | name = "syn"
1649 | version = "1.0.90"
1650 | source = "registry+https://github.com/rust-lang/crates.io-index"
1651 | checksum = "704df27628939572cd88d33f171cd6f896f4eaca85252c6e0a72d8d8287ee86f"
1652 | dependencies = [
1653 | "proc-macro2",
1654 | "quote",
1655 | "unicode-xid",
1656 | ]
1657 |
1658 | [[package]]
1659 | name = "thiserror"
1660 | version = "1.0.30"
1661 | source = "registry+https://github.com/rust-lang/crates.io-index"
1662 | checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
1663 | dependencies = [
1664 | "thiserror-impl",
1665 | ]
1666 |
1667 | [[package]]
1668 | name = "thiserror-impl"
1669 | version = "1.0.30"
1670 | source = "registry+https://github.com/rust-lang/crates.io-index"
1671 | checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
1672 | dependencies = [
1673 | "proc-macro2",
1674 | "quote",
1675 | "syn",
1676 | ]
1677 |
1678 | [[package]]
1679 | name = "time"
1680 | version = "0.1.44"
1681 | source = "registry+https://github.com/rust-lang/crates.io-index"
1682 | checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
1683 | dependencies = [
1684 | "libc",
1685 | "wasi 0.10.0+wasi-snapshot-preview1",
1686 | "winapi",
1687 | ]
1688 |
1689 | [[package]]
1690 | name = "time"
1691 | version = "0.3.9"
1692 | source = "registry+https://github.com/rust-lang/crates.io-index"
1693 | checksum = "c2702e08a7a860f005826c6815dcac101b19b5eb330c27fe4a5928fec1d20ddd"
1694 | dependencies = [
1695 | "itoa 1.0.1",
1696 | "libc",
1697 | "num_threads",
1698 | "time-macros",
1699 | ]
1700 |
1701 | [[package]]
1702 | name = "time-macros"
1703 | version = "0.2.4"
1704 | source = "registry+https://github.com/rust-lang/crates.io-index"
1705 | checksum = "42657b1a6f4d817cda8e7a0ace261fe0cc946cf3a80314390b22cc61ae080792"
1706 |
1707 | [[package]]
1708 | name = "tinyvec"
1709 | version = "1.5.1"
1710 | source = "registry+https://github.com/rust-lang/crates.io-index"
1711 | checksum = "2c1c1d5a42b6245520c249549ec267180beaffcc0615401ac8e31853d4b6d8d2"
1712 | dependencies = [
1713 | "tinyvec_macros",
1714 | ]
1715 |
1716 | [[package]]
1717 | name = "tinyvec_macros"
1718 | version = "0.1.0"
1719 | source = "registry+https://github.com/rust-lang/crates.io-index"
1720 | checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
1721 |
1722 | [[package]]
1723 | name = "tokio"
1724 | version = "1.17.0"
1725 | source = "registry+https://github.com/rust-lang/crates.io-index"
1726 | checksum = "2af73ac49756f3f7c01172e34a23e5d0216f6c32333757c2c61feb2bbff5a5ee"
1727 | dependencies = [
1728 | "bytes",
1729 | "libc",
1730 | "memchr",
1731 | "mio",
1732 | "num_cpus",
1733 | "once_cell",
1734 | "parking_lot 0.12.0",
1735 | "pin-project-lite",
1736 | "signal-hook-registry",
1737 | "socket2",
1738 | "winapi",
1739 | ]
1740 |
1741 | [[package]]
1742 | name = "tokio-rustls"
1743 | version = "0.22.0"
1744 | source = "registry+https://github.com/rust-lang/crates.io-index"
1745 | checksum = "bc6844de72e57df1980054b38be3a9f4702aba4858be64dd700181a8a6d0e1b6"
1746 | dependencies = [
1747 | "rustls",
1748 | "tokio",
1749 | "webpki",
1750 | ]
1751 |
1752 | [[package]]
1753 | name = "tokio-stream"
1754 | version = "0.1.8"
1755 | source = "registry+https://github.com/rust-lang/crates.io-index"
1756 | checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3"
1757 | dependencies = [
1758 | "futures-core",
1759 | "pin-project-lite",
1760 | "tokio",
1761 | ]
1762 |
1763 | [[package]]
1764 | name = "tokio-util"
1765 | version = "0.7.1"
1766 | source = "registry+https://github.com/rust-lang/crates.io-index"
1767 | checksum = "0edfdeb067411dba2044da6d1cb2df793dd35add7888d73c16e3381ded401764"
1768 | dependencies = [
1769 | "bytes",
1770 | "futures-core",
1771 | "futures-sink",
1772 | "pin-project-lite",
1773 | "tokio",
1774 | "tracing",
1775 | ]
1776 |
1777 | [[package]]
1778 | name = "tracing"
1779 | version = "0.1.32"
1780 | source = "registry+https://github.com/rust-lang/crates.io-index"
1781 | checksum = "4a1bdf54a7c28a2bbf701e1d2233f6c77f473486b94bee4f9678da5a148dca7f"
1782 | dependencies = [
1783 | "cfg-if",
1784 | "log",
1785 | "pin-project-lite",
1786 | "tracing-attributes",
1787 | "tracing-core",
1788 | ]
1789 |
1790 | [[package]]
1791 | name = "tracing-attributes"
1792 | version = "0.1.20"
1793 | source = "registry+https://github.com/rust-lang/crates.io-index"
1794 | checksum = "2e65ce065b4b5c53e73bb28912318cb8c9e9ad3921f1d669eb0e68b4c8143a2b"
1795 | dependencies = [
1796 | "proc-macro2",
1797 | "quote",
1798 | "syn",
1799 | ]
1800 |
1801 | [[package]]
1802 | name = "tracing-core"
1803 | version = "0.1.24"
1804 | source = "registry+https://github.com/rust-lang/crates.io-index"
1805 | checksum = "90442985ee2f57c9e1b548ee72ae842f4a9a20e3f417cc38dbc5dc684d9bb4ee"
1806 | dependencies = [
1807 | "lazy_static",
1808 | ]
1809 |
1810 | [[package]]
1811 | name = "typenum"
1812 | version = "1.15.0"
1813 | source = "registry+https://github.com/rust-lang/crates.io-index"
1814 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
1815 |
1816 | [[package]]
1817 | name = "unicode-bidi"
1818 | version = "0.3.7"
1819 | source = "registry+https://github.com/rust-lang/crates.io-index"
1820 | checksum = "1a01404663e3db436ed2746d9fefef640d868edae3cceb81c3b8d5732fda678f"
1821 |
1822 | [[package]]
1823 | name = "unicode-normalization"
1824 | version = "0.1.19"
1825 | source = "registry+https://github.com/rust-lang/crates.io-index"
1826 | checksum = "d54590932941a9e9266f0832deed84ebe1bf2e4c9e4a3554d393d18f5e854bf9"
1827 | dependencies = [
1828 | "tinyvec",
1829 | ]
1830 |
1831 | [[package]]
1832 | name = "unicode-segmentation"
1833 | version = "1.9.0"
1834 | source = "registry+https://github.com/rust-lang/crates.io-index"
1835 | checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99"
1836 |
1837 | [[package]]
1838 | name = "unicode-xid"
1839 | version = "0.2.2"
1840 | source = "registry+https://github.com/rust-lang/crates.io-index"
1841 | checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
1842 |
1843 | [[package]]
1844 | name = "unicode_categories"
1845 | version = "0.1.1"
1846 | source = "registry+https://github.com/rust-lang/crates.io-index"
1847 | checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
1848 |
1849 | [[package]]
1850 | name = "untrusted"
1851 | version = "0.7.1"
1852 | source = "registry+https://github.com/rust-lang/crates.io-index"
1853 | checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a"
1854 |
1855 | [[package]]
1856 | name = "url"
1857 | version = "2.2.2"
1858 | source = "registry+https://github.com/rust-lang/crates.io-index"
1859 | checksum = "a507c383b2d33b5fc35d1861e77e6b383d158b2da5e14fe51b83dfedf6fd578c"
1860 | dependencies = [
1861 | "form_urlencoded",
1862 | "idna",
1863 | "matches",
1864 | "percent-encoding",
1865 | ]
1866 |
1867 | [[package]]
1868 | name = "version_check"
1869 | version = "0.9.4"
1870 | source = "registry+https://github.com/rust-lang/crates.io-index"
1871 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
1872 |
1873 | [[package]]
1874 | name = "wasi"
1875 | version = "0.10.0+wasi-snapshot-preview1"
1876 | source = "registry+https://github.com/rust-lang/crates.io-index"
1877 | checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
1878 |
1879 | [[package]]
1880 | name = "wasi"
1881 | version = "0.11.0+wasi-snapshot-preview1"
1882 | source = "registry+https://github.com/rust-lang/crates.io-index"
1883 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
1884 |
1885 | [[package]]
1886 | name = "wasm-bindgen"
1887 | version = "0.2.79"
1888 | source = "registry+https://github.com/rust-lang/crates.io-index"
1889 | checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06"
1890 | dependencies = [
1891 | "cfg-if",
1892 | "wasm-bindgen-macro",
1893 | ]
1894 |
1895 | [[package]]
1896 | name = "wasm-bindgen-backend"
1897 | version = "0.2.79"
1898 | source = "registry+https://github.com/rust-lang/crates.io-index"
1899 | checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca"
1900 | dependencies = [
1901 | "bumpalo",
1902 | "lazy_static",
1903 | "log",
1904 | "proc-macro2",
1905 | "quote",
1906 | "syn",
1907 | "wasm-bindgen-shared",
1908 | ]
1909 |
1910 | [[package]]
1911 | name = "wasm-bindgen-macro"
1912 | version = "0.2.79"
1913 | source = "registry+https://github.com/rust-lang/crates.io-index"
1914 | checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01"
1915 | dependencies = [
1916 | "quote",
1917 | "wasm-bindgen-macro-support",
1918 | ]
1919 |
1920 | [[package]]
1921 | name = "wasm-bindgen-macro-support"
1922 | version = "0.2.79"
1923 | source = "registry+https://github.com/rust-lang/crates.io-index"
1924 | checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc"
1925 | dependencies = [
1926 | "proc-macro2",
1927 | "quote",
1928 | "syn",
1929 | "wasm-bindgen-backend",
1930 | "wasm-bindgen-shared",
1931 | ]
1932 |
1933 | [[package]]
1934 | name = "wasm-bindgen-shared"
1935 | version = "0.2.79"
1936 | source = "registry+https://github.com/rust-lang/crates.io-index"
1937 | checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2"
1938 |
1939 | [[package]]
1940 | name = "web-sys"
1941 | version = "0.3.56"
1942 | source = "registry+https://github.com/rust-lang/crates.io-index"
1943 | checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb"
1944 | dependencies = [
1945 | "js-sys",
1946 | "wasm-bindgen",
1947 | ]
1948 |
1949 | [[package]]
1950 | name = "webpki"
1951 | version = "0.21.4"
1952 | source = "registry+https://github.com/rust-lang/crates.io-index"
1953 | checksum = "b8e38c0608262c46d4a56202ebabdeb094cef7e560ca7a226c6bf055188aa4ea"
1954 | dependencies = [
1955 | "ring",
1956 | "untrusted",
1957 | ]
1958 |
1959 | [[package]]
1960 | name = "webpki-roots"
1961 | version = "0.21.1"
1962 | source = "registry+https://github.com/rust-lang/crates.io-index"
1963 | checksum = "aabe153544e473b775453675851ecc86863d2a81d786d741f6b76778f2a48940"
1964 | dependencies = [
1965 | "webpki",
1966 | ]
1967 |
1968 | [[package]]
1969 | name = "whoami"
1970 | version = "1.2.1"
1971 | source = "registry+https://github.com/rust-lang/crates.io-index"
1972 | checksum = "524b58fa5a20a2fb3014dd6358b70e6579692a56ef6fce928834e488f42f65e8"
1973 | dependencies = [
1974 | "wasm-bindgen",
1975 | "web-sys",
1976 | ]
1977 |
1978 | [[package]]
1979 | name = "winapi"
1980 | version = "0.3.9"
1981 | source = "registry+https://github.com/rust-lang/crates.io-index"
1982 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
1983 | dependencies = [
1984 | "winapi-i686-pc-windows-gnu",
1985 | "winapi-x86_64-pc-windows-gnu",
1986 | ]
1987 |
1988 | [[package]]
1989 | name = "winapi-i686-pc-windows-gnu"
1990 | version = "0.4.0"
1991 | source = "registry+https://github.com/rust-lang/crates.io-index"
1992 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
1993 |
1994 | [[package]]
1995 | name = "winapi-x86_64-pc-windows-gnu"
1996 | version = "0.4.0"
1997 | source = "registry+https://github.com/rust-lang/crates.io-index"
1998 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1999 |
2000 | [[package]]
2001 | name = "windows-sys"
2002 | version = "0.34.0"
2003 | source = "registry+https://github.com/rust-lang/crates.io-index"
2004 | checksum = "5acdd78cb4ba54c0045ac14f62d8f94a03d10047904ae2a40afa1e99d8f70825"
2005 | dependencies = [
2006 | "windows_aarch64_msvc",
2007 | "windows_i686_gnu",
2008 | "windows_i686_msvc",
2009 | "windows_x86_64_gnu",
2010 | "windows_x86_64_msvc",
2011 | ]
2012 |
2013 | [[package]]
2014 | name = "windows_aarch64_msvc"
2015 | version = "0.34.0"
2016 | source = "registry+https://github.com/rust-lang/crates.io-index"
2017 | checksum = "17cffbe740121affb56fad0fc0e421804adf0ae00891205213b5cecd30db881d"
2018 |
2019 | [[package]]
2020 | name = "windows_i686_gnu"
2021 | version = "0.34.0"
2022 | source = "registry+https://github.com/rust-lang/crates.io-index"
2023 | checksum = "2564fde759adb79129d9b4f54be42b32c89970c18ebf93124ca8870a498688ed"
2024 |
2025 | [[package]]
2026 | name = "windows_i686_msvc"
2027 | version = "0.34.0"
2028 | source = "registry+https://github.com/rust-lang/crates.io-index"
2029 | checksum = "9cd9d32ba70453522332c14d38814bceeb747d80b3958676007acadd7e166956"
2030 |
2031 | [[package]]
2032 | name = "windows_x86_64_gnu"
2033 | version = "0.34.0"
2034 | source = "registry+https://github.com/rust-lang/crates.io-index"
2035 | checksum = "cfce6deae227ee8d356d19effc141a509cc503dfd1f850622ec4b0f84428e1f4"
2036 |
2037 | [[package]]
2038 | name = "windows_x86_64_msvc"
2039 | version = "0.34.0"
2040 | source = "registry+https://github.com/rust-lang/crates.io-index"
2041 | checksum = "d19538ccc21819d01deaf88d6a17eae6596a12e9aafdbb97916fb49896d89de9"
2042 |
2043 | [[package]]
2044 | name = "zstd"
2045 | version = "0.10.0+zstd.1.5.2"
2046 | source = "registry+https://github.com/rust-lang/crates.io-index"
2047 | checksum = "3b1365becbe415f3f0fcd024e2f7b45bacfb5bdd055f0dc113571394114e7bdd"
2048 | dependencies = [
2049 | "zstd-safe",
2050 | ]
2051 |
2052 | [[package]]
2053 | name = "zstd-safe"
2054 | version = "4.1.4+zstd.1.5.2"
2055 | source = "registry+https://github.com/rust-lang/crates.io-index"
2056 | checksum = "2f7cd17c9af1a4d6c24beb1cc54b17e2ef7b593dc92f19e9d9acad8b182bbaee"
2057 | dependencies = [
2058 | "libc",
2059 | "zstd-sys",
2060 | ]
2061 |
2062 | [[package]]
2063 | name = "zstd-sys"
2064 | version = "1.6.3+zstd.1.5.2"
2065 | source = "registry+https://github.com/rust-lang/crates.io-index"
2066 | checksum = "fc49afa5c8d634e75761feda8c592051e7eeb4683ba827211eb0d731d3402ea8"
2067 | dependencies = [
2068 | "cc",
2069 | "libc",
2070 | ]
2071 |
--------------------------------------------------------------------------------
/backend/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "backend"
3 | version = "1.1.1"
4 | edition = "2021"
5 |
6 | # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
7 |
8 | [dependencies]
9 | serde = { version = "1.0", features = ["derive"] }
10 | serde_json = "1.0"
11 |
12 | actix-rt = "2.6.0"
13 | actix-web = "4.0.0-rc.1"
14 | actix-cors = "0.6.0"
15 | actix-governor = "0.3.0"
16 |
17 | badge-maker = "0.2.1"
18 |
19 | sqlx = { version = "0.5.11", features = ["runtime-tokio-rustls", "postgres", "chrono"] }
20 |
21 | chrono = { version = "0.4.19", features = ["serde"] }
22 |
23 | nanoid = "0.4.0"
24 |
25 | [profile.release]
26 | codegen-units = 1
27 | debug = false
28 | incremental = false
29 | lto = true
30 | opt-level = 3
31 | panic = "abort"
32 | debug-assertions = false
33 |
34 | [[bin]]
35 | name = "zer0bin-bin"
36 | path = "src/main.rs"
37 |
--------------------------------------------------------------------------------
/backend/config.example.json:
--------------------------------------------------------------------------------
1 | {
2 | "server": {
3 | "backend_host": "127.0.0.1",
4 | "backend_port": 8000
5 | },
6 | "pastes": {
7 | "character_limit": 50000,
8 | "days_til_expiration": 30,
9 | "id_length": 6
10 | },
11 | "ratelimits": {
12 | "seconds_in_between_pastes": 2,
13 | "allowed_pastes_before_ratelimit": 5
14 | },
15 | "databases": {
16 | "postgres_uri": "postgres://postgres:postgres@localhost:5432/zer0bin"
17 | },
18 | "logging": {
19 | "on_post_paste": true,
20 | "on_get_paste": true
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/backend/migrations/000_single_view.sql:
--------------------------------------------------------------------------------
1 | ALTER TABLE pastes ADD column single_view BOOLEAN DEFAULT false;
2 |
--------------------------------------------------------------------------------
/backend/schema.sql:
--------------------------------------------------------------------------------
1 | CREATE TABLE IF NOT EXISTS pastes (
2 | "id" TEXT PRIMARY KEY,
3 | "content" TEXT NOT NULL,
4 | "views" BIGINT DEFAULT 0,
5 | "expires_at" TIMESTAMP WITHOUT TIME ZONE,
6 | "created_at" TIMESTAMP WITHOUT TIME ZONE DEFAULT(NOW() AT TIME ZONE 'utc')
7 | );
8 |
9 | CREATE OR REPLACE FUNCTION deleteExpiredPastes() RETURNS trigger AS $pastes_expire$ BEGIN
10 | DELETE FROM pastes
11 | WHERE "expires_at" IS NOT NULL
12 | AND "expires_at" < now() AT TIME ZONE 'utc';
13 | RETURN NEW;
14 | END;
15 | $pastes_expire$ LANGUAGE plpgsql;
16 |
17 | CREATE TRIGGER checkPastes BEFORE
18 | INSERT
19 | OR
20 | UPDATE ON pastes FOR STATEMENT EXECUTE PROCEDURE deleteExpiredPastes();
21 |
--------------------------------------------------------------------------------
/backend/src/config.rs:
--------------------------------------------------------------------------------
1 | use std::{fs::File, path::PathBuf};
2 |
3 | use serde::{Deserialize, Serialize};
4 |
5 | #[derive(Serialize, Deserialize, Clone)]
6 | pub struct Config {
7 | pub server: ServerConfig,
8 | pub pastes: PastesConfig,
9 | pub ratelimits: RatelimitsConifg,
10 | pub databases: DatabasesConfig,
11 | pub logging: LoggingConfig
12 | }
13 |
14 | #[derive(Serialize, Deserialize, Clone)]
15 | pub struct ServerConfig {
16 | pub backend_host: String,
17 | pub backend_port: u16,
18 | }
19 |
20 | #[derive(Serialize, Deserialize, Clone)]
21 | pub struct RatelimitsConifg {
22 | pub seconds_in_between_pastes: u64,
23 | pub allowed_pastes_before_ratelimit: u32,
24 | }
25 |
26 | #[derive(Serialize, Deserialize, Clone)]
27 | pub struct PastesConfig {
28 | pub character_limit: usize,
29 | pub days_til_expiration: i64,
30 | pub id_length: usize,
31 | }
32 |
33 | #[derive(Serialize, Deserialize, Clone)]
34 | pub struct DatabasesConfig {
35 | pub postgres_uri: String,
36 | }
37 |
38 | #[derive(Serialize, Deserialize, Clone)]
39 | pub struct LoggingConfig {
40 | pub on_post_paste: bool,
41 | pub on_get_paste: bool
42 | }
43 |
44 | pub fn load(path: PathBuf) -> Config {
45 | let file = File::open(path).expect("Failed to load config");
46 | serde_json::from_reader(file).unwrap()
47 | }
48 |
--------------------------------------------------------------------------------
/backend/src/main.rs:
--------------------------------------------------------------------------------
1 | mod config;
2 | mod models;
3 | mod routes;
4 |
5 | use std::{io, path::Path, path::PathBuf};
6 |
7 | use actix_cors::Cors;
8 | use actix_governor::{Governor, GovernorConfigBuilder};
9 | use actix_web::{
10 | web::{self, Data},
11 | App, HttpServer,
12 | };
13 | use config::Config;
14 |
15 | use sqlx::{migrate::Migrator, postgres::PgPoolOptions, PgPool};
16 |
17 | use crate::routes::{
18 | get_paste, get_raw_paste, get_stats, get_total_pastes_badge, get_version_badge, new_paste,
19 | };
20 |
21 | #[derive(Clone)]
22 | pub struct AppState {
23 | pub config: Config,
24 | pub pool: PgPool,
25 | }
26 |
27 | pub async fn migrations(pool: &PgPool) -> Result<(), sqlx::Error> {
28 | Migrator::new(Path::new("./migrations"))
29 | .await?
30 | .run(pool)
31 | .await?;
32 |
33 | Ok(())
34 | }
35 |
36 | #[actix_rt::main]
37 | async fn main() -> io::Result<()> {
38 | let config = config::load(PathBuf::from("config.json"));
39 |
40 | let db_uri = &config.databases.postgres_uri.to_string();
41 |
42 | let pool = PgPoolOptions::new()
43 | .max_connections(100)
44 | .connect(db_uri)
45 | .await
46 | .expect("Failed to connect to database");
47 |
48 | migrations(&pool).await.expect("Failed to run migrations");
49 |
50 | let address = format!(
51 | "{}:{}",
52 | config.server.backend_host, config.server.backend_port
53 | );
54 |
55 | let paste_governor = GovernorConfigBuilder::default()
56 | .per_second(config.ratelimits.seconds_in_between_pastes)
57 | .burst_size(config.ratelimits.allowed_pastes_before_ratelimit)
58 | .finish()
59 | .unwrap();
60 |
61 | let state = AppState { config, pool };
62 |
63 | println!("🚀 zer0bin is running on {address}");
64 |
65 | HttpServer::new(move || {
66 | let cors = Cors::default()
67 | .allow_any_header()
68 | .allow_any_method()
69 | .allow_any_origin()
70 | .send_wildcard()
71 | .max_age(3600);
72 |
73 | App::new()
74 | .wrap(cors)
75 | .app_data(Data::new(state.clone()))
76 | .service(get_stats)
77 | .service(
78 | web::scope("/p")
79 | .wrap(Governor::new(&paste_governor))
80 | .service(get_paste)
81 | .service(new_paste)
82 | .service(get_raw_paste),
83 | )
84 | .service(
85 | web::scope("/b")
86 | .service(get_version_badge)
87 | .service(get_total_pastes_badge),
88 | )
89 | })
90 | .bind(address)?
91 | .run()
92 | .await
93 | }
94 |
--------------------------------------------------------------------------------
/backend/src/models.rs:
--------------------------------------------------------------------------------
1 | use chrono::NaiveDateTime;
2 | use serde::{Deserialize, Serialize};
3 | use sqlx::FromRow;
4 |
5 | #[derive(FromRow)]
6 | pub struct Paste {
7 | pub id: String,
8 | pub content: String,
9 | pub views: i64,
10 | pub single_view: bool,
11 | pub expires_at: Option,
12 | }
13 |
14 | #[derive(Deserialize)]
15 | pub struct PartialPaste {
16 | pub content: String,
17 | pub single_view: bool
18 | }
19 |
20 | #[derive(Serialize)]
21 | pub struct ApiResponse {
22 | pub success: bool,
23 | pub data: T,
24 | }
25 |
26 | #[derive(Serialize)]
27 | pub struct NewPasteResponse {
28 | pub id: String,
29 | pub content: String,
30 | pub single_view: bool,
31 | }
32 |
33 | #[derive(Serialize)]
34 | pub struct GetPasteResponse {
35 | pub id: String,
36 | pub content: String,
37 | pub views: i64,
38 | pub single_view: bool,
39 | pub expires_at: Option,
40 | }
41 |
42 | #[derive(Serialize)]
43 | pub struct GetStatsResponse {
44 | pub count: i64,
45 | pub version: String,
46 | }
47 |
48 | #[derive(Serialize)]
49 | pub struct ApiError {
50 | pub message: String,
51 | }
52 |
--------------------------------------------------------------------------------
/backend/src/routes.rs:
--------------------------------------------------------------------------------
1 | use actix_web::{
2 | get, post,
3 | web::{self},
4 | HttpResponse, Responder,
5 | };
6 |
7 | use badge_maker::{BadgeBuilder, Style};
8 |
9 | use chrono::Duration;
10 | use nanoid::nanoid;
11 | use sqlx::{postgres::PgRow, types::chrono::Utc, Row};
12 |
13 | use crate::{
14 | models::{
15 | ApiError, ApiResponse, GetPasteResponse, GetStatsResponse, NewPasteResponse, PartialPaste,
16 | Paste,
17 | },
18 | AppState,
19 | };
20 |
21 | // Pastes
22 |
23 | #[get("/{id}")]
24 | pub async fn get_paste(state: web::Data, id: web::Path) -> impl Responder {
25 | let id = id.into_inner();
26 |
27 | let res: Result =
28 | sqlx::query_as::<_, Paste>(r#"SELECT * FROM pastes WHERE "id" = $1"#)
29 | .bind(id.clone())
30 | .fetch_one(&state.pool)
31 | .await;
32 |
33 | match res {
34 | Ok(p) => {
35 | // Only increment views if its not a single view paste
36 | if p.single_view {
37 | let _ = sqlx::query(r#"DELETE FROM pastes WHERE "id" = $1"#)
38 | .bind(id.clone())
39 | .execute(&state.pool)
40 | .await;
41 | } else {
42 | let _ = sqlx::query(r#"UPDATE pastes SET "views" = "views" + 1 WHERE "id" = $1"#)
43 | .bind(id.clone())
44 | .execute(&state.pool)
45 | .await;
46 | }
47 |
48 | if state.config.logging.on_get_paste {
49 | println!("[GET] id={} views={} single_view={}", id, p.views + 1, p.single_view);
50 | }
51 |
52 | HttpResponse::Ok().json(ApiResponse {
53 | success: true,
54 | data: GetPasteResponse {
55 | id: p.id,
56 | content: p.content,
57 | views: p.views + 1,
58 | single_view: p.single_view,
59 | expires_at: p.expires_at,
60 | },
61 | })
62 | }
63 | Err(e) => match e {
64 | sqlx::Error::RowNotFound => {
65 | return HttpResponse::InternalServerError().json(ApiResponse {
66 | success: false,
67 | data: ApiError {
68 | message: format!("Paste {id} wasnt found."),
69 | },
70 | });
71 | }
72 | _ => {
73 | eprintln!("Error occurred while getting paste: {:?}", e);
74 |
75 | HttpResponse::InternalServerError().json(ApiResponse {
76 | success: false,
77 | data: ApiError {
78 | message: "Unknown error occurred, please try again.".to_string(),
79 | },
80 | })
81 | }
82 | },
83 | }
84 | }
85 |
86 | #[get("/r/{id}")]
87 | pub async fn get_raw_paste(state: web::Data, id: web::Path) -> impl Responder {
88 | let id = id.into_inner();
89 |
90 | let res: Result =
91 | sqlx::query_as::<_, Paste>(r#"SELECT * FROM pastes WHERE "id" = $1"#)
92 | .bind(id.clone())
93 | .fetch_one(&state.pool)
94 | .await;
95 |
96 | match res {
97 | Ok(p) => {
98 | if p.single_view {
99 | let _ = sqlx::query(r#"DELETE FROM pastes WHERE "id" = $1"#)
100 | .bind(id.clone())
101 | .execute(&state.pool)
102 | .await;
103 | } else {
104 | let _ = sqlx::query(r#"UPDATE pastes SET "views" = "views" + 1 WHERE "id" = $1"#)
105 | .bind(id.clone())
106 | .execute(&state.pool)
107 | .await;
108 | }
109 |
110 | if state.config.logging.on_get_paste {
111 | println!("[GET] raw id={} views={} single_view={}", id, p.views + 1, p.single_view);
112 | }
113 |
114 | HttpResponse::Ok()
115 | .content_type("text/plain")
116 | .body(p.content)
117 | }
118 | Err(e) => match e {
119 | sqlx::Error::RowNotFound => {
120 | return HttpResponse::InternalServerError().json(ApiResponse {
121 | success: false,
122 | data: ApiError {
123 | message: format!("Paste {id} wasnt found."),
124 | },
125 | });
126 | }
127 | _ => {
128 | eprintln!("Error occurred while getting paste: {:?}", e);
129 |
130 | HttpResponse::InternalServerError().json(ApiResponse {
131 | success: false,
132 | data: ApiError {
133 | message: "Unknown error occurred, please try again.".to_string(),
134 | },
135 | })
136 | }
137 | },
138 | }
139 | }
140 |
141 | #[post("/n")]
142 | pub async fn new_paste(
143 | state: web::Data,
144 | data: web::Json,
145 | ) -> impl Responder {
146 | if data.content.is_empty() || data.content.len() > state.config.pastes.character_limit {
147 | let character_limit = state.config.pastes.character_limit;
148 |
149 | return HttpResponse::BadRequest().json(ApiResponse {
150 | success: false,
151 | data: ApiError {
152 | message: format!("Maximum file length exceeded, maximum is {character_limit} characters. Or the content is blank.."),
153 | },
154 | });
155 | }
156 |
157 | let length = state.config.pastes.id_length;
158 | let id = nanoid!(length);
159 |
160 | let expires_at = if state.config.pastes.days_til_expiration == -1 {
161 | None
162 | } else {
163 | Some(Utc::now() + Duration::days(state.config.pastes.days_til_expiration))
164 | };
165 |
166 | let content = data.content.clone();
167 | let single_view = data.single_view;
168 |
169 | let res =
170 | sqlx::query(r#"INSERT INTO pastes("id", "content", "single_view", "expires_at") VALUES ($1, $2, $3, $4)"#)
171 | .bind(id.clone())
172 | .bind(content.clone())
173 | .bind(single_view)
174 | .bind(expires_at)
175 | .execute(&state.pool)
176 | .await;
177 |
178 | match res {
179 | Ok(_) => {
180 | if state.config.logging.on_post_paste {
181 | println!("[POST] id={} length={} single_view={}", id, content.len(), single_view);
182 | }
183 | HttpResponse::Ok().json(ApiResponse {
184 | success: true,
185 | data: NewPasteResponse {
186 | id,
187 | content,
188 | single_view,
189 | },
190 | })
191 | }
192 | Err(e) => {
193 | eprintln!("Error occurred while creating paste: {:?}", e);
194 |
195 | HttpResponse::InternalServerError().json(ApiResponse {
196 | success: false,
197 | data: ApiError {
198 | message: "Unknown error occurred, please try again.".to_string(),
199 | },
200 | })
201 | }
202 | }
203 | }
204 |
205 | // Stats
206 |
207 | #[get("/s")]
208 | pub async fn get_stats(state: web::Data) -> impl Responder {
209 | let version = env!("CARGO_PKG_VERSION").to_string();
210 | // TODO: Maybe there's a less hacky way to do this..?
211 | let count: Result = sqlx::query(r#"SELECT COUNT(*) FROM pastes"#)
212 | .try_map(|row: PgRow| row.try_get::("count"))
213 | .fetch_one(&state.pool)
214 | .await;
215 |
216 | if let Err(e) = count {
217 | eprintln!("Error occurred while retrieving paste count: {:?}", e);
218 |
219 | return HttpResponse::InternalServerError().json(ApiResponse {
220 | success: false,
221 | data: ApiError {
222 | message: "Error occurred while retrieving paste count, please try again."
223 | .to_string(),
224 | },
225 | });
226 | }
227 |
228 | HttpResponse::Ok().json(ApiResponse {
229 | success: true,
230 | data: GetStatsResponse {
231 | count: count.unwrap(),
232 | version,
233 | },
234 | })
235 | }
236 |
237 | // Badges
238 |
239 | #[get("/v")]
240 | pub async fn get_version_badge() -> impl Responder {
241 | let version = env!("CARGO_PKG_VERSION").to_string();
242 |
243 | let badge = BadgeBuilder::new()
244 | .label("version")
245 | .message(&version)
246 | .color_parse("#31748f")
247 | .label_color_parse("#191724")
248 | .style(Style::FlatSquare)
249 | .build()
250 | .expect("Failed to build badge")
251 | .svg();
252 |
253 | HttpResponse::Ok().content_type("image/svg+xml").body(badge)
254 | }
255 |
256 | #[get("/t")]
257 | pub async fn get_total_pastes_badge(state: web::Data) -> impl Responder {
258 | let count: Result = sqlx::query(r#"SELECT COUNT(*) FROM pastes"#)
259 | .try_map(|row: PgRow| row.try_get::("count"))
260 | .fetch_one(&state.pool)
261 | .await;
262 |
263 | if let Err(e) = count {
264 | eprintln!("Error occurred while retrieving paste count: {:?}", e);
265 |
266 | return HttpResponse::InternalServerError().json(ApiResponse {
267 | success: false,
268 | data: ApiError {
269 | message: "Error occurred while retrieving paste count, please try again."
270 | .to_string(),
271 | },
272 | });
273 | }
274 |
275 | let badge = BadgeBuilder::new()
276 | .label("total pastes")
277 | .message(&count.unwrap().to_string())
278 | .color_parse("#ebbcba")
279 | .label_color_parse("#191724")
280 | .style(Style::FlatSquare)
281 | .build()
282 | .expect("Failed to build badge")
283 | .svg();
284 |
285 | HttpResponse::Ok().content_type("image/svg+xml").body(badge)
286 | }
287 |
--------------------------------------------------------------------------------
/example.nginx:
--------------------------------------------------------------------------------
1 | # replace `example.tld` with your domain
2 | # replace `/location/of/zer0bin` with the location of the zer0bin folder
3 | # comment out line 15 and uncomment line 16 if you have the nginx brotoli plugin
4 | # uncomment lines 51 and 52 if you have letsencrypt certs
5 |
6 | server {
7 | server_name example.tld;
8 | return 301 https://example.tld$request_uri;
9 | }
10 |
11 | server {
12 | listen 443;
13 | server_name example.tld;
14 |
15 | gzip_static on;
16 | # brotli on;
17 |
18 | root /location/of/zer0bin/frontend/dist;
19 |
20 | rewrite ^/(?!.*api)(?!.*\.).*$ /index.html;
21 |
22 | location / {
23 | index index.html;
24 | expires 30d;
25 | add_header Cache-Control "public, no-transform";
26 | }
27 |
28 | location ~ \.(css|js|html) {
29 | try_files $uri =404;
30 | expires 30d;
31 | add_header Cache-Control "public, no-transform";
32 | }
33 |
34 | location ^~ /.well-known/ {
35 | alias /var/www/.well-known/;
36 | }
37 |
38 | location /api/ {
39 | add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
40 | add_header 'Access-Control-Allow-Origin' '*';
41 | proxy_pass http://localhost:8000/;
42 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
43 | proxy_set_header Host $host;
44 | add_header Last-Modified $date_gmt;
45 | add_header Cache-Control 'no-store, no-cache';
46 | if_modified_since off;
47 | expires off;
48 | etag off;
49 | }
50 |
51 | # ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem;
52 | # ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem;
53 | }
54 |
--------------------------------------------------------------------------------
/frontend/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "useTabs": true,
3 | "trailingComma": "es5",
4 | "tabWidth": 4,
5 | "semi": false,
6 | "singleQuote": false
7 | }
--------------------------------------------------------------------------------
/frontend/.yarnrc.yml:
--------------------------------------------------------------------------------
1 | nodeLinker: node-modules
2 |
--------------------------------------------------------------------------------
/frontend/config.example.json:
--------------------------------------------------------------------------------
1 | {
2 | "api_url": "https://yourdomain.tld/api",
3 | "confetti_chance": "10"
4 | }
5 |
--------------------------------------------------------------------------------
/frontend/favicon.svg:
--------------------------------------------------------------------------------
1 |
2 |
19 |
21 |
25 |
28 |
31 |
34 |
35 |
37 |
41 |
42 |
50 |
54 |
59 |
63 |
68 |
73 |
74 |
76 |
80 |
84 |
85 |
96 |
98 |
102 |
106 |
107 |
108 |
126 |
133 |
138 |
145 |
146 |
151 |
154 |
160 |
163 |
168 |
173 |
178 |
183 |
188 |
193 |
194 |
195 |
196 |
--------------------------------------------------------------------------------
/frontend/fonts/CartographCF-Regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zer0bin-dev/zer0bin/832ccc3e887fe22f83530d369a1b34a228cfa070/frontend/fonts/CartographCF-Regular.woff2
--------------------------------------------------------------------------------
/frontend/fonts/CartographCF-RegularItalic.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zer0bin-dev/zer0bin/832ccc3e887fe22f83530d369a1b34a228cfa070/frontend/fonts/CartographCF-RegularItalic.woff2
--------------------------------------------------------------------------------
/frontend/fonts/FiraCode-VF.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/zer0bin-dev/zer0bin/832ccc3e887fe22f83530d369a1b34a228cfa070/frontend/fonts/FiraCode-VF.woff2
--------------------------------------------------------------------------------
/frontend/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/frontend/index.pug:
--------------------------------------------------------------------------------
1 | != '\n'
9 |
10 | html(lang='en')
11 | head
12 | meta(charset='UTF-8')
13 | meta(name='viewport' content='width=device-width, initial-scale=1.0')
14 | title zer0bin
15 | meta(name='theme-color' content='#90BDC9')
16 | meta(name='keywords' content='zerobin, zer0bin, paste, paste bin, pastebin, pastebin alternative, foss pastebin, open source pastebin, free pastebin, ghostbin, hastebin, pastebin.com, free pastebin online, paste online, github paste, github gist, github gist paste')
17 | meta(name='darkreader' content='NO-DARKREADER-PLUGIN')
18 | meta(name='title' content='zer0bin')
19 | meta(name='description' content='🖊 Just a place to paste')
20 | meta(property='og:type' content='website')
21 | meta(property='og:title' content='zer0bin')
22 | meta(property='og:description' content='🖊 Just a place to paste')
23 | meta(property='og:image' content='https://raw.githubusercontent.com/zer0bin-dev/.github/main/zer0bin.png')
24 | meta(property='twitter:title' content='zer0bin')
25 | meta(property='twitter:description' content='🖊 Just a place to paste')
26 | meta(property='twitter:image' content='https://raw.githubusercontent.com/zer0bin-dev/.github/main/zer0bin.png')
27 |
28 | body
29 | ul.noselect#messages
30 | .button-wrapper.noselect()
31 | a.logo.noselect(href='/') zer0bin
32 | .buttons.noselect
33 | button#save-button.btn(aria-label='Save')
34 | button#markdown-button.btn(aria-label='Markdown')
35 | button#single-view-button.btn(aria-label='Single View')
36 | //- .fireBody(style='visibility: hidden')
37 | //- - var parts = 20;
38 | //- - while (parts--) {
39 | //- .particle
40 | //- - }
41 | button#new-button.btn(aria-label='New paste')
42 | button#copy-button.btn(aria-label='Copy')
43 | button#share-button.btn(aria-label='Share')
44 | a(href='https://github.com/zer0bin-dev/zer0bin' aria-label='GitHub repo')
45 | button#github-button.btn(aria-label='GitHub')
46 | span.viewcounter.noselect#viewcounter-label(style='visibility: hidden; display: none') Views:
47 | span.viewcounter.noselect#viewcounter-count(style='visibility: hidden; display: none')
48 |
49 | .bottom-button-wrapper
50 | button#hide-button.btn(aria-label='Hide')
51 |
52 | .scrollbar-container
53 | .wrapper
54 | .line-numbers.noselect
55 | pre#code-view-pre(style='visibility: hidden')
56 | code#code-view
57 | textarea#text-area(spellcheck='false' autofocus='' name='value' aria-label='Paste input area' disabled='' style='visibility: hidden')
--------------------------------------------------------------------------------
/frontend/min/rosepine.min.css:
--------------------------------------------------------------------------------
1 | pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#191724}.hljs,.hljs-subst{color:#e0def4}.hljs-selector-tag{color:#9ccfd8}.hljs-selector-id{color:#c4a7e7;font-weight:700}.hljs-selector-attr,.hljs-selector-class{color:#c4a7e7}.hljs-property,.hljs-selector-pseudo{color:#ebbcba}.hljs-addition{background-color:rgba(156,207,216,.5)}.hljs-deletion{background-color:rgba(235,111,146,.5)}.hljs-built_in,.hljs-class,.hljs-type{color:#c4a7e7}.hljs-function,.hljs-function>.hljs-title,.hljs-title.hljs-function{color:#ebbcba}.hljs-keyword,.hljs-literal,.hljs-symbol{color:#9ccfd8}.hljs-number{color:#f6c177}.hljs-regexp{color:#f6c177}.hljs-string{color:#9ccfd8}.hljs-title{color:#c4a7e7}.hljs-params{color:#e0def4}.hljs-bullet{color:#9ccfd8}.hljs-code{color:#c4a7e7}.hljs-emphasis{font-style:italic}.hljs-formula{color:#c4a7e7}.hljs-strong{font-weight:700}.hljs-link:hover{text-decoration:underline}.hljs-comment,.hljs-quote{color:#6e6a86}.hljs-doctag{color:#c4a7e7}.hljs-meta,.hljs-meta .hljs-keyword{color:#31748f}.hljs-meta .hljs-string{color:#9ccfd8}.hljs-attr{color:#c4a7e7}.hljs-attribute{color:#e0def4}.hljs-name{color:#9ccfd8}.hljs-section{color:#ebbcba}.hljs-tag{color:#9ccfd8}.hljs-template-variable,.hljs-variable{color:#e0def4}.hljs-template-tag{color:#31748f}.language-abnf .hljs-attribute{color:#ebbcba}.language-abnf .hljs-symbol{color:#f6c177}.language-apache .hljs-attribute{color:#ebbcba}.language-apache .hljs-section{color:#9ccfd8}.language-arduino .hljs-built_in{color:#ebbcba}.language-aspectj .hljs-meta{color:#eb6f92}.language-aspectj>.hljs-title{color:#ebbcba}.language-bnf .hljs-attribute{color:#c4a7e7}.language-clojure .hljs-name{color:#ebbcba}.language-clojure .hljs-symbol{color:#f6c177}.language-coq .hljs-built_in{color:#ebbcba}.language-cpp .hljs-meta .hljs-string{color:#c4a7e7}.language-css .hljs-built_in{color:#ebbcba}.language-css .hljs-keyword{color:#eb6f92}.language-diff .hljs-meta,.language-ebnf .hljs-attribute{color:#c4a7e7}.language-glsl .hljs-built_in{color:#ebbcba}.language-groovy .hljs-meta:not(:first-child),.language-haxe .hljs-meta,.language-java .hljs-meta{color:#eb6f92}.language-ldif .hljs-attribute{color:#c4a7e7}.language-lisp .hljs-name,.language-lua .hljs-built_in,.language-moonscript .hljs-built_in,.language-nginx .hljs-attribute{color:#ebbcba}.language-nginx .hljs-section{color:#31748f}.language-pf .hljs-built_in,.language-processing .hljs-built_in{color:#ebbcba}.language-scss .hljs-keyword,.language-stylus .hljs-keyword{color:#9ccfd8}.language-swift .hljs-meta{color:#eb6f92}.language-vim .hljs-built_in{color:#ebbcba;font-style:italic}.language-yaml .hljs-meta{color:#eb6f92}
2 |
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "zer0bin",
3 | "source": "index.pug",
4 | "version": "1.1.1",
5 | "browserslist": "> 0.5%, last 2 versions, not dead",
6 | "license": "MIT",
7 | "scripts": {
8 | "dev": "vite",
9 | "build": "vite build",
10 | "preview": "vite preview"
11 | },
12 | "devDependencies": {
13 | "@types/core-js": "^2.5.5",
14 | "@types/node": "^17.0.21",
15 | "pug": "^3.0.2",
16 | "sass": "^1.50.0",
17 | "vite": "^2.9.0",
18 | "vite-plugin-compression": "^0.5.1",
19 | "vite-plugin-pug": "^0.3.1"
20 | },
21 | "description": "just a place to paste",
22 | "repository": "https://github.com/zer0bin-dev/zer0bin",
23 | "author": "Domterion, ThatOneCalculator",
24 | "dependencies": {
25 | "@ant-design/icons-svg": "^4.2.1",
26 | "highlight.js": "^11.5.0",
27 | "js-confetti": "^0.10.2",
28 | "marked": "^4.0.12",
29 | "no-darkreader": "^1.0.1",
30 | "smooth-scrollbar": "^8.7.4",
31 | "tippy.js": "^6.3.7"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/frontend/src/env.d.ts:
--------------------------------------------------------------------------------
1 | declare const API_URL: string
2 | declare const CONFETTI_CHANCE: string
3 |
--------------------------------------------------------------------------------
/frontend/src/icons.ts:
--------------------------------------------------------------------------------
1 | import {
2 | SaveOutlined,
3 | FileAddOutlined,
4 | GithubOutlined,
5 | CopyOutlined,
6 | ForkOutlined,
7 | HeartOutlined,
8 | StarOutlined,
9 | EyeOutlined,
10 | EyeInvisibleOutlined,
11 | FireOutlined,
12 | FileMarkdownOutlined,
13 | ShareAltOutlined,
14 | } from "@ant-design/icons-svg"
15 | import { renderIconDefinitionToSVGElement } from "@ant-design/icons-svg/es/helpers"
16 | import tippy from "tippy.js"
17 | import "../style/tooltip.scss"
18 | import "tippy.js/animations/scale.css"
19 | import { IconDefinition } from "@ant-design/icons-svg/lib/types"
20 |
21 | const saveButton = document.getElementById("save-button")
22 | const newButton = document.getElementById("new-button")
23 | const copyButton = document.getElementById("copy-button")
24 | const hideButton = document.getElementById("hide-button")
25 | const githubButton = document.getElementById("github-button")
26 | const shareButton = document.getElementById("share-button")
27 | const markdownButton = (
28 | document.getElementById("markdown-button")
29 | )
30 |
31 | const singleViewButton = (
32 | document.getElementById("single-view-button")
33 | )
34 |
35 | const extraSVGAttrs = {
36 | width: "1em",
37 | height: "1em",
38 | fill: "currentColor",
39 | }
40 | function renderIcon(elem: HTMLButtonElement, icon: IconDefinition) {
41 | elem.innerHTML += renderIconDefinitionToSVGElement(icon, {
42 | extraSVGAttrs: extraSVGAttrs,
43 | })
44 | }
45 |
46 | renderIcon(saveButton, SaveOutlined)
47 | renderIcon(newButton, FileAddOutlined)
48 | renderIcon(copyButton, CopyOutlined)
49 | renderIcon(githubButton, GithubOutlined)
50 | renderIcon(hideButton, EyeInvisibleOutlined)
51 | renderIcon(markdownButton, FileMarkdownOutlined)
52 | renderIcon(singleViewButton, FireOutlined)
53 | renderIcon(shareButton, ShareAltOutlined)
54 |
55 | tippy("#save-button", {
56 | content: "Save pasteCtrl + S ",
57 | placement: "bottom",
58 | animation: "scale",
59 | theme: "rosepine",
60 | allowHTML: true,
61 | })
62 |
63 | tippy("#markdown-button", {
64 | content: "Markdown modeCtrl + M ",
65 | placement: "bottom",
66 | animation: "scale",
67 | theme: "rosepine",
68 | allowHTML: true,
69 | })
70 |
71 | tippy("#single-view-button", {
72 | content:
73 | "Single viewDeletes after seen 👻 ",
74 | placement: "bottom",
75 | animation: "scale",
76 | theme: "rosepine",
77 | allowHTML: true,
78 | })
79 |
80 | tippy("#new-button", {
81 | content: "New pasteCtrl + N ",
82 | placement: "bottom",
83 | animation: "scale",
84 | theme: "rosepine",
85 | allowHTML: true,
86 | })
87 |
88 | tippy("#copy-button", {
89 | content: "Duplicate pasteCtrl + D ",
90 | placement: "bottom",
91 | animation: "scale",
92 | theme: "rosepine",
93 | allowHTML: true,
94 | })
95 |
96 | tippy("#share-button", {
97 | content: `Share pasteCopies URL `,
98 | placement: "top",
99 | animation: "scale",
100 | theme: "rosepine",
101 | allowHTML: true,
102 | })
103 |
104 | tippy("#github-button", {
105 | content: `GitHub
106 | ${renderIconDefinitionToSVGElement(StarOutlined, {
107 | extraSVGAttrs: extraSVGAttrs,
108 | })} ${renderIconDefinitionToSVGElement(ForkOutlined, {
109 | extraSVGAttrs: extraSVGAttrs,
110 | })} ${renderIconDefinitionToSVGElement(HeartOutlined, {
111 | extraSVGAttrs: extraSVGAttrs,
112 | })} `,
113 | placement: "bottom",
114 | animation: "scale",
115 | theme: "rosepine",
116 | allowHTML: true,
117 | })
118 |
119 | tippy("#hide-button", {
120 | content: "Hide the button pane",
121 | placement: "top",
122 | animation: "scale",
123 | theme: "rosepine",
124 | allowHTML: true,
125 | })
126 |
127 | const observer = new MutationObserver(callback)
128 |
129 | function callback() {
130 | let theme = ""
131 |
132 | if (window.location.pathname == "/") {
133 | theme = "rosepine"
134 | } else {
135 | theme = "rosepine-extended"
136 | }
137 |
138 | document.querySelectorAll("button").forEach(function (btn) {
139 | //@ts-ignore
140 | btn._tippy.setProps({ theme: theme })
141 | })
142 | }
143 |
144 | observer.observe(document.getElementById("code-view-pre"), {
145 | attributes: true,
146 | })
147 |
148 | export function toggleHiddenIcon(hidden: boolean) {
149 | if (!hidden) {
150 | hideButton.innerHTML = renderIconDefinitionToSVGElement(
151 | EyeInvisibleOutlined,
152 | {
153 | extraSVGAttrs: extraSVGAttrs,
154 | }
155 | )
156 | } else {
157 | hideButton.innerHTML = renderIconDefinitionToSVGElement(EyeOutlined, {
158 | extraSVGAttrs: extraSVGAttrs,
159 | })
160 | }
161 | }
162 |
--------------------------------------------------------------------------------
/frontend/src/index.ts:
--------------------------------------------------------------------------------
1 | import "no-darkreader"
2 |
3 | import { marked } from "marked"
4 | import JSConfetti from "js-confetti"
5 | import Scrollbar from "smooth-scrollbar"
6 |
7 | import "./icons"
8 | import hljs from "highlight.js/lib/common"
9 | // import hljs from "../min/highlight.min"
10 |
11 | import "../min/rosepine.min.css"
12 | import { toggleHiddenIcon } from "./icons"
13 |
14 | let rawContent = ""
15 | let buttonPaneHidden = false
16 | let isMarkdown = false
17 | let singleView = false
18 |
19 | const jsConfetti = new JSConfetti()
20 |
21 | const lineNumbers = document.querySelector(".line-numbers")
22 | const wrapper = document.querySelector(".wrapper")
23 | const buttonWrapper = document.querySelector(".button-wrapper")
24 | const editor = document.getElementById("text-area")
25 | const codeViewPre = document.getElementById("code-view-pre")
26 | const codeView = document.getElementById("code-view")
27 | const messages = document.getElementById("messages")
28 | const viewCounterLabel = (
29 | document.getElementById("viewcounter-label")
30 | )
31 | const viewCounter = (
32 | document.getElementById("viewcounter-count")
33 | )
34 | const saveButton = document.getElementById("save-button")
35 | const newButton = document.getElementById("new-button")
36 | const copyButton = document.getElementById("copy-button")
37 | const hideButton = document.getElementById("hide-button")
38 | const shareButton = document.getElementById("share-button")
39 | const markdownButton = (
40 | document.getElementById("markdown-button")
41 | )
42 | const singleViewButton = (
43 | document.getElementById("single-view-button")
44 | )
45 |
46 | function hide(element: HTMLElement) {
47 | element.style.visibility = "hidden"
48 | element.style.opacity = "0"
49 | }
50 |
51 | function show(element: HTMLElement) {
52 | element.style.visibility = "visible"
53 | element.style.opacity = "1"
54 | }
55 |
56 | function disable(element: HTMLButtonElement) {
57 | element.disabled = true
58 | }
59 |
60 | function enable(element: HTMLButtonElement) {
61 | element.disabled = false
62 | }
63 |
64 | async function postPaste(content: string, callback: Function) {
65 | const payload = { content, single_view: singleView }
66 | await fetch(`${API_URL}/p/n`, {
67 | method: "POST",
68 | headers: {
69 | "Content-Type": "application/json",
70 | },
71 | body: JSON.stringify(payload),
72 | })
73 | .then((response) => response.json())
74 | .then((data) => {
75 | if (data["success"]) {
76 | callback(null, data)
77 | return
78 | }
79 |
80 | callback(data || { data: { message: "An unkown error occured!" } })
81 | })
82 | .catch(() => {
83 | callback({
84 | data: { message: "An API error occurred, please try again." },
85 | })
86 | })
87 | }
88 |
89 | async function getPaste(id: string, callback: Function) {
90 | await fetch(`${API_URL}/p/${id}`, {
91 | method: "GET",
92 | headers: {
93 | "Content-Type": "application/json",
94 | },
95 | referrerPolicy: "no-referrer",
96 | })
97 | .then((response) => response.json())
98 | .then((data) => {
99 | if (data["success"]) {
100 | callback(null, data)
101 | return
102 | }
103 | callback(data || { data: { message: "An unkown error occured!" } })
104 | })
105 | .catch(() => {
106 | callback({
107 | data: { message: "An API error occurred, please try again." },
108 | })
109 | })
110 | }
111 |
112 | function newPaste() {
113 | Scrollbar.destroyAll()
114 |
115 | lineNumbers.innerHTML = ">"
116 |
117 | enable(saveButton)
118 | disable(newButton)
119 | disable(copyButton)
120 | disable(shareButton)
121 | enable(singleViewButton)
122 |
123 | editor.value = ""
124 | rawContent = ""
125 |
126 | wrapper.classList.add("text-area-proper")
127 | show(editor)
128 | editor.disabled = false
129 | hide(codeViewPre)
130 | hide(viewCounterLabel)
131 | hide(viewCounter)
132 | viewCounterLabel.style.display = "none"
133 | viewCounter.style.display = "none"
134 | }
135 |
136 | function addMessage(message: string) {
137 | let msg = document.createElement("li")
138 | msg.innerHTML = message
139 | messages.insertBefore(msg, messages.firstChild)
140 |
141 | setTimeout(function () {
142 | msg.classList.add("fadeOut"),
143 | function () {
144 | msg.remove()
145 | }
146 | }, 3000)
147 | }
148 |
149 | function viewPaste(content: string, views: string, singleView: boolean) {
150 | lineNumbers.innerHTML = ""
151 | if (
152 | content.startsWith("---") ||
153 | content.startsWith("md ") ||
154 | content.startsWith("md\n")
155 | ) {
156 | codeView.innerHTML = marked.parse(content.substring(3))
157 | } else {
158 | for (let i = 1; i <= content.split("\n").length; i++) {
159 | lineNumbers.innerHTML = lineNumbers.innerHTML + `${i} `
160 | }
161 | codeView.innerHTML = hljs.highlightAuto(content).value
162 | }
163 |
164 | if (singleView) {
165 | show(singleViewButton.firstElementChild as HTMLElement)
166 | singleViewButton.lastElementChild.classList.add("fire")
167 | addMessage("This is a single-view paste!")
168 | }
169 |
170 | enable(shareButton)
171 | shareButton.addEventListener("click", function () {
172 | const url = window.location.toString()
173 | if (navigator.canShare) {
174 | navigator.share({
175 | title: "zer0bin paste",
176 | url: url,
177 | })
178 | } else {
179 | navigator.clipboard.writeText(url)
180 | addMessage("Copied URL to clipboard!")
181 | }
182 | })
183 |
184 | disable(saveButton)
185 | disable(markdownButton)
186 | enable(newButton)
187 | enable(copyButton)
188 | disable(singleViewButton)
189 |
190 | hide(editor)
191 | show(codeViewPre)
192 | show(viewCounterLabel)
193 | show(viewCounter)
194 | viewCounterLabel.style.display = null
195 | viewCounter.style.display = null
196 |
197 | viewCounter.textContent = views
198 |
199 | try {
200 | wrapper.classList.remove("text-area-proper")
201 | } catch (error) {}
202 |
203 | Scrollbar.init(document.querySelector(".scrollbar-container"))
204 | }
205 |
206 | async function savePaste() {
207 | if (editor.value === "") {
208 | return
209 | }
210 | const val: string = editor.value?.toString()!
211 |
212 | await postPaste(val, function (err, res) {
213 | if (err) {
214 | addMessage(err["data"]["message"])
215 | } else {
216 | window.history.pushState(null, "", `/${res["data"]["id"]}`)
217 |
218 | rawContent = res["data"]["content"]
219 | viewPaste(rawContent, "0", res["data"]["single_view"])
220 |
221 | const rand = Math.floor(
222 | Math.random() * parseInt(CONFETTI_CHANCE ?? "10") * 6
223 | )
224 |
225 | if (rand < 5) {
226 | jsConfetti.addConfetti({
227 | confettiColors: [
228 | "#eb6f92",
229 | "#f6c177",
230 | "#ebbcba",
231 | "#31748f",
232 | "#9ccfd8",
233 | "#c4a7e7",
234 | ],
235 | })
236 | } else if (rand === 5) {
237 | jsConfetti.addConfetti({
238 | emojis: ["🦀"],
239 | })
240 | } else if (rand === 6) {
241 | jsConfetti.addConfetti({
242 | emojis: ["🐈", "🧶", "📦"],
243 | })
244 | }
245 | }
246 | })
247 | }
248 |
249 | async function duplicatePaste() {
250 | const content = rawContent
251 | window.history.pushState(null, "", "/")
252 | newPaste()
253 |
254 | rawContent = content
255 | editor.value = content
256 | }
257 |
258 | function toggleMarkdown() {
259 | let val = editor.value
260 | markdownButton.lastElementChild.classList.toggle("markdown")
261 | if (isMarkdown) {
262 | isMarkdown = false
263 | val = val.substring(val.indexOf("\n") + 1)
264 | } else {
265 | isMarkdown = true
266 | val = `---\n${val}`
267 | }
268 | }
269 |
270 | saveButton.addEventListener("click", async function () {
271 | await savePaste()
272 | })
273 |
274 | document.addEventListener("keydown", (e) => {
275 | if (e.ctrlKey && e.code === "KeyS") {
276 | e.preventDefault()
277 | savePaste()
278 | } else if (e.ctrlKey && e.code === "KeyN") {
279 | e.preventDefault()
280 | newPaste()
281 | } else if (e.ctrlKey && e.code === "KeyD") {
282 | e.preventDefault()
283 | duplicatePaste()
284 | } else if (e.ctrlKey && e.code === "KeyM") {
285 | e.preventDefault()
286 | toggleMarkdown()
287 | }
288 | })
289 |
290 | editor.addEventListener(
291 | "keydown",
292 | function (e: KeyboardEvent) {
293 | if (e.code == "Tab") {
294 | e.preventDefault()
295 |
296 | let start: number = this.selectionStart
297 | let end: number = this.selectionEnd
298 |
299 | this.value =
300 | this.value.substring(0, start) +
301 | "\t" +
302 | this.value.substring(end)
303 |
304 | this.selectionStart = this.selectionEnd = start + 1
305 | }
306 | },
307 | false
308 | )
309 |
310 | copyButton.addEventListener("click", async function () {
311 | await duplicatePaste()
312 | })
313 |
314 | newButton.addEventListener("click", function () {
315 | window.location.href = "/"
316 | })
317 |
318 | hideButton.addEventListener("click", function () {
319 | if (!buttonPaneHidden) {
320 | buttonPaneHidden = true
321 | hide(buttonWrapper)
322 | } else {
323 | buttonPaneHidden = false
324 | show(buttonWrapper)
325 | }
326 |
327 | toggleHiddenIcon(buttonPaneHidden)
328 | })
329 |
330 | markdownButton.addEventListener("click", function () {
331 | toggleMarkdown()
332 | })
333 |
334 | singleViewButton.addEventListener("click", function () {
335 | singleViewButton.lastElementChild.classList.toggle("fire")
336 | if (singleView) {
337 | singleView = false
338 | hide(singleViewButton.firstElementChild as HTMLElement)
339 | } else {
340 | singleView = true
341 | show(singleViewButton.firstElementChild as HTMLElement)
342 | }
343 | })
344 |
345 | async function handlePopstate() {
346 | const path = window.location.pathname
347 |
348 | if (path == "/") {
349 | newPaste()
350 | } else {
351 | const split = path.split("/")
352 | const id = split[split.length - 1]
353 |
354 | await getPaste(id, function (err, res) {
355 | if (err) {
356 | window.history.pushState(null, "", `/`)
357 | newPaste()
358 | } else {
359 | rawContent = res["data"]["content"]
360 | viewPaste(
361 | rawContent,
362 | res["data"]["views"].toString(),
363 | res["data"]["single_view"]
364 | )
365 | }
366 | })
367 | }
368 | }
369 |
370 | window.addEventListener("popstate", async () => {
371 | await handlePopstate()
372 | })
373 |
374 | document.addEventListener(
375 | "DOMContentLoaded",
376 | async () => {
377 | await handlePopstate()
378 | },
379 | false
380 | )
381 |
--------------------------------------------------------------------------------
/frontend/src/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */
4 |
5 | /* Projects */
6 | // "incremental": true, /* Enable incremental compilation */
7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
8 | // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */
9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */
10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
12 |
13 | /* Language and Environment */
14 | "target": "es5" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
16 | // "jsx": "preserve", /* Specify what JSX code is generated. */
17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */
18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */
20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */
22 | // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */
23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
25 |
26 | /* Modules */
27 | "module": "esnext" /* Specify what module code is generated. */,
28 | // "rootDir": "./", /* Specify the root folder within your source files. */
29 | "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */,
30 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
31 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
32 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
33 | // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */
34 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */
35 | "allowUmdGlobalAccess": true /* Allow accessing UMD globals from modules. */,
36 | "resolveJsonModule": true /* Enable importing .json files */,
37 | // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */
38 |
39 | /* JavaScript Support */
40 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */
41 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
42 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */
43 |
44 | /* Emit */
45 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
46 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */
47 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
48 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */
49 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */
50 | // "outDir": "./", /* Specify an output folder for all emitted files. */
51 | // "removeComments": true, /* Disable emitting comments. */
52 | // "noEmit": true, /* Disable emitting files from a compilation. */
53 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
54 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */
55 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
56 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
57 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
58 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
59 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
60 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
61 | // "newLine": "crlf", /* Set the newline character for emitting files. */
62 | // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */
63 | // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */
64 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
65 | // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */
66 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */
67 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
68 |
69 | /* Interop Constraints */
70 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
71 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
72 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */,
73 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
74 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */,
75 |
76 | /* Type Checking */
77 | "strict": false /* Enable all strict type-checking options. */,
78 | "noImplicitAny": false /* Enable error reporting for expressions and declarations with an implied `any` type.. */,
79 | // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
80 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
81 | // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
82 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
83 | // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */
84 | // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */
85 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
86 | // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */
87 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */
88 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
89 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
90 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
91 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
92 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
93 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */
94 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
95 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
96 |
97 | /* Completeness */
98 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
99 | "skipLibCheck": true /* Skip type checking all .d.ts files. */
100 | }
101 | }
102 |
--------------------------------------------------------------------------------
/frontend/style/font-fira.scss:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: "Cartograph CF";
3 | src: url("../fonts/FiraCode-VF.woff2") format("woff2");
4 | font-weight: normal;
5 | font-style: normal;
6 | font-display: swap;
7 | }
8 |
--------------------------------------------------------------------------------
/frontend/style/font.scss:
--------------------------------------------------------------------------------
1 | @font-face {
2 | font-family: "Cartograph CF";
3 | src: url("../fonts/CartographCF-Regular.woff2") format("woff2");
4 | font-weight: normal;
5 | font-style: normal;
6 | font-display: swap;
7 | }
8 | @font-face {
9 | font-family: "Cartograph CF";
10 | src: url("../fonts/CartographCF-RegularItalic.woff2") format("woff2");
11 | font-weight: normal;
12 | font-style: italic;
13 | font-display: swap;
14 | }
15 |
--------------------------------------------------------------------------------
/frontend/style/style.scss:
--------------------------------------------------------------------------------
1 | $love: #eb6f92;
2 | $gold: #f6c177;
3 | $rose: #ebbcba;
4 | $pine: #31748f;
5 | $foam: #9ccfd8;
6 | $iris: #c4a7e7;
7 | $text: #e0def4;
8 | $subtle: #908caa;
9 | $muted: #6e6a86;
10 | $highlight: #403d52;
11 | $bg_base: #191724;
12 | $bg_surface: #1f1d2e;
13 | $bg_trans: rgba(31, 29, 46, 0.8);
14 | $font-mono: "Cartograph CF", ui-monospace, SFMono-Regular, Menlo, Monaco,
15 | Consolas, "Liberation Mono", "Courier New", monospace;
16 |
17 | @import "./font.scss";
18 |
19 | @keyframes rainbow {
20 | 0%,
21 | 100% {
22 | background-position: 0 0;
23 | }
24 | 50% {
25 | background-position: 100% 0;
26 | }
27 | }
28 | .fadeOut {
29 | visibility: hidden;
30 | opacity: 0;
31 | transition: visibility 0s 3s, opacity 2s linear;
32 | }
33 | body {
34 | height: 100%;
35 | background-color: $bg_base;
36 | margin: 0;
37 | }
38 | html {
39 | height: 100%;
40 | }
41 | pre {
42 | margin: 0;
43 | }
44 | @mixin selection {
45 | ::-moz-selection {
46 | @content;
47 | }
48 | ::selection {
49 | @content;
50 | }
51 | }
52 | @include selection {
53 | color: $text;
54 | background: $highlight;
55 | }
56 | .noselect {
57 | user-select: none;
58 | -webkit-user-select: none;
59 | -khtml-user-select: none;
60 | -moz-user-select: none;
61 | -ms-user-select: none;
62 | }
63 | .wrapper .scroll-content {
64 | display: flex;
65 | }
66 | .scrollbar-container {
67 | height: 100%;
68 | }
69 | .wrapper {
70 | display: flex;
71 | padding: 1rem 0.5rem;
72 | font-size: 1rem;
73 | }
74 | .text-area-proper {
75 | height: calc(100% - 2rem);
76 | }
77 | .line-numbers {
78 | color: $subtle;
79 | font-family: $font-mono;
80 | text-align: end;
81 | user-select: none;
82 | font-size: 15px;
83 | padding-right: 11px;
84 | line-height: 1.5em;
85 | }
86 | #code-view-pre {
87 | font-family: $font-mono;
88 | padding-top: 0;
89 | padding-bottom: 0;
90 | font-size: 15px;
91 | -webkit-text-size-adjust: none;
92 | line-height: 1.5em;
93 | }
94 | #code-view {
95 | font-family: $font-mono;
96 | padding-top: 0;
97 | padding-bottom: 0;
98 | line-height: 1.5em;
99 | }
100 | .viewcounter {
101 | font-size: 12px;
102 | font-family: $font-mono;
103 | margin-top: 0px;
104 | margin-bottom: 0px;
105 | }
106 | #viewcounter-label {
107 | color: $subtle;
108 | }
109 | #viewcounter-count {
110 | color: $rose;
111 | }
112 | code {
113 | color: $text;
114 | }
115 | textarea {
116 | background-color: transparent;
117 | resize: none;
118 | width: 100%;
119 | height: 100%;
120 | padding: 0;
121 | margin: 0;
122 | border: none;
123 | outline: 0;
124 | color: $text;
125 | font-family: $font-mono;
126 | font-size: 15px;
127 | }
128 | .button-wrapper {
129 | position: fixed !important;
130 | top: 0;
131 | right: 0;
132 | padding: 0.7rem 0.7rem 0.5rem 0.7rem;
133 | background-color: $bg_surface;
134 | border-bottom-left-radius: 10px;
135 | z-index: 10;
136 | transition: opacity 0.2s, visibility 0.2s;
137 | }
138 | .buttons {
139 | display: flex;
140 | > * {
141 | + {
142 | * {
143 | padding: 0.1rem 0.1rem 0.1rem 0.1rem;
144 | }
145 | }
146 | }
147 | }
148 | a {
149 | color: $pine;
150 | &:visited {
151 | color: $iris;
152 | }
153 | &:hover {
154 | &:not(.logo) {
155 | color: $foam;
156 | }
157 | }
158 | }
159 | .btn {
160 | cursor: pointer;
161 | background: 0 0;
162 | color: $foam;
163 | padding: 5px 5px 5px 5px;
164 | font-size: 1rem;
165 | border: none;
166 | transition: background-color 0.2s ease-in-out;
167 | display: inline-block;
168 | text-decoration: none;
169 | &:hover {
170 | color: $text;
171 | }
172 | &:disabled {
173 | color: $muted;
174 | }
175 | transition: all 0.2s ease-in;
176 | }
177 | .btn[disabled] {
178 | color: $muted;
179 | cursor: auto;
180 | }
181 | .bottom-button-wrapper {
182 | position: fixed !important;
183 | bottom: 0;
184 | right: 0;
185 | padding: 1rem 1rem 0.5rem 1rem;
186 | z-index: 10;
187 |
188 | .btn {
189 | color: $muted;
190 | &:hover {
191 | color: $gold;
192 | }
193 | }
194 | }
195 | // #share-button {
196 | // position: fixed !important;
197 | // bottom: 0;
198 | // left: 0;
199 | // z-index: 10;
200 | // color: $muted;
201 | // &:hover {
202 | // color: $rose;
203 | // }
204 | // padding: 10px;
205 | // }
206 | .keybind {
207 | color: $subtle;
208 | font-size: 11px;
209 | font-family: $font-mono;
210 | }
211 | .logo {
212 | font-size: 1.8rem;
213 | font-weight: 700;
214 | text-align: center;
215 | text-decoration: none;
216 | width: 100%;
217 | font-family: $font-mono;
218 | display: inline-block;
219 | background: linear-gradient(
220 | to right,
221 | $love,
222 | $gold,
223 | $rose,
224 | $pine,
225 | $foam,
226 | $iris
227 | );
228 | -webkit-background-clip: text;
229 | background-clip: text;
230 | color: transparent;
231 | animation: rainbow 120s linear infinite;
232 | background-size: 400% 100%;
233 | &:hover {
234 | animation: rainbow 3s ease infinite !important;
235 | }
236 | }
237 | .markdown {
238 | color: $iris;
239 | }
240 | .fire {
241 | color: $love;
242 | }
243 | // $dur: 1s;
244 | // $blur: 0.02em;
245 | // $fireRad: 3em;
246 | // $parts: 20;
247 | // $partSize: 5em;
248 | // .fireBody {
249 | // font-size: 3px;
250 | // filter: blur($blur);
251 | // -webkit-filter: blur($blur);
252 | // margin: 2em auto 0 auto;
253 | // position: absolute;
254 | // width: 6em;
255 | // height: 5em;
256 | // z-index: 0;
257 | // opacity: 0.5;
258 | // }
259 | // .particle {
260 | // animation: rise $dur ease-in infinite;
261 | // background-image: radial-gradient($love 100%, $love 100%);
262 | // border-radius: 50%;
263 | // mix-blend-mode: screen;
264 | // opacity: 0;
265 | // position: absolute;
266 | // bottom: 0;
267 | // width: $partSize;
268 | // height: $partSize;
269 | // @for $p from 1 through $parts {
270 | // &:nth-of-type(#{$p}) {
271 | // animation-delay: $dur * random();
272 | // left: calc((100% - #{$partSize}) * calc(($p - 1) / $parts));
273 | // }
274 | // }
275 | // }
276 | // @keyframes rise {
277 | // from {
278 | // opacity: 0;
279 | // transform: translateY(0) scale(1);
280 | // }
281 | // 25% {
282 | // opacity: 1;
283 | // }
284 | // to {
285 | // opacity: 0;
286 | // transform: translateY(-10em) scale(0);
287 | // }
288 | // }
289 | #messages {
290 | position: absolute;
291 | top: 0;
292 | right: 168px;
293 | z-index: 1000;
294 | padding: 0;
295 | margin: 0;
296 | list-style: none;
297 | width: 400px;
298 | li {
299 | background-color: $bg_trans;
300 | font-size: 13px;
301 | font-family: $font-mono;
302 | color: $text;
303 | padding: 7px;
304 | }
305 | }
306 | @media only screen and (hover: none) and (pointer: coarse) {
307 | .button-wrapper {
308 | opacity: 0.8;
309 | }
310 | }
311 |
--------------------------------------------------------------------------------
/frontend/style/tooltip.scss:
--------------------------------------------------------------------------------
1 | $text: #e0def4;
2 | $bg: #26233a;
3 | $font-mono: "Cartograph CF", ui-monospace, SFMono-Regular, Menlo, Monaco,
4 | Consolas, "Liberation Mono", "Courier New", monospace;
5 |
6 | @import "./font.scss";
7 |
8 | .rosepine-parent {
9 | color: $text;
10 | background-color: $bg;
11 | opacity: 0.8;
12 | padding: 10px;
13 | font-family: $font-mono;
14 | font-size: 13px;
15 | border-radius: 10px;
16 | > .tippy-backdrop {
17 | background-color: $bg;
18 | }
19 | > .tippy-svg-arrow {
20 | fill: $bg;
21 | }
22 | }
23 | .tippy-box[data-theme~="rosepine"] {
24 | @extend .rosepine-parent;
25 | margin-top: 0.3rem;
26 | }
27 | .tippy-box[data-theme~="rosepine-extended"] {
28 | @extend .rosepine-parent;
29 | margin-top: 2rem;
30 | }
31 |
--------------------------------------------------------------------------------
/frontend/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig, loadEnv } from "vite"
2 | import pugPlugin from "vite-plugin-pug"
3 | import viteCompression from "vite-plugin-compression"
4 | import { createRequire } from "module"
5 |
6 | export default defineConfig(async ({ mode }) => {
7 | let config: any
8 | const env = loadEnv(mode, process.cwd(), "")
9 |
10 | try {
11 | // @ts-ignore
12 |
13 | // lazy hack so vite doesn't emit:
14 | // [rollup-plugin-dynamic-import-variables] Unexpected token (46:55)
15 | // file: zer0bin/frontend/src/index.ts:46:55
16 | // error during build:
17 | // SyntaxError: Unexpected token (46:55)
18 |
19 | const _config = await import("./config.json")
20 | config = {
21 | api_url: JSON.stringify(_config.api_url),
22 | confetti_chance: JSON.stringify(_config.confetti_chance),
23 | }
24 | } catch (e) {
25 | config = {
26 | api_url: JSON.stringify(env.ZEROBIN_API_URL ?? env.API_URL),
27 | confetti_chance: JSON.stringify(
28 | env.ZEROBIN_CONFETTI_CHANCE ?? env.CONFETTI_CHANCE
29 | ),
30 | }
31 | }
32 |
33 | return {
34 | plugins: [pugPlugin(), viteCompression()],
35 | define: {
36 | API_URL: config.api_url,
37 | CONFETTI_CHANCE: config.confetti_chance,
38 | },
39 | }
40 | })
41 |
--------------------------------------------------------------------------------
/frontend/yarn.lock:
--------------------------------------------------------------------------------
1 | # This file is generated by running "yarn install" inside your project.
2 | # Manual changes might be lost - proceed with caution!
3 |
4 | __metadata:
5 | version: 6
6 | cacheKey: 8
7 |
8 | "@ant-design/icons-svg@npm:^4.2.1":
9 | version: 4.2.1
10 | resolution: "@ant-design/icons-svg@npm:4.2.1"
11 | checksum: c1fa1bbeb0c58209e2c5d49ce001543823ae2d8326e1c7aafb992deac7aaa901a44f9a16151ad919d2628dbe3d783b325ed2b9440436002225801332323296d4
12 | languageName: node
13 | linkType: hard
14 |
15 | "@babel/helper-validator-identifier@npm:^7.16.7":
16 | version: 7.16.7
17 | resolution: "@babel/helper-validator-identifier@npm:7.16.7"
18 | checksum: dbb3db9d184343152520a209b5684f5e0ed416109cde82b428ca9c759c29b10c7450657785a8b5c5256aa74acc6da491c1f0cf6b784939f7931ef82982051b69
19 | languageName: node
20 | linkType: hard
21 |
22 | "@babel/parser@npm:^7.6.0, @babel/parser@npm:^7.9.6":
23 | version: 7.17.9
24 | resolution: "@babel/parser@npm:7.17.9"
25 | bin:
26 | parser: ./bin/babel-parser.js
27 | checksum: ea59c985ebfae7c0299c8ea63ed34903202f51665db8d59c55b4366e20270b74d7367a2c211fdd2db20f25750df89adcc85ab6c8692061c6459a88efb79f43e6
28 | languageName: node
29 | linkType: hard
30 |
31 | "@babel/types@npm:^7.6.1, @babel/types@npm:^7.8.3, @babel/types@npm:^7.9.6":
32 | version: 7.17.0
33 | resolution: "@babel/types@npm:7.17.0"
34 | dependencies:
35 | "@babel/helper-validator-identifier": ^7.16.7
36 | to-fast-properties: ^2.0.0
37 | checksum: 12e5a287986fe557188e87b2c5202223f1dc83d9239a196ab936fdb9f8c1eb0be717ff19f934b5fad4e29a75586d5798f74bed209bccea1c20376b9952056f0e
38 | languageName: node
39 | linkType: hard
40 |
41 | "@gar/promisify@npm:^1.1.3":
42 | version: 1.1.3
43 | resolution: "@gar/promisify@npm:1.1.3"
44 | checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1
45 | languageName: node
46 | linkType: hard
47 |
48 | "@npmcli/fs@npm:^2.1.0":
49 | version: 2.1.0
50 | resolution: "@npmcli/fs@npm:2.1.0"
51 | dependencies:
52 | "@gar/promisify": ^1.1.3
53 | semver: ^7.3.5
54 | checksum: 6ec6d678af6da49f9dac50cd882d7f661934dd278972ffbaacde40d9eaa2871292d634000a0cca9510f6fc29855fbd4af433e1adbff90a524ec3eaf140f1219b
55 | languageName: node
56 | linkType: hard
57 |
58 | "@npmcli/move-file@npm:^1.1.2":
59 | version: 1.1.2
60 | resolution: "@npmcli/move-file@npm:1.1.2"
61 | dependencies:
62 | mkdirp: ^1.0.4
63 | rimraf: ^3.0.2
64 | checksum: c96381d4a37448ea280951e46233f7e541058cf57a57d4094dd4bdcaae43fa5872b5f2eb6bfb004591a68e29c5877abe3cdc210cb3588cbf20ab2877f31a7de7
65 | languageName: node
66 | linkType: hard
67 |
68 | "@popperjs/core@npm:^2.9.0":
69 | version: 2.11.4
70 | resolution: "@popperjs/core@npm:2.11.4"
71 | checksum: 36168d274aa164368a50aef2e7b2f858e1b9145d9250af9dc1315ff719d874a367177760f8285efb75c8cf48267194a50e7dc9cdb41bf0b1958c38805c13564c
72 | languageName: node
73 | linkType: hard
74 |
75 | "@tootallnate/once@npm:2":
76 | version: 2.0.0
77 | resolution: "@tootallnate/once@npm:2.0.0"
78 | checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8
79 | languageName: node
80 | linkType: hard
81 |
82 | "@types/core-js@npm:^2.5.5":
83 | version: 2.5.5
84 | resolution: "@types/core-js@npm:2.5.5"
85 | checksum: 54eb91dc52206d8e524771cd079be4bed6a41947d08183a7954df7a3dc25ae21c8b7176143dc7203df82a6e5ff1df8998edc8d407c4a082bdbf0ede35369c5c3
86 | languageName: node
87 | linkType: hard
88 |
89 | "@types/node@npm:^17.0.21":
90 | version: 17.0.23
91 | resolution: "@types/node@npm:17.0.23"
92 | checksum: a3517554737cbb042e76c30d0e5482192ac4d9bea0eeb086e2622d9cabf460a0eb52a696b99fcd18e7fcc93c96db6cc7ae507f6608f256ef0b5c1d8c87a5a470
93 | languageName: node
94 | linkType: hard
95 |
96 | "abbrev@npm:1":
97 | version: 1.1.1
98 | resolution: "abbrev@npm:1.1.1"
99 | checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17
100 | languageName: node
101 | linkType: hard
102 |
103 | "acorn@npm:^7.1.1":
104 | version: 7.4.1
105 | resolution: "acorn@npm:7.4.1"
106 | bin:
107 | acorn: bin/acorn
108 | checksum: 1860f23c2107c910c6177b7b7be71be350db9e1080d814493fae143ae37605189504152d1ba8743ba3178d0b37269ce1ffc42b101547fdc1827078f82671e407
109 | languageName: node
110 | linkType: hard
111 |
112 | "agent-base@npm:6, agent-base@npm:^6.0.2":
113 | version: 6.0.2
114 | resolution: "agent-base@npm:6.0.2"
115 | dependencies:
116 | debug: 4
117 | checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d
118 | languageName: node
119 | linkType: hard
120 |
121 | "agentkeepalive@npm:^4.2.1":
122 | version: 4.2.1
123 | resolution: "agentkeepalive@npm:4.2.1"
124 | dependencies:
125 | debug: ^4.1.0
126 | depd: ^1.1.2
127 | humanize-ms: ^1.2.1
128 | checksum: 39cb49ed8cf217fd6da058a92828a0a84e0b74c35550f82ee0a10e1ee403c4b78ade7948be2279b188b7a7303f5d396ea2738b134731e464bf28de00a4f72a18
129 | languageName: node
130 | linkType: hard
131 |
132 | "aggregate-error@npm:^3.0.0":
133 | version: 3.1.0
134 | resolution: "aggregate-error@npm:3.1.0"
135 | dependencies:
136 | clean-stack: ^2.0.0
137 | indent-string: ^4.0.0
138 | checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79
139 | languageName: node
140 | linkType: hard
141 |
142 | "ansi-regex@npm:^5.0.1":
143 | version: 5.0.1
144 | resolution: "ansi-regex@npm:5.0.1"
145 | checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b
146 | languageName: node
147 | linkType: hard
148 |
149 | "ansi-styles@npm:^4.1.0":
150 | version: 4.3.0
151 | resolution: "ansi-styles@npm:4.3.0"
152 | dependencies:
153 | color-convert: ^2.0.1
154 | checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4
155 | languageName: node
156 | linkType: hard
157 |
158 | "anymatch@npm:~3.1.2":
159 | version: 3.1.2
160 | resolution: "anymatch@npm:3.1.2"
161 | dependencies:
162 | normalize-path: ^3.0.0
163 | picomatch: ^2.0.4
164 | checksum: 985163db2292fac9e5a1e072bf99f1b5baccf196e4de25a0b0b81865ebddeb3b3eb4480734ef0a2ac8c002845396b91aa89121f5b84f93981a4658164a9ec6e9
165 | languageName: node
166 | linkType: hard
167 |
168 | "aproba@npm:^1.0.3 || ^2.0.0":
169 | version: 2.0.0
170 | resolution: "aproba@npm:2.0.0"
171 | checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24
172 | languageName: node
173 | linkType: hard
174 |
175 | "are-we-there-yet@npm:^3.0.0":
176 | version: 3.0.0
177 | resolution: "are-we-there-yet@npm:3.0.0"
178 | dependencies:
179 | delegates: ^1.0.0
180 | readable-stream: ^3.6.0
181 | checksum: 348edfdd931b0b50868b55402c01c3f64df1d4c229ab6f063539a5025fd6c5f5bb8a0cab409bbed8d75d34762d22aa91b7c20b4204eb8177063158d9ba792981
182 | languageName: node
183 | linkType: hard
184 |
185 | "asap@npm:~2.0.3":
186 | version: 2.0.6
187 | resolution: "asap@npm:2.0.6"
188 | checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d
189 | languageName: node
190 | linkType: hard
191 |
192 | "assert-never@npm:^1.2.1":
193 | version: 1.2.1
194 | resolution: "assert-never@npm:1.2.1"
195 | checksum: ea4f1756d90f55254c4dc7a20d6c5d5bc169160562aefe3d8756b598c10e695daf568f21b6d6b12245d7f3782d3ff83ef6a01ab75d487adfc6909470a813bf8c
196 | languageName: node
197 | linkType: hard
198 |
199 | "babel-walk@npm:3.0.0-canary-5":
200 | version: 3.0.0-canary-5
201 | resolution: "babel-walk@npm:3.0.0-canary-5"
202 | dependencies:
203 | "@babel/types": ^7.9.6
204 | checksum: 6fe7ee3889343a6602f665c28ea135956a0767d7f7ca5fc1d72c5243e2f6e9d8a64f51254bf2fd0cce47b79fceeccf7a357f37cfa755a509dfb930a21151837c
205 | languageName: node
206 | linkType: hard
207 |
208 | "balanced-match@npm:^1.0.0":
209 | version: 1.0.2
210 | resolution: "balanced-match@npm:1.0.2"
211 | checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65
212 | languageName: node
213 | linkType: hard
214 |
215 | "binary-extensions@npm:^2.0.0":
216 | version: 2.2.0
217 | resolution: "binary-extensions@npm:2.2.0"
218 | checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8
219 | languageName: node
220 | linkType: hard
221 |
222 | "brace-expansion@npm:^1.1.7":
223 | version: 1.1.11
224 | resolution: "brace-expansion@npm:1.1.11"
225 | dependencies:
226 | balanced-match: ^1.0.0
227 | concat-map: 0.0.1
228 | checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07
229 | languageName: node
230 | linkType: hard
231 |
232 | "braces@npm:~3.0.2":
233 | version: 3.0.2
234 | resolution: "braces@npm:3.0.2"
235 | dependencies:
236 | fill-range: ^7.0.1
237 | checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459
238 | languageName: node
239 | linkType: hard
240 |
241 | "cacache@npm:^16.0.0":
242 | version: 16.0.3
243 | resolution: "cacache@npm:16.0.3"
244 | dependencies:
245 | "@npmcli/fs": ^2.1.0
246 | "@npmcli/move-file": ^1.1.2
247 | chownr: ^2.0.0
248 | fs-minipass: ^2.1.0
249 | glob: ^7.2.0
250 | infer-owner: ^1.0.4
251 | lru-cache: ^7.7.1
252 | minipass: ^3.1.6
253 | minipass-collect: ^1.0.2
254 | minipass-flush: ^1.0.5
255 | minipass-pipeline: ^1.2.4
256 | mkdirp: ^1.0.4
257 | p-map: ^4.0.0
258 | promise-inflight: ^1.0.1
259 | rimraf: ^3.0.2
260 | ssri: ^8.0.1
261 | tar: ^6.1.11
262 | unique-filename: ^1.1.1
263 | checksum: 9bb9a0bd1b8bee3284c6fa9dcb4b28a62b528dd181f7cd482319611b5d6df295a3594dcefc24d1a4f16162bac50d6facc183ed21935f3d09af6d16f620ea54d3
264 | languageName: node
265 | linkType: hard
266 |
267 | "call-bind@npm:^1.0.2":
268 | version: 1.0.2
269 | resolution: "call-bind@npm:1.0.2"
270 | dependencies:
271 | function-bind: ^1.1.1
272 | get-intrinsic: ^1.0.2
273 | checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0
274 | languageName: node
275 | linkType: hard
276 |
277 | "chalk@npm:^4.1.2":
278 | version: 4.1.2
279 | resolution: "chalk@npm:4.1.2"
280 | dependencies:
281 | ansi-styles: ^4.1.0
282 | supports-color: ^7.1.0
283 | checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc
284 | languageName: node
285 | linkType: hard
286 |
287 | "character-parser@npm:^2.2.0":
288 | version: 2.2.0
289 | resolution: "character-parser@npm:2.2.0"
290 | dependencies:
291 | is-regex: ^1.0.3
292 | checksum: 71826fae509d4dc3ef07c2e824da9c8853f910ba0d8fe699edaab263051fd3b8db77bb96e46ed896bb36ed1d86108e6d6ceedff436bec7786ba7f0b585a0bc93
293 | languageName: node
294 | linkType: hard
295 |
296 | "chokidar@npm:>=3.0.0 <4.0.0":
297 | version: 3.5.3
298 | resolution: "chokidar@npm:3.5.3"
299 | dependencies:
300 | anymatch: ~3.1.2
301 | braces: ~3.0.2
302 | fsevents: ~2.3.2
303 | glob-parent: ~5.1.2
304 | is-binary-path: ~2.1.0
305 | is-glob: ~4.0.1
306 | normalize-path: ~3.0.0
307 | readdirp: ~3.6.0
308 | dependenciesMeta:
309 | fsevents:
310 | optional: true
311 | checksum: b49fcde40176ba007ff361b198a2d35df60d9bb2a5aab228279eb810feae9294a6b4649ab15981304447afe1e6ffbf4788ad5db77235dc770ab777c6e771980c
312 | languageName: node
313 | linkType: hard
314 |
315 | "chownr@npm:^2.0.0":
316 | version: 2.0.0
317 | resolution: "chownr@npm:2.0.0"
318 | checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f
319 | languageName: node
320 | linkType: hard
321 |
322 | "clean-stack@npm:^2.0.0":
323 | version: 2.2.0
324 | resolution: "clean-stack@npm:2.2.0"
325 | checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68
326 | languageName: node
327 | linkType: hard
328 |
329 | "color-convert@npm:^2.0.1":
330 | version: 2.0.1
331 | resolution: "color-convert@npm:2.0.1"
332 | dependencies:
333 | color-name: ~1.1.4
334 | checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336
335 | languageName: node
336 | linkType: hard
337 |
338 | "color-name@npm:~1.1.4":
339 | version: 1.1.4
340 | resolution: "color-name@npm:1.1.4"
341 | checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610
342 | languageName: node
343 | linkType: hard
344 |
345 | "color-support@npm:^1.1.3":
346 | version: 1.1.3
347 | resolution: "color-support@npm:1.1.3"
348 | bin:
349 | color-support: bin.js
350 | checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b
351 | languageName: node
352 | linkType: hard
353 |
354 | "concat-map@npm:0.0.1":
355 | version: 0.0.1
356 | resolution: "concat-map@npm:0.0.1"
357 | checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af
358 | languageName: node
359 | linkType: hard
360 |
361 | "console-control-strings@npm:^1.1.0":
362 | version: 1.1.0
363 | resolution: "console-control-strings@npm:1.1.0"
364 | checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed
365 | languageName: node
366 | linkType: hard
367 |
368 | "constantinople@npm:^4.0.1":
369 | version: 4.0.1
370 | resolution: "constantinople@npm:4.0.1"
371 | dependencies:
372 | "@babel/parser": ^7.6.0
373 | "@babel/types": ^7.6.1
374 | checksum: 8f70f16ddf97cdc263ca16b398bc52470c25e2ec5ed27bc015f251b849597223ce3a123e6924f43efddeb75422c1f55b7e56e0e2e594e4dd2964bfc9392b9b82
375 | languageName: node
376 | linkType: hard
377 |
378 | "core-js@npm:^3.6.4":
379 | version: 3.21.1
380 | resolution: "core-js@npm:3.21.1"
381 | checksum: d68eddd831340ad5b24ac29c72fda022a43b17f194c4278b6b875a843283d316502cb4abd07f28631d6ebc4387f66aa06e2b1b3c8fd7e08096a751b5c63f6889
382 | languageName: node
383 | linkType: hard
384 |
385 | "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.3":
386 | version: 4.3.4
387 | resolution: "debug@npm:4.3.4"
388 | dependencies:
389 | ms: 2.1.2
390 | peerDependenciesMeta:
391 | supports-color:
392 | optional: true
393 | checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708
394 | languageName: node
395 | linkType: hard
396 |
397 | "delegates@npm:^1.0.0":
398 | version: 1.0.0
399 | resolution: "delegates@npm:1.0.0"
400 | checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd
401 | languageName: node
402 | linkType: hard
403 |
404 | "depd@npm:^1.1.2":
405 | version: 1.1.2
406 | resolution: "depd@npm:1.1.2"
407 | checksum: 6b406620d269619852885ce15965272b829df6f409724415e0002c8632ab6a8c0a08ec1f0bd2add05dc7bd7507606f7e2cc034fa24224ab829580040b835ecd9
408 | languageName: node
409 | linkType: hard
410 |
411 | "doctypes@npm:^1.1.0":
412 | version: 1.1.0
413 | resolution: "doctypes@npm:1.1.0"
414 | checksum: 6e6c2d1a80f2072dc4831994c914c44455e341c5ab18c16797368a0afd59d7c22f3335805ba2c1dd2931e9539d1ba8b613b7650dc63f6ab56b77b8d888055de8
415 | languageName: node
416 | linkType: hard
417 |
418 | "emoji-regex@npm:^8.0.0":
419 | version: 8.0.0
420 | resolution: "emoji-regex@npm:8.0.0"
421 | checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192
422 | languageName: node
423 | linkType: hard
424 |
425 | "encoding@npm:^0.1.13":
426 | version: 0.1.13
427 | resolution: "encoding@npm:0.1.13"
428 | dependencies:
429 | iconv-lite: ^0.6.2
430 | checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f
431 | languageName: node
432 | linkType: hard
433 |
434 | "env-paths@npm:^2.2.0":
435 | version: 2.2.1
436 | resolution: "env-paths@npm:2.2.1"
437 | checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e
438 | languageName: node
439 | linkType: hard
440 |
441 | "err-code@npm:^2.0.2":
442 | version: 2.0.3
443 | resolution: "err-code@npm:2.0.3"
444 | checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54
445 | languageName: node
446 | linkType: hard
447 |
448 | "esbuild-android-64@npm:0.14.34":
449 | version: 0.14.34
450 | resolution: "esbuild-android-64@npm:0.14.34"
451 | conditions: os=android & cpu=x64
452 | languageName: node
453 | linkType: hard
454 |
455 | "esbuild-android-arm64@npm:0.14.34":
456 | version: 0.14.34
457 | resolution: "esbuild-android-arm64@npm:0.14.34"
458 | conditions: os=android & cpu=arm64
459 | languageName: node
460 | linkType: hard
461 |
462 | "esbuild-darwin-64@npm:0.14.34":
463 | version: 0.14.34
464 | resolution: "esbuild-darwin-64@npm:0.14.34"
465 | conditions: os=darwin & cpu=x64
466 | languageName: node
467 | linkType: hard
468 |
469 | "esbuild-darwin-arm64@npm:0.14.34":
470 | version: 0.14.34
471 | resolution: "esbuild-darwin-arm64@npm:0.14.34"
472 | conditions: os=darwin & cpu=arm64
473 | languageName: node
474 | linkType: hard
475 |
476 | "esbuild-freebsd-64@npm:0.14.34":
477 | version: 0.14.34
478 | resolution: "esbuild-freebsd-64@npm:0.14.34"
479 | conditions: os=freebsd & cpu=x64
480 | languageName: node
481 | linkType: hard
482 |
483 | "esbuild-freebsd-arm64@npm:0.14.34":
484 | version: 0.14.34
485 | resolution: "esbuild-freebsd-arm64@npm:0.14.34"
486 | conditions: os=freebsd & cpu=arm64
487 | languageName: node
488 | linkType: hard
489 |
490 | "esbuild-linux-32@npm:0.14.34":
491 | version: 0.14.34
492 | resolution: "esbuild-linux-32@npm:0.14.34"
493 | conditions: os=linux & cpu=ia32
494 | languageName: node
495 | linkType: hard
496 |
497 | "esbuild-linux-64@npm:0.14.34":
498 | version: 0.14.34
499 | resolution: "esbuild-linux-64@npm:0.14.34"
500 | conditions: os=linux & cpu=x64
501 | languageName: node
502 | linkType: hard
503 |
504 | "esbuild-linux-arm64@npm:0.14.34":
505 | version: 0.14.34
506 | resolution: "esbuild-linux-arm64@npm:0.14.34"
507 | conditions: os=linux & cpu=arm64
508 | languageName: node
509 | linkType: hard
510 |
511 | "esbuild-linux-arm@npm:0.14.34":
512 | version: 0.14.34
513 | resolution: "esbuild-linux-arm@npm:0.14.34"
514 | conditions: os=linux & cpu=arm
515 | languageName: node
516 | linkType: hard
517 |
518 | "esbuild-linux-mips64le@npm:0.14.34":
519 | version: 0.14.34
520 | resolution: "esbuild-linux-mips64le@npm:0.14.34"
521 | conditions: os=linux & cpu=mips64el
522 | languageName: node
523 | linkType: hard
524 |
525 | "esbuild-linux-ppc64le@npm:0.14.34":
526 | version: 0.14.34
527 | resolution: "esbuild-linux-ppc64le@npm:0.14.34"
528 | conditions: os=linux & cpu=ppc64
529 | languageName: node
530 | linkType: hard
531 |
532 | "esbuild-linux-riscv64@npm:0.14.34":
533 | version: 0.14.34
534 | resolution: "esbuild-linux-riscv64@npm:0.14.34"
535 | conditions: os=linux & cpu=riscv64
536 | languageName: node
537 | linkType: hard
538 |
539 | "esbuild-linux-s390x@npm:0.14.34":
540 | version: 0.14.34
541 | resolution: "esbuild-linux-s390x@npm:0.14.34"
542 | conditions: os=linux & cpu=s390x
543 | languageName: node
544 | linkType: hard
545 |
546 | "esbuild-netbsd-64@npm:0.14.34":
547 | version: 0.14.34
548 | resolution: "esbuild-netbsd-64@npm:0.14.34"
549 | conditions: os=netbsd & cpu=x64
550 | languageName: node
551 | linkType: hard
552 |
553 | "esbuild-openbsd-64@npm:0.14.34":
554 | version: 0.14.34
555 | resolution: "esbuild-openbsd-64@npm:0.14.34"
556 | conditions: os=openbsd & cpu=x64
557 | languageName: node
558 | linkType: hard
559 |
560 | "esbuild-sunos-64@npm:0.14.34":
561 | version: 0.14.34
562 | resolution: "esbuild-sunos-64@npm:0.14.34"
563 | conditions: os=sunos & cpu=x64
564 | languageName: node
565 | linkType: hard
566 |
567 | "esbuild-windows-32@npm:0.14.34":
568 | version: 0.14.34
569 | resolution: "esbuild-windows-32@npm:0.14.34"
570 | conditions: os=win32 & cpu=ia32
571 | languageName: node
572 | linkType: hard
573 |
574 | "esbuild-windows-64@npm:0.14.34":
575 | version: 0.14.34
576 | resolution: "esbuild-windows-64@npm:0.14.34"
577 | conditions: os=win32 & cpu=x64
578 | languageName: node
579 | linkType: hard
580 |
581 | "esbuild-windows-arm64@npm:0.14.34":
582 | version: 0.14.34
583 | resolution: "esbuild-windows-arm64@npm:0.14.34"
584 | conditions: os=win32 & cpu=arm64
585 | languageName: node
586 | linkType: hard
587 |
588 | "esbuild@npm:^0.14.27":
589 | version: 0.14.34
590 | resolution: "esbuild@npm:0.14.34"
591 | dependencies:
592 | esbuild-android-64: 0.14.34
593 | esbuild-android-arm64: 0.14.34
594 | esbuild-darwin-64: 0.14.34
595 | esbuild-darwin-arm64: 0.14.34
596 | esbuild-freebsd-64: 0.14.34
597 | esbuild-freebsd-arm64: 0.14.34
598 | esbuild-linux-32: 0.14.34
599 | esbuild-linux-64: 0.14.34
600 | esbuild-linux-arm: 0.14.34
601 | esbuild-linux-arm64: 0.14.34
602 | esbuild-linux-mips64le: 0.14.34
603 | esbuild-linux-ppc64le: 0.14.34
604 | esbuild-linux-riscv64: 0.14.34
605 | esbuild-linux-s390x: 0.14.34
606 | esbuild-netbsd-64: 0.14.34
607 | esbuild-openbsd-64: 0.14.34
608 | esbuild-sunos-64: 0.14.34
609 | esbuild-windows-32: 0.14.34
610 | esbuild-windows-64: 0.14.34
611 | esbuild-windows-arm64: 0.14.34
612 | dependenciesMeta:
613 | esbuild-android-64:
614 | optional: true
615 | esbuild-android-arm64:
616 | optional: true
617 | esbuild-darwin-64:
618 | optional: true
619 | esbuild-darwin-arm64:
620 | optional: true
621 | esbuild-freebsd-64:
622 | optional: true
623 | esbuild-freebsd-arm64:
624 | optional: true
625 | esbuild-linux-32:
626 | optional: true
627 | esbuild-linux-64:
628 | optional: true
629 | esbuild-linux-arm:
630 | optional: true
631 | esbuild-linux-arm64:
632 | optional: true
633 | esbuild-linux-mips64le:
634 | optional: true
635 | esbuild-linux-ppc64le:
636 | optional: true
637 | esbuild-linux-riscv64:
638 | optional: true
639 | esbuild-linux-s390x:
640 | optional: true
641 | esbuild-netbsd-64:
642 | optional: true
643 | esbuild-openbsd-64:
644 | optional: true
645 | esbuild-sunos-64:
646 | optional: true
647 | esbuild-windows-32:
648 | optional: true
649 | esbuild-windows-64:
650 | optional: true
651 | esbuild-windows-arm64:
652 | optional: true
653 | bin:
654 | esbuild: bin/esbuild
655 | checksum: 2f50fc1d48a307c8e1a4ca790e448fd4742aea0405d424989eb03e0b435faa6f5184b14a8244ab17611f91238605bb129e53a6d2e157f44eacea67e5c648bdae
656 | languageName: node
657 | linkType: hard
658 |
659 | "fill-range@npm:^7.0.1":
660 | version: 7.0.1
661 | resolution: "fill-range@npm:7.0.1"
662 | dependencies:
663 | to-regex-range: ^5.0.1
664 | checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917
665 | languageName: node
666 | linkType: hard
667 |
668 | "fs-extra@npm:^10.0.0":
669 | version: 10.0.1
670 | resolution: "fs-extra@npm:10.0.1"
671 | dependencies:
672 | graceful-fs: ^4.2.0
673 | jsonfile: ^6.0.1
674 | universalify: ^2.0.0
675 | checksum: c1faaa5eb9e1c5c7c7ff09f966e93922ecb068ae1b04801cfc983ef05fcc1f66bfbb8d8d0b745c910014c7a2e7317fb6cf3bfe7390450c1157e3cc1a218f221d
676 | languageName: node
677 | linkType: hard
678 |
679 | "fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0":
680 | version: 2.1.0
681 | resolution: "fs-minipass@npm:2.1.0"
682 | dependencies:
683 | minipass: ^3.0.0
684 | checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1
685 | languageName: node
686 | linkType: hard
687 |
688 | "fs.realpath@npm:^1.0.0":
689 | version: 1.0.0
690 | resolution: "fs.realpath@npm:1.0.0"
691 | checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0
692 | languageName: node
693 | linkType: hard
694 |
695 | "fsevents@npm:~2.3.2":
696 | version: 2.3.2
697 | resolution: "fsevents@npm:2.3.2"
698 | dependencies:
699 | node-gyp: latest
700 | checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f
701 | conditions: os=darwin
702 | languageName: node
703 | linkType: hard
704 |
705 | "fsevents@patch:fsevents@~2.3.2#~builtin":
706 | version: 2.3.2
707 | resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=18f3a7"
708 | dependencies:
709 | node-gyp: latest
710 | conditions: os=darwin
711 | languageName: node
712 | linkType: hard
713 |
714 | "function-bind@npm:^1.1.1":
715 | version: 1.1.1
716 | resolution: "function-bind@npm:1.1.1"
717 | checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a
718 | languageName: node
719 | linkType: hard
720 |
721 | "gauge@npm:^4.0.0":
722 | version: 4.0.3
723 | resolution: "gauge@npm:4.0.3"
724 | dependencies:
725 | aproba: ^1.0.3 || ^2.0.0
726 | color-support: ^1.1.3
727 | console-control-strings: ^1.1.0
728 | has-unicode: ^2.0.1
729 | signal-exit: ^3.0.7
730 | string-width: ^4.2.3
731 | strip-ansi: ^6.0.1
732 | wide-align: ^1.1.5
733 | checksum: baf982238a5270def90a4895f2e083b5cf8e6f7df20b53b24a932845aec363a6cf411f88b33dcb016a43c9334fdfccd956e4514ee875d70af016bf6fead3d3ae
734 | languageName: node
735 | linkType: hard
736 |
737 | "get-intrinsic@npm:^1.0.2":
738 | version: 1.1.1
739 | resolution: "get-intrinsic@npm:1.1.1"
740 | dependencies:
741 | function-bind: ^1.1.1
742 | has: ^1.0.3
743 | has-symbols: ^1.0.1
744 | checksum: a9fe2ca8fa3f07f9b0d30fb202bcd01f3d9b9b6b732452e79c48e79f7d6d8d003af3f9e38514250e3553fdc83c61650851cb6870832ac89deaaceb08e3721a17
745 | languageName: node
746 | linkType: hard
747 |
748 | "glob-parent@npm:~5.1.2":
749 | version: 5.1.2
750 | resolution: "glob-parent@npm:5.1.2"
751 | dependencies:
752 | is-glob: ^4.0.1
753 | checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e
754 | languageName: node
755 | linkType: hard
756 |
757 | "glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.2.0":
758 | version: 7.2.0
759 | resolution: "glob@npm:7.2.0"
760 | dependencies:
761 | fs.realpath: ^1.0.0
762 | inflight: ^1.0.4
763 | inherits: 2
764 | minimatch: ^3.0.4
765 | once: ^1.3.0
766 | path-is-absolute: ^1.0.0
767 | checksum: 78a8ea942331f08ed2e055cb5b9e40fe6f46f579d7fd3d694f3412fe5db23223d29b7fee1575440202e9a7ff9a72ab106a39fee39934c7bedafe5e5f8ae20134
768 | languageName: node
769 | linkType: hard
770 |
771 | "graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0":
772 | version: 4.2.10
773 | resolution: "graceful-fs@npm:4.2.10"
774 | checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da
775 | languageName: node
776 | linkType: hard
777 |
778 | "graceful-fs@npm:^4.2.6":
779 | version: 4.2.9
780 | resolution: "graceful-fs@npm:4.2.9"
781 | checksum: 68ea4e07ff2c041ada184f9278b830375f8e0b75154e3f080af6b70f66172fabb4108d19b3863a96b53fc068a310b9b6493d86d1291acc5f3861eb4b79d26ad6
782 | languageName: node
783 | linkType: hard
784 |
785 | "has-flag@npm:^4.0.0":
786 | version: 4.0.0
787 | resolution: "has-flag@npm:4.0.0"
788 | checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad
789 | languageName: node
790 | linkType: hard
791 |
792 | "has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2":
793 | version: 1.0.3
794 | resolution: "has-symbols@npm:1.0.3"
795 | checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410
796 | languageName: node
797 | linkType: hard
798 |
799 | "has-tostringtag@npm:^1.0.0":
800 | version: 1.0.0
801 | resolution: "has-tostringtag@npm:1.0.0"
802 | dependencies:
803 | has-symbols: ^1.0.2
804 | checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c
805 | languageName: node
806 | linkType: hard
807 |
808 | "has-unicode@npm:^2.0.1":
809 | version: 2.0.1
810 | resolution: "has-unicode@npm:2.0.1"
811 | checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400
812 | languageName: node
813 | linkType: hard
814 |
815 | "has@npm:^1.0.3":
816 | version: 1.0.3
817 | resolution: "has@npm:1.0.3"
818 | dependencies:
819 | function-bind: ^1.1.1
820 | checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792
821 | languageName: node
822 | linkType: hard
823 |
824 | "highlight.js@npm:^11.5.0":
825 | version: 11.5.0
826 | resolution: "highlight.js@npm:11.5.0"
827 | checksum: a4339278d5be464fa29047fd00bc91f3d3966f5acbbb861ec51a09f3eea7c79ca63c2e0a2ba0c7b3d3663ee56b11c6470ab2759c7278e0d11af5cb0efa26e6eb
828 | languageName: node
829 | linkType: hard
830 |
831 | "http-cache-semantics@npm:^4.1.0":
832 | version: 4.1.0
833 | resolution: "http-cache-semantics@npm:4.1.0"
834 | checksum: 974de94a81c5474be07f269f9fd8383e92ebb5a448208223bfb39e172a9dbc26feff250192ecc23b9593b3f92098e010406b0f24bd4d588d631f80214648ed42
835 | languageName: node
836 | linkType: hard
837 |
838 | "http-proxy-agent@npm:^5.0.0":
839 | version: 5.0.0
840 | resolution: "http-proxy-agent@npm:5.0.0"
841 | dependencies:
842 | "@tootallnate/once": 2
843 | agent-base: 6
844 | debug: 4
845 | checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786
846 | languageName: node
847 | linkType: hard
848 |
849 | "https-proxy-agent@npm:^5.0.0":
850 | version: 5.0.0
851 | resolution: "https-proxy-agent@npm:5.0.0"
852 | dependencies:
853 | agent-base: 6
854 | debug: 4
855 | checksum: 165bfb090bd26d47693597661298006841ab733d0c7383a8cb2f17373387a94c903a3ac687090aa739de05e379ab6f868bae84ab4eac288ad85c328cd1ec9e53
856 | languageName: node
857 | linkType: hard
858 |
859 | "humanize-ms@npm:^1.2.1":
860 | version: 1.2.1
861 | resolution: "humanize-ms@npm:1.2.1"
862 | dependencies:
863 | ms: ^2.0.0
864 | checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16
865 | languageName: node
866 | linkType: hard
867 |
868 | "iconv-lite@npm:^0.6.2":
869 | version: 0.6.3
870 | resolution: "iconv-lite@npm:0.6.3"
871 | dependencies:
872 | safer-buffer: ">= 2.1.2 < 3.0.0"
873 | checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf
874 | languageName: node
875 | linkType: hard
876 |
877 | "immutable@npm:^4.0.0":
878 | version: 4.0.0
879 | resolution: "immutable@npm:4.0.0"
880 | checksum: 4b5e9181e4d5fa06728a481835ec09c86367e5d03268666c95b522b7644ab891098022e4479a43c4c81a68f2ed82f10751ce5d33e208d7b873b6e7f9dfaf4d87
881 | languageName: node
882 | linkType: hard
883 |
884 | "imurmurhash@npm:^0.1.4":
885 | version: 0.1.4
886 | resolution: "imurmurhash@npm:0.1.4"
887 | checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7
888 | languageName: node
889 | linkType: hard
890 |
891 | "indent-string@npm:^4.0.0":
892 | version: 4.0.0
893 | resolution: "indent-string@npm:4.0.0"
894 | checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612
895 | languageName: node
896 | linkType: hard
897 |
898 | "infer-owner@npm:^1.0.4":
899 | version: 1.0.4
900 | resolution: "infer-owner@npm:1.0.4"
901 | checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89
902 | languageName: node
903 | linkType: hard
904 |
905 | "inflight@npm:^1.0.4":
906 | version: 1.0.6
907 | resolution: "inflight@npm:1.0.6"
908 | dependencies:
909 | once: ^1.3.0
910 | wrappy: 1
911 | checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd
912 | languageName: node
913 | linkType: hard
914 |
915 | "inherits@npm:2, inherits@npm:^2.0.3":
916 | version: 2.0.4
917 | resolution: "inherits@npm:2.0.4"
918 | checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1
919 | languageName: node
920 | linkType: hard
921 |
922 | "ip@npm:^1.1.5":
923 | version: 1.1.5
924 | resolution: "ip@npm:1.1.5"
925 | checksum: 30133981f082a060a32644f6a7746e9ba7ac9e2bc07ecc8bbdda3ee8ca9bec1190724c390e45a1ee7695e7edfd2a8f7dda2c104ec5f7ac5068c00648504c7e5a
926 | languageName: node
927 | linkType: hard
928 |
929 | "is-binary-path@npm:~2.1.0":
930 | version: 2.1.0
931 | resolution: "is-binary-path@npm:2.1.0"
932 | dependencies:
933 | binary-extensions: ^2.0.0
934 | checksum: 84192eb88cff70d320426f35ecd63c3d6d495da9d805b19bc65b518984b7c0760280e57dbf119b7e9be6b161784a5a673ab2c6abe83abb5198a432232ad5b35c
935 | languageName: node
936 | linkType: hard
937 |
938 | "is-core-module@npm:^2.8.1":
939 | version: 2.8.1
940 | resolution: "is-core-module@npm:2.8.1"
941 | dependencies:
942 | has: ^1.0.3
943 | checksum: 418b7bc10768a73c41c7ef497e293719604007f88934a6ffc5f7c78702791b8528102fb4c9e56d006d69361549b3d9519440214a74aefc7e0b79e5e4411d377f
944 | languageName: node
945 | linkType: hard
946 |
947 | "is-expression@npm:^4.0.0":
948 | version: 4.0.0
949 | resolution: "is-expression@npm:4.0.0"
950 | dependencies:
951 | acorn: ^7.1.1
952 | object-assign: ^4.1.1
953 | checksum: 0f01d0ff53fbbec36abae8fbb7ef056c6d024f7128646856a3e6c500b205788d3e0f337025e72df979d7d7cf4674a00370633d7f8974c668b2d3fdb7e8a83bdb
954 | languageName: node
955 | linkType: hard
956 |
957 | "is-extglob@npm:^2.1.1":
958 | version: 2.1.1
959 | resolution: "is-extglob@npm:2.1.1"
960 | checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85
961 | languageName: node
962 | linkType: hard
963 |
964 | "is-fullwidth-code-point@npm:^3.0.0":
965 | version: 3.0.0
966 | resolution: "is-fullwidth-code-point@npm:3.0.0"
967 | checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348
968 | languageName: node
969 | linkType: hard
970 |
971 | "is-glob@npm:^4.0.1, is-glob@npm:~4.0.1":
972 | version: 4.0.3
973 | resolution: "is-glob@npm:4.0.3"
974 | dependencies:
975 | is-extglob: ^2.1.1
976 | checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4
977 | languageName: node
978 | linkType: hard
979 |
980 | "is-lambda@npm:^1.0.1":
981 | version: 1.0.1
982 | resolution: "is-lambda@npm:1.0.1"
983 | checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35
984 | languageName: node
985 | linkType: hard
986 |
987 | "is-number@npm:^7.0.0":
988 | version: 7.0.0
989 | resolution: "is-number@npm:7.0.0"
990 | checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a
991 | languageName: node
992 | linkType: hard
993 |
994 | "is-promise@npm:^2.0.0":
995 | version: 2.2.2
996 | resolution: "is-promise@npm:2.2.2"
997 | checksum: 18bf7d1c59953e0ad82a1ed963fb3dc0d135c8f299a14f89a17af312fc918373136e56028e8831700e1933519630cc2fd4179a777030330fde20d34e96f40c78
998 | languageName: node
999 | linkType: hard
1000 |
1001 | "is-regex@npm:^1.0.3":
1002 | version: 1.1.4
1003 | resolution: "is-regex@npm:1.1.4"
1004 | dependencies:
1005 | call-bind: ^1.0.2
1006 | has-tostringtag: ^1.0.0
1007 | checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652
1008 | languageName: node
1009 | linkType: hard
1010 |
1011 | "isexe@npm:^2.0.0":
1012 | version: 2.0.0
1013 | resolution: "isexe@npm:2.0.0"
1014 | checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62
1015 | languageName: node
1016 | linkType: hard
1017 |
1018 | "js-confetti@npm:^0.10.2":
1019 | version: 0.10.2
1020 | resolution: "js-confetti@npm:0.10.2"
1021 | checksum: 110c87ea18eb350819093cd5d27f8c880d14e327592a7df853db65604d33416f10a8ce6dde1fbcf00ff50972e56eea0f74d5f05346dcca74d685aeae01b3917e
1022 | languageName: node
1023 | linkType: hard
1024 |
1025 | "js-stringify@npm:^1.0.2":
1026 | version: 1.0.2
1027 | resolution: "js-stringify@npm:1.0.2"
1028 | checksum: f9701d9e535d3ac0f62bbf2624b76c5d0af5b889187232817ae284a41ba21fd7a8b464c2dce3815d8cf52c8bea3480be6b368cfc2c67da799cad458058e8bbf5
1029 | languageName: node
1030 | linkType: hard
1031 |
1032 | "jsonfile@npm:^6.0.1":
1033 | version: 6.1.0
1034 | resolution: "jsonfile@npm:6.1.0"
1035 | dependencies:
1036 | graceful-fs: ^4.1.6
1037 | universalify: ^2.0.0
1038 | dependenciesMeta:
1039 | graceful-fs:
1040 | optional: true
1041 | checksum: 7af3b8e1ac8fe7f1eccc6263c6ca14e1966fcbc74b618d3c78a0a2075579487547b94f72b7a1114e844a1e15bb00d440e5d1720bfc4612d790a6f285d5ea8354
1042 | languageName: node
1043 | linkType: hard
1044 |
1045 | "jstransformer@npm:1.0.0":
1046 | version: 1.0.0
1047 | resolution: "jstransformer@npm:1.0.0"
1048 | dependencies:
1049 | is-promise: ^2.0.0
1050 | promise: ^7.0.1
1051 | checksum: 1e019fde17a38766a5b96bccf0738156badc60cfa61e2ba8a8bbd3b855e7d5d7e17492b8a66e4aaabc39483e335d23217343ae32d0f7e5a81af42a95c3e075f9
1052 | languageName: node
1053 | linkType: hard
1054 |
1055 | "lodash-es@npm:^4.17.21":
1056 | version: 4.17.21
1057 | resolution: "lodash-es@npm:4.17.21"
1058 | checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2
1059 | languageName: node
1060 | linkType: hard
1061 |
1062 | "lru-cache@npm:^6.0.0":
1063 | version: 6.0.0
1064 | resolution: "lru-cache@npm:6.0.0"
1065 | dependencies:
1066 | yallist: ^4.0.0
1067 | checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297
1068 | languageName: node
1069 | linkType: hard
1070 |
1071 | "lru-cache@npm:^7.5.1, lru-cache@npm:^7.7.1":
1072 | version: 7.7.1
1073 | resolution: "lru-cache@npm:7.7.1"
1074 | checksum: f362c5a2cfa8ad6fe557ec43dc1b7a9695cce84a5652a43ff813609f782f5da576631e7dfad41878bf19a7a69438f38375178635ee80de269aa314280ca2f59e
1075 | languageName: node
1076 | linkType: hard
1077 |
1078 | "make-fetch-happen@npm:^10.0.3":
1079 | version: 10.0.6
1080 | resolution: "make-fetch-happen@npm:10.0.6"
1081 | dependencies:
1082 | agentkeepalive: ^4.2.1
1083 | cacache: ^16.0.0
1084 | http-cache-semantics: ^4.1.0
1085 | http-proxy-agent: ^5.0.0
1086 | https-proxy-agent: ^5.0.0
1087 | is-lambda: ^1.0.1
1088 | lru-cache: ^7.5.1
1089 | minipass: ^3.1.6
1090 | minipass-collect: ^1.0.2
1091 | minipass-fetch: ^2.0.3
1092 | minipass-flush: ^1.0.5
1093 | minipass-pipeline: ^1.2.4
1094 | negotiator: ^0.6.3
1095 | promise-retry: ^2.0.1
1096 | socks-proxy-agent: ^6.1.1
1097 | ssri: ^8.0.1
1098 | checksum: cf3e745567f114bf161e13dbde402cff916482930936c102543b5c6e5e6409921b05d38d6400c92ed0b43011b185c8f39a9f504c9a1bdb956eeeed39929451a6
1099 | languageName: node
1100 | linkType: hard
1101 |
1102 | "marked@npm:^4.0.12":
1103 | version: 4.0.12
1104 | resolution: "marked@npm:4.0.12"
1105 | bin:
1106 | marked: bin/marked.js
1107 | checksum: 7575117f85a8986652f3ac8b8a7b95056c4c5fce01a1fc76dc4c7960412cb4c9bd9da8133487159b6b3ff84f52b543dfe9a36f826a5f358892b5ec4b6824f192
1108 | languageName: node
1109 | linkType: hard
1110 |
1111 | "minimatch@npm:^3.0.4":
1112 | version: 3.1.2
1113 | resolution: "minimatch@npm:3.1.2"
1114 | dependencies:
1115 | brace-expansion: ^1.1.7
1116 | checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a
1117 | languageName: node
1118 | linkType: hard
1119 |
1120 | "minipass-collect@npm:^1.0.2":
1121 | version: 1.0.2
1122 | resolution: "minipass-collect@npm:1.0.2"
1123 | dependencies:
1124 | minipass: ^3.0.0
1125 | checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10
1126 | languageName: node
1127 | linkType: hard
1128 |
1129 | "minipass-fetch@npm:^2.0.3":
1130 | version: 2.0.3
1131 | resolution: "minipass-fetch@npm:2.0.3"
1132 | dependencies:
1133 | encoding: ^0.1.13
1134 | minipass: ^3.1.6
1135 | minipass-sized: ^1.0.3
1136 | minizlib: ^2.1.2
1137 | dependenciesMeta:
1138 | encoding:
1139 | optional: true
1140 | checksum: 78a4a509b1e73f5e63b84065969790373b36b04da586744815c7f7f80013f1d786797842cc33cfa517eba0ad2f2142eb0ac808c46738da1c53e0e3aeed81df11
1141 | languageName: node
1142 | linkType: hard
1143 |
1144 | "minipass-flush@npm:^1.0.5":
1145 | version: 1.0.5
1146 | resolution: "minipass-flush@npm:1.0.5"
1147 | dependencies:
1148 | minipass: ^3.0.0
1149 | checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf
1150 | languageName: node
1151 | linkType: hard
1152 |
1153 | "minipass-pipeline@npm:^1.2.4":
1154 | version: 1.2.4
1155 | resolution: "minipass-pipeline@npm:1.2.4"
1156 | dependencies:
1157 | minipass: ^3.0.0
1158 | checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b
1159 | languageName: node
1160 | linkType: hard
1161 |
1162 | "minipass-sized@npm:^1.0.3":
1163 | version: 1.0.3
1164 | resolution: "minipass-sized@npm:1.0.3"
1165 | dependencies:
1166 | minipass: ^3.0.0
1167 | checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60
1168 | languageName: node
1169 | linkType: hard
1170 |
1171 | "minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6":
1172 | version: 3.1.6
1173 | resolution: "minipass@npm:3.1.6"
1174 | dependencies:
1175 | yallist: ^4.0.0
1176 | checksum: 57a04041413a3531a65062452cb5175f93383ef245d6f4a2961d34386eb9aa8ac11ac7f16f791f5e8bbaf1dfb1ef01596870c88e8822215db57aa591a5bb0a77
1177 | languageName: node
1178 | linkType: hard
1179 |
1180 | "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2":
1181 | version: 2.1.2
1182 | resolution: "minizlib@npm:2.1.2"
1183 | dependencies:
1184 | minipass: ^3.0.0
1185 | yallist: ^4.0.0
1186 | checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3
1187 | languageName: node
1188 | linkType: hard
1189 |
1190 | "mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4":
1191 | version: 1.0.4
1192 | resolution: "mkdirp@npm:1.0.4"
1193 | bin:
1194 | mkdirp: bin/cmd.js
1195 | checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f
1196 | languageName: node
1197 | linkType: hard
1198 |
1199 | "ms@npm:2.1.2":
1200 | version: 2.1.2
1201 | resolution: "ms@npm:2.1.2"
1202 | checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f
1203 | languageName: node
1204 | linkType: hard
1205 |
1206 | "ms@npm:^2.0.0":
1207 | version: 2.1.3
1208 | resolution: "ms@npm:2.1.3"
1209 | checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d
1210 | languageName: node
1211 | linkType: hard
1212 |
1213 | "nanoid@npm:^3.3.1":
1214 | version: 3.3.2
1215 | resolution: "nanoid@npm:3.3.2"
1216 | bin:
1217 | nanoid: bin/nanoid.cjs
1218 | checksum: 376717f0685251fad77850bd84c6b8d57837c71eeb1c05be7c742140cc1835a5a2953562add05166d6dbc8fb65f3fdffa356213037b967a470e1691dc3e7b9cc
1219 | languageName: node
1220 | linkType: hard
1221 |
1222 | "negotiator@npm:^0.6.3":
1223 | version: 0.6.3
1224 | resolution: "negotiator@npm:0.6.3"
1225 | checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9
1226 | languageName: node
1227 | linkType: hard
1228 |
1229 | "no-darkreader@npm:^1.0.1":
1230 | version: 1.0.2
1231 | resolution: "no-darkreader@npm:1.0.2"
1232 | checksum: f91b8f68397c5e3b1ce954a8b00174da30f649c33734b497c47c50d50923a9b42058eed81a8c3c3f5c9bac7b4161a9944f672f5601ad29161401226dc87920f9
1233 | languageName: node
1234 | linkType: hard
1235 |
1236 | "node-gyp@npm:latest":
1237 | version: 9.0.0
1238 | resolution: "node-gyp@npm:9.0.0"
1239 | dependencies:
1240 | env-paths: ^2.2.0
1241 | glob: ^7.1.4
1242 | graceful-fs: ^4.2.6
1243 | make-fetch-happen: ^10.0.3
1244 | nopt: ^5.0.0
1245 | npmlog: ^6.0.0
1246 | rimraf: ^3.0.2
1247 | semver: ^7.3.5
1248 | tar: ^6.1.2
1249 | which: ^2.0.2
1250 | bin:
1251 | node-gyp: bin/node-gyp.js
1252 | checksum: 4d8ef8860f7e4f4d86c91db3f519d26ed5cc23b48fe54543e2afd86162b4acbd14f21de42a5db344525efb69a991e021b96a68c70c6e2d5f4a5cb770793da6d3
1253 | languageName: node
1254 | linkType: hard
1255 |
1256 | "nopt@npm:^5.0.0":
1257 | version: 5.0.0
1258 | resolution: "nopt@npm:5.0.0"
1259 | dependencies:
1260 | abbrev: 1
1261 | bin:
1262 | nopt: bin/nopt.js
1263 | checksum: d35fdec187269503843924e0114c0c6533fb54bbf1620d0f28b4b60ba01712d6687f62565c55cc20a504eff0fbe5c63e22340c3fad549ad40469ffb611b04f2f
1264 | languageName: node
1265 | linkType: hard
1266 |
1267 | "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0":
1268 | version: 3.0.0
1269 | resolution: "normalize-path@npm:3.0.0"
1270 | checksum: 88eeb4da891e10b1318c4b2476b6e2ecbeb5ff97d946815ffea7794c31a89017c70d7f34b3c2ebf23ef4e9fc9fb99f7dffe36da22011b5b5c6ffa34f4873ec20
1271 | languageName: node
1272 | linkType: hard
1273 |
1274 | "npmlog@npm:^6.0.0":
1275 | version: 6.0.1
1276 | resolution: "npmlog@npm:6.0.1"
1277 | dependencies:
1278 | are-we-there-yet: ^3.0.0
1279 | console-control-strings: ^1.1.0
1280 | gauge: ^4.0.0
1281 | set-blocking: ^2.0.0
1282 | checksum: f1a4078a73ebc89896a832bbf869f491c32ecb12e0434b9a7499878ce8f29f22e72befe3c53cd8cdc9dbf4b4057297e783ab0b6746a8b067734de6205af4d538
1283 | languageName: node
1284 | linkType: hard
1285 |
1286 | "object-assign@npm:^4.1.1":
1287 | version: 4.1.1
1288 | resolution: "object-assign@npm:4.1.1"
1289 | checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f
1290 | languageName: node
1291 | linkType: hard
1292 |
1293 | "once@npm:^1.3.0":
1294 | version: 1.4.0
1295 | resolution: "once@npm:1.4.0"
1296 | dependencies:
1297 | wrappy: 1
1298 | checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68
1299 | languageName: node
1300 | linkType: hard
1301 |
1302 | "p-map@npm:^4.0.0":
1303 | version: 4.0.0
1304 | resolution: "p-map@npm:4.0.0"
1305 | dependencies:
1306 | aggregate-error: ^3.0.0
1307 | checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c
1308 | languageName: node
1309 | linkType: hard
1310 |
1311 | "path-is-absolute@npm:^1.0.0":
1312 | version: 1.0.1
1313 | resolution: "path-is-absolute@npm:1.0.1"
1314 | checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8
1315 | languageName: node
1316 | linkType: hard
1317 |
1318 | "path-parse@npm:^1.0.7":
1319 | version: 1.0.7
1320 | resolution: "path-parse@npm:1.0.7"
1321 | checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a
1322 | languageName: node
1323 | linkType: hard
1324 |
1325 | "picocolors@npm:^1.0.0":
1326 | version: 1.0.0
1327 | resolution: "picocolors@npm:1.0.0"
1328 | checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981
1329 | languageName: node
1330 | linkType: hard
1331 |
1332 | "picomatch@npm:^2.0.4, picomatch@npm:^2.2.1":
1333 | version: 2.3.1
1334 | resolution: "picomatch@npm:2.3.1"
1335 | checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf
1336 | languageName: node
1337 | linkType: hard
1338 |
1339 | "postcss@npm:^8.4.12":
1340 | version: 8.4.12
1341 | resolution: "postcss@npm:8.4.12"
1342 | dependencies:
1343 | nanoid: ^3.3.1
1344 | picocolors: ^1.0.0
1345 | source-map-js: ^1.0.2
1346 | checksum: 248e3d0f9bbb8efaafcfda7f91627a29bdc9a19f456896886330beb28c5abea0e14c7901b35191928602e2eccbed496b1e94097d27a0b2a980854cd00c7a835f
1347 | languageName: node
1348 | linkType: hard
1349 |
1350 | "promise-inflight@npm:^1.0.1":
1351 | version: 1.0.1
1352 | resolution: "promise-inflight@npm:1.0.1"
1353 | checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981
1354 | languageName: node
1355 | linkType: hard
1356 |
1357 | "promise-retry@npm:^2.0.1":
1358 | version: 2.0.1
1359 | resolution: "promise-retry@npm:2.0.1"
1360 | dependencies:
1361 | err-code: ^2.0.2
1362 | retry: ^0.12.0
1363 | checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429
1364 | languageName: node
1365 | linkType: hard
1366 |
1367 | "promise@npm:^7.0.1":
1368 | version: 7.3.1
1369 | resolution: "promise@npm:7.3.1"
1370 | dependencies:
1371 | asap: ~2.0.3
1372 | checksum: 475bb069130179fbd27ed2ab45f26d8862376a137a57314cf53310bdd85cc986a826fd585829be97ebc0aaf10e9d8e68be1bfe5a4a0364144b1f9eedfa940cf1
1373 | languageName: node
1374 | linkType: hard
1375 |
1376 | "pug-attrs@npm:^3.0.0":
1377 | version: 3.0.0
1378 | resolution: "pug-attrs@npm:3.0.0"
1379 | dependencies:
1380 | constantinople: ^4.0.1
1381 | js-stringify: ^1.0.2
1382 | pug-runtime: ^3.0.0
1383 | checksum: 2ca2d34de3065239f01f0fc3c0e104c17f7a7105684d088bb71df623005a45f40a2301e65f49ec4581bb31794c74e691862643d4e34062d1509e92fa56a15aa5
1384 | languageName: node
1385 | linkType: hard
1386 |
1387 | "pug-code-gen@npm:^3.0.2":
1388 | version: 3.0.2
1389 | resolution: "pug-code-gen@npm:3.0.2"
1390 | dependencies:
1391 | constantinople: ^4.0.1
1392 | doctypes: ^1.1.0
1393 | js-stringify: ^1.0.2
1394 | pug-attrs: ^3.0.0
1395 | pug-error: ^2.0.0
1396 | pug-runtime: ^3.0.0
1397 | void-elements: ^3.1.0
1398 | with: ^7.0.0
1399 | checksum: 1644d3a4d673392794248749eb146299704639a8197746454b7d03b240b83ee102f25b76d203381501e283be3927ab01eb3f4563ff51c45a478de1f3435a400d
1400 | languageName: node
1401 | linkType: hard
1402 |
1403 | "pug-error@npm:^2.0.0":
1404 | version: 2.0.0
1405 | resolution: "pug-error@npm:2.0.0"
1406 | checksum: c5372d018c897c1d6a141dd803c50957feecfda1f3d84a6adc6149801315d6c7f8c28b05f3e186d98d774fc9718699d1e1caa675630dd3c4453f8c5ec4e4a986
1407 | languageName: node
1408 | linkType: hard
1409 |
1410 | "pug-filters@npm:^4.0.0":
1411 | version: 4.0.0
1412 | resolution: "pug-filters@npm:4.0.0"
1413 | dependencies:
1414 | constantinople: ^4.0.1
1415 | jstransformer: 1.0.0
1416 | pug-error: ^2.0.0
1417 | pug-walk: ^2.0.0
1418 | resolve: ^1.15.1
1419 | checksum: 44eb3273195e3f42f034ad81109452236377780557eaf5a28db6e478f297675e19b8598cca9de65a0ba9c1d57e2ca2a93e332f0ab4be79dc5dd042375228cdff
1420 | languageName: node
1421 | linkType: hard
1422 |
1423 | "pug-lexer@npm:^5.0.1":
1424 | version: 5.0.1
1425 | resolution: "pug-lexer@npm:5.0.1"
1426 | dependencies:
1427 | character-parser: ^2.2.0
1428 | is-expression: ^4.0.0
1429 | pug-error: ^2.0.0
1430 | checksum: afdd2f43f2c3ba96001a7b734c0c3bc745eb5d7dd68c787c2690c606d34573ca46ba807e4b4c7e70db9b4556fb938625dbb9c25b79cdb8857868e6deb2574d3e
1431 | languageName: node
1432 | linkType: hard
1433 |
1434 | "pug-linker@npm:^4.0.0":
1435 | version: 4.0.0
1436 | resolution: "pug-linker@npm:4.0.0"
1437 | dependencies:
1438 | pug-error: ^2.0.0
1439 | pug-walk: ^2.0.0
1440 | checksum: 7433aa65181cd5b7bc631ab5f14baae7496fd8da98608cbd55bbea9bc72fe69a863e72026781a9fe76ab429d7037465b942145455420ee1178e2875ec87a1e12
1441 | languageName: node
1442 | linkType: hard
1443 |
1444 | "pug-load@npm:^3.0.0":
1445 | version: 3.0.0
1446 | resolution: "pug-load@npm:3.0.0"
1447 | dependencies:
1448 | object-assign: ^4.1.1
1449 | pug-walk: ^2.0.0
1450 | checksum: 1800ec51994c92338401bcf79bbfa0d5ef9aa312bc415c2618263d6c04d1d7c5be5ac4a333c47a0eaa823f6231b4ade1a1c40f5784b99eb576d25853597bff2f
1451 | languageName: node
1452 | linkType: hard
1453 |
1454 | "pug-parser@npm:^6.0.0":
1455 | version: 6.0.0
1456 | resolution: "pug-parser@npm:6.0.0"
1457 | dependencies:
1458 | pug-error: ^2.0.0
1459 | token-stream: 1.0.0
1460 | checksum: a6954d1383601233ec9d58e8fb22339f4809cf938272db16c551d8574566f388af3bf5560ec95ad5e23902bc358e6fa857409e840de4ed1ff5120a1dd6892cca
1461 | languageName: node
1462 | linkType: hard
1463 |
1464 | "pug-runtime@npm:^3.0.0, pug-runtime@npm:^3.0.1":
1465 | version: 3.0.1
1466 | resolution: "pug-runtime@npm:3.0.1"
1467 | checksum: 48a71b587caa08a5bccf9c1164206a34067edc1d13c2164bebad2dc562b529317578f889a0c41f0e16ddab3853c599696ff29a085f2d4554b783228f0002c41b
1468 | languageName: node
1469 | linkType: hard
1470 |
1471 | "pug-strip-comments@npm:^2.0.0":
1472 | version: 2.0.0
1473 | resolution: "pug-strip-comments@npm:2.0.0"
1474 | dependencies:
1475 | pug-error: ^2.0.0
1476 | checksum: 2cfcbf506c14bb3e64204a1d93f12ca61658d2540475b0f0911c35531ad28421e8d1e73a646d841d58cfa2c20f8593c52e492dfe5b6bec968e20b614e4dea1e4
1477 | languageName: node
1478 | linkType: hard
1479 |
1480 | "pug-walk@npm:^2.0.0":
1481 | version: 2.0.0
1482 | resolution: "pug-walk@npm:2.0.0"
1483 | checksum: bee64e133b711e1ed58022c0869b59e62f9f3ebb7084293857f074120b3cb588e7b8f74c4566426bf2b26dc1ec176ca6b64a2d1e53782f3fbbe039c5d4816638
1484 | languageName: node
1485 | linkType: hard
1486 |
1487 | "pug@npm:^3.0.2":
1488 | version: 3.0.2
1489 | resolution: "pug@npm:3.0.2"
1490 | dependencies:
1491 | pug-code-gen: ^3.0.2
1492 | pug-filters: ^4.0.0
1493 | pug-lexer: ^5.0.1
1494 | pug-linker: ^4.0.0
1495 | pug-load: ^3.0.0
1496 | pug-parser: ^6.0.0
1497 | pug-runtime: ^3.0.1
1498 | pug-strip-comments: ^2.0.0
1499 | checksum: 3e1a3d48897c0c7dedd4f959ce8afaf6417a63756b149e1b5382bef16de5792ec7c7ae6a7d41641059cb149520f20b0d1ecf57014c0661526e96f0bad88541e5
1500 | languageName: node
1501 | linkType: hard
1502 |
1503 | "readable-stream@npm:^3.6.0":
1504 | version: 3.6.0
1505 | resolution: "readable-stream@npm:3.6.0"
1506 | dependencies:
1507 | inherits: ^2.0.3
1508 | string_decoder: ^1.1.1
1509 | util-deprecate: ^1.0.1
1510 | checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8
1511 | languageName: node
1512 | linkType: hard
1513 |
1514 | "readdirp@npm:~3.6.0":
1515 | version: 3.6.0
1516 | resolution: "readdirp@npm:3.6.0"
1517 | dependencies:
1518 | picomatch: ^2.2.1
1519 | checksum: 1ced032e6e45670b6d7352d71d21ce7edf7b9b928494dcaba6f11fba63180d9da6cd7061ebc34175ffda6ff529f481818c962952004d273178acd70f7059b320
1520 | languageName: node
1521 | linkType: hard
1522 |
1523 | "resolve@npm:^1.15.1, resolve@npm:^1.22.0":
1524 | version: 1.22.0
1525 | resolution: "resolve@npm:1.22.0"
1526 | dependencies:
1527 | is-core-module: ^2.8.1
1528 | path-parse: ^1.0.7
1529 | supports-preserve-symlinks-flag: ^1.0.0
1530 | bin:
1531 | resolve: bin/resolve
1532 | checksum: a2d14cc437b3a23996f8c7367eee5c7cf8149c586b07ca2ae00e96581ce59455555a1190be9aa92154785cf9f2042646c200d0e00e0bbd2b8a995a93a0ed3e4e
1533 | languageName: node
1534 | linkType: hard
1535 |
1536 | "resolve@patch:resolve@^1.15.1#~builtin, resolve@patch:resolve@^1.22.0#~builtin":
1537 | version: 1.22.0
1538 | resolution: "resolve@patch:resolve@npm%3A1.22.0#~builtin::version=1.22.0&hash=07638b"
1539 | dependencies:
1540 | is-core-module: ^2.8.1
1541 | path-parse: ^1.0.7
1542 | supports-preserve-symlinks-flag: ^1.0.0
1543 | bin:
1544 | resolve: bin/resolve
1545 | checksum: c79ecaea36c872ee4a79e3db0d3d4160b593f2ca16e031d8283735acd01715a203607e9ded3f91f68899c2937fa0d49390cddbe0fb2852629212f3cda283f4a7
1546 | languageName: node
1547 | linkType: hard
1548 |
1549 | "retry@npm:^0.12.0":
1550 | version: 0.12.0
1551 | resolution: "retry@npm:0.12.0"
1552 | checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c
1553 | languageName: node
1554 | linkType: hard
1555 |
1556 | "rimraf@npm:^3.0.2":
1557 | version: 3.0.2
1558 | resolution: "rimraf@npm:3.0.2"
1559 | dependencies:
1560 | glob: ^7.1.3
1561 | bin:
1562 | rimraf: bin.js
1563 | checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0
1564 | languageName: node
1565 | linkType: hard
1566 |
1567 | "rollup@npm:^2.59.0":
1568 | version: 2.70.1
1569 | resolution: "rollup@npm:2.70.1"
1570 | dependencies:
1571 | fsevents: ~2.3.2
1572 | dependenciesMeta:
1573 | fsevents:
1574 | optional: true
1575 | bin:
1576 | rollup: dist/bin/rollup
1577 | checksum: 06c62933e6e81a1c8c684d7d576e507081aabdb63cc0c91bca86b7348b66df03b77827068e4990b8b6c738bd3ef66dcc8c7ed7e0ea40b736068e7618f693133e
1578 | languageName: node
1579 | linkType: hard
1580 |
1581 | "safe-buffer@npm:~5.2.0":
1582 | version: 5.2.1
1583 | resolution: "safe-buffer@npm:5.2.1"
1584 | checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491
1585 | languageName: node
1586 | linkType: hard
1587 |
1588 | "safer-buffer@npm:>= 2.1.2 < 3.0.0":
1589 | version: 2.1.2
1590 | resolution: "safer-buffer@npm:2.1.2"
1591 | checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0
1592 | languageName: node
1593 | linkType: hard
1594 |
1595 | "sass@npm:^1.50.0":
1596 | version: 1.50.0
1597 | resolution: "sass@npm:1.50.0"
1598 | dependencies:
1599 | chokidar: ">=3.0.0 <4.0.0"
1600 | immutable: ^4.0.0
1601 | source-map-js: ">=0.6.2 <2.0.0"
1602 | bin:
1603 | sass: sass.js
1604 | checksum: 43738cc83a3921731456f769aba190277f0620f8b80c14426ab098be9ab8dc8465957f5bf2edbcffda189edb3024ed83dee2cb8cd580459ca4984a9fc88c18f7
1605 | languageName: node
1606 | linkType: hard
1607 |
1608 | "semver@npm:^7.3.5":
1609 | version: 7.3.5
1610 | resolution: "semver@npm:7.3.5"
1611 | dependencies:
1612 | lru-cache: ^6.0.0
1613 | bin:
1614 | semver: bin/semver.js
1615 | checksum: 5eafe6102bea2a7439897c1856362e31cc348ccf96efd455c8b5bc2c61e6f7e7b8250dc26b8828c1d76a56f818a7ee907a36ae9fb37a599d3d24609207001d60
1616 | languageName: node
1617 | linkType: hard
1618 |
1619 | "set-blocking@npm:^2.0.0":
1620 | version: 2.0.0
1621 | resolution: "set-blocking@npm:2.0.0"
1622 | checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02
1623 | languageName: node
1624 | linkType: hard
1625 |
1626 | "signal-exit@npm:^3.0.7":
1627 | version: 3.0.7
1628 | resolution: "signal-exit@npm:3.0.7"
1629 | checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318
1630 | languageName: node
1631 | linkType: hard
1632 |
1633 | "smart-buffer@npm:^4.2.0":
1634 | version: 4.2.0
1635 | resolution: "smart-buffer@npm:4.2.0"
1636 | checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b
1637 | languageName: node
1638 | linkType: hard
1639 |
1640 | "smooth-scrollbar@npm:^8.7.4":
1641 | version: 8.7.4
1642 | resolution: "smooth-scrollbar@npm:8.7.4"
1643 | dependencies:
1644 | core-js: ^3.6.4
1645 | lodash-es: ^4.17.21
1646 | tslib: ^1.10.0
1647 | checksum: 4e32db9a87a7971329e49ae7ccbe9fc1b7169309e56aa86380348442e5fbf1bc5756eba0b24e1099b141925872e748d177735af7307752990d0f712d9d599520
1648 | languageName: node
1649 | linkType: hard
1650 |
1651 | "socks-proxy-agent@npm:^6.1.1":
1652 | version: 6.1.1
1653 | resolution: "socks-proxy-agent@npm:6.1.1"
1654 | dependencies:
1655 | agent-base: ^6.0.2
1656 | debug: ^4.3.1
1657 | socks: ^2.6.1
1658 | checksum: 9a8a4f791bba0060315cf7291ca6f9db37d6fc280fd0860d73d8887d3efe4c22e823aa25a8d5375f6079279f8dc91b50c075345179bf832bfe3c7c26d3582e3c
1659 | languageName: node
1660 | linkType: hard
1661 |
1662 | "socks@npm:^2.6.1":
1663 | version: 2.6.2
1664 | resolution: "socks@npm:2.6.2"
1665 | dependencies:
1666 | ip: ^1.1.5
1667 | smart-buffer: ^4.2.0
1668 | checksum: dd9194293059d737759d5c69273850ad4149f448426249325c4bea0e340d1cf3d266c3b022694b0dcf5d31f759de23657244c481fc1e8322add80b7985c36b5e
1669 | languageName: node
1670 | linkType: hard
1671 |
1672 | "source-map-js@npm:>=0.6.2 <2.0.0, source-map-js@npm:^1.0.2":
1673 | version: 1.0.2
1674 | resolution: "source-map-js@npm:1.0.2"
1675 | checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c
1676 | languageName: node
1677 | linkType: hard
1678 |
1679 | "ssri@npm:^8.0.1":
1680 | version: 8.0.1
1681 | resolution: "ssri@npm:8.0.1"
1682 | dependencies:
1683 | minipass: ^3.1.1
1684 | checksum: bc447f5af814fa9713aa201ec2522208ae0f4d8f3bda7a1f445a797c7b929a02720436ff7c478fb5edc4045adb02b1b88d2341b436a80798734e2494f1067b36
1685 | languageName: node
1686 | linkType: hard
1687 |
1688 | "string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.2.3":
1689 | version: 4.2.3
1690 | resolution: "string-width@npm:4.2.3"
1691 | dependencies:
1692 | emoji-regex: ^8.0.0
1693 | is-fullwidth-code-point: ^3.0.0
1694 | strip-ansi: ^6.0.1
1695 | checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb
1696 | languageName: node
1697 | linkType: hard
1698 |
1699 | "string_decoder@npm:^1.1.1":
1700 | version: 1.3.0
1701 | resolution: "string_decoder@npm:1.3.0"
1702 | dependencies:
1703 | safe-buffer: ~5.2.0
1704 | checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56
1705 | languageName: node
1706 | linkType: hard
1707 |
1708 | "strip-ansi@npm:^6.0.1":
1709 | version: 6.0.1
1710 | resolution: "strip-ansi@npm:6.0.1"
1711 | dependencies:
1712 | ansi-regex: ^5.0.1
1713 | checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c
1714 | languageName: node
1715 | linkType: hard
1716 |
1717 | "supports-color@npm:^7.1.0":
1718 | version: 7.2.0
1719 | resolution: "supports-color@npm:7.2.0"
1720 | dependencies:
1721 | has-flag: ^4.0.0
1722 | checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a
1723 | languageName: node
1724 | linkType: hard
1725 |
1726 | "supports-preserve-symlinks-flag@npm:^1.0.0":
1727 | version: 1.0.0
1728 | resolution: "supports-preserve-symlinks-flag@npm:1.0.0"
1729 | checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae
1730 | languageName: node
1731 | linkType: hard
1732 |
1733 | "tar@npm:^6.1.11, tar@npm:^6.1.2":
1734 | version: 6.1.11
1735 | resolution: "tar@npm:6.1.11"
1736 | dependencies:
1737 | chownr: ^2.0.0
1738 | fs-minipass: ^2.0.0
1739 | minipass: ^3.0.0
1740 | minizlib: ^2.1.1
1741 | mkdirp: ^1.0.3
1742 | yallist: ^4.0.0
1743 | checksum: a04c07bb9e2d8f46776517d4618f2406fb977a74d914ad98b264fc3db0fe8224da5bec11e5f8902c5b9bcb8ace22d95fbe3c7b36b8593b7dfc8391a25898f32f
1744 | languageName: node
1745 | linkType: hard
1746 |
1747 | "tippy.js@npm:^6.3.7":
1748 | version: 6.3.7
1749 | resolution: "tippy.js@npm:6.3.7"
1750 | dependencies:
1751 | "@popperjs/core": ^2.9.0
1752 | checksum: cac955318a65288e8d2dca05059878b003c6e66f92c94f7810f5bc5448eb6646abdf7dacc9bd00020e2611592598d0aae3a28ec9a45349a159603c3fdddce5fb
1753 | languageName: node
1754 | linkType: hard
1755 |
1756 | "to-fast-properties@npm:^2.0.0":
1757 | version: 2.0.0
1758 | resolution: "to-fast-properties@npm:2.0.0"
1759 | checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168
1760 | languageName: node
1761 | linkType: hard
1762 |
1763 | "to-regex-range@npm:^5.0.1":
1764 | version: 5.0.1
1765 | resolution: "to-regex-range@npm:5.0.1"
1766 | dependencies:
1767 | is-number: ^7.0.0
1768 | checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed
1769 | languageName: node
1770 | linkType: hard
1771 |
1772 | "token-stream@npm:1.0.0":
1773 | version: 1.0.0
1774 | resolution: "token-stream@npm:1.0.0"
1775 | checksum: e8adb56f31b813b6157130e7fc2fe14eb60e7cbf7b746e70e8293c7e55664d8e7ad5d93d7ae3aa4cad7fcb2b0aaf59dad6f2fd4ee0269204e55af5b05bc369e2
1776 | languageName: node
1777 | linkType: hard
1778 |
1779 | "tslib@npm:^1.10.0":
1780 | version: 1.14.1
1781 | resolution: "tslib@npm:1.14.1"
1782 | checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd
1783 | languageName: node
1784 | linkType: hard
1785 |
1786 | "unique-filename@npm:^1.1.1":
1787 | version: 1.1.1
1788 | resolution: "unique-filename@npm:1.1.1"
1789 | dependencies:
1790 | unique-slug: ^2.0.0
1791 | checksum: cf4998c9228cc7647ba7814e255dec51be43673903897b1786eff2ac2d670f54d4d733357eb08dea969aa5e6875d0e1bd391d668fbdb5a179744e7c7551a6f80
1792 | languageName: node
1793 | linkType: hard
1794 |
1795 | "unique-slug@npm:^2.0.0":
1796 | version: 2.0.2
1797 | resolution: "unique-slug@npm:2.0.2"
1798 | dependencies:
1799 | imurmurhash: ^0.1.4
1800 | checksum: 5b6876a645da08d505dedb970d1571f6cebdf87044cb6b740c8dbb24f0d6e1dc8bdbf46825fd09f994d7cf50760e6f6e063cfa197d51c5902c00a861702eb75a
1801 | languageName: node
1802 | linkType: hard
1803 |
1804 | "universalify@npm:^2.0.0":
1805 | version: 2.0.0
1806 | resolution: "universalify@npm:2.0.0"
1807 | checksum: 2406a4edf4a8830aa6813278bab1f953a8e40f2f63a37873ffa9a3bc8f9745d06cc8e88f3572cb899b7e509013f7f6fcc3e37e8a6d914167a5381d8440518c44
1808 | languageName: node
1809 | linkType: hard
1810 |
1811 | "util-deprecate@npm:^1.0.1":
1812 | version: 1.0.2
1813 | resolution: "util-deprecate@npm:1.0.2"
1814 | checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2
1815 | languageName: node
1816 | linkType: hard
1817 |
1818 | "vite-plugin-compression@npm:^0.5.1":
1819 | version: 0.5.1
1820 | resolution: "vite-plugin-compression@npm:0.5.1"
1821 | dependencies:
1822 | chalk: ^4.1.2
1823 | debug: ^4.3.3
1824 | fs-extra: ^10.0.0
1825 | peerDependencies:
1826 | vite: ">=2.0.0"
1827 | checksum: 55f01e7d6c9203776245614d30fa14df995bdf3cdb12ea4e2c0b9120741b74bd010b3aa5c467316f008aceaea6e2fd18fb394143cce06d22da9787d722da5223
1828 | languageName: node
1829 | linkType: hard
1830 |
1831 | "vite-plugin-pug@npm:^0.3.1":
1832 | version: 0.3.1
1833 | resolution: "vite-plugin-pug@npm:0.3.1"
1834 | dependencies:
1835 | pug: ^3.0.2
1836 | peerDependencies:
1837 | picocolors: ~1
1838 | vite: ~2
1839 | checksum: 2e19995257f29bb55198d3c7d38e0043f17303ffe19c6ae413ecefaa032714efb1b25e8fc180ed7d66d2e5b8ca8df89ac310813a81d9042a3bb4f81ddea088bd
1840 | languageName: node
1841 | linkType: hard
1842 |
1843 | "vite@npm:^2.9.0":
1844 | version: 2.9.1
1845 | resolution: "vite@npm:2.9.1"
1846 | dependencies:
1847 | esbuild: ^0.14.27
1848 | fsevents: ~2.3.2
1849 | postcss: ^8.4.12
1850 | resolve: ^1.22.0
1851 | rollup: ^2.59.0
1852 | peerDependencies:
1853 | less: "*"
1854 | sass: "*"
1855 | stylus: "*"
1856 | dependenciesMeta:
1857 | fsevents:
1858 | optional: true
1859 | peerDependenciesMeta:
1860 | less:
1861 | optional: true
1862 | sass:
1863 | optional: true
1864 | stylus:
1865 | optional: true
1866 | bin:
1867 | vite: bin/vite.js
1868 | checksum: 0f0ac9337fa5c17faa4a59831a2df17475563b23a6162e86b2b60b19835ca1277f3249ea7a6608880354b39caf05779e9bad1e3b1f5b27010deced224aae47ea
1869 | languageName: node
1870 | linkType: hard
1871 |
1872 | "void-elements@npm:^3.1.0":
1873 | version: 3.1.0
1874 | resolution: "void-elements@npm:3.1.0"
1875 | checksum: 0390f818107fa8fce55bb0a5c3f661056001c1d5a2a48c28d582d4d847347c2ab5b7f8272314cac58acf62345126b6b09bea623a185935f6b1c3bbce0dfd7f7f
1876 | languageName: node
1877 | linkType: hard
1878 |
1879 | "which@npm:^2.0.2":
1880 | version: 2.0.2
1881 | resolution: "which@npm:2.0.2"
1882 | dependencies:
1883 | isexe: ^2.0.0
1884 | bin:
1885 | node-which: ./bin/node-which
1886 | checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1
1887 | languageName: node
1888 | linkType: hard
1889 |
1890 | "wide-align@npm:^1.1.5":
1891 | version: 1.1.5
1892 | resolution: "wide-align@npm:1.1.5"
1893 | dependencies:
1894 | string-width: ^1.0.2 || 2 || 3 || 4
1895 | checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3
1896 | languageName: node
1897 | linkType: hard
1898 |
1899 | "with@npm:^7.0.0":
1900 | version: 7.0.2
1901 | resolution: "with@npm:7.0.2"
1902 | dependencies:
1903 | "@babel/parser": ^7.9.6
1904 | "@babel/types": ^7.9.6
1905 | assert-never: ^1.2.1
1906 | babel-walk: 3.0.0-canary-5
1907 | checksum: a00fe87b736e434bd8b9d3e62ddcd664bde7d3990a011a0f1bdeb499db0d6c28e6d2ef921dcc47650b8d436eee55459bcae8fab4ce1ed89f4926ddda407ab755
1908 | languageName: node
1909 | linkType: hard
1910 |
1911 | "wrappy@npm:1":
1912 | version: 1.0.2
1913 | resolution: "wrappy@npm:1.0.2"
1914 | checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5
1915 | languageName: node
1916 | linkType: hard
1917 |
1918 | "yallist@npm:^4.0.0":
1919 | version: 4.0.0
1920 | resolution: "yallist@npm:4.0.0"
1921 | checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5
1922 | languageName: node
1923 | linkType: hard
1924 |
1925 | "zer0bin@workspace:.":
1926 | version: 0.0.0-use.local
1927 | resolution: "zer0bin@workspace:."
1928 | dependencies:
1929 | "@ant-design/icons-svg": ^4.2.1
1930 | "@types/core-js": ^2.5.5
1931 | "@types/node": ^17.0.21
1932 | highlight.js: ^11.5.0
1933 | js-confetti: ^0.10.2
1934 | marked: ^4.0.12
1935 | no-darkreader: ^1.0.1
1936 | pug: ^3.0.2
1937 | sass: ^1.50.0
1938 | smooth-scrollbar: ^8.7.4
1939 | tippy.js: ^6.3.7
1940 | vite: ^2.9.0
1941 | vite-plugin-compression: ^0.5.1
1942 | vite-plugin-pug: ^0.3.1
1943 | languageName: unknown
1944 | linkType: soft
1945 |
--------------------------------------------------------------------------------