├── .gitignore
├── Anchor.toml
├── Cargo.lock
├── Cargo.toml
├── app
├── .env
├── .env.devnet
├── .env.mainnet
├── .gitignore
├── README.md
├── babel.config.js
├── jsconfig.json
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
│ ├── android-chrome-192x192.png
│ ├── android-chrome-512x512.png
│ ├── apple-touch-icon.png
│ ├── browserconfig.xml
│ ├── favicon-16x16.png
│ ├── favicon-32x32.png
│ ├── favicon.ico
│ ├── index.html
│ ├── mstile-144x144.png
│ ├── mstile-150x150.png
│ ├── mstile-310x150.png
│ ├── mstile-310x310.png
│ ├── mstile-70x70.png
│ ├── safari-pinned-tab.svg
│ └── site.webmanifest
├── src
│ ├── App.vue
│ ├── api
│ │ ├── delete-tweet.js
│ │ ├── fetch-tweets.js
│ │ ├── get-tweet.js
│ │ ├── index.js
│ │ ├── send-tweet.js
│ │ └── update-tweet.js
│ ├── assets
│ │ └── logo.png
│ ├── components
│ │ ├── PageHome.vue
│ │ ├── PageNotFound.vue
│ │ ├── PageProfile.vue
│ │ ├── PageTopics.vue
│ │ ├── PageTweet.vue
│ │ ├── PageUsers.vue
│ │ ├── TheSidebar.vue
│ │ ├── TweetCard.vue
│ │ ├── TweetForm.vue
│ │ ├── TweetFormUpdate.vue
│ │ ├── TweetList.vue
│ │ └── TweetSearch.vue
│ ├── composables
│ │ ├── index.js
│ │ ├── useAutoresizeTextarea.js
│ │ ├── useCountCharacterLimit.js
│ │ ├── useFromRoute.js
│ │ ├── usePagination.js
│ │ ├── useSlug.js
│ │ └── useWorkspace.js
│ ├── idl
│ │ └── solana_twitter.json
│ ├── main.css
│ ├── main.js
│ ├── models
│ │ ├── Tweet.js
│ │ └── index.js
│ └── routes.js
├── tailwind.config.js
└── vue.config.js
├── migrations
└── deploy.ts
├── package.json
├── programs
└── solana-twitter
│ ├── Cargo.toml
│ ├── Xargo.toml
│ └── src
│ └── lib.rs
├── tests
└── solana-twitter.ts
├── tsconfig.json
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | .anchor
3 | .DS_Store
4 | target
5 | **/*.rs.bk
6 | node_modules
7 | test-ledger
8 |
--------------------------------------------------------------------------------
/Anchor.toml:
--------------------------------------------------------------------------------
1 | [programs.localnet]
2 | solana_twitter = "BNDCEb5uXCuWDxJW9BGmbfvR1JBMAKckfhYrEKW2Bv1W"
3 |
4 | [programs.devnet]
5 | solana_twitter = "BNDCEb5uXCuWDxJW9BGmbfvR1JBMAKckfhYrEKW2Bv1W"
6 |
7 | [programs.mainnet]
8 | solana_twitter = "BNDCEb5uXCuWDxJW9BGmbfvR1JBMAKckfhYrEKW2Bv1W"
9 |
10 | [registry]
11 | url = "https://anchor.projectserum.com"
12 |
13 | [provider]
14 | cluster = "localnet"
15 | wallet = "/Users/loris/.config/solana/id.json"
16 |
17 | [scripts]
18 | test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts"
19 | copy-idl = "mkdir -p app/src/idl && cp target/idl/solana_twitter.json app/src/idl/solana_twitter.json"
20 |
--------------------------------------------------------------------------------
/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 = "ahash"
7 | version = "0.4.7"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "739f4a8db6605981345c5654f3a85b056ce52f37a39d34da03f25bf2151ea16e"
10 |
11 | [[package]]
12 | name = "aho-corasick"
13 | version = "0.7.18"
14 | source = "registry+https://github.com/rust-lang/crates.io-index"
15 | checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
16 | dependencies = [
17 | "memchr",
18 | ]
19 |
20 | [[package]]
21 | name = "anchor-attribute-access-control"
22 | version = "0.21.0"
23 | source = "registry+https://github.com/rust-lang/crates.io-index"
24 | checksum = "8573731461c6e39febd16026fe95cbc99955585b08acddc0baaeefb803da191b"
25 | dependencies = [
26 | "anchor-syn",
27 | "anyhow",
28 | "proc-macro2",
29 | "quote",
30 | "regex",
31 | "syn",
32 | ]
33 |
34 | [[package]]
35 | name = "anchor-attribute-account"
36 | version = "0.21.0"
37 | source = "registry+https://github.com/rust-lang/crates.io-index"
38 | checksum = "537c6e7014f727f3396759f73a847bdbca92379499d918c99ae1c7075d6d32e3"
39 | dependencies = [
40 | "anchor-syn",
41 | "anyhow",
42 | "bs58 0.4.0",
43 | "proc-macro2",
44 | "quote",
45 | "rustversion",
46 | "syn",
47 | ]
48 |
49 | [[package]]
50 | name = "anchor-attribute-constant"
51 | version = "0.21.0"
52 | source = "registry+https://github.com/rust-lang/crates.io-index"
53 | checksum = "4fce62e28b84fe3622044d5777e6962cf090049ef45d1bc29d0fbbc027b848d8"
54 | dependencies = [
55 | "anchor-syn",
56 | "proc-macro2",
57 | "syn",
58 | ]
59 |
60 | [[package]]
61 | name = "anchor-attribute-error"
62 | version = "0.21.0"
63 | source = "registry+https://github.com/rust-lang/crates.io-index"
64 | checksum = "2cd2fe5dd4d1e82ff9d0b948170ab4ad3b12fa16ad6f45a3a3ce4dd97e543935"
65 | dependencies = [
66 | "anchor-syn",
67 | "proc-macro2",
68 | "quote",
69 | "syn",
70 | ]
71 |
72 | [[package]]
73 | name = "anchor-attribute-event"
74 | version = "0.21.0"
75 | source = "registry+https://github.com/rust-lang/crates.io-index"
76 | checksum = "8437fd23a6c92e0d7ee6378aef4e95596976008eb3a0be100ac832b7b3eaf240"
77 | dependencies = [
78 | "anchor-syn",
79 | "anyhow",
80 | "proc-macro2",
81 | "quote",
82 | "syn",
83 | ]
84 |
85 | [[package]]
86 | name = "anchor-attribute-interface"
87 | version = "0.21.0"
88 | source = "registry+https://github.com/rust-lang/crates.io-index"
89 | checksum = "8567efb892ec10df7cb479dc0246257f896b2de1406c6901621d5437080fc041"
90 | dependencies = [
91 | "anchor-syn",
92 | "anyhow",
93 | "heck",
94 | "proc-macro2",
95 | "quote",
96 | "syn",
97 | ]
98 |
99 | [[package]]
100 | name = "anchor-attribute-program"
101 | version = "0.21.0"
102 | source = "registry+https://github.com/rust-lang/crates.io-index"
103 | checksum = "4b8674fa15f24b311451294595034617b96348faed14c821fe191183d46258af"
104 | dependencies = [
105 | "anchor-syn",
106 | "anyhow",
107 | "proc-macro2",
108 | "quote",
109 | "syn",
110 | ]
111 |
112 | [[package]]
113 | name = "anchor-attribute-state"
114 | version = "0.21.0"
115 | source = "registry+https://github.com/rust-lang/crates.io-index"
116 | checksum = "e3921cd5b29b8fe7ff10368a5dd8398f37b1dabef489d18a01a4befd86ce09d6"
117 | dependencies = [
118 | "anchor-syn",
119 | "anyhow",
120 | "proc-macro2",
121 | "quote",
122 | "syn",
123 | ]
124 |
125 | [[package]]
126 | name = "anchor-derive-accounts"
127 | version = "0.21.0"
128 | source = "registry+https://github.com/rust-lang/crates.io-index"
129 | checksum = "5f41be15286b4fc2753cd2dab130ca7c87d81a2817adb7d0af5316715ddf4b46"
130 | dependencies = [
131 | "anchor-syn",
132 | "anyhow",
133 | "proc-macro2",
134 | "quote",
135 | "syn",
136 | ]
137 |
138 | [[package]]
139 | name = "anchor-lang"
140 | version = "0.21.0"
141 | source = "registry+https://github.com/rust-lang/crates.io-index"
142 | checksum = "f4300d151a09cb0c0775cdd63100040c8dba325b406c55ffb4f845f4b78d9e9b"
143 | dependencies = [
144 | "anchor-attribute-access-control",
145 | "anchor-attribute-account",
146 | "anchor-attribute-constant",
147 | "anchor-attribute-error",
148 | "anchor-attribute-event",
149 | "anchor-attribute-interface",
150 | "anchor-attribute-program",
151 | "anchor-attribute-state",
152 | "anchor-derive-accounts",
153 | "arrayref",
154 | "base64 0.13.0",
155 | "bincode",
156 | "borsh",
157 | "bytemuck",
158 | "solana-program",
159 | "thiserror",
160 | ]
161 |
162 | [[package]]
163 | name = "anchor-syn"
164 | version = "0.21.0"
165 | source = "registry+https://github.com/rust-lang/crates.io-index"
166 | checksum = "7c8a4e39f655a9e32037c238f51f09b168a7d56ab6a2727777da81849559c77c"
167 | dependencies = [
168 | "anyhow",
169 | "bs58 0.3.1",
170 | "heck",
171 | "proc-macro2",
172 | "proc-macro2-diagnostics",
173 | "quote",
174 | "serde",
175 | "serde_json",
176 | "sha2",
177 | "syn",
178 | "thiserror",
179 | ]
180 |
181 | [[package]]
182 | name = "anyhow"
183 | version = "1.0.52"
184 | source = "registry+https://github.com/rust-lang/crates.io-index"
185 | checksum = "84450d0b4a8bd1ba4144ce8ce718fbc5d071358b1e5384bace6536b3d1f2d5b3"
186 |
187 | [[package]]
188 | name = "arrayref"
189 | version = "0.3.6"
190 | source = "registry+https://github.com/rust-lang/crates.io-index"
191 | checksum = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
192 |
193 | [[package]]
194 | name = "arrayvec"
195 | version = "0.7.2"
196 | source = "registry+https://github.com/rust-lang/crates.io-index"
197 | checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6"
198 |
199 | [[package]]
200 | name = "atty"
201 | version = "0.2.14"
202 | source = "registry+https://github.com/rust-lang/crates.io-index"
203 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
204 | dependencies = [
205 | "hermit-abi",
206 | "libc",
207 | "winapi",
208 | ]
209 |
210 | [[package]]
211 | name = "autocfg"
212 | version = "1.0.1"
213 | source = "registry+https://github.com/rust-lang/crates.io-index"
214 | checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
215 |
216 | [[package]]
217 | name = "base64"
218 | version = "0.12.3"
219 | source = "registry+https://github.com/rust-lang/crates.io-index"
220 | checksum = "3441f0f7b02788e948e47f457ca01f1d7e6d92c693bc132c22b087d3141c03ff"
221 |
222 | [[package]]
223 | name = "base64"
224 | version = "0.13.0"
225 | source = "registry+https://github.com/rust-lang/crates.io-index"
226 | checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
227 |
228 | [[package]]
229 | name = "bincode"
230 | version = "1.3.3"
231 | source = "registry+https://github.com/rust-lang/crates.io-index"
232 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
233 | dependencies = [
234 | "serde",
235 | ]
236 |
237 | [[package]]
238 | name = "bitflags"
239 | version = "1.3.2"
240 | source = "registry+https://github.com/rust-lang/crates.io-index"
241 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
242 |
243 | [[package]]
244 | name = "blake3"
245 | version = "1.3.0"
246 | source = "registry+https://github.com/rust-lang/crates.io-index"
247 | checksum = "882e99e4a0cb2ae6cb6e442102e8e6b7131718d94110e64c3e6a34ea9b106f37"
248 | dependencies = [
249 | "arrayref",
250 | "arrayvec",
251 | "cc",
252 | "cfg-if",
253 | "constant_time_eq",
254 | "digest 0.10.1",
255 | ]
256 |
257 | [[package]]
258 | name = "block-buffer"
259 | version = "0.9.0"
260 | source = "registry+https://github.com/rust-lang/crates.io-index"
261 | checksum = "4152116fd6e9dadb291ae18fc1ec3575ed6d84c29642d97890f4b4a3417297e4"
262 | dependencies = [
263 | "block-padding",
264 | "generic-array",
265 | ]
266 |
267 | [[package]]
268 | name = "block-buffer"
269 | version = "0.10.0"
270 | source = "registry+https://github.com/rust-lang/crates.io-index"
271 | checksum = "f1d36a02058e76b040de25a4464ba1c80935655595b661505c8b39b664828b95"
272 | dependencies = [
273 | "generic-array",
274 | ]
275 |
276 | [[package]]
277 | name = "block-padding"
278 | version = "0.2.1"
279 | source = "registry+https://github.com/rust-lang/crates.io-index"
280 | checksum = "8d696c370c750c948ada61c69a0ee2cbbb9c50b1019ddb86d9317157a99c2cae"
281 |
282 | [[package]]
283 | name = "borsh"
284 | version = "0.9.1"
285 | source = "registry+https://github.com/rust-lang/crates.io-index"
286 | checksum = "18dda7dc709193c0d86a1a51050a926dc3df1cf262ec46a23a25dba421ea1924"
287 | dependencies = [
288 | "borsh-derive",
289 | "hashbrown",
290 | ]
291 |
292 | [[package]]
293 | name = "borsh-derive"
294 | version = "0.9.1"
295 | source = "registry+https://github.com/rust-lang/crates.io-index"
296 | checksum = "684155372435f578c0fa1acd13ebbb182cc19d6b38b64ae7901da4393217d264"
297 | dependencies = [
298 | "borsh-derive-internal",
299 | "borsh-schema-derive-internal",
300 | "proc-macro-crate",
301 | "proc-macro2",
302 | "syn",
303 | ]
304 |
305 | [[package]]
306 | name = "borsh-derive-internal"
307 | version = "0.9.1"
308 | source = "registry+https://github.com/rust-lang/crates.io-index"
309 | checksum = "2102f62f8b6d3edeab871830782285b64cc1830168094db05c8e458f209bc5c3"
310 | dependencies = [
311 | "proc-macro2",
312 | "quote",
313 | "syn",
314 | ]
315 |
316 | [[package]]
317 | name = "borsh-schema-derive-internal"
318 | version = "0.9.1"
319 | source = "registry+https://github.com/rust-lang/crates.io-index"
320 | checksum = "196c978c4c9b0b142d446ef3240690bf5a8a33497074a113ff9a337ccb750483"
321 | dependencies = [
322 | "proc-macro2",
323 | "quote",
324 | "syn",
325 | ]
326 |
327 | [[package]]
328 | name = "bs58"
329 | version = "0.3.1"
330 | source = "registry+https://github.com/rust-lang/crates.io-index"
331 | checksum = "476e9cd489f9e121e02ffa6014a8ef220ecb15c05ed23fc34cca13925dc283fb"
332 |
333 | [[package]]
334 | name = "bs58"
335 | version = "0.4.0"
336 | source = "registry+https://github.com/rust-lang/crates.io-index"
337 | checksum = "771fe0050b883fcc3ea2359b1a96bcfbc090b7116eae7c3c512c7a083fdf23d3"
338 |
339 | [[package]]
340 | name = "bumpalo"
341 | version = "3.9.1"
342 | source = "registry+https://github.com/rust-lang/crates.io-index"
343 | checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899"
344 |
345 | [[package]]
346 | name = "bv"
347 | version = "0.11.1"
348 | source = "registry+https://github.com/rust-lang/crates.io-index"
349 | checksum = "8834bb1d8ee5dc048ee3124f2c7c1afcc6bc9aed03f11e9dfd8c69470a5db340"
350 | dependencies = [
351 | "feature-probe",
352 | "serde",
353 | ]
354 |
355 | [[package]]
356 | name = "bytemuck"
357 | version = "1.7.3"
358 | source = "registry+https://github.com/rust-lang/crates.io-index"
359 | checksum = "439989e6b8c38d1b6570a384ef1e49c8848128f5a97f3914baef02920842712f"
360 | dependencies = [
361 | "bytemuck_derive",
362 | ]
363 |
364 | [[package]]
365 | name = "bytemuck_derive"
366 | version = "1.0.1"
367 | source = "registry+https://github.com/rust-lang/crates.io-index"
368 | checksum = "8e215f8c2f9f79cb53c8335e687ffd07d5bfcb6fe5fc80723762d0be46e7cc54"
369 | dependencies = [
370 | "proc-macro2",
371 | "quote",
372 | "syn",
373 | ]
374 |
375 | [[package]]
376 | name = "byteorder"
377 | version = "1.4.3"
378 | source = "registry+https://github.com/rust-lang/crates.io-index"
379 | checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
380 |
381 | [[package]]
382 | name = "cc"
383 | version = "1.0.72"
384 | source = "registry+https://github.com/rust-lang/crates.io-index"
385 | checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee"
386 |
387 | [[package]]
388 | name = "cfg-if"
389 | version = "1.0.0"
390 | source = "registry+https://github.com/rust-lang/crates.io-index"
391 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
392 |
393 | [[package]]
394 | name = "console_error_panic_hook"
395 | version = "0.1.7"
396 | source = "registry+https://github.com/rust-lang/crates.io-index"
397 | checksum = "a06aeb73f470f66dcdbf7223caeebb85984942f22f1adb2a088cf9668146bbbc"
398 | dependencies = [
399 | "cfg-if",
400 | "wasm-bindgen",
401 | ]
402 |
403 | [[package]]
404 | name = "console_log"
405 | version = "0.2.0"
406 | source = "registry+https://github.com/rust-lang/crates.io-index"
407 | checksum = "501a375961cef1a0d44767200e66e4a559283097e91d0730b1d75dfb2f8a1494"
408 | dependencies = [
409 | "log",
410 | "web-sys",
411 | ]
412 |
413 | [[package]]
414 | name = "constant_time_eq"
415 | version = "0.1.5"
416 | source = "registry+https://github.com/rust-lang/crates.io-index"
417 | checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
418 |
419 | [[package]]
420 | name = "cpufeatures"
421 | version = "0.2.1"
422 | source = "registry+https://github.com/rust-lang/crates.io-index"
423 | checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"
424 | dependencies = [
425 | "libc",
426 | ]
427 |
428 | [[package]]
429 | name = "crunchy"
430 | version = "0.2.2"
431 | source = "registry+https://github.com/rust-lang/crates.io-index"
432 | checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7"
433 |
434 | [[package]]
435 | name = "crypto-common"
436 | version = "0.1.1"
437 | source = "registry+https://github.com/rust-lang/crates.io-index"
438 | checksum = "683d6b536309245c849479fba3da410962a43ed8e51c26b729208ec0ac2798d0"
439 | dependencies = [
440 | "generic-array",
441 | ]
442 |
443 | [[package]]
444 | name = "crypto-mac"
445 | version = "0.8.0"
446 | source = "registry+https://github.com/rust-lang/crates.io-index"
447 | checksum = "b584a330336237c1eecd3e94266efb216c56ed91225d634cb2991c5f3fd1aeab"
448 | dependencies = [
449 | "generic-array",
450 | "subtle",
451 | ]
452 |
453 | [[package]]
454 | name = "curve25519-dalek"
455 | version = "3.2.0"
456 | source = "registry+https://github.com/rust-lang/crates.io-index"
457 | checksum = "0b9fdf9972b2bd6af2d913799d9ebc165ea4d2e65878e329d9c6b372c4491b61"
458 | dependencies = [
459 | "byteorder",
460 | "digest 0.9.0",
461 | "rand_core",
462 | "subtle",
463 | "zeroize",
464 | ]
465 |
466 | [[package]]
467 | name = "digest"
468 | version = "0.9.0"
469 | source = "registry+https://github.com/rust-lang/crates.io-index"
470 | checksum = "d3dd60d1080a57a05ab032377049e0591415d2b31afd7028356dbf3cc6dcb066"
471 | dependencies = [
472 | "generic-array",
473 | ]
474 |
475 | [[package]]
476 | name = "digest"
477 | version = "0.10.1"
478 | source = "registry+https://github.com/rust-lang/crates.io-index"
479 | checksum = "b697d66081d42af4fba142d56918a3cb21dc8eb63372c6b85d14f44fb9c5979b"
480 | dependencies = [
481 | "block-buffer 0.10.0",
482 | "crypto-common",
483 | "generic-array",
484 | "subtle",
485 | ]
486 |
487 | [[package]]
488 | name = "either"
489 | version = "1.6.1"
490 | source = "registry+https://github.com/rust-lang/crates.io-index"
491 | checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
492 |
493 | [[package]]
494 | name = "env_logger"
495 | version = "0.9.0"
496 | source = "registry+https://github.com/rust-lang/crates.io-index"
497 | checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3"
498 | dependencies = [
499 | "atty",
500 | "humantime",
501 | "log",
502 | "regex",
503 | "termcolor",
504 | ]
505 |
506 | [[package]]
507 | name = "feature-probe"
508 | version = "0.1.1"
509 | source = "registry+https://github.com/rust-lang/crates.io-index"
510 | checksum = "835a3dc7d1ec9e75e2b5fb4ba75396837112d2060b03f7d43bc1897c7f7211da"
511 |
512 | [[package]]
513 | name = "generic-array"
514 | version = "0.14.5"
515 | source = "registry+https://github.com/rust-lang/crates.io-index"
516 | checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
517 | dependencies = [
518 | "serde",
519 | "typenum",
520 | "version_check",
521 | ]
522 |
523 | [[package]]
524 | name = "getrandom"
525 | version = "0.1.16"
526 | source = "registry+https://github.com/rust-lang/crates.io-index"
527 | checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
528 | dependencies = [
529 | "cfg-if",
530 | "js-sys",
531 | "libc",
532 | "wasi",
533 | "wasm-bindgen",
534 | ]
535 |
536 | [[package]]
537 | name = "hashbrown"
538 | version = "0.9.1"
539 | source = "registry+https://github.com/rust-lang/crates.io-index"
540 | checksum = "d7afe4a420e3fe79967a00898cc1f4db7c8a49a9333a29f8a4bd76a253d5cd04"
541 | dependencies = [
542 | "ahash",
543 | ]
544 |
545 | [[package]]
546 | name = "heck"
547 | version = "0.3.3"
548 | source = "registry+https://github.com/rust-lang/crates.io-index"
549 | checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c"
550 | dependencies = [
551 | "unicode-segmentation",
552 | ]
553 |
554 | [[package]]
555 | name = "hermit-abi"
556 | version = "0.1.19"
557 | source = "registry+https://github.com/rust-lang/crates.io-index"
558 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
559 | dependencies = [
560 | "libc",
561 | ]
562 |
563 | [[package]]
564 | name = "hmac"
565 | version = "0.8.1"
566 | source = "registry+https://github.com/rust-lang/crates.io-index"
567 | checksum = "126888268dcc288495a26bf004b38c5fdbb31682f992c84ceb046a1f0fe38840"
568 | dependencies = [
569 | "crypto-mac",
570 | "digest 0.9.0",
571 | ]
572 |
573 | [[package]]
574 | name = "hmac-drbg"
575 | version = "0.3.0"
576 | source = "registry+https://github.com/rust-lang/crates.io-index"
577 | checksum = "17ea0a1394df5b6574da6e0c1ade9e78868c9fb0a4e5ef4428e32da4676b85b1"
578 | dependencies = [
579 | "digest 0.9.0",
580 | "generic-array",
581 | "hmac",
582 | ]
583 |
584 | [[package]]
585 | name = "humantime"
586 | version = "2.1.0"
587 | source = "registry+https://github.com/rust-lang/crates.io-index"
588 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4"
589 |
590 | [[package]]
591 | name = "instant"
592 | version = "0.1.12"
593 | source = "registry+https://github.com/rust-lang/crates.io-index"
594 | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
595 | dependencies = [
596 | "cfg-if",
597 | ]
598 |
599 | [[package]]
600 | name = "itertools"
601 | version = "0.10.3"
602 | source = "registry+https://github.com/rust-lang/crates.io-index"
603 | checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3"
604 | dependencies = [
605 | "either",
606 | ]
607 |
608 | [[package]]
609 | name = "itoa"
610 | version = "1.0.1"
611 | source = "registry+https://github.com/rust-lang/crates.io-index"
612 | checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
613 |
614 | [[package]]
615 | name = "js-sys"
616 | version = "0.3.55"
617 | source = "registry+https://github.com/rust-lang/crates.io-index"
618 | checksum = "7cc9ffccd38c451a86bf13657df244e9c3f37493cce8e5e21e940963777acc84"
619 | dependencies = [
620 | "wasm-bindgen",
621 | ]
622 |
623 | [[package]]
624 | name = "keccak"
625 | version = "0.1.0"
626 | source = "registry+https://github.com/rust-lang/crates.io-index"
627 | checksum = "67c21572b4949434e4fc1e1978b99c5f77064153c59d998bf13ecd96fb5ecba7"
628 |
629 | [[package]]
630 | name = "lazy_static"
631 | version = "1.4.0"
632 | source = "registry+https://github.com/rust-lang/crates.io-index"
633 | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
634 |
635 | [[package]]
636 | name = "libc"
637 | version = "0.2.112"
638 | source = "registry+https://github.com/rust-lang/crates.io-index"
639 | checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125"
640 |
641 | [[package]]
642 | name = "libsecp256k1"
643 | version = "0.6.0"
644 | source = "registry+https://github.com/rust-lang/crates.io-index"
645 | checksum = "c9d220bc1feda2ac231cb78c3d26f27676b8cf82c96971f7aeef3d0cf2797c73"
646 | dependencies = [
647 | "arrayref",
648 | "base64 0.12.3",
649 | "digest 0.9.0",
650 | "hmac-drbg",
651 | "libsecp256k1-core",
652 | "libsecp256k1-gen-ecmult",
653 | "libsecp256k1-gen-genmult",
654 | "rand",
655 | "serde",
656 | "sha2",
657 | "typenum",
658 | ]
659 |
660 | [[package]]
661 | name = "libsecp256k1-core"
662 | version = "0.2.2"
663 | source = "registry+https://github.com/rust-lang/crates.io-index"
664 | checksum = "d0f6ab710cec28cef759c5f18671a27dae2a5f952cdaaee1d8e2908cb2478a80"
665 | dependencies = [
666 | "crunchy",
667 | "digest 0.9.0",
668 | "subtle",
669 | ]
670 |
671 | [[package]]
672 | name = "libsecp256k1-gen-ecmult"
673 | version = "0.2.1"
674 | source = "registry+https://github.com/rust-lang/crates.io-index"
675 | checksum = "ccab96b584d38fac86a83f07e659f0deafd0253dc096dab5a36d53efe653c5c3"
676 | dependencies = [
677 | "libsecp256k1-core",
678 | ]
679 |
680 | [[package]]
681 | name = "libsecp256k1-gen-genmult"
682 | version = "0.2.1"
683 | source = "registry+https://github.com/rust-lang/crates.io-index"
684 | checksum = "67abfe149395e3aa1c48a2beb32b068e2334402df8181f818d3aee2b304c4f5d"
685 | dependencies = [
686 | "libsecp256k1-core",
687 | ]
688 |
689 | [[package]]
690 | name = "lock_api"
691 | version = "0.4.5"
692 | source = "registry+https://github.com/rust-lang/crates.io-index"
693 | checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
694 | dependencies = [
695 | "scopeguard",
696 | ]
697 |
698 | [[package]]
699 | name = "log"
700 | version = "0.4.14"
701 | source = "registry+https://github.com/rust-lang/crates.io-index"
702 | checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
703 | dependencies = [
704 | "cfg-if",
705 | ]
706 |
707 | [[package]]
708 | name = "memchr"
709 | version = "2.4.1"
710 | source = "registry+https://github.com/rust-lang/crates.io-index"
711 | checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
712 |
713 | [[package]]
714 | name = "memmap2"
715 | version = "0.5.2"
716 | source = "registry+https://github.com/rust-lang/crates.io-index"
717 | checksum = "fe3179b85e1fd8b14447cbebadb75e45a1002f541b925f0bfec366d56a81c56d"
718 | dependencies = [
719 | "libc",
720 | ]
721 |
722 | [[package]]
723 | name = "num-derive"
724 | version = "0.3.3"
725 | source = "registry+https://github.com/rust-lang/crates.io-index"
726 | checksum = "876a53fff98e03a936a674b29568b0e605f06b29372c2489ff4de23f1949743d"
727 | dependencies = [
728 | "proc-macro2",
729 | "quote",
730 | "syn",
731 | ]
732 |
733 | [[package]]
734 | name = "num-traits"
735 | version = "0.2.14"
736 | source = "registry+https://github.com/rust-lang/crates.io-index"
737 | checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
738 | dependencies = [
739 | "autocfg",
740 | ]
741 |
742 | [[package]]
743 | name = "opaque-debug"
744 | version = "0.3.0"
745 | source = "registry+https://github.com/rust-lang/crates.io-index"
746 | checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
747 |
748 | [[package]]
749 | name = "parking_lot"
750 | version = "0.11.2"
751 | source = "registry+https://github.com/rust-lang/crates.io-index"
752 | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
753 | dependencies = [
754 | "instant",
755 | "lock_api",
756 | "parking_lot_core",
757 | ]
758 |
759 | [[package]]
760 | name = "parking_lot_core"
761 | version = "0.8.5"
762 | source = "registry+https://github.com/rust-lang/crates.io-index"
763 | checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
764 | dependencies = [
765 | "cfg-if",
766 | "instant",
767 | "libc",
768 | "redox_syscall",
769 | "smallvec",
770 | "winapi",
771 | ]
772 |
773 | [[package]]
774 | name = "ppv-lite86"
775 | version = "0.2.16"
776 | source = "registry+https://github.com/rust-lang/crates.io-index"
777 | checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872"
778 |
779 | [[package]]
780 | name = "proc-macro-crate"
781 | version = "0.1.5"
782 | source = "registry+https://github.com/rust-lang/crates.io-index"
783 | checksum = "1d6ea3c4595b96363c13943497db34af4460fb474a95c43f4446ad341b8c9785"
784 | dependencies = [
785 | "toml",
786 | ]
787 |
788 | [[package]]
789 | name = "proc-macro2"
790 | version = "1.0.36"
791 | source = "registry+https://github.com/rust-lang/crates.io-index"
792 | checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029"
793 | dependencies = [
794 | "unicode-xid",
795 | ]
796 |
797 | [[package]]
798 | name = "proc-macro2-diagnostics"
799 | version = "0.9.1"
800 | source = "registry+https://github.com/rust-lang/crates.io-index"
801 | checksum = "4bf29726d67464d49fa6224a1d07936a8c08bb3fba727c7493f6cf1616fdaada"
802 | dependencies = [
803 | "proc-macro2",
804 | "quote",
805 | "syn",
806 | "version_check",
807 | "yansi",
808 | ]
809 |
810 | [[package]]
811 | name = "quote"
812 | version = "1.0.14"
813 | source = "registry+https://github.com/rust-lang/crates.io-index"
814 | checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d"
815 | dependencies = [
816 | "proc-macro2",
817 | ]
818 |
819 | [[package]]
820 | name = "rand"
821 | version = "0.7.3"
822 | source = "registry+https://github.com/rust-lang/crates.io-index"
823 | checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
824 | dependencies = [
825 | "getrandom",
826 | "libc",
827 | "rand_chacha",
828 | "rand_core",
829 | "rand_hc",
830 | ]
831 |
832 | [[package]]
833 | name = "rand_chacha"
834 | version = "0.2.2"
835 | source = "registry+https://github.com/rust-lang/crates.io-index"
836 | checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
837 | dependencies = [
838 | "ppv-lite86",
839 | "rand_core",
840 | ]
841 |
842 | [[package]]
843 | name = "rand_core"
844 | version = "0.5.1"
845 | source = "registry+https://github.com/rust-lang/crates.io-index"
846 | checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
847 | dependencies = [
848 | "getrandom",
849 | ]
850 |
851 | [[package]]
852 | name = "rand_hc"
853 | version = "0.2.0"
854 | source = "registry+https://github.com/rust-lang/crates.io-index"
855 | checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
856 | dependencies = [
857 | "rand_core",
858 | ]
859 |
860 | [[package]]
861 | name = "redox_syscall"
862 | version = "0.2.10"
863 | source = "registry+https://github.com/rust-lang/crates.io-index"
864 | checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
865 | dependencies = [
866 | "bitflags",
867 | ]
868 |
869 | [[package]]
870 | name = "regex"
871 | version = "1.5.4"
872 | source = "registry+https://github.com/rust-lang/crates.io-index"
873 | checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
874 | dependencies = [
875 | "aho-corasick",
876 | "memchr",
877 | "regex-syntax",
878 | ]
879 |
880 | [[package]]
881 | name = "regex-syntax"
882 | version = "0.6.25"
883 | source = "registry+https://github.com/rust-lang/crates.io-index"
884 | checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
885 |
886 | [[package]]
887 | name = "rustc_version"
888 | version = "0.4.0"
889 | source = "registry+https://github.com/rust-lang/crates.io-index"
890 | checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
891 | dependencies = [
892 | "semver",
893 | ]
894 |
895 | [[package]]
896 | name = "rustversion"
897 | version = "1.0.6"
898 | source = "registry+https://github.com/rust-lang/crates.io-index"
899 | checksum = "f2cc38e8fa666e2de3c4aba7edeb5ffc5246c1c2ed0e3d17e560aeeba736b23f"
900 |
901 | [[package]]
902 | name = "ryu"
903 | version = "1.0.9"
904 | source = "registry+https://github.com/rust-lang/crates.io-index"
905 | checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
906 |
907 | [[package]]
908 | name = "scopeguard"
909 | version = "1.1.0"
910 | source = "registry+https://github.com/rust-lang/crates.io-index"
911 | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
912 |
913 | [[package]]
914 | name = "semver"
915 | version = "1.0.4"
916 | source = "registry+https://github.com/rust-lang/crates.io-index"
917 | checksum = "568a8e6258aa33c13358f81fd834adb854c6f7c9468520910a9b1e8fac068012"
918 |
919 | [[package]]
920 | name = "serde"
921 | version = "1.0.133"
922 | source = "registry+https://github.com/rust-lang/crates.io-index"
923 | checksum = "97565067517b60e2d1ea8b268e59ce036de907ac523ad83a0475da04e818989a"
924 | dependencies = [
925 | "serde_derive",
926 | ]
927 |
928 | [[package]]
929 | name = "serde_bytes"
930 | version = "0.11.5"
931 | source = "registry+https://github.com/rust-lang/crates.io-index"
932 | checksum = "16ae07dd2f88a366f15bd0632ba725227018c69a1c8550a927324f8eb8368bb9"
933 | dependencies = [
934 | "serde",
935 | ]
936 |
937 | [[package]]
938 | name = "serde_derive"
939 | version = "1.0.133"
940 | source = "registry+https://github.com/rust-lang/crates.io-index"
941 | checksum = "ed201699328568d8d08208fdd080e3ff594e6c422e438b6705905da01005d537"
942 | dependencies = [
943 | "proc-macro2",
944 | "quote",
945 | "syn",
946 | ]
947 |
948 | [[package]]
949 | name = "serde_json"
950 | version = "1.0.74"
951 | source = "registry+https://github.com/rust-lang/crates.io-index"
952 | checksum = "ee2bb9cd061c5865d345bb02ca49fcef1391741b672b54a0bf7b679badec3142"
953 | dependencies = [
954 | "itoa",
955 | "ryu",
956 | "serde",
957 | ]
958 |
959 | [[package]]
960 | name = "sha2"
961 | version = "0.9.9"
962 | source = "registry+https://github.com/rust-lang/crates.io-index"
963 | checksum = "4d58a1e1bf39749807d89cf2d98ac2dfa0ff1cb3faa38fbb64dd88ac8013d800"
964 | dependencies = [
965 | "block-buffer 0.9.0",
966 | "cfg-if",
967 | "cpufeatures",
968 | "digest 0.9.0",
969 | "opaque-debug",
970 | ]
971 |
972 | [[package]]
973 | name = "sha3"
974 | version = "0.9.1"
975 | source = "registry+https://github.com/rust-lang/crates.io-index"
976 | checksum = "f81199417d4e5de3f04b1e871023acea7389672c4135918f05aa9cbf2f2fa809"
977 | dependencies = [
978 | "block-buffer 0.9.0",
979 | "digest 0.9.0",
980 | "keccak",
981 | "opaque-debug",
982 | ]
983 |
984 | [[package]]
985 | name = "smallvec"
986 | version = "1.8.0"
987 | source = "registry+https://github.com/rust-lang/crates.io-index"
988 | checksum = "f2dd574626839106c320a323308629dcb1acfc96e32a8cba364ddc61ac23ee83"
989 |
990 | [[package]]
991 | name = "solana-frozen-abi"
992 | version = "1.9.4"
993 | source = "registry+https://github.com/rust-lang/crates.io-index"
994 | checksum = "c89bcde59ac3e8d4dbf7c4d990b0627b8ca0d25394c4ce17896dde7a1452e40c"
995 | dependencies = [
996 | "bs58 0.4.0",
997 | "bv",
998 | "generic-array",
999 | "log",
1000 | "memmap2",
1001 | "rustc_version",
1002 | "serde",
1003 | "serde_derive",
1004 | "sha2",
1005 | "solana-frozen-abi-macro",
1006 | "solana-logger",
1007 | "thiserror",
1008 | ]
1009 |
1010 | [[package]]
1011 | name = "solana-frozen-abi-macro"
1012 | version = "1.9.4"
1013 | source = "registry+https://github.com/rust-lang/crates.io-index"
1014 | checksum = "56a7d630da35993631ecc4dd155f92d0d58000cdde3d5e2764fe9fd49d20a3a8"
1015 | dependencies = [
1016 | "proc-macro2",
1017 | "quote",
1018 | "rustc_version",
1019 | "syn",
1020 | ]
1021 |
1022 | [[package]]
1023 | name = "solana-logger"
1024 | version = "1.9.4"
1025 | source = "registry+https://github.com/rust-lang/crates.io-index"
1026 | checksum = "6eaf925bb665de46f96fcea2c8a900d0d870a96fd1f50cf2bad16e22a1da71c4"
1027 | dependencies = [
1028 | "env_logger",
1029 | "lazy_static",
1030 | "log",
1031 | ]
1032 |
1033 | [[package]]
1034 | name = "solana-program"
1035 | version = "1.9.4"
1036 | source = "registry+https://github.com/rust-lang/crates.io-index"
1037 | checksum = "2fc4d7a0baa649a3bda06d6a1cc30bd3d8ac692702a75fa8e76369cf7b3f6329"
1038 | dependencies = [
1039 | "base64 0.13.0",
1040 | "bincode",
1041 | "bitflags",
1042 | "blake3",
1043 | "borsh",
1044 | "borsh-derive",
1045 | "bs58 0.4.0",
1046 | "bv",
1047 | "bytemuck",
1048 | "console_error_panic_hook",
1049 | "console_log",
1050 | "curve25519-dalek",
1051 | "getrandom",
1052 | "itertools",
1053 | "js-sys",
1054 | "lazy_static",
1055 | "libsecp256k1",
1056 | "log",
1057 | "num-derive",
1058 | "num-traits",
1059 | "parking_lot",
1060 | "rand",
1061 | "rustc_version",
1062 | "rustversion",
1063 | "serde",
1064 | "serde_bytes",
1065 | "serde_derive",
1066 | "sha2",
1067 | "sha3",
1068 | "solana-frozen-abi",
1069 | "solana-frozen-abi-macro",
1070 | "solana-logger",
1071 | "solana-sdk-macro",
1072 | "thiserror",
1073 | "wasm-bindgen",
1074 | ]
1075 |
1076 | [[package]]
1077 | name = "solana-sdk-macro"
1078 | version = "1.9.4"
1079 | source = "registry+https://github.com/rust-lang/crates.io-index"
1080 | checksum = "ec22a924c73abe3376a2046715a2f6a9ae4094095b8ea08e8e56e8de198264ad"
1081 | dependencies = [
1082 | "bs58 0.4.0",
1083 | "proc-macro2",
1084 | "quote",
1085 | "rustversion",
1086 | "syn",
1087 | ]
1088 |
1089 | [[package]]
1090 | name = "solana-twitter"
1091 | version = "0.1.0"
1092 | dependencies = [
1093 | "anchor-lang",
1094 | ]
1095 |
1096 | [[package]]
1097 | name = "subtle"
1098 | version = "2.4.1"
1099 | source = "registry+https://github.com/rust-lang/crates.io-index"
1100 | checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
1101 |
1102 | [[package]]
1103 | name = "syn"
1104 | version = "1.0.85"
1105 | source = "registry+https://github.com/rust-lang/crates.io-index"
1106 | checksum = "a684ac3dcd8913827e18cd09a68384ee66c1de24157e3c556c9ab16d85695fb7"
1107 | dependencies = [
1108 | "proc-macro2",
1109 | "quote",
1110 | "unicode-xid",
1111 | ]
1112 |
1113 | [[package]]
1114 | name = "termcolor"
1115 | version = "1.1.2"
1116 | source = "registry+https://github.com/rust-lang/crates.io-index"
1117 | checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4"
1118 | dependencies = [
1119 | "winapi-util",
1120 | ]
1121 |
1122 | [[package]]
1123 | name = "thiserror"
1124 | version = "1.0.30"
1125 | source = "registry+https://github.com/rust-lang/crates.io-index"
1126 | checksum = "854babe52e4df1653706b98fcfc05843010039b406875930a70e4d9644e5c417"
1127 | dependencies = [
1128 | "thiserror-impl",
1129 | ]
1130 |
1131 | [[package]]
1132 | name = "thiserror-impl"
1133 | version = "1.0.30"
1134 | source = "registry+https://github.com/rust-lang/crates.io-index"
1135 | checksum = "aa32fd3f627f367fe16f893e2597ae3c05020f8bba2666a4e6ea73d377e5714b"
1136 | dependencies = [
1137 | "proc-macro2",
1138 | "quote",
1139 | "syn",
1140 | ]
1141 |
1142 | [[package]]
1143 | name = "toml"
1144 | version = "0.5.8"
1145 | source = "registry+https://github.com/rust-lang/crates.io-index"
1146 | checksum = "a31142970826733df8241ef35dc040ef98c679ab14d7c3e54d827099b3acecaa"
1147 | dependencies = [
1148 | "serde",
1149 | ]
1150 |
1151 | [[package]]
1152 | name = "typenum"
1153 | version = "1.15.0"
1154 | source = "registry+https://github.com/rust-lang/crates.io-index"
1155 | checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
1156 |
1157 | [[package]]
1158 | name = "unicode-segmentation"
1159 | version = "1.8.0"
1160 | source = "registry+https://github.com/rust-lang/crates.io-index"
1161 | checksum = "8895849a949e7845e06bd6dc1aa51731a103c42707010a5b591c0038fb73385b"
1162 |
1163 | [[package]]
1164 | name = "unicode-xid"
1165 | version = "0.2.2"
1166 | source = "registry+https://github.com/rust-lang/crates.io-index"
1167 | checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
1168 |
1169 | [[package]]
1170 | name = "version_check"
1171 | version = "0.9.4"
1172 | source = "registry+https://github.com/rust-lang/crates.io-index"
1173 | checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
1174 |
1175 | [[package]]
1176 | name = "wasi"
1177 | version = "0.9.0+wasi-snapshot-preview1"
1178 | source = "registry+https://github.com/rust-lang/crates.io-index"
1179 | checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
1180 |
1181 | [[package]]
1182 | name = "wasm-bindgen"
1183 | version = "0.2.78"
1184 | source = "registry+https://github.com/rust-lang/crates.io-index"
1185 | checksum = "632f73e236b219150ea279196e54e610f5dbafa5d61786303d4da54f84e47fce"
1186 | dependencies = [
1187 | "cfg-if",
1188 | "wasm-bindgen-macro",
1189 | ]
1190 |
1191 | [[package]]
1192 | name = "wasm-bindgen-backend"
1193 | version = "0.2.78"
1194 | source = "registry+https://github.com/rust-lang/crates.io-index"
1195 | checksum = "a317bf8f9fba2476b4b2c85ef4c4af8ff39c3c7f0cdfeed4f82c34a880aa837b"
1196 | dependencies = [
1197 | "bumpalo",
1198 | "lazy_static",
1199 | "log",
1200 | "proc-macro2",
1201 | "quote",
1202 | "syn",
1203 | "wasm-bindgen-shared",
1204 | ]
1205 |
1206 | [[package]]
1207 | name = "wasm-bindgen-macro"
1208 | version = "0.2.78"
1209 | source = "registry+https://github.com/rust-lang/crates.io-index"
1210 | checksum = "d56146e7c495528bf6587663bea13a8eb588d39b36b679d83972e1a2dbbdacf9"
1211 | dependencies = [
1212 | "quote",
1213 | "wasm-bindgen-macro-support",
1214 | ]
1215 |
1216 | [[package]]
1217 | name = "wasm-bindgen-macro-support"
1218 | version = "0.2.78"
1219 | source = "registry+https://github.com/rust-lang/crates.io-index"
1220 | checksum = "7803e0eea25835f8abdc585cd3021b3deb11543c6fe226dcd30b228857c5c5ab"
1221 | dependencies = [
1222 | "proc-macro2",
1223 | "quote",
1224 | "syn",
1225 | "wasm-bindgen-backend",
1226 | "wasm-bindgen-shared",
1227 | ]
1228 |
1229 | [[package]]
1230 | name = "wasm-bindgen-shared"
1231 | version = "0.2.78"
1232 | source = "registry+https://github.com/rust-lang/crates.io-index"
1233 | checksum = "0237232789cf037d5480773fe568aac745bfe2afbc11a863e97901780a6b47cc"
1234 |
1235 | [[package]]
1236 | name = "web-sys"
1237 | version = "0.3.55"
1238 | source = "registry+https://github.com/rust-lang/crates.io-index"
1239 | checksum = "38eb105f1c59d9eaa6b5cdc92b859d85b926e82cb2e0945cd0c9259faa6fe9fb"
1240 | dependencies = [
1241 | "js-sys",
1242 | "wasm-bindgen",
1243 | ]
1244 |
1245 | [[package]]
1246 | name = "winapi"
1247 | version = "0.3.9"
1248 | source = "registry+https://github.com/rust-lang/crates.io-index"
1249 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
1250 | dependencies = [
1251 | "winapi-i686-pc-windows-gnu",
1252 | "winapi-x86_64-pc-windows-gnu",
1253 | ]
1254 |
1255 | [[package]]
1256 | name = "winapi-i686-pc-windows-gnu"
1257 | version = "0.4.0"
1258 | source = "registry+https://github.com/rust-lang/crates.io-index"
1259 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
1260 |
1261 | [[package]]
1262 | name = "winapi-util"
1263 | version = "0.1.5"
1264 | source = "registry+https://github.com/rust-lang/crates.io-index"
1265 | checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
1266 | dependencies = [
1267 | "winapi",
1268 | ]
1269 |
1270 | [[package]]
1271 | name = "winapi-x86_64-pc-windows-gnu"
1272 | version = "0.4.0"
1273 | source = "registry+https://github.com/rust-lang/crates.io-index"
1274 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1275 |
1276 | [[package]]
1277 | name = "yansi"
1278 | version = "0.5.0"
1279 | source = "registry+https://github.com/rust-lang/crates.io-index"
1280 | checksum = "9fc79f4a1e39857fc00c3f662cbf2651c771f00e9c15fe2abc341806bd46bd71"
1281 |
1282 | [[package]]
1283 | name = "zeroize"
1284 | version = "1.5.0"
1285 | source = "registry+https://github.com/rust-lang/crates.io-index"
1286 | checksum = "cc222aec311c323c717f56060324f32b82da1ce1dd81d9a09aa6a9030bfe08db"
1287 |
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [workspace]
2 | members = [
3 | "programs/*"
4 | ]
5 |
--------------------------------------------------------------------------------
/app/.env:
--------------------------------------------------------------------------------
1 | VUE_APP_CLUSTER_URL="http://127.0.0.1:8899"
2 |
--------------------------------------------------------------------------------
/app/.env.devnet:
--------------------------------------------------------------------------------
1 | VUE_APP_CLUSTER_URL="https://api.devnet.solana.com"
2 |
--------------------------------------------------------------------------------
/app/.env.mainnet:
--------------------------------------------------------------------------------
1 | VUE_APP_CLUSTER_URL="https://api.mainnet-beta.solana.com"
2 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /dist
4 |
5 |
6 | # local env files
7 | .env.local
8 | .env.*.local
9 |
10 | # Log files
11 | npm-debug.log*
12 | yarn-debug.log*
13 | yarn-error.log*
14 | pnpm-debug.log*
15 |
16 | # Editor directories and files
17 | .idea
18 | .vscode
19 | *.suo
20 | *.ntvs*
21 | *.njsproj
22 | *.sln
23 | *.sw?
24 |
--------------------------------------------------------------------------------
/app/README.md:
--------------------------------------------------------------------------------
1 | # app
2 |
3 | ## Project setup
4 | ```
5 | npm install
6 | ```
7 |
8 | ### Compiles and hot-reloads for development
9 | ```
10 | npm run serve
11 | ```
12 |
13 | ### Compiles and minifies for production
14 | ```
15 | npm run build
16 | ```
17 |
18 | ### Lints and fixes files
19 | ```
20 | npm run lint
21 | ```
22 |
23 | ### Customize configuration
24 | See [Configuration Reference](https://cli.vuejs.org/config/).
25 |
--------------------------------------------------------------------------------
/app/babel.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | presets: [
3 | '@vue/cli-plugin-babel/preset'
4 | ]
5 | }
6 |
--------------------------------------------------------------------------------
/app/jsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "module": "esnext",
5 | "baseUrl": "./",
6 | "moduleResolution": "node",
7 | "paths": {
8 | "@/*": [
9 | "src/*"
10 | ]
11 | },
12 | "lib": [
13 | "esnext",
14 | "dom",
15 | "dom.iterable",
16 | "scripthost"
17 | ]
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "app",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "serve": "vue-cli-service serve",
7 | "serve:devnet": "vue-cli-service serve --mode devnet",
8 | "serve:mainnet": "vue-cli-service serve --mode mainnet",
9 | "build": "vue-cli-service build",
10 | "build:devnet": "vue-cli-service build --mode devnet",
11 | "build:mainnet": "vue-cli-service build --mode mainnet",
12 | "lint": "vue-cli-service lint"
13 | },
14 | "dependencies": {
15 | "@project-serum/anchor": "^0.21.0",
16 | "@solana/wallet-adapter-wallets": "^0.15.4",
17 | "@solana/web3.js": "^1.31.0",
18 | "autoprefixer": "^10.4.0",
19 | "core-js": "^3.8.3",
20 | "dayjs": "^1.10.7",
21 | "postcss": "^8.4.1",
22 | "solana-wallets-vue": "^0.3.2",
23 | "tailwindcss": "^2.2.19",
24 | "vue": "^3.2.13",
25 | "vue-router": "^4.0.12"
26 | },
27 | "devDependencies": {
28 | "@babel/core": "^7.12.16",
29 | "@babel/eslint-parser": "^7.12.16",
30 | "@vue/cli-plugin-babel": "~5.0.0-rc.1",
31 | "@vue/cli-plugin-eslint": "~5.0.0-rc.1",
32 | "@vue/cli-service": "~5.0.0-rc.1",
33 | "eslint": "^7.32.0",
34 | "eslint-plugin-vue": "^8.0.3"
35 | },
36 | "eslintConfig": {
37 | "root": true,
38 | "env": {
39 | "node": true,
40 | "vue/setup-compiler-macros": true
41 | },
42 | "extends": [
43 | "plugin:vue/vue3-essential",
44 | "eslint:recommended"
45 | ],
46 | "parserOptions": {
47 | "parser": "@babel/eslint-parser"
48 | },
49 | "rules": {
50 | "vue/script-setup-uses-vars": "error"
51 | }
52 | },
53 | "browserslist": [
54 | "> 1%",
55 | "last 2 versions",
56 | "not dead",
57 | "not ie 11"
58 | ]
59 | }
60 |
--------------------------------------------------------------------------------
/app/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/app/public/android-chrome-192x192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorisleiva/solana-twitter/75d654cc6a8d3ee09bbc3506435347f2a768ef0e/app/public/android-chrome-192x192.png
--------------------------------------------------------------------------------
/app/public/android-chrome-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorisleiva/solana-twitter/75d654cc6a8d3ee09bbc3506435347f2a768ef0e/app/public/android-chrome-512x512.png
--------------------------------------------------------------------------------
/app/public/apple-touch-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorisleiva/solana-twitter/75d654cc6a8d3ee09bbc3506435347f2a768ef0e/app/public/apple-touch-icon.png
--------------------------------------------------------------------------------
/app/public/browserconfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | #ec4899
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/public/favicon-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorisleiva/solana-twitter/75d654cc6a8d3ee09bbc3506435347f2a768ef0e/app/public/favicon-16x16.png
--------------------------------------------------------------------------------
/app/public/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorisleiva/solana-twitter/75d654cc6a8d3ee09bbc3506435347f2a768ef0e/app/public/favicon-32x32.png
--------------------------------------------------------------------------------
/app/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorisleiva/solana-twitter/75d654cc6a8d3ee09bbc3506435347f2a768ef0e/app/public/favicon.ico
--------------------------------------------------------------------------------
/app/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | Solana Twitter
15 |
16 |
17 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/app/public/mstile-144x144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorisleiva/solana-twitter/75d654cc6a8d3ee09bbc3506435347f2a768ef0e/app/public/mstile-144x144.png
--------------------------------------------------------------------------------
/app/public/mstile-150x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorisleiva/solana-twitter/75d654cc6a8d3ee09bbc3506435347f2a768ef0e/app/public/mstile-150x150.png
--------------------------------------------------------------------------------
/app/public/mstile-310x150.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorisleiva/solana-twitter/75d654cc6a8d3ee09bbc3506435347f2a768ef0e/app/public/mstile-310x150.png
--------------------------------------------------------------------------------
/app/public/mstile-310x310.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorisleiva/solana-twitter/75d654cc6a8d3ee09bbc3506435347f2a768ef0e/app/public/mstile-310x310.png
--------------------------------------------------------------------------------
/app/public/mstile-70x70.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorisleiva/solana-twitter/75d654cc6a8d3ee09bbc3506435347f2a768ef0e/app/public/mstile-70x70.png
--------------------------------------------------------------------------------
/app/public/safari-pinned-tab.svg:
--------------------------------------------------------------------------------
1 |
2 |
4 |
27 |
--------------------------------------------------------------------------------
/app/public/site.webmanifest:
--------------------------------------------------------------------------------
1 | {
2 | "name": "",
3 | "short_name": "",
4 | "icons": [
5 | {
6 | "src": "/android-chrome-192x192.png",
7 | "sizes": "192x192",
8 | "type": "image/png"
9 | },
10 | {
11 | "src": "/android-chrome-512x512.png",
12 | "sizes": "512x512",
13 | "type": "image/png"
14 | }
15 | ],
16 | "theme_color": "#ffffff",
17 | "background_color": "#ffffff",
18 | "display": "standalone"
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/App.vue:
--------------------------------------------------------------------------------
1 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/app/src/api/delete-tweet.js:
--------------------------------------------------------------------------------
1 | import { useWorkspace } from '@/composables'
2 |
3 | export const deleteTweet = async (tweet) => {
4 | const { wallet, program } = useWorkspace()
5 | await program.value.rpc.deleteTweet({
6 | accounts: {
7 | author: wallet.value.publicKey,
8 | tweet: tweet.publicKey,
9 | },
10 | })
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/api/fetch-tweets.js:
--------------------------------------------------------------------------------
1 | import { useWorkspace, usePagination } from '@/composables'
2 | import { Tweet } from '@/models'
3 | import bs58 from 'bs58'
4 | import { BN } from '@project-serum/anchor'
5 | import { computed, ref } from 'vue'
6 |
7 | export const fetchTweets = async (filters = []) => {
8 | const { program } = useWorkspace()
9 | const tweets = await program.value.account.tweet.all(filters);
10 | return tweets.map(tweet => new Tweet(tweet.publicKey, tweet.account))
11 | }
12 |
13 | export const paginateTweets = (filters = [], perPage = 6, onNewPage = () => {}) => {
14 | filters = ref(filters)
15 | const { program, connection } = useWorkspace()
16 | const page = ref(0)
17 |
18 | const prefetchCb = async () => {
19 | // Reset page number.
20 | page.value = 0
21 |
22 | // Prepare the discriminator filter.
23 | const tweetClient = program.value.account.tweet
24 | const tweetAccountName = tweetClient._idlAccount.name
25 | const tweetDiscriminatorFilter = {
26 | memcmp: tweetClient.coder.accounts.memcmp(tweetAccountName)
27 | }
28 |
29 | // Prefetch all tweets with their timestamps only.
30 | const allTweets = await connection.getProgramAccounts(program.value.programId, {
31 | filters: [tweetDiscriminatorFilter, ...filters.value],
32 | dataSlice: { offset: 40, length: 8 },
33 | })
34 |
35 | // Parse the timestamp from the account's data.
36 | const allTweetsWithTimestamps = allTweets.map(({ account, pubkey }) => ({
37 | pubkey,
38 | timestamp: new BN(account.data, 'le'),
39 | }))
40 |
41 | return allTweetsWithTimestamps
42 | .sort((a, b) => b.timestamp.cmp(a.timestamp))
43 | .map(({ pubkey }) => pubkey)
44 | }
45 |
46 | const pageCb = async (page, paginatedPublicKeys) => {
47 | const tweets = await program.value.account.tweet.fetchMultiple(paginatedPublicKeys)
48 |
49 | return tweets.reduce((accumulator, tweet, index) => {
50 | const publicKey = paginatedPublicKeys[index]
51 | accumulator.push(new Tweet(publicKey, tweet))
52 | return accumulator
53 | }, [])
54 | }
55 |
56 | const pagination = usePagination(perPage, prefetchCb, pageCb)
57 | const { hasPage, getPage } = pagination
58 |
59 | const hasNextPage = computed(() => hasPage(page.value + 1))
60 | const getNextPage = async () => {
61 | const newPageTweets = await getPage(page.value + 1)
62 | page.value += 1
63 | onNewPage(newPageTweets)
64 | }
65 |
66 | return { page, hasNextPage, getNextPage, ...pagination }
67 | }
68 |
69 | export const authorFilter = authorBase58PublicKey => ({
70 | memcmp: {
71 | offset: 8, // Discriminator.
72 | bytes: authorBase58PublicKey,
73 | }
74 | })
75 |
76 | export const topicFilter = topic => ({
77 | memcmp: {
78 | offset: 8 + // Discriminator.
79 | 32 + // Author public key.
80 | 8 + // Timestamp.
81 | 4, // Topic string prefix.
82 | bytes: bs58.encode(Buffer.from(topic)),
83 | }
84 | })
85 |
--------------------------------------------------------------------------------
/app/src/api/get-tweet.js:
--------------------------------------------------------------------------------
1 | import { useWorkspace } from '@/composables'
2 | import { Tweet } from '@/models'
3 |
4 | export const getTweet = async (publicKey) => {
5 | const { program } = useWorkspace()
6 | const account = await program.value.account.tweet.fetch(publicKey);
7 | return new Tweet(publicKey, account)
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/api/index.js:
--------------------------------------------------------------------------------
1 | export * from './delete-tweet'
2 | export * from './fetch-tweets'
3 | export * from './get-tweet'
4 | export * from './send-tweet'
5 | export * from './update-tweet'
6 |
--------------------------------------------------------------------------------
/app/src/api/send-tweet.js:
--------------------------------------------------------------------------------
1 | import { web3 } from '@project-serum/anchor'
2 | import { useWorkspace } from '@/composables'
3 | import { Tweet } from '@/models'
4 |
5 | export const sendTweet = async (topic, content) => {
6 | const { wallet, program } = useWorkspace()
7 | const tweet = web3.Keypair.generate()
8 |
9 | await program.value.rpc.sendTweet(topic, content, {
10 | accounts: {
11 | author: wallet.value.publicKey,
12 | tweet: tweet.publicKey,
13 | systemProgram: web3.SystemProgram.programId,
14 | },
15 | signers: [tweet]
16 | })
17 |
18 | const tweetAccount = await program.value.account.tweet.fetch(tweet.publicKey)
19 | return new Tweet(tweet.publicKey, tweetAccount)
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/api/update-tweet.js:
--------------------------------------------------------------------------------
1 | import { useWorkspace } from '@/composables'
2 |
3 | export const updateTweet = async (tweet, topic, content) => {
4 | const { wallet, program } = useWorkspace()
5 | await program.value.rpc.updateTweet(topic, content, {
6 | accounts: {
7 | author: wallet.value.publicKey,
8 | tweet: tweet.publicKey,
9 | },
10 | })
11 |
12 | tweet.topic = topic
13 | tweet.content = content
14 | }
15 |
--------------------------------------------------------------------------------
/app/src/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lorisleiva/solana-twitter/75d654cc6a8d3ee09bbc3506435347f2a768ef0e/app/src/assets/logo.png
--------------------------------------------------------------------------------
/app/src/components/PageHome.vue:
--------------------------------------------------------------------------------
1 |
14 |
15 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/components/PageNotFound.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
404 — Not Found
4 |
5 | Go back home
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/components/PageProfile.vue:
--------------------------------------------------------------------------------
1 |
24 |
25 |
26 |
27 | {{ wallet.publicKey.toBase58() }}
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/app/src/components/PageTopics.vue:
--------------------------------------------------------------------------------
1 |
47 |
48 |
49 | topic = value" @search="search">
50 |
51 |
54 |
55 |
56 |
57 |
58 |
59 |
60 | No tweets were found in this topic...
61 |
62 |
63 |
64 |
--------------------------------------------------------------------------------
/app/src/components/PageTweet.vue:
--------------------------------------------------------------------------------
1 |
24 |
25 |
26 |
27 | Loading...
28 |
29 |
30 | Tweet not found
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/app/src/components/PageUsers.vue:
--------------------------------------------------------------------------------
1 |
43 |
44 |
45 |
46 |
47 |
50 |
51 |
52 |
53 |
54 |
55 | User not found...
56 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/app/src/components/TheSidebar.vue:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
57 |
58 |
--------------------------------------------------------------------------------
/app/src/components/TweetCard.vue:
--------------------------------------------------------------------------------
1 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 | {{ tweet.author_display }}
39 |
40 |
41 | •
42 |
47 |
48 |
49 |
55 |
60 |
61 |
62 |
63 |
64 | #{{ tweet.topic }}
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/app/src/components/TweetForm.vue:
--------------------------------------------------------------------------------
1 |
45 |
46 |
47 |
48 |
49 |
50 |
57 |
58 |
59 |
60 |
61 |
76 |
77 |
78 |
79 |
80 | {{ characterLimit }} left
81 |
82 |
83 |
84 |
91 |
92 |
93 |
94 |
95 |
96 | Connect your wallet to start tweeting...
97 |
98 |
99 |
--------------------------------------------------------------------------------
/app/src/components/TweetFormUpdate.vue:
--------------------------------------------------------------------------------
1 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 | {{ tweet.author_display }}
50 |
51 |
52 | •
53 |
58 |
59 |
60 |
61 |
68 |
69 |
70 |
71 |
72 |
86 |
87 |
88 |
89 |
90 | {{ characterLimit }} left
91 |
92 |
93 |
94 |
100 |
101 |
102 |
109 |
110 |
111 |
112 |
113 |
114 |
115 | Connect your wallet to start tweeting...
116 |
117 |
118 |
--------------------------------------------------------------------------------
/app/src/components/TweetList.vue:
--------------------------------------------------------------------------------
1 |
22 |
23 |
24 |
25 |
26 |
27 | Loading...
28 |
29 |
30 |
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/app/src/components/TweetSearch.vue:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 |
16 |
24 |
25 |
26 |
27 |
28 |
36 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/app/src/composables/index.js:
--------------------------------------------------------------------------------
1 | export * from './useAutoresizeTextarea'
2 | export * from './useCountCharacterLimit'
3 | export * from './useFromRoute'
4 | export * from './usePagination'
5 | export * from './useSlug'
6 | export * from './useWorkspace'
7 |
--------------------------------------------------------------------------------
/app/src/composables/useAutoresizeTextarea.js:
--------------------------------------------------------------------------------
1 | import { watchEffect } from "vue"
2 |
3 | export const useAutoresizeTextarea = (element) => {
4 | const resizeTextarea = () => {
5 | element.value.style.height = 'auto'
6 | element.value.style.height = element.value.scrollHeight + 'px'
7 | }
8 |
9 | watchEffect(onInvalidate => {
10 | if (! element.value) return
11 | resizeTextarea()
12 | element.value.addEventListener('input', resizeTextarea)
13 | onInvalidate(() => element.value?.removeEventListener('input', resizeTextarea))
14 | })
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/composables/useCountCharacterLimit.js:
--------------------------------------------------------------------------------
1 | import { ref, watchEffect } from "vue"
2 |
3 | export const useCountCharacterLimit = (text, limit) => {
4 | const characterLimit = ref(0)
5 | watchEffect(() => characterLimit.value = limit - text.value?.length)
6 |
7 | return characterLimit
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/composables/useFromRoute.js:
--------------------------------------------------------------------------------
1 | import { onBeforeRouteUpdate, useRoute } from 'vue-router'
2 |
3 | export const useFromRoute = (fn) => {
4 | fn(useRoute(), null)
5 | onBeforeRouteUpdate((to, from, next) => {
6 | fn(to, from)
7 | next()
8 | })
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/composables/usePagination.js:
--------------------------------------------------------------------------------
1 | import { computed, ref } from 'vue';
2 |
3 | export const usePagination = (perPage, prefetchCb, pageCb) => {
4 | perPage = ref(perPage);
5 | const allPublicKeys = ref([]);
6 | const prefetchLoading = ref(true);
7 | const pageLoading = ref(false);
8 | const loading = computed(() => prefetchLoading.value || pageLoading.value);
9 |
10 | let prefetchPromise = null
11 |
12 | const prefetch = () => {
13 | prefetchPromise = (async () => {
14 | try {
15 | prefetchLoading.value = true
16 | allPublicKeys.value = await prefetchCb()
17 | } finally {
18 | prefetchLoading.value = false
19 | }
20 | })()
21 |
22 | return prefetchPromise
23 | }
24 |
25 | const getPagePublicKeys = (page) => {
26 | return allPublicKeys.value.slice(
27 | (page - 1) * perPage.value,
28 | page * perPage.value,
29 | );
30 | }
31 |
32 | const hasPage = (page) => {
33 | return getPagePublicKeys(page).length > 0;
34 | }
35 |
36 | const getPage = async (page) => {
37 | await prefetchPromise;
38 | if (!hasPage(page)) return [];
39 | try {
40 | pageLoading.value = true;
41 | return await pageCb(page, getPagePublicKeys(page));
42 | } finally {
43 | pageLoading.value = false;
44 | }
45 | }
46 |
47 | return {
48 | perPage,
49 | allPublicKeys,
50 | prefetchLoading,
51 | pageLoading,
52 | loading,
53 | getPagePublicKeys,
54 | hasPage,
55 | getPage,
56 | prefetch,
57 | };
58 | }
59 |
--------------------------------------------------------------------------------
/app/src/composables/useSlug.js:
--------------------------------------------------------------------------------
1 | import { computed } from 'vue'
2 |
3 | export const useSlug = text => {
4 | return computed(() => {
5 | return (text.value || '')
6 | .toLowerCase()
7 | .replace(/[^a-z0-9 -]/g, '')
8 | .replace(/\s+/g, '-')
9 | .replace(/-+/g, '-')
10 | })
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/composables/useWorkspace.js:
--------------------------------------------------------------------------------
1 | import { computed } from 'vue'
2 | import { useAnchorWallet } from 'solana-wallets-vue'
3 | import { Connection, PublicKey } from '@solana/web3.js'
4 | import { Provider, Program } from '@project-serum/anchor'
5 | import idl from '@/idl/solana_twitter.json'
6 |
7 | const clusterUrl = process.env.VUE_APP_CLUSTER_URL
8 | const preflightCommitment = 'processed'
9 | const commitment = 'processed'
10 | const programID = new PublicKey(idl.metadata.address)
11 | let workspace = null
12 |
13 | export const useWorkspace = () => workspace
14 |
15 | export const initWorkspace = () => {
16 | const wallet = useAnchorWallet()
17 | const connection = new Connection(clusterUrl, commitment)
18 | const provider = computed(() => new Provider(connection, wallet.value, { preflightCommitment, commitment }))
19 | const program = computed(() => new Program(idl, programID, provider.value))
20 |
21 | workspace = {
22 | wallet,
23 | connection,
24 | provider,
25 | program,
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/idl/solana_twitter.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.1.0",
3 | "name": "solana_twitter",
4 | "instructions": [
5 | {
6 | "name": "sendTweet",
7 | "accounts": [
8 | {
9 | "name": "tweet",
10 | "isMut": true,
11 | "isSigner": true
12 | },
13 | {
14 | "name": "author",
15 | "isMut": true,
16 | "isSigner": true
17 | },
18 | {
19 | "name": "systemProgram",
20 | "isMut": false,
21 | "isSigner": false
22 | }
23 | ],
24 | "args": [
25 | {
26 | "name": "topic",
27 | "type": "string"
28 | },
29 | {
30 | "name": "content",
31 | "type": "string"
32 | }
33 | ]
34 | },
35 | {
36 | "name": "updateTweet",
37 | "accounts": [
38 | {
39 | "name": "tweet",
40 | "isMut": true,
41 | "isSigner": false
42 | },
43 | {
44 | "name": "author",
45 | "isMut": false,
46 | "isSigner": true
47 | }
48 | ],
49 | "args": [
50 | {
51 | "name": "topic",
52 | "type": "string"
53 | },
54 | {
55 | "name": "content",
56 | "type": "string"
57 | }
58 | ]
59 | },
60 | {
61 | "name": "deleteTweet",
62 | "accounts": [
63 | {
64 | "name": "tweet",
65 | "isMut": true,
66 | "isSigner": false
67 | },
68 | {
69 | "name": "author",
70 | "isMut": false,
71 | "isSigner": true
72 | }
73 | ],
74 | "args": []
75 | }
76 | ],
77 | "accounts": [
78 | {
79 | "name": "Tweet",
80 | "type": {
81 | "kind": "struct",
82 | "fields": [
83 | {
84 | "name": "author",
85 | "type": "publicKey"
86 | },
87 | {
88 | "name": "timestamp",
89 | "type": "i64"
90 | },
91 | {
92 | "name": "topic",
93 | "type": "string"
94 | },
95 | {
96 | "name": "content",
97 | "type": "string"
98 | }
99 | ]
100 | }
101 | }
102 | ],
103 | "errors": [
104 | {
105 | "code": 6000,
106 | "name": "TopicTooLong",
107 | "msg": "The provided topic should be 50 characters long maximum."
108 | },
109 | {
110 | "code": 6001,
111 | "name": "ContentTooLong",
112 | "msg": "The provided content should be 280 characters long maximum."
113 | }
114 | ],
115 | "metadata": {
116 | "address": "BNDCEb5uXCuWDxJW9BGmbfvR1JBMAKckfhYrEKW2Bv1W"
117 | }
118 | }
--------------------------------------------------------------------------------
/app/src/main.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | .swv-dropdown {
6 | @apply w-full;
7 | }
8 |
9 | .swv-button {
10 | @apply rounded-full w-full;
11 | }
12 |
13 | .swv-button-trigger {
14 | @apply bg-pink-500 justify-center !important;
15 | }
16 |
17 | .swv-dropdown-list {
18 | @apply top-auto bottom-full md:top-full md:bottom-auto md:left-0 md:right-auto;
19 | }
20 |
21 | .swv-dropdown-list-active {
22 | @apply transform -translate-y-3 md:translate-y-3;
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main.js:
--------------------------------------------------------------------------------
1 | // CSS.
2 | import 'solana-wallets-vue/styles.css'
3 | import './main.css'
4 |
5 | // Day.js
6 | import dayjs from 'dayjs'
7 | import localizedFormat from 'dayjs/plugin/localizedFormat'
8 | import relativeTime from 'dayjs/plugin/relativeTime'
9 | dayjs.extend(localizedFormat)
10 | dayjs.extend(relativeTime)
11 |
12 | // Routing.
13 | import { createRouter, createWebHashHistory } from 'vue-router'
14 | import routes from './routes'
15 | const router = createRouter({
16 | history: createWebHashHistory(),
17 | routes,
18 | })
19 |
20 | // Create the app.
21 | import { createApp } from 'vue'
22 | import App from './App.vue'
23 | createApp(App).use(router).mount('#app')
24 |
--------------------------------------------------------------------------------
/app/src/models/Tweet.js:
--------------------------------------------------------------------------------
1 | import dayjs from "dayjs"
2 |
3 | export class Tweet
4 | {
5 | constructor (publicKey, accountData) {
6 | this.publicKey = publicKey
7 | this.author = accountData.author
8 | this.timestamp = accountData.timestamp.toString()
9 | this.topic = accountData.topic
10 | this.content = accountData.content
11 | }
12 |
13 | get key () {
14 | return this.publicKey.toBase58()
15 | }
16 |
17 | get author_display () {
18 | const author = this.author.toBase58()
19 | return author.slice(0,4) + '..' + author.slice(-4)
20 | }
21 |
22 | get created_at () {
23 | return dayjs.unix(this.timestamp).format('lll')
24 | }
25 |
26 | get created_ago () {
27 | return dayjs.unix(this.timestamp).fromNow()
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/models/index.js:
--------------------------------------------------------------------------------
1 | export * from './Tweet'
2 |
--------------------------------------------------------------------------------
/app/src/routes.js:
--------------------------------------------------------------------------------
1 | export default [
2 | {
3 | name: 'Home',
4 | path: '/',
5 | component: require('@/components/PageHome').default,
6 | },
7 | {
8 | name: 'Topics',
9 | path: '/topics/:topic?',
10 | component: require('@/components/PageTopics').default,
11 | },
12 | {
13 | name: 'Users',
14 | path: '/users/:author?',
15 | component: require('@/components/PageUsers').default,
16 | },
17 | {
18 | name: 'Profile',
19 | path: '/profile',
20 | component: require('@/components/PageProfile').default,
21 | },
22 | {
23 | name: 'Tweet',
24 | path: '/tweet/:tweet',
25 | component: require('@/components/PageTweet').default,
26 | },
27 | {
28 | name: 'NotFound',
29 | path: '/:pathMatch(.*)*',
30 | component: require('@/components/PageNotFound').default,
31 | },
32 | ]
33 |
--------------------------------------------------------------------------------
/app/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | purge: [
3 | './public/index.html',
4 | './src/**/*.{vue,js,ts,jsx,tsx}',
5 | ],
6 | darkMode: false, // or 'media' or 'class'
7 | theme: {
8 | extend: {},
9 | },
10 | variants: {
11 | extend: {},
12 | },
13 | plugins: [],
14 | }
15 |
--------------------------------------------------------------------------------
/app/vue.config.js:
--------------------------------------------------------------------------------
1 | const webpack = require('webpack')
2 | const { defineConfig } = require('@vue/cli-service')
3 |
4 | module.exports = defineConfig({
5 | transpileDependencies: true,
6 | configureWebpack: {
7 | plugins: [
8 | new webpack.ProvidePlugin({
9 | Buffer: ['buffer', 'Buffer']
10 | })
11 | ],
12 | resolve: {
13 | fallback: {
14 | crypto: false,
15 | fs: false,
16 | assert: false,
17 | process: false,
18 | util: false,
19 | path: false,
20 | stream: false,
21 | }
22 | }
23 | }
24 | })
25 |
--------------------------------------------------------------------------------
/migrations/deploy.ts:
--------------------------------------------------------------------------------
1 | // Migrations are an early feature. Currently, they're nothing more than this
2 | // single deploy script that's invoked from the CLI, injecting a provider
3 | // configured from the workspace's Anchor.toml.
4 |
5 | const anchor = require("@project-serum/anchor");
6 |
7 | module.exports = async function (provider) {
8 | // Configure client to use the provider.
9 | anchor.setProvider(provider);
10 |
11 | // Add your deploy script here.
12 | }
13 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "dependencies": {
3 | "@project-serum/anchor": "^0.21.0"
4 | },
5 | "devDependencies": {
6 | "chai": "^4.3.4",
7 | "mocha": "^9.0.3",
8 | "ts-mocha": "^8.0.0",
9 | "@types/mocha": "^9.0.0",
10 | "typescript": "^4.3.5"
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/programs/solana-twitter/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "solana-twitter"
3 | version = "0.1.0"
4 | description = "Created with Anchor"
5 | edition = "2018"
6 |
7 | [lib]
8 | crate-type = ["cdylib", "lib"]
9 | name = "solana_twitter"
10 |
11 | [features]
12 | no-entrypoint = []
13 | no-idl = []
14 | cpi = ["no-entrypoint"]
15 | default = []
16 |
17 | [dependencies]
18 | anchor-lang = "0.21.0"
19 |
--------------------------------------------------------------------------------
/programs/solana-twitter/Xargo.toml:
--------------------------------------------------------------------------------
1 | [target.bpfel-unknown-unknown.dependencies.std]
2 | features = []
3 |
--------------------------------------------------------------------------------
/programs/solana-twitter/src/lib.rs:
--------------------------------------------------------------------------------
1 | use anchor_lang::prelude::*;
2 | use anchor_lang::solana_program::system_program;
3 |
4 | declare_id!("BNDCEb5uXCuWDxJW9BGmbfvR1JBMAKckfhYrEKW2Bv1W");
5 |
6 | #[program]
7 | pub mod solana_twitter {
8 | use super::*;
9 | pub fn send_tweet(ctx: Context, topic: String, content: String) -> ProgramResult {
10 | let tweet: &mut Account = &mut ctx.accounts.tweet;
11 | let author: &Signer = &ctx.accounts.author;
12 | let clock: Clock = Clock::get().unwrap();
13 |
14 | if topic.chars().count() > 50 {
15 | return Err(ErrorCode::TopicTooLong.into())
16 | }
17 |
18 | if content.chars().count() > 280 {
19 | return Err(ErrorCode::ContentTooLong.into())
20 | }
21 |
22 | tweet.author = *author.key;
23 | tweet.timestamp = clock.unix_timestamp;
24 | tweet.topic = topic;
25 | tweet.content = content;
26 |
27 | Ok(())
28 | }
29 |
30 | pub fn update_tweet(ctx: Context, topic: String, content: String) -> ProgramResult {
31 | let tweet: &mut Account = &mut ctx.accounts.tweet;
32 |
33 | if topic.chars().count() > 50 {
34 | return Err(ErrorCode::TopicTooLong.into())
35 | }
36 |
37 | if content.chars().count() > 280 {
38 | return Err(ErrorCode::ContentTooLong.into())
39 | }
40 |
41 | tweet.topic = topic;
42 | tweet.content = content;
43 |
44 | Ok(())
45 | }
46 |
47 | pub fn delete_tweet(_ctx: Context) -> ProgramResult {
48 | Ok(())
49 | }
50 | }
51 |
52 | #[derive(Accounts)]
53 | pub struct SendTweet<'info> {
54 | #[account(init, payer = author, space = Tweet::LEN)]
55 | pub tweet: Account<'info, Tweet>,
56 | #[account(mut)]
57 | pub author: Signer<'info>,
58 | #[account(address = system_program::ID)]
59 | pub system_program: AccountInfo<'info>,
60 | }
61 |
62 | #[derive(Accounts)]
63 | pub struct UpdateTweet<'info> {
64 | #[account(mut, has_one = author)]
65 | pub tweet: Account<'info, Tweet>,
66 | pub author: Signer<'info>,
67 | }
68 |
69 | #[derive(Accounts)]
70 | pub struct DeleteTweet<'info> {
71 | #[account(mut, has_one = author, close = author)]
72 | pub tweet: Account<'info, Tweet>,
73 | pub author: Signer<'info>,
74 | }
75 |
76 | #[account]
77 | pub struct Tweet {
78 | pub author: Pubkey,
79 | pub timestamp: i64,
80 | pub topic: String,
81 | pub content: String,
82 | }
83 |
84 | const DISCRIMINATOR_LENGTH: usize = 8;
85 | const PUBLIC_KEY_LENGTH: usize = 32;
86 | const TIMESTAMP_LENGTH: usize = 8;
87 | const STRING_LENGTH_PREFIX: usize = 4; // Stores the size of the string.
88 | const MAX_TOPIC_LENGTH: usize = 50 * 4; // 50 chars max.
89 | const MAX_CONTENT_LENGTH: usize = 280 * 4; // 280 chars max.
90 |
91 | impl Tweet {
92 | const LEN: usize = DISCRIMINATOR_LENGTH
93 | + PUBLIC_KEY_LENGTH // Author.
94 | + TIMESTAMP_LENGTH // Timestamp.
95 | + STRING_LENGTH_PREFIX + MAX_TOPIC_LENGTH // Topic.
96 | + STRING_LENGTH_PREFIX + MAX_CONTENT_LENGTH; // Content.
97 | }
98 |
99 | #[error]
100 | pub enum ErrorCode {
101 | #[msg("The provided topic should be 50 characters long maximum.")]
102 | TopicTooLong,
103 | #[msg("The provided content should be 280 characters long maximum.")]
104 | ContentTooLong,
105 | }
106 |
--------------------------------------------------------------------------------
/tests/solana-twitter.ts:
--------------------------------------------------------------------------------
1 | import * as anchor from '@project-serum/anchor';
2 | import { Program } from '@project-serum/anchor';
3 | import { SolanaTwitter } from '../target/types/solana_twitter';
4 | import * as assert from "assert";
5 | import * as bs58 from "bs58";
6 |
7 | describe('solana-twitter', () => {
8 | // Configure the client to use the local cluster.
9 | anchor.setProvider(anchor.Provider.env());
10 | const program = anchor.workspace.SolanaTwitter as Program;
11 | const sendTweet = async (author, topic, content) => {
12 | const tweet = anchor.web3.Keypair.generate();
13 | await program.rpc.sendTweet(topic, content, {
14 | accounts: {
15 | tweet: tweet.publicKey,
16 | author,
17 | systemProgram: anchor.web3.SystemProgram.programId,
18 | },
19 | signers: [tweet],
20 | });
21 |
22 | return tweet
23 | }
24 |
25 | it('can send a new tweet', async () => {
26 | // Call the "SendTweet" instruction.
27 | const tweet = anchor.web3.Keypair.generate();
28 | await program.rpc.sendTweet('veganism', 'Hummus, am I right?', {
29 | accounts: {
30 | tweet: tweet.publicKey,
31 | author: program.provider.wallet.publicKey,
32 | systemProgram: anchor.web3.SystemProgram.programId,
33 | },
34 | signers: [tweet],
35 | });
36 |
37 | // Fetch the account details of the created tweet.
38 | const tweetAccount = await program.account.tweet.fetch(tweet.publicKey);
39 |
40 | // Ensure it has the right data.
41 | assert.equal(tweetAccount.author.toBase58(), program.provider.wallet.publicKey.toBase58());
42 | assert.equal(tweetAccount.topic, 'veganism');
43 | assert.equal(tweetAccount.content, 'Hummus, am I right?');
44 | assert.ok(tweetAccount.timestamp);
45 | });
46 |
47 | it('can send a new tweet without a topic', async () => {
48 | // Call the "SendTweet" instruction.
49 | const tweet = anchor.web3.Keypair.generate();
50 | await program.rpc.sendTweet('', 'gm', {
51 | accounts: {
52 | tweet: tweet.publicKey,
53 | author: program.provider.wallet.publicKey,
54 | systemProgram: anchor.web3.SystemProgram.programId,
55 | },
56 | signers: [tweet],
57 | });
58 |
59 | // Fetch the account details of the created tweet.
60 | const tweetAccount = await program.account.tweet.fetch(tweet.publicKey);
61 |
62 | // Ensure it has the right data.
63 | assert.equal(tweetAccount.author.toBase58(), program.provider.wallet.publicKey.toBase58());
64 | assert.equal(tweetAccount.topic, '');
65 | assert.equal(tweetAccount.content, 'gm');
66 | assert.ok(tweetAccount.timestamp);
67 | });
68 |
69 | it('can send a new tweet from a different author', async () => {
70 | // Generate another user and airdrop them some SOL.
71 | const otherUser = anchor.web3.Keypair.generate();
72 | const signature = await program.provider.connection.requestAirdrop(otherUser.publicKey, 1000000000);
73 | await program.provider.connection.confirmTransaction(signature);
74 |
75 | // Call the "SendTweet" instruction on behalf of this other user.
76 | const tweet = anchor.web3.Keypair.generate();
77 | await program.rpc.sendTweet('veganism', 'Yay Tofu!', {
78 | accounts: {
79 | tweet: tweet.publicKey,
80 | author: otherUser.publicKey,
81 | systemProgram: anchor.web3.SystemProgram.programId,
82 | },
83 | signers: [otherUser, tweet],
84 | });
85 |
86 | // Fetch the account details of the created tweet.
87 | const tweetAccount = await program.account.tweet.fetch(tweet.publicKey);
88 |
89 | // Ensure it has the right data.
90 | assert.equal(tweetAccount.author.toBase58(), otherUser.publicKey.toBase58());
91 | assert.equal(tweetAccount.topic, 'veganism');
92 | assert.equal(tweetAccount.content, 'Yay Tofu!');
93 | assert.ok(tweetAccount.timestamp);
94 | });
95 |
96 | it('cannot provide a topic with more than 50 characters', async () => {
97 | try {
98 | const tweet = anchor.web3.Keypair.generate();
99 | const topicWith51Chars = 'x'.repeat(51);
100 | await program.rpc.sendTweet(topicWith51Chars, 'Hummus, am I right?', {
101 | accounts: {
102 | tweet: tweet.publicKey,
103 | author: program.provider.wallet.publicKey,
104 | systemProgram: anchor.web3.SystemProgram.programId,
105 | },
106 | signers: [tweet],
107 | });
108 | } catch (error) {
109 | assert.equal(error.msg, 'The provided topic should be 50 characters long maximum.');
110 | return;
111 | }
112 |
113 | assert.fail('The instruction should have failed with a 51-character topic.');
114 | });
115 |
116 | it('cannot provide a content with more than 280 characters', async () => {
117 | try {
118 | const tweet = anchor.web3.Keypair.generate();
119 | const contentWith281Chars = 'x'.repeat(281);
120 | await program.rpc.sendTweet('veganism', contentWith281Chars, {
121 | accounts: {
122 | tweet: tweet.publicKey,
123 | author: program.provider.wallet.publicKey,
124 | systemProgram: anchor.web3.SystemProgram.programId,
125 | },
126 | signers: [tweet],
127 | });
128 | } catch (error) {
129 | assert.equal(error.msg, 'The provided content should be 280 characters long maximum.');
130 | return;
131 | }
132 |
133 | assert.fail('The instruction should have failed with a 281-character content.');
134 | });
135 |
136 | it('can fetch all tweets', async () => {
137 | const tweetAccounts = await program.account.tweet.all();
138 | assert.equal(tweetAccounts.length, 3);
139 | });
140 |
141 | it('can filter tweets by author', async () => {
142 | const authorPublicKey = program.provider.wallet.publicKey
143 | const tweetAccounts = await program.account.tweet.all([
144 | {
145 | memcmp: {
146 | offset: 8, // Discriminator.
147 | bytes: authorPublicKey.toBase58(),
148 | }
149 | }
150 | ]);
151 |
152 | assert.equal(tweetAccounts.length, 2);
153 | assert.ok(tweetAccounts.every(tweetAccount => {
154 | return tweetAccount.account.author.toBase58() === authorPublicKey.toBase58()
155 | }))
156 | });
157 |
158 | it('can filter tweets by topics', async () => {
159 | const tweetAccounts = await program.account.tweet.all([
160 | {
161 | memcmp: {
162 | offset: 8 + // Discriminator.
163 | 32 + // Author public key.
164 | 8 + // Timestamp.
165 | 4, // Topic string prefix.
166 | bytes: bs58.encode(Buffer.from('veganism')),
167 | }
168 | }
169 | ]);
170 |
171 | assert.equal(tweetAccounts.length, 2);
172 | assert.ok(tweetAccounts.every(tweetAccount => {
173 | return tweetAccount.account.topic === 'veganism'
174 | }))
175 | });
176 |
177 | it('can update a tweet', async () => {
178 | // Send a tweet and fetch its account.
179 | const author = program.provider.wallet.publicKey;
180 | const tweet = await sendTweet(author, 'web2', 'Hello World!');
181 | const tweetAccount = await program.account.tweet.fetch(tweet.publicKey);
182 |
183 | // Ensure it has the right data.
184 | assert.equal(tweetAccount.topic, 'web2');
185 | assert.equal(tweetAccount.content, 'Hello World!');
186 |
187 | // Update the Tweet.
188 | await program.rpc.updateTweet('solana', 'gm everyone!', {
189 | accounts: {
190 | tweet: tweet.publicKey,
191 | author,
192 | },
193 | });
194 |
195 | // Ensure the updated tweet has the updated data.
196 | const updatedTweetAccount = await program.account.tweet.fetch(tweet.publicKey);
197 | assert.equal(updatedTweetAccount.topic, 'solana');
198 | assert.equal(updatedTweetAccount.content, 'gm everyone!');
199 | });
200 |
201 | it('cannot update someone else\'s tweet', async () => {
202 | // Send a tweet.
203 | const author = program.provider.wallet.publicKey;
204 | const tweet = await sendTweet(author, 'solana', 'Solana is awesome!');
205 |
206 | // Update the Tweet.
207 | try {
208 | await program.rpc.updateTweet('eth', 'Ethereum is awesome!', {
209 | accounts: {
210 | tweet: tweet.publicKey,
211 | author: anchor.web3.Keypair.generate().publicKey,
212 | },
213 | });
214 | assert.fail('We were able to update someone else\'s tweet.');
215 | } catch (error) {
216 | // Ensure the tweet account kept the initial data.
217 | const tweetAccount = await program.account.tweet.fetch(tweet.publicKey);
218 | assert.equal(tweetAccount.topic, 'solana');
219 | assert.equal(tweetAccount.content, 'Solana is awesome!');
220 | }
221 | });
222 |
223 | it('can delete a tweet', async () => {
224 | // Create a new tweet.
225 | const author = program.provider.wallet.publicKey;
226 | const tweet = await sendTweet(author, 'solana', 'gm');
227 |
228 | // Delete the Tweet.
229 | await program.rpc.deleteTweet({
230 | accounts: {
231 | tweet: tweet.publicKey,
232 | author,
233 | },
234 | });
235 |
236 | // Ensure fetching the tweet account returns null.
237 | const tweetAccount = await program.account.tweet.fetchNullable(tweet.publicKey);
238 | assert.ok(tweetAccount === null);
239 | });
240 |
241 | it('cannot delete someone else\'s tweet', async () => {
242 | // Create a new tweet.
243 | const author = program.provider.wallet.publicKey;
244 | const tweet = await sendTweet(author, 'solana', 'gm');
245 |
246 | // Try to delete the Tweet from a different author.
247 | try {
248 | await program.rpc.deleteTweet({
249 | accounts: {
250 | tweet: tweet.publicKey,
251 | author: anchor.web3.Keypair.generate().publicKey,
252 | },
253 | });
254 | assert.fail('We were able to delete someone else\'s tweet.');
255 | } catch (error) {
256 | // Ensure the tweet account still exists with the right data.
257 | const tweetAccount = await program.account.tweet.fetch(tweet.publicKey);
258 | assert.equal(tweetAccount.topic, 'solana');
259 | assert.equal(tweetAccount.content, 'gm');
260 | }
261 | });
262 | });
263 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "types": ["mocha", "chai"],
4 | "typeRoots": ["./node_modules/@types"],
5 | "lib": ["es2015"],
6 | "module": "commonjs",
7 | "target": "es6",
8 | "esModuleInterop": true
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5":
6 | version "7.16.3"
7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.3.tgz#b86f0db02a04187a3c17caa77de69840165d42d5"
8 | integrity sha512-WBwekcqacdY2e9AF/Q7WLFUWmdJGJTkbjqTjoMDgXkVZ3ZRUvOPsLb5KdwISoQVsbP+DQzVZW4Zhci0DvpbNTQ==
9 | dependencies:
10 | regenerator-runtime "^0.13.4"
11 |
12 | "@ethersproject/bytes@^5.5.0":
13 | version "5.5.0"
14 | resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c"
15 | integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog==
16 | dependencies:
17 | "@ethersproject/logger" "^5.5.0"
18 |
19 | "@ethersproject/logger@^5.5.0":
20 | version "5.5.0"
21 | resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d"
22 | integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg==
23 |
24 | "@ethersproject/sha2@^5.5.0":
25 | version "5.5.0"
26 | resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7"
27 | integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA==
28 | dependencies:
29 | "@ethersproject/bytes" "^5.5.0"
30 | "@ethersproject/logger" "^5.5.0"
31 | hash.js "1.1.7"
32 |
33 | "@project-serum/anchor@^0.21.0":
34 | version "0.21.0"
35 | resolved "https://registry.yarnpkg.com/@project-serum/anchor/-/anchor-0.21.0.tgz#ad5fb33744991ec1900cdb2fd22707c908b12b5f"
36 | integrity sha512-flRuW/F+iC8mitNokx82LOXyND7Dyk6n5UUPJpQv/+NfySFrNFlzuQZaBZJ4CG5g9s8HS/uaaIz1nVkDR8V/QA==
37 | dependencies:
38 | "@project-serum/borsh" "^0.2.4"
39 | "@solana/web3.js" "^1.17.0"
40 | base64-js "^1.5.1"
41 | bn.js "^5.1.2"
42 | bs58 "^4.0.1"
43 | buffer-layout "^1.2.2"
44 | camelcase "^5.3.1"
45 | cross-fetch "^3.1.5"
46 | crypto-hash "^1.3.0"
47 | eventemitter3 "^4.0.7"
48 | find "^0.3.0"
49 | js-sha256 "^0.9.0"
50 | pako "^2.0.3"
51 | snake-case "^3.0.4"
52 | toml "^3.0.0"
53 |
54 | "@project-serum/borsh@^0.2.4":
55 | version "0.2.4"
56 | resolved "https://registry.yarnpkg.com/@project-serum/borsh/-/borsh-0.2.4.tgz#8884c3a759984a39d54bf5b7390bd1ee0b579f16"
57 | integrity sha512-tQPc1ktAp1Jtn9D72DmObAfhAic9ivfYBOS5b+T4H7MvkQ84uML88LY1LfvGep30mCy+ua5rf+X9ocPfg6u9MA==
58 | dependencies:
59 | bn.js "^5.1.2"
60 | buffer-layout "^1.2.0"
61 |
62 | "@solana/buffer-layout@^3.0.0":
63 | version "3.0.0"
64 | resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-3.0.0.tgz#b9353caeb9a1589cb77a1b145bcb1a9a93114326"
65 | integrity sha512-MVdgAKKL39tEs0l8je0hKaXLQFb7Rdfb0Xg2LjFZd8Lfdazkg6xiS98uAZrEKvaoF3i4M95ei9RydkGIDMeo3w==
66 | dependencies:
67 | buffer "~6.0.3"
68 |
69 | "@solana/web3.js@^1.17.0":
70 | version "1.30.2"
71 | resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.30.2.tgz#e85da75e0825dc64f53eb64a1ff0115b27bec135"
72 | integrity sha512-hznCj+rkfvM5taRP3Z+l5lumB7IQnDrB4l55Wpsg4kDU9Zds8pE5YOH5Z9bbF/pUzZJKQjyBjnY/6kScBm3Ugg==
73 | dependencies:
74 | "@babel/runtime" "^7.12.5"
75 | "@ethersproject/sha2" "^5.5.0"
76 | "@solana/buffer-layout" "^3.0.0"
77 | bn.js "^5.0.0"
78 | borsh "^0.4.0"
79 | bs58 "^4.0.1"
80 | buffer "6.0.1"
81 | cross-fetch "^3.1.4"
82 | jayson "^3.4.4"
83 | js-sha3 "^0.8.0"
84 | rpc-websockets "^7.4.2"
85 | secp256k1 "^4.0.2"
86 | superstruct "^0.14.2"
87 | tweetnacl "^1.0.0"
88 |
89 | "@types/bn.js@^4.11.5":
90 | version "4.11.6"
91 | resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c"
92 | integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==
93 | dependencies:
94 | "@types/node" "*"
95 |
96 | "@types/connect@^3.4.33":
97 | version "3.4.35"
98 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
99 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
100 | dependencies:
101 | "@types/node" "*"
102 |
103 | "@types/express-serve-static-core@^4.17.9":
104 | version "4.17.25"
105 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.25.tgz#e42f7046adc65ece2eb6059b77aecfbe9e9f82e0"
106 | integrity sha512-OUJIVfRMFijZukGGwTpKNFprqCCXk5WjNGvUgB/CxxBR40QWSjsNK86+yvGKlCOGc7sbwfHLaXhkG+NsytwBaQ==
107 | dependencies:
108 | "@types/node" "*"
109 | "@types/qs" "*"
110 | "@types/range-parser" "*"
111 |
112 | "@types/json5@^0.0.29":
113 | version "0.0.29"
114 | resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
115 | integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
116 |
117 | "@types/lodash@^4.14.159":
118 | version "4.14.177"
119 | resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.177.tgz#f70c0d19c30fab101cad46b52be60363c43c4578"
120 | integrity sha512-0fDwydE2clKe9MNfvXHBHF9WEahRuj+msTuQqOmAApNORFvhMYZKNGGJdCzuhheVjMps/ti0Ak/iJPACMaevvw==
121 |
122 | "@types/mocha@^9.0.0":
123 | version "9.0.0"
124 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-9.0.0.tgz#3205bcd15ada9bc681ac20bef64e9e6df88fd297"
125 | integrity sha512-scN0hAWyLVAvLR9AyW7HoFF5sJZglyBsbPuHO4fv7JRvfmPBMfp1ozWqOf/e4wwPNxezBZXRfWzMb6iFLgEVRA==
126 |
127 | "@types/node@*":
128 | version "16.11.7"
129 | resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.7.tgz#36820945061326978c42a01e56b61cd223dfdc42"
130 | integrity sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==
131 |
132 | "@types/node@^12.12.54":
133 | version "12.20.37"
134 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.37.tgz#abb38afa9d6e8a2f627a8cb52290b3c80fbe61ed"
135 | integrity sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA==
136 |
137 | "@types/qs@*":
138 | version "6.9.7"
139 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
140 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
141 |
142 | "@types/range-parser@*":
143 | version "1.2.4"
144 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
145 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
146 |
147 | "@types/ws@^7.4.4":
148 | version "7.4.7"
149 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702"
150 | integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==
151 | dependencies:
152 | "@types/node" "*"
153 |
154 | "@ungap/promise-all-settled@1.1.2":
155 | version "1.1.2"
156 | resolved "https://registry.yarnpkg.com/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz#aa58042711d6e3275dd37dc597e5d31e8c290a44"
157 | integrity sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==
158 |
159 | JSONStream@^1.3.5:
160 | version "1.3.5"
161 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
162 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
163 | dependencies:
164 | jsonparse "^1.2.0"
165 | through ">=2.2.7 <3"
166 |
167 | ansi-colors@4.1.1:
168 | version "4.1.1"
169 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
170 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
171 |
172 | ansi-regex@^5.0.1:
173 | version "5.0.1"
174 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
175 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
176 |
177 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
178 | version "4.3.0"
179 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
180 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
181 | dependencies:
182 | color-convert "^2.0.1"
183 |
184 | anymatch@~3.1.2:
185 | version "3.1.2"
186 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716"
187 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==
188 | dependencies:
189 | normalize-path "^3.0.0"
190 | picomatch "^2.0.4"
191 |
192 | argparse@^2.0.1:
193 | version "2.0.1"
194 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
195 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
196 |
197 | arrify@^1.0.0:
198 | version "1.0.1"
199 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
200 | integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
201 |
202 | assertion-error@^1.1.0:
203 | version "1.1.0"
204 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
205 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
206 |
207 | balanced-match@^1.0.0:
208 | version "1.0.2"
209 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
210 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
211 |
212 | base-x@^3.0.2:
213 | version "3.0.9"
214 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320"
215 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==
216 | dependencies:
217 | safe-buffer "^5.0.1"
218 |
219 | base64-js@^1.3.1, base64-js@^1.5.1:
220 | version "1.5.1"
221 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
222 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
223 |
224 | binary-extensions@^2.0.0:
225 | version "2.2.0"
226 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
227 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
228 |
229 | bn.js@^4.11.9:
230 | version "4.12.0"
231 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
232 | integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
233 |
234 | bn.js@^5.0.0, bn.js@^5.1.2:
235 | version "5.2.0"
236 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
237 | integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
238 |
239 | borsh@^0.4.0:
240 | version "0.4.0"
241 | resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.4.0.tgz#9dd6defe741627f1315eac2a73df61421f6ddb9f"
242 | integrity sha512-aX6qtLya3K0AkT66CmYWCCDr77qsE9arV05OmdFpmat9qu8Pg9J5tBUPDztAW5fNh/d/MyVG/OYziP52Ndzx1g==
243 | dependencies:
244 | "@types/bn.js" "^4.11.5"
245 | bn.js "^5.0.0"
246 | bs58 "^4.0.0"
247 | text-encoding-utf-8 "^1.0.2"
248 |
249 | brace-expansion@^1.1.7:
250 | version "1.1.11"
251 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
252 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
253 | dependencies:
254 | balanced-match "^1.0.0"
255 | concat-map "0.0.1"
256 |
257 | braces@~3.0.2:
258 | version "3.0.2"
259 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
260 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
261 | dependencies:
262 | fill-range "^7.0.1"
263 |
264 | brorand@^1.1.0:
265 | version "1.1.0"
266 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
267 | integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
268 |
269 | browser-stdout@1.3.1:
270 | version "1.3.1"
271 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
272 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
273 |
274 | bs58@^4.0.0, bs58@^4.0.1:
275 | version "4.0.1"
276 | resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
277 | integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo=
278 | dependencies:
279 | base-x "^3.0.2"
280 |
281 | buffer-from@^1.0.0, buffer-from@^1.1.0:
282 | version "1.1.2"
283 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
284 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
285 |
286 | buffer-layout@^1.2.0, buffer-layout@^1.2.2:
287 | version "1.2.2"
288 | resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5"
289 | integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==
290 |
291 | buffer@6.0.1:
292 | version "6.0.1"
293 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.1.tgz#3cbea8c1463e5a0779e30b66d4c88c6ffa182ac2"
294 | integrity sha512-rVAXBwEcEoYtxnHSO5iWyhzV/O1WMtkUYWlfdLS7FjU4PnSJJHEfHXi/uHPI5EwltmOA794gN3bm3/pzuctWjQ==
295 | dependencies:
296 | base64-js "^1.3.1"
297 | ieee754 "^1.2.1"
298 |
299 | buffer@~6.0.3:
300 | version "6.0.3"
301 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
302 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
303 | dependencies:
304 | base64-js "^1.3.1"
305 | ieee754 "^1.2.1"
306 |
307 | bufferutil@^4.0.1:
308 | version "4.0.5"
309 | resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028"
310 | integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==
311 | dependencies:
312 | node-gyp-build "^4.3.0"
313 |
314 | camelcase@^5.3.1:
315 | version "5.3.1"
316 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
317 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
318 |
319 | camelcase@^6.0.0:
320 | version "6.2.1"
321 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.1.tgz#250fd350cfd555d0d2160b1d51510eaf8326e86e"
322 | integrity sha512-tVI4q5jjFV5CavAU8DXfza/TJcZutVKo/5Foskmsqcm0MsL91moHvwiGNnqaa2o6PF/7yT5ikDRcVcl8Rj6LCA==
323 |
324 | chai@^4.3.4:
325 | version "4.3.4"
326 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.4.tgz#b55e655b31e1eac7099be4c08c21964fce2e6c49"
327 | integrity sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==
328 | dependencies:
329 | assertion-error "^1.1.0"
330 | check-error "^1.0.2"
331 | deep-eql "^3.0.1"
332 | get-func-name "^2.0.0"
333 | pathval "^1.1.1"
334 | type-detect "^4.0.5"
335 |
336 | chalk@^4.1.0:
337 | version "4.1.2"
338 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
339 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
340 | dependencies:
341 | ansi-styles "^4.1.0"
342 | supports-color "^7.1.0"
343 |
344 | check-error@^1.0.2:
345 | version "1.0.2"
346 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
347 | integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=
348 |
349 | chokidar@3.5.2:
350 | version "3.5.2"
351 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75"
352 | integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==
353 | dependencies:
354 | anymatch "~3.1.2"
355 | braces "~3.0.2"
356 | glob-parent "~5.1.2"
357 | is-binary-path "~2.1.0"
358 | is-glob "~4.0.1"
359 | normalize-path "~3.0.0"
360 | readdirp "~3.6.0"
361 | optionalDependencies:
362 | fsevents "~2.3.2"
363 |
364 | circular-json@^0.5.9:
365 | version "0.5.9"
366 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.5.9.tgz#932763ae88f4f7dead7a0d09c8a51a4743a53b1d"
367 | integrity sha512-4ivwqHpIFJZBuhN3g/pEcdbnGUywkBblloGbkglyloVjjR3uT6tieI89MVOfbP2tHX5sgb01FuLgAOzebNlJNQ==
368 |
369 | cliui@^7.0.2:
370 | version "7.0.4"
371 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
372 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
373 | dependencies:
374 | string-width "^4.2.0"
375 | strip-ansi "^6.0.0"
376 | wrap-ansi "^7.0.0"
377 |
378 | color-convert@^2.0.1:
379 | version "2.0.1"
380 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
381 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
382 | dependencies:
383 | color-name "~1.1.4"
384 |
385 | color-name@~1.1.4:
386 | version "1.1.4"
387 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
388 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
389 |
390 | commander@^2.20.3:
391 | version "2.20.3"
392 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
393 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
394 |
395 | concat-map@0.0.1:
396 | version "0.0.1"
397 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
398 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
399 |
400 | cross-fetch@^3.1.4:
401 | version "3.1.4"
402 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39"
403 | integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==
404 | dependencies:
405 | node-fetch "2.6.1"
406 |
407 | cross-fetch@^3.1.5:
408 | version "3.1.5"
409 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
410 | integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
411 | dependencies:
412 | node-fetch "2.6.7"
413 |
414 | crypto-hash@^1.3.0:
415 | version "1.3.0"
416 | resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247"
417 | integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==
418 |
419 | debug@4.3.2:
420 | version "4.3.2"
421 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b"
422 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==
423 | dependencies:
424 | ms "2.1.2"
425 |
426 | decamelize@^4.0.0:
427 | version "4.0.0"
428 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
429 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
430 |
431 | deep-eql@^3.0.1:
432 | version "3.0.1"
433 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df"
434 | integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==
435 | dependencies:
436 | type-detect "^4.0.0"
437 |
438 | delay@^5.0.0:
439 | version "5.0.0"
440 | resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d"
441 | integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==
442 |
443 | diff@5.0.0:
444 | version "5.0.0"
445 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
446 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
447 |
448 | diff@^3.1.0:
449 | version "3.5.0"
450 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12"
451 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==
452 |
453 | dot-case@^3.0.4:
454 | version "3.0.4"
455 | resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
456 | integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
457 | dependencies:
458 | no-case "^3.0.4"
459 | tslib "^2.0.3"
460 |
461 | elliptic@^6.5.2:
462 | version "6.5.4"
463 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
464 | integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
465 | dependencies:
466 | bn.js "^4.11.9"
467 | brorand "^1.1.0"
468 | hash.js "^1.0.0"
469 | hmac-drbg "^1.0.1"
470 | inherits "^2.0.4"
471 | minimalistic-assert "^1.0.1"
472 | minimalistic-crypto-utils "^1.0.1"
473 |
474 | emoji-regex@^8.0.0:
475 | version "8.0.0"
476 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
477 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
478 |
479 | es6-promise@^4.0.3:
480 | version "4.2.8"
481 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
482 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
483 |
484 | es6-promisify@^5.0.0:
485 | version "5.0.0"
486 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
487 | integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=
488 | dependencies:
489 | es6-promise "^4.0.3"
490 |
491 | escalade@^3.1.1:
492 | version "3.1.1"
493 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
494 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
495 |
496 | escape-string-regexp@4.0.0:
497 | version "4.0.0"
498 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
499 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
500 |
501 | eventemitter3@^4.0.7:
502 | version "4.0.7"
503 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
504 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
505 |
506 | eyes@^0.1.8:
507 | version "0.1.8"
508 | resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
509 | integrity sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=
510 |
511 | fill-range@^7.0.1:
512 | version "7.0.1"
513 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
514 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
515 | dependencies:
516 | to-regex-range "^5.0.1"
517 |
518 | find-up@5.0.0:
519 | version "5.0.0"
520 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
521 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
522 | dependencies:
523 | locate-path "^6.0.0"
524 | path-exists "^4.0.0"
525 |
526 | find@^0.3.0:
527 | version "0.3.0"
528 | resolved "https://registry.yarnpkg.com/find/-/find-0.3.0.tgz#4082e8fc8d8320f1a382b5e4f521b9bc50775cb8"
529 | integrity sha512-iSd+O4OEYV/I36Zl8MdYJO0xD82wH528SaCieTVHhclgiYNe9y+yPKSwK+A7/WsmHL1EZ+pYUJBXWTL5qofksw==
530 | dependencies:
531 | traverse-chain "~0.1.0"
532 |
533 | flat@^5.0.2:
534 | version "5.0.2"
535 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
536 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
537 |
538 | fs.realpath@^1.0.0:
539 | version "1.0.0"
540 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
541 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
542 |
543 | fsevents@~2.3.2:
544 | version "2.3.2"
545 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
546 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
547 |
548 | get-caller-file@^2.0.5:
549 | version "2.0.5"
550 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
551 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
552 |
553 | get-func-name@^2.0.0:
554 | version "2.0.0"
555 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
556 | integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=
557 |
558 | glob-parent@~5.1.2:
559 | version "5.1.2"
560 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
561 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
562 | dependencies:
563 | is-glob "^4.0.1"
564 |
565 | glob@7.1.7:
566 | version "7.1.7"
567 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90"
568 | integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==
569 | dependencies:
570 | fs.realpath "^1.0.0"
571 | inflight "^1.0.4"
572 | inherits "2"
573 | minimatch "^3.0.4"
574 | once "^1.3.0"
575 | path-is-absolute "^1.0.0"
576 |
577 | growl@1.10.5:
578 | version "1.10.5"
579 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
580 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
581 |
582 | has-flag@^4.0.0:
583 | version "4.0.0"
584 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
585 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
586 |
587 | hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3:
588 | version "1.1.7"
589 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
590 | integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
591 | dependencies:
592 | inherits "^2.0.3"
593 | minimalistic-assert "^1.0.1"
594 |
595 | he@1.2.0:
596 | version "1.2.0"
597 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
598 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
599 |
600 | hmac-drbg@^1.0.1:
601 | version "1.0.1"
602 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
603 | integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
604 | dependencies:
605 | hash.js "^1.0.3"
606 | minimalistic-assert "^1.0.0"
607 | minimalistic-crypto-utils "^1.0.1"
608 |
609 | ieee754@^1.2.1:
610 | version "1.2.1"
611 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
612 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
613 |
614 | inflight@^1.0.4:
615 | version "1.0.6"
616 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
617 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
618 | dependencies:
619 | once "^1.3.0"
620 | wrappy "1"
621 |
622 | inherits@2, inherits@^2.0.3, inherits@^2.0.4:
623 | version "2.0.4"
624 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
625 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
626 |
627 | is-binary-path@~2.1.0:
628 | version "2.1.0"
629 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
630 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
631 | dependencies:
632 | binary-extensions "^2.0.0"
633 |
634 | is-extglob@^2.1.1:
635 | version "2.1.1"
636 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
637 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
638 |
639 | is-fullwidth-code-point@^3.0.0:
640 | version "3.0.0"
641 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
642 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
643 |
644 | is-glob@^4.0.1, is-glob@~4.0.1:
645 | version "4.0.3"
646 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
647 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
648 | dependencies:
649 | is-extglob "^2.1.1"
650 |
651 | is-number@^7.0.0:
652 | version "7.0.0"
653 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
654 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
655 |
656 | is-plain-obj@^2.1.0:
657 | version "2.1.0"
658 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
659 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
660 |
661 | is-unicode-supported@^0.1.0:
662 | version "0.1.0"
663 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
664 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
665 |
666 | isexe@^2.0.0:
667 | version "2.0.0"
668 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
669 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
670 |
671 | isomorphic-ws@^4.0.1:
672 | version "4.0.1"
673 | resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc"
674 | integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==
675 |
676 | jayson@^3.4.4:
677 | version "3.6.5"
678 | resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.6.5.tgz#e560bcad4daf098c7391f46ba8efc9d6f34a4102"
679 | integrity sha512-wmOjX+eQcnCDyPF4KORomaIj9wj3h0B5VEbeD0+2VHfTfErB+h1zpR7oBkgCZp36AFjp3+a4CLz6U72BYpFHAw==
680 | dependencies:
681 | "@types/connect" "^3.4.33"
682 | "@types/express-serve-static-core" "^4.17.9"
683 | "@types/lodash" "^4.14.159"
684 | "@types/node" "^12.12.54"
685 | "@types/ws" "^7.4.4"
686 | JSONStream "^1.3.5"
687 | commander "^2.20.3"
688 | delay "^5.0.0"
689 | es6-promisify "^5.0.0"
690 | eyes "^0.1.8"
691 | isomorphic-ws "^4.0.1"
692 | json-stringify-safe "^5.0.1"
693 | lodash "^4.17.20"
694 | uuid "^3.4.0"
695 | ws "^7.4.5"
696 |
697 | js-sha256@^0.9.0:
698 | version "0.9.0"
699 | resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966"
700 | integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==
701 |
702 | js-sha3@^0.8.0:
703 | version "0.8.0"
704 | resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
705 | integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
706 |
707 | js-yaml@4.1.0:
708 | version "4.1.0"
709 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
710 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
711 | dependencies:
712 | argparse "^2.0.1"
713 |
714 | json-stringify-safe@^5.0.1:
715 | version "5.0.1"
716 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
717 | integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
718 |
719 | json5@^1.0.1:
720 | version "1.0.1"
721 | resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
722 | integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==
723 | dependencies:
724 | minimist "^1.2.0"
725 |
726 | jsonparse@^1.2.0:
727 | version "1.3.1"
728 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
729 | integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=
730 |
731 | locate-path@^6.0.0:
732 | version "6.0.0"
733 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
734 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
735 | dependencies:
736 | p-locate "^5.0.0"
737 |
738 | lodash@^4.17.20:
739 | version "4.17.21"
740 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
741 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
742 |
743 | log-symbols@4.1.0:
744 | version "4.1.0"
745 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
746 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
747 | dependencies:
748 | chalk "^4.1.0"
749 | is-unicode-supported "^0.1.0"
750 |
751 | lower-case@^2.0.2:
752 | version "2.0.2"
753 | resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
754 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
755 | dependencies:
756 | tslib "^2.0.3"
757 |
758 | make-error@^1.1.1:
759 | version "1.3.6"
760 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
761 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
762 |
763 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
764 | version "1.0.1"
765 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
766 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
767 |
768 | minimalistic-crypto-utils@^1.0.1:
769 | version "1.0.1"
770 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
771 | integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
772 |
773 | minimatch@3.0.4, minimatch@^3.0.4:
774 | version "3.0.4"
775 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
776 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
777 | dependencies:
778 | brace-expansion "^1.1.7"
779 |
780 | minimist@^1.2.0, minimist@^1.2.5:
781 | version "1.2.5"
782 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
783 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
784 |
785 | mkdirp@^0.5.1:
786 | version "0.5.5"
787 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
788 | integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
789 | dependencies:
790 | minimist "^1.2.5"
791 |
792 | mocha@^9.0.3:
793 | version "9.1.3"
794 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-9.1.3.tgz#8a623be6b323810493d8c8f6f7667440fa469fdb"
795 | integrity sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==
796 | dependencies:
797 | "@ungap/promise-all-settled" "1.1.2"
798 | ansi-colors "4.1.1"
799 | browser-stdout "1.3.1"
800 | chokidar "3.5.2"
801 | debug "4.3.2"
802 | diff "5.0.0"
803 | escape-string-regexp "4.0.0"
804 | find-up "5.0.0"
805 | glob "7.1.7"
806 | growl "1.10.5"
807 | he "1.2.0"
808 | js-yaml "4.1.0"
809 | log-symbols "4.1.0"
810 | minimatch "3.0.4"
811 | ms "2.1.3"
812 | nanoid "3.1.25"
813 | serialize-javascript "6.0.0"
814 | strip-json-comments "3.1.1"
815 | supports-color "8.1.1"
816 | which "2.0.2"
817 | workerpool "6.1.5"
818 | yargs "16.2.0"
819 | yargs-parser "20.2.4"
820 | yargs-unparser "2.0.0"
821 |
822 | ms@2.1.2:
823 | version "2.1.2"
824 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
825 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
826 |
827 | ms@2.1.3:
828 | version "2.1.3"
829 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
830 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
831 |
832 | nanoid@3.1.25:
833 | version "3.1.25"
834 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.25.tgz#09ca32747c0e543f0e1814b7d3793477f9c8e152"
835 | integrity sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==
836 |
837 | no-case@^3.0.4:
838 | version "3.0.4"
839 | resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
840 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
841 | dependencies:
842 | lower-case "^2.0.2"
843 | tslib "^2.0.3"
844 |
845 | node-addon-api@^2.0.0:
846 | version "2.0.2"
847 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32"
848 | integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==
849 |
850 | node-fetch@2.6.1:
851 | version "2.6.1"
852 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
853 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
854 |
855 | node-fetch@2.6.7:
856 | version "2.6.7"
857 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
858 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
859 | dependencies:
860 | whatwg-url "^5.0.0"
861 |
862 | node-gyp-build@^4.2.0, node-gyp-build@^4.3.0:
863 | version "4.3.0"
864 | resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3"
865 | integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==
866 |
867 | normalize-path@^3.0.0, normalize-path@~3.0.0:
868 | version "3.0.0"
869 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
870 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
871 |
872 | once@^1.3.0:
873 | version "1.4.0"
874 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
875 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
876 | dependencies:
877 | wrappy "1"
878 |
879 | p-limit@^3.0.2:
880 | version "3.1.0"
881 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
882 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
883 | dependencies:
884 | yocto-queue "^0.1.0"
885 |
886 | p-locate@^5.0.0:
887 | version "5.0.0"
888 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
889 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
890 | dependencies:
891 | p-limit "^3.0.2"
892 |
893 | pako@^2.0.3:
894 | version "2.0.4"
895 | resolved "https://registry.yarnpkg.com/pako/-/pako-2.0.4.tgz#6cebc4bbb0b6c73b0d5b8d7e8476e2b2fbea576d"
896 | integrity sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg==
897 |
898 | path-exists@^4.0.0:
899 | version "4.0.0"
900 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
901 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
902 |
903 | path-is-absolute@^1.0.0:
904 | version "1.0.1"
905 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
906 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
907 |
908 | pathval@^1.1.1:
909 | version "1.1.1"
910 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"
911 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==
912 |
913 | picomatch@^2.0.4, picomatch@^2.2.1:
914 | version "2.3.0"
915 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"
916 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==
917 |
918 | randombytes@^2.1.0:
919 | version "2.1.0"
920 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
921 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
922 | dependencies:
923 | safe-buffer "^5.1.0"
924 |
925 | readdirp@~3.6.0:
926 | version "3.6.0"
927 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
928 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
929 | dependencies:
930 | picomatch "^2.2.1"
931 |
932 | regenerator-runtime@^0.13.4:
933 | version "0.13.9"
934 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52"
935 | integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==
936 |
937 | require-directory@^2.1.1:
938 | version "2.1.1"
939 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
940 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
941 |
942 | rpc-websockets@^7.4.2:
943 | version "7.4.16"
944 | resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.4.16.tgz#eb701cdef577d4357ba5f526d50e25f370396fac"
945 | integrity sha512-0b7OVhutzwRIaYAtJo5tqtaQTWKfwAsKnaThOSOy+VkhVdleNUgb8eZnWSdWITRZZEigV5uPEIDr5KZe4DBrdQ==
946 | dependencies:
947 | "@babel/runtime" "^7.11.2"
948 | circular-json "^0.5.9"
949 | eventemitter3 "^4.0.7"
950 | uuid "^8.3.0"
951 | ws "^7.4.5"
952 | optionalDependencies:
953 | bufferutil "^4.0.1"
954 | utf-8-validate "^5.0.2"
955 |
956 | safe-buffer@^5.0.1, safe-buffer@^5.1.0:
957 | version "5.2.1"
958 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
959 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
960 |
961 | secp256k1@^4.0.2:
962 | version "4.0.2"
963 | resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.2.tgz#15dd57d0f0b9fdb54ac1fa1694f40e5e9a54f4a1"
964 | integrity sha512-UDar4sKvWAksIlfX3xIaQReADn+WFnHvbVujpcbr+9Sf/69odMwy2MUsz5CKLQgX9nsIyrjuxL2imVyoNHa3fg==
965 | dependencies:
966 | elliptic "^6.5.2"
967 | node-addon-api "^2.0.0"
968 | node-gyp-build "^4.2.0"
969 |
970 | serialize-javascript@6.0.0:
971 | version "6.0.0"
972 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
973 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
974 | dependencies:
975 | randombytes "^2.1.0"
976 |
977 | snake-case@^3.0.4:
978 | version "3.0.4"
979 | resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
980 | integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==
981 | dependencies:
982 | dot-case "^3.0.4"
983 | tslib "^2.0.3"
984 |
985 | source-map-support@^0.5.6:
986 | version "0.5.20"
987 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.20.tgz#12166089f8f5e5e8c56926b377633392dd2cb6c9"
988 | integrity sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==
989 | dependencies:
990 | buffer-from "^1.0.0"
991 | source-map "^0.6.0"
992 |
993 | source-map@^0.6.0:
994 | version "0.6.1"
995 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
996 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
997 |
998 | string-width@^4.1.0, string-width@^4.2.0:
999 | version "4.2.3"
1000 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
1001 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
1002 | dependencies:
1003 | emoji-regex "^8.0.0"
1004 | is-fullwidth-code-point "^3.0.0"
1005 | strip-ansi "^6.0.1"
1006 |
1007 | strip-ansi@^6.0.0, strip-ansi@^6.0.1:
1008 | version "6.0.1"
1009 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1010 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1011 | dependencies:
1012 | ansi-regex "^5.0.1"
1013 |
1014 | strip-bom@^3.0.0:
1015 | version "3.0.0"
1016 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
1017 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
1018 |
1019 | strip-json-comments@3.1.1:
1020 | version "3.1.1"
1021 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1022 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1023 |
1024 | superstruct@^0.14.2:
1025 | version "0.14.2"
1026 | resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b"
1027 | integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==
1028 |
1029 | supports-color@8.1.1:
1030 | version "8.1.1"
1031 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
1032 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
1033 | dependencies:
1034 | has-flag "^4.0.0"
1035 |
1036 | supports-color@^7.1.0:
1037 | version "7.2.0"
1038 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1039 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1040 | dependencies:
1041 | has-flag "^4.0.0"
1042 |
1043 | text-encoding-utf-8@^1.0.2:
1044 | version "1.0.2"
1045 | resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13"
1046 | integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==
1047 |
1048 | "through@>=2.2.7 <3":
1049 | version "2.3.8"
1050 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1051 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
1052 |
1053 | to-regex-range@^5.0.1:
1054 | version "5.0.1"
1055 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1056 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1057 | dependencies:
1058 | is-number "^7.0.0"
1059 |
1060 | toml@^3.0.0:
1061 | version "3.0.0"
1062 | resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee"
1063 | integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==
1064 |
1065 | tr46@~0.0.3:
1066 | version "0.0.3"
1067 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
1068 | integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=
1069 |
1070 | traverse-chain@~0.1.0:
1071 | version "0.1.0"
1072 | resolved "https://registry.yarnpkg.com/traverse-chain/-/traverse-chain-0.1.0.tgz#61dbc2d53b69ff6091a12a168fd7d433107e40f1"
1073 | integrity sha1-YdvC1Ttp/2CRoSoWj9fUMxB+QPE=
1074 |
1075 | ts-mocha@^8.0.0:
1076 | version "8.0.0"
1077 | resolved "https://registry.yarnpkg.com/ts-mocha/-/ts-mocha-8.0.0.tgz#962d0fa12eeb6468aa1a6b594bb3bbc818da3ef0"
1078 | integrity sha512-Kou1yxTlubLnD5C3unlCVO7nh0HERTezjoVhVw/M5S1SqoUec0WgllQvPk3vzPMc6by8m6xD1uR1yRf8lnVUbA==
1079 | dependencies:
1080 | ts-node "7.0.1"
1081 | optionalDependencies:
1082 | tsconfig-paths "^3.5.0"
1083 |
1084 | ts-node@7.0.1:
1085 | version "7.0.1"
1086 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf"
1087 | integrity sha512-BVwVbPJRspzNh2yfslyT1PSbl5uIk03EZlb493RKHN4qej/D06n1cEhjlOJG69oFsE7OT8XjpTUcYf6pKTLMhw==
1088 | dependencies:
1089 | arrify "^1.0.0"
1090 | buffer-from "^1.1.0"
1091 | diff "^3.1.0"
1092 | make-error "^1.1.1"
1093 | minimist "^1.2.0"
1094 | mkdirp "^0.5.1"
1095 | source-map-support "^0.5.6"
1096 | yn "^2.0.0"
1097 |
1098 | tsconfig-paths@^3.5.0:
1099 | version "3.11.0"
1100 | resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz#954c1fe973da6339c78e06b03ce2e48810b65f36"
1101 | integrity sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==
1102 | dependencies:
1103 | "@types/json5" "^0.0.29"
1104 | json5 "^1.0.1"
1105 | minimist "^1.2.0"
1106 | strip-bom "^3.0.0"
1107 |
1108 | tslib@^2.0.3:
1109 | version "2.3.1"
1110 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01"
1111 | integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==
1112 |
1113 | tweetnacl@^1.0.0:
1114 | version "1.0.3"
1115 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"
1116 | integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==
1117 |
1118 | type-detect@^4.0.0, type-detect@^4.0.5:
1119 | version "4.0.8"
1120 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
1121 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
1122 |
1123 | typescript@^4.3.5:
1124 | version "4.5.2"
1125 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.2.tgz#8ac1fba9f52256fdb06fb89e4122fa6a346c2998"
1126 | integrity sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==
1127 |
1128 | utf-8-validate@^5.0.2:
1129 | version "5.0.7"
1130 | resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922"
1131 | integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==
1132 | dependencies:
1133 | node-gyp-build "^4.3.0"
1134 |
1135 | uuid@^3.4.0:
1136 | version "3.4.0"
1137 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
1138 | integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
1139 |
1140 | uuid@^8.3.0:
1141 | version "8.3.2"
1142 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
1143 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
1144 |
1145 | webidl-conversions@^3.0.0:
1146 | version "3.0.1"
1147 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
1148 | integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=
1149 |
1150 | whatwg-url@^5.0.0:
1151 | version "5.0.0"
1152 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
1153 | integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0=
1154 | dependencies:
1155 | tr46 "~0.0.3"
1156 | webidl-conversions "^3.0.0"
1157 |
1158 | which@2.0.2:
1159 | version "2.0.2"
1160 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
1161 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
1162 | dependencies:
1163 | isexe "^2.0.0"
1164 |
1165 | workerpool@6.1.5:
1166 | version "6.1.5"
1167 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.1.5.tgz#0f7cf076b6215fd7e1da903ff6f22ddd1886b581"
1168 | integrity sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==
1169 |
1170 | wrap-ansi@^7.0.0:
1171 | version "7.0.0"
1172 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
1173 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
1174 | dependencies:
1175 | ansi-styles "^4.0.0"
1176 | string-width "^4.1.0"
1177 | strip-ansi "^6.0.0"
1178 |
1179 | wrappy@1:
1180 | version "1.0.2"
1181 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1182 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
1183 |
1184 | ws@^7.4.5:
1185 | version "7.5.5"
1186 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881"
1187 | integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w==
1188 |
1189 | y18n@^5.0.5:
1190 | version "5.0.8"
1191 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
1192 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
1193 |
1194 | yargs-parser@20.2.4:
1195 | version "20.2.4"
1196 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"
1197 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==
1198 |
1199 | yargs-parser@^20.2.2:
1200 | version "20.2.9"
1201 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
1202 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
1203 |
1204 | yargs-unparser@2.0.0:
1205 | version "2.0.0"
1206 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
1207 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
1208 | dependencies:
1209 | camelcase "^6.0.0"
1210 | decamelize "^4.0.0"
1211 | flat "^5.0.2"
1212 | is-plain-obj "^2.1.0"
1213 |
1214 | yargs@16.2.0:
1215 | version "16.2.0"
1216 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
1217 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
1218 | dependencies:
1219 | cliui "^7.0.2"
1220 | escalade "^3.1.1"
1221 | get-caller-file "^2.0.5"
1222 | require-directory "^2.1.1"
1223 | string-width "^4.2.0"
1224 | y18n "^5.0.5"
1225 | yargs-parser "^20.2.2"
1226 |
1227 | yn@^2.0.0:
1228 | version "2.0.0"
1229 | resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a"
1230 | integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo=
1231 |
1232 | yocto-queue@^0.1.0:
1233 | version "0.1.0"
1234 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
1235 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
1236 |
--------------------------------------------------------------------------------